一些基础的C语言复习题

感谢前辈学长们的细心总结,页面重置:YDJSIR

祝各位期末考试取得优异成绩!

一. 完善程序题

1、以下程序中函数float fun(int n)的功能是:根据所给公式计算s的值并作为函数返回值,n 通过形参 传入,n的值大于等于0。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
float  fun(int n)
{ float s=0.0,w,f= -1.0 ;
   int i;
  for(i=0;i<=n;i++)
  { f=-f ;
   w= f/(2*i+1) ;
   s+=w;
  }
  return s;
  }
main( )
{ int n=5;
float s;
s= fun(n) ;
printf("%f",s);
}

2、以下程序实现对main函数内声明的局部数组a中的后10个元素做升序排序。排序算法为选择法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
      #include<stdio.h>
void sort(int *x , int n);
main( )
{
int a[12]={4,2,8,5,6,7,1,9,10,3} , k;
sort( &a[2] , 10 );
for(k=0 ; k<1 ; k++)
printf("%d” , a[k]);
}
void sort(int *x,int n)
{ int i,j,t,k;
for(i=0;i<n-1;i++)
{ k=i ;
for(j=i+1;j<n;j++)
if(x[j]<x[k])k=j;
if(k!=i){ t=x[i]; x[i]=x[k]; [ }
}
}

3、以下程序中函数find的功能是:在a指向的一维数组中存储的m´n矩阵内查找数值最大的元素,将该元素所在的行、列的值分别保存到 pm和 pn指向的变量中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void find(int a[],int m,int n,int *pm,int *pn)
{ int i,j,k,s;
k= a[0] ;*pm=0;*pn=0;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{ if( a[i*m+j] >k)
{ k=s; *pm=i;*pn=j;}
}
}
main( )
{
int b[3][4]={1,2,2,4,55,4,6,9,12,14,11,13}, pm, pn;
find(&b[0][0], 3 , 4, &pm , &pn );
printf(“the largest nember is located in b[%d][%d]” , pm,pn);
}

4、 f1函数功能:建立一个链表,链表各节点的数据来源于a指向的一个指针数组中的前n个元素所指向的n个字符串,函数返回链表首节点的地址。 f2函数功能:对于h指向的链表中连续出现的多个name成员相同的那些结点,统计并保存这些相同结点的数量,保留一个结点,删除其余结点。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
      #include<stdlib.h>
#include<string.h>
typedef struct p {
char name[20];
int count;
struct p *next;
}PS;
PS *f1(char *a[],int n)
{ int i,c=1;char name[20];
PS *head=0,*p,*tp;
for(i=0;i<n;i++)
{
p=(PS*)malloc( sizeof(PS) 或sizeof(struct p ) );
if(tp==NULL){ puts("fail!");exit(0); }
strcpy(tp->name,a[i]);tp->count=1;tp->next=NULL;
if(head==0)head=p=tp;
else
{ p->next =tp; p=tp; }
}
return head;
}
void f2(PS *h)
{ while(h->next!=NULL)
if(strcmp(h->name,h->next->name)==0)
{ h->next= h->next->next ; h->count++; }
else h=h->next;
}
main( )
{ PS *head,*p; char a[6]={"a","b","b","b","c","c"};
head=f1(a,6); f2 (head);
for(p=head;p!=NULL; p=p->next)
printf("%s:%d ",p->name,p->count);
}

5、insert函数功能:将key中保存的一组数据(一个新记录)插入到a指向的一个有序结构数组中,已知该结构数组按name成员字典顺序存储,插入新记录后结构数组仍然按name成员的字典顺序存储。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 #include<stdio.h>
#include<string.h>
struct p{
int id;
char name[5];
};
int insert(struct p a[],int n,struct p key)
{ int i,j,k;
for(i=0;i<n;i++)
if(strcmp(a[i].name,key.name)>0 ) break ;
for(j=n;j>i;j--)
a[j]=a[j-1] ;
a[i] =key;
return ++n;
}
main( )
{ int i,n=4;
struct p x[5]={{1,"a"},{3,"c"},{4,"d"},{5,"e"}},y={2,"b"};
n=insert(x,4,y);
for(i=0;i<n;i++)
printf("%d, %s \n",x[i].id,x[i].name);
}

6、find函数功能:在x指向的一个有序二维数组的前n行中查找值为key的数组元素,若找到则将该数组元素在二维数组中的行、列下标值分别保存到 row和col指向的变量中且函数返回1,若未找到则函数返回0。已知x指向的二维数组的每一行中元素的值均从小到大顺序存储,第i行中所有元素的值均小于第i+1行中所有元素的值(i=0,1,2,3…n-1)。

 算法:用折半查找法定位值为key的数组元素所在行,
 用线性查找法在已经定位的行中查找值为key的数组元素。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
int find(int x[ ][5],int n,int key,int *row,int *col)
{ int i,low=0,high=n-1,mid;
while(low<=high)
{ mid= (low+high)/2 ;
if(key>=x[mid][0]&& key<=x[mid][4])break;
if(key<x[mid][0])
high=mid-1 ;
else if(key>x[mid][4])
low=mid+1;
}
for(i=0;i<5;i++)
if( key==x[mid][i] ) { *row=mid; *col=i; return 1;}
return 0;
}
main( )
{ int a[5][5]={ {1,3,4,6,9},
{12,14,15,17,19},
{22,23,24,26,28},
{31,33,34,36,37},
{42,44,46,47,48}
} m, n, key;
puts("input key:"); scanf("%d",&key);
if(find(a,5,key,&m,&n))
printf("%d is stored at a[%d][%d]",key,m,n);
else
printf("\n %d not found!",key);
}

7、函数change功能:将x指向的一个二维数组中存储的n´n矩阵变换为其转置矩阵转置矩阵的数学定义:把矩阵A的行换成同序数的列得到的一个新矩阵叫做A的转置矩阵。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#define  swap(a,b,c)  (c)=(a); (a)=(b); (b)=(c);     
void change(int x[],int n)
{ int i, j, k;
for(i=0;i<n;i++)
for(j=0; j<i 或 j<=i ;j++)
{ swap(x[i*n+j],x[j*n+i],k); }
} }
main( )
{
int a[3][3]={1,1,1,2,2,2,3,3,3},i,j;
change( a[0] 或 *a , 3);
for(i=0;i<3;i++)
{ for(j=0;j<3;j++)
printf("%d ",a[i][j]);
putchar('\n');
}
}

8、下面程序完成的功能是:从键盘输入一行字符,反序后输出。

1
2
3
4
5
6
7
8
9
10
11
struct node{ char data; struct node *link; }*head;
main()
{ char ch; struct node *p;
head=NULL;
while((ch=getchar())!='\n'){
p=(struct node *)malloc(sizeof(struct node)));
p->data=ch; p->link=( head ); head=(_ p__);
}
( p=head );
while(p!=NULL){ printf("%c",p->data); p=p->link; }
}

二. 程序阅读题

1、以下程序执行时输出结果为 2.00, 3.50

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#define p 3.5
int min(int x,int y)
{
int z;
if(x<y)
z=x;
else
z=y;
return z;
}
void main( )
{
int ix=2.5;
double dz;
float fx=2.5,fy=3,fz;
fz=min(fx,fy);
dz=p*(float)(ix/2);
printf("\n%.2f,%.2f",fz,dz);
}

==特别注意!传值的时候他传进去的是int型,也就是说进去的时候就进行了一次转换!==
==注意到floatdouble变成整形的时候是直接把小数掐去,并非四舍五入!==

2、以下程序运行后输出结果是 Yellow

1
2
3
4
5
6
7
8
enum color{ BLACK ,YELLOW ,BLUE ,GREEN , WHITE } ;
main( )
{
char *colorname[]={“Black”,“Yellow”,
“Blue” , “Green”, “White” } ;
enum color c1=GREEN , c2=BLUE ;
printf(“%s” , colorname[c1-c2] ) ;
}

3、以下程序运行后输出结果的第一行是 1 1 2 , 第二行是 3 5 8

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int f(int n)
{
static int f1 , f2 , f ;
if(n==0) return f1=1;
if(n==1) return f2=1;
f=f1+f2 ;
f1=f2 ;
f2=f ;
return f ;
}
main( )
{
int i;
for(i=0;i<6;i++){
if(i%3==0)printf("\n");
printf(“%d ” , f(i) );
}
}

4、以下程序运行后输出结果的第一行是 1010 ,第二行是 2 2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void change(int x, int m)
{ static char ch[ ]={'0','1','2','3','4','5','6','7','8','9'};
int i=0,r;
char b[80];
while(x)
{ r=x%m; x/=m;
b[i++]= ch[ r] ;
}
for(--i ;i>=0;i--)
printf("%c",b[i]);
}
main( )
{ int a,b;
change(10,2);
printf("\n");
change(10,4);
}

5、以下程序运行后输出结果的第一行是 1 2 3 , 第二行是 0 0 0 , 第三行是 0 0 4

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
main( )
{
int m,n,x[3][3]={0},k=1;
for(m=0;m<3;m++)
for(n=0;n<3;n++)
{
if(m%2) break;
if(m>n) continue;
x[m][n]=k++;
}
for(m=0;m<3;m++){
for(n=0;n<3;n++){ printf("%d ,", x[m][n]);
printf("\n");
}}
}

6、以下程序运行时输出b[2]的值是 6 , b[4]的值是 15

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<stdio.h> 
void sum(int *pa,int *pb,int n)
{ int i;
if(n==1) *pb=*pa;
else
{ for(i=0;i<n;i++)
*(pb+n-1)+=*(pa+i);
sum(pa,pb,n-1);
}
}
int main( )
{ int a[5]={1 , 2 , 3 , 4 , 5};
int b[5]={0} , i;
sum(a,b,5);
printf("%d, %d ",b[2], b[4]);
return 0;
}

7、 以下程序运行后输出结果的第一行是 A B C D ,第二行是 D C B A ,第三行是 D B A C

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include<stdio.h>
  struct nd{
  char name[2];
  int age;
  struct nd *next;
  }a[4]={{"A",19},{"B",21},{"C",18},{"D",23}},*hd;
main()
{ int i,j,k;
truct nd *p1,*p2,*p3;
hd=&a[3];
for(i=3;i>0;i--)
a[i].next=&a[i-1];
a[i].next=NULL;
for(i=0;i<4;i++)
printf("%s ",a[i].name);
printf("\n");
p1=p3=hd;
while(p1!=NULL)
{ printf("%s ",p1->name);
p3=p1; p1=p1->next;
}
printf("\n");
p1=hd;p2=p1->next;
p1->next=p2->next;
p3->next=p2;
p2->next=NULL;
p1=hd;
while(p1!=NULL) {
  printf("%s ",
      p1->name);
p1=p1->next;
}
}

8、 下列程序运行后的输出是  

1
2
3
4
5
6
7
8
9
10
int fun(int first , int second)
    {
     return first++*second++;
    }
main( )
    {
int p=1 , r;
r=p+++fun(p++ , p++);
printf("%d\n“ , r );
    }

9、若下列程序段中的变量a、z、和p分别存储在主存FFD2H、FFD4H、和FFD8H处,则执行表达式*p++ ->y 后,变量p的值为: FFD8H

1
2
3
4
5
6
7
8
9
    main() 
{ int a = 4 ;
struct {
int x ,*y ;
}z , *p=&z ;
z·x = 10 ;
z·y = &a ;
//……
}

10、 以下程序运行后输出结果是 3

1
2
3
4
5
6
7
8
9
10
11
#include<stdio.h>
int f(int x,int y)
{ if(x<y)
return x,y;
else
return y,x;
}
main()
{
printf("%d" , f(2,3) ) ;
}

==注意!取后面那个!(虽然说他同时返回了两个值)==

11、以下程序运行后输出结果的第一行是 2 3 4 1 第二行是 0

1
2
3
4
5
6
7
8
9
10
11
12
#include<stdio.h>
void f(int *a,int n, int times)
{ int i,t=a[0];
for(i=0;i<n;i++)a[i]=a[i+1];
a[n-1]=t; times++;
}
main( )
{ int a[5]={1,2,3,4},i;
f(a,4, a[4]);
for(i=0;i<4;i++)printf("%d ",a[i]);
printf("\n%d",a[4]);
}

12、以下程序运行后输出结果的第一行是 6 第二行是 15

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<stdio.h>
int f()
{ int i,s=0;
for(i=1;i<=3;i++)
{ static int i=1;
s=s+i; i++;
}
return s;
}
main( )
{ int i;
for(i=0;i<2;i++)
printf("%d\n" , f( ) );
}

13、以下程序运行后输出结果的第一行是 2 第二行是 12

1
2
3
4
5
6
7
8
9
10
#include<stdio.h>
int f(int n,int x)
{ if(n==1)
return x;
else return f(n-1,x+2)+x;
}
main( )
{
printf("%d\n",f(1,2)); printf("%d",f(3,2));
}

14、以下程序运行后输出结果的第一行是 1 4 9 ,第二行是 2 3 8 ,第三行是 5 6 7 。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<stdio.h> 
int f(int (*a)[5],int m,int n)
{ int i,j,k;
a[0][0]=m;
for(k=1;k<n;k++)
{ i=k; j=0;
a[i][j]=++m;
while(j<i)a[i][++j]=++m;
while(i>0)a[--i][j]=++m;
}
}
main( )
{ int i,j,x[5][5]={0};
f(x,1,3);
for(i=0;i<3;i++)
{ for(j=0;j<3;j++)
printf("%d ",x[i][j]);
printf("\n");
}
}

15、以下程序运行后输出结果的第一行是 C 第二行是 this, VC,C 。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
        #include<string.h>
#include<stdio.h>
void ss(char a[][10] , int *m , char b[ ][10] , int *n)
{ int i , j , k;
for(i=0 ; i<*m ; i++) {
for(j=0;j<*n;j++)
if(strcmp(a[i],b[j])==0) {
for(k=i;k<*m-1;k++)
strcpy(a[k],a[k+1]);
*m=*m-1; i--; break; }
}
for(i=0;i<*m;i++)
strcpy(b[i+*n],a[i]);
*n=*n+*m;
}
main( )
{ char a[][10]={"this","C"};
char b[10][10]={"this","VC"};
int i,m=2, n=2;
ss(a,&m,b,&n);
for(i=0;i<m;i++)
printf("%s ",a[i]);
printf("\n");
for(i=0;i<n;i++)
printf("%s ",b[i]);
}

16、下列程序运行后的输出是 9 。

1
2
3
4
5
6
7
8
9
   main( )
{
union{
int i[2];
long k;
char c[4];
}r={071,070},*s=&r;
printf(“%c” ,s->c[0]);
}

17、下列程序运行后的输出是 10,20 。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void swap(int *x,int *y)
{
int temp;
temp=*x;
*x=*y;
*y=temp;
}
void SWAP(int x,int y)
{
swap(&x,&y);
}
main( )
{
int a=10,b=20;
SWAP(a,b);
printf(“%d , %d\n”,a,b);
}

18、下列程序运行后的输出是  14  。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
        main( )
{
int f1(int),f2(int) sum(int (*f)(int),int ,int );
printf(“%d \n”,sum(f1,1,2)+sum(f2,1,2));
}
int sum(int (*f)(int),int m,int n)
{
int k,sum=0;
for(k=m;k<=n;k++)
sum+=(*f)(k)*(*f)(k);
return sum;
}
int f1(int x)
{
return x+1;
}
int f2(int x)
{
return x-1;
}

19、 执行以下程序后,输出结果的第一行是 77 , 第二行是 30 ,最后一行是 101

1
2
3
4
5
6
7
8
9
10
11
12
13
 int main( )
{ int x=30;
{
int x=77;
printf(“ %d\n”,x);
}
printf(“ %d\n”,x);
while(x++<33){
int x=100;
x++;
printf(“ %d\n”,x);
}
}

20、运行以下程序后,输出结果的第一行是 her ,

第二行是  teac  ,第三行是  the   。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct node{
char info[5];
struct node *link;
};
main( )
{ struct node *create(char *);
void print(struct node *);
struct node *head=NULL;
char c[ ]=“the teacher”;
head=create(c);
print(head);
}
struct node *create(char *s)
{ int k;
struct node *h,*p;
h=NULL;
while(*s){
k=0;
p=(struct node *)malloc(sizeof(struct node ));
while(k<4&&*s)
p->info[k++]=*s++;
p->info[k]=‘\0’;
p->link=h;
h=p;
}
return h;
}
void print(struct node *head)
{
struct node *p=head;
while(p!=NULL){
puts(p->info);
p=p->link;
}
}

21、运行以下程序后,输出结果的第一行是 7 8 1 ,

第二行是    6 9 2     ,第三行是    5 4 3       
1
2
3
4
5
6
7
8
9
10
11
12
13
14
main( )
{ int i=0, j, k=1, n=3, arr[20][20];
while(i<n/2){
for(j=i; j<n-i;j++) arr[j][n-i-1]=k++;
for(j=n-i-2; j>=i;j--) arr[n-i-1][j]=k++;
for(j=n-i-2; j>=i;j--) arr[j][i]=k++;
for(j=i+1; j<=n-i-2;j++) arr[i][j]=k++;
i++; }
if(n%/2) arr[i][i]=k;
for(i=0; i<n;i++){
for(j=0; i<n;j++) printf(“%4d”, arr[i][j]);
printf(“\n”);
}
}

22、运行以下程序后,输出结果的第一行是 1010 , 第二行是 12 。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void change(int x, int m)
{
ch[]={‘0’,’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’}, b[80];
int i=0; r;
while(x){
r=x%m; x/=m;
b[i++]=ch[r];
}
for(--i;i>=0;i--)
printf(“%c”,b[i]);
}
main( )
{ int a,b;
change(10,2);
printf(“\n”);
change(10,8);
}

23、下面程序的输出结果是 3,4,2,4,

1
2
3
4
5
6
7
8
#include<stdio.h>
int a[][2]={1,2,3,4};
void main()
{ int (*p)[2],i;
p=a;
printf(“%d,%d,”,p[1][0],(*(p+1))[1]);
for(i=0;i<2;i++) printf(“%d,”,*(*(p+i)+1));
}

24、下面程序的输出结果是 1

1
2
3
4
5
6
7
8
9
#include<stdio.h>
int f( int x,int y)
{ return (y-x);}
main()
{ int a=5,b=6,c=2;
int (*g)(int,int)=f;
c=(*g)(a,b);
printf(“%d\n”,c);
}

25、下面程序的输出结果是 abcd,bcd,efgh,mnpq

1
2
3
4
5
6
7
8
9
#include<stdio.h>
#define T “%s,%s\n”void main()
{ char *x[]={“abcd”,”efgh”,”mnpq”,”rstu”};
char **y;
y=x;
++y;c
printf(T,*x,*x+1);
printf(T,*y,y[1]);
}

26、下面程序运行的正确结果是 3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<stdio.h>
#define N 5
int fun(char *s,char a,int n)
{ int j;
*s=a;
j=n;
while(*s<s[j]) j--;
return j;
}
void main()
{ char c[N+1];
int b;
for(b=1;b<=N;b++) *(c+b)=’A’+b+1;
printf(“%d\n”,fun(c,’E’,N));
}

27、下面程序运行的正确结果是 1,y

1
2
3
4
5
6
7
8
9
10
11
12
struct tree
{ int x; char c;
} t ;
func(struct tree t)
{ t.x=10; t.c=‘x’;
}
void main()
{ t.x=1;
t.c=‘y’;
func(t);
printf(“%d,%c\n”, t.x, t,c);
}

28、下面程序运行的正确结果是 MNQ

1
2
3
4
5
6
7
8
9
10
11
12
struct str1
{ char c[5]; char *s; };
void main()
{ struct str1 s1[2]={“ABCD”, “EFGH”, “IJK”, “LMN”};
struct str2
{ struct str1 sr; int d;
} s2={“OPQ”, “RST”, 32767};
struct str1 *p[2];
p[0]=&s1[0]; p[1]=&s1[1];
printf(“%s”, ++p[1]->s);
printf(“%c”, s2.sr.c[2]);
}

29、以下程序运行时输出结果为 3 。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<stdio.h>
#define Y 2
#define M(y) ((y)+(y)/Y)
main()
{ printf("%d",M(Y));
}
30、以下程序运行时输出结果为 1 2 6
#include <stdio.h>
int fun(int n)
{ static int j=1;
j*=n++;
return j;
}
void main(void)
{ int k;
for(k=1; k<4; k++)
printf("%4d",fun(k));
}

31、以下程序运行时输出结果是 2468 .

1
2
3
4
5
6
7
8
#include <stdio.h> 
int f(int n)
{ if(n<1)return;
f(n-2);
printf("%d",n);
}
main()
{ f(8); }

32、以下程序运行时输出结果第一行是 6,5 第二行是 5,6 。

1
2
3
4
5
6
7
8
9
10
11
12
13
#include<stdio.h>
#define f(x,y,z) z=x,x=y,y=z
void g(int x,int y)
{ int z; z=x,x=y,y=z; }
main()
{
   int a=6,b=5,c;
   g(a,b);
   printf("%d,%d",a,b);
   a=6;b=5;
   f(a,b,c);
   printf("\n%d,%d",a,b);
}

33、以下程序运行时输出结果第一行是 2 3 1 第二行是 1 2 3 第三行是 3 1 2 。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<stdio.h>
void exchang(int x[][3],int n,int m)
{ int i,k;
  for(i=0;i<3;i++)
  { k=x[n][i];x[n][i]=x[m][i];x[m][i]=k; }
}
main()
{ int a[3][3]={3,1,2,1,2,3,2,3,1},*p[3],i,j;
  for(i=0;i<3;i++) p[i]=a[i];
  for(i=0;i<2;i++)
   for(j=0;j<2-i;j++)
     if(p[j][1]<p[j+1][1])exchang(a,j,j+1);
  for(i=0;i<3;i++)
  {  for(j=0;j<3;j++) printf("%3d",a[i][j]);
   printf("\n");
  }
}

34、执行以下程序段后,输出的第一行是12345 _,输出的第二行是__1817 _

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
void func(int m, int n)
{ if(m<n) printf("%d",m);
  else{ func(m/n,n); printf("%d",m%n); }
}
void main()
{ void (*p)(int,int);
  p=func;
  (*p)(12345,10); putchar('\n');
  (*p)(377,20); putchar('\n');
}

35、执行以下程序段后,在main函数返回之前,全局变量x的值是__0,40,80,120_,main函数中局部变量y的值是20,60,100,140.

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
int x;
int func(int n)
{ static char m=1;
m=m*8; x+=m*n--;
return(--n);
}
void main()
{ int i,y;
for(i=2;i<8;i+=2) y=func(i);
}

36、执行以下程序段后,输出的第一行是__2,1_,输出的第三行是_3,3 _;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
void main()
{
int a[16],i,j,t;
for(i=0;i<16;i++) *(a+i)=i*10;
for(i=0;i<4;i++)
for(j=0;j<i;j++)
{ t=*(a+i*4+j);
*(a+i*4+j)=*(a+j*4+i);
*(a+j*4+i)=t; }
for(i=1;i<=16;i++)
{ printf("%4d,",a[i-1]);
if(i%4==0) printf("\n");
}
}

37、执行以下程序段后,a[0]的值是__12,4_ ,a[9]的值是 30 ;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void main()
{ int a[10]={104,4,19,7,23,56,49,97,33,35};
int i=0,j=9,k,flag,tmp;

while(i<=j)
{ flag=1;
while(flag)
{ for(k=2;k<a[i];k++)
if(a[i]%k==0) break;
if(k<a[i]) flag=0;
else i++;
if(i>j) flag=0;
}
flag=1;
while(flag)
{ for(k=2;k<a[j];k++)
if(a[j]%k==0) break;
if(k<a[j]) j--;
else flag=0;
if(i>j) flag=0;
}
if(i<j) {tmp=a[i]; a[i]=a[j]; a[j]=tmp;}
}
}

38、执行以下程序段后,输出的第一行是_ GooD___;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <string.h>
void func(char *a, int n)
{ int i,t;
char *p=a;
for(i=0;i<n;i++)
{ if(*p>='a' && *p<='z' )
{ t=(*p-'a'+3)%26;
*p='A'+t;
}
else if(*p>='A' && *p<='Z' )
{ t=(*p-'A'+3)%26;
*p='a'+t;
}
p++;
}
}
void main()
{ char s[][100]={"dLLa","iRZh:)"};
func(s[0],strlen(s[0])); puts(s[0]);
func(s[1],strlen(s[1])); puts(s[1]);
}