三 写出下列程序的运行结果(36分,每小题6分)
1.main( )
{ int i=29,j=6,k=2,s;
s=i+i/j%k-9;
printf(“s=%d ”,s);
}
2.main( )
{ int x=31,y=2,s=0;
do
{ s-=x*y;
x+=2;
y-=3;} while( x%3==0);
printf(“x=%d y=%d s=%d ”,x,y,s);
}
3.main( )
{ int a[6]={10,20,30,40,50,60},i;
invert(a,0,5);
for(i=0;i<6;i++) printf(“%d,”,a[i]);
printf(“ ”);
}
invert(int s[ ],int i,int j)
{ int t;
if(i<j)< p="">
{ invert(s,i+1j-1);
t=s[i];s[i]=s[j];s[j]=t;
}
}
4.#include
main()
{ char str[ ]=“The C program”,c;
int i;
for(i=2;(c=str[i])!=‘\0’;i++)
{ switch(c)
{ case ‘g’: ++i; break;
case ‘o’: continue;
default: printf(“%c”,c); continue;
}
printf(“*”);
}
printf(“ ”);
}
5.struct w
{ char low;
char high;
};
union u
{ struct w byte;
short word;
}uw;
main( )
{ int result;
uw.word=0x1234;
printf(“word value:%04x ”,uw.word);
printf(“high byte:%02x ”,uw.byte.high);
printf(“low byte:%02x ”,uw.byte.low);
uw.byte.low=0x74;
printf(“word value:%04x ”,uw.word);
result=uw.word+0x2a34;
printf(“the result:%04x ”,result);
}
6.main()
{ char *s2=“I love China!”,**s1=&s2;
char *s3,c,*s4=“w”;
s3=&c;
*s3=‘H’;
s2=s2+2;
printf(“%s %c %s %c ”,s2,*s3,s4,**s1);
}
四 阅读下列程序,在 处填入适当内容,使程序完整(20分,每个空2分)
1. 百马百担问题:有100匹马,驮100担货,大马驮3担,中马驮2担,两匹小马驮1担,问大、中、小马各多少匹?
main( )
{ int hb,hm,hl,n=0;
for(hb=0;hb<=100;hb+= (1) )
for(hm=0;hm<=100-hb;hm+= (2) )
{ hl=100-hb- (3) ;
if(hb/3+hm/2+2* (3) ==100)
{ n++;
printf("hb=%d,hm=%d,hl=%d ",hb/3,hm/2,2*hl);
}
}
printf("n=%d ",n);
}
2.用“起泡法”对输入的10个字符排序后按从小到大的次序输出。
#define N 10
char str[N];
main()
{ int i,flag;
for(flag=1;flag==1;)
{ scanf("%s",str);
flag=0;
printf(" ");
}
sort(___(4)___);
for(i=0;i<n;i++)< p="">
printf("%c",str[i]);
printf(" ");
}
sort(char str[N])
{ int i,j;
char t;
for(j=1;j<n;j++)< p="">
for(i=0;(i<n-j)&&(str[i]!='\0');i++)< p="">
if(str[i]>str[i+1])
{ t=str[i];
____(5)____;
____(6)____;
}
}
3.以下程序是一个函数,功能是求二阶矩阵(m行n列矩阵)的所有靠外侧的各元素值之和。(本程序中二阶矩阵用一维数组来表示。)
例如,矩阵为:
3 0 0 3
2 5 7 3
1 0 4 2
则所有靠外侧的各元素值之和为3+0+0+3+2+3+1+0+4+2=18。
add(int m,int n,int arr[])
{ int i,j,sum=0;
for(i=0;i<m;i=i+m-1)< p="">
for(j=0;j<n;j++)< p="">
sum=sum+ (7) ;
for(j=0;j<n;j=j+n-1)< p="">
for(i=1; (8) ;i++)
sum=sum+arr[i*n+j];
return(sum);
}
4.用指针作函数参数,编程序求一维数组中的最大和最小的元素值。
#define N 10
main()
{ void maxmin(int arr[],int *pt1,int *pt2,int n);
int array[N]={10,7,19,29,4,0,7,35,-16,21},*p1,*p2,a,b;
p1=&a; p2=&b;
maxmin(array,p1,p2,N);
printf("max=%d,min=%d",a,b);
}
void maxmin(int arr[],int *pt1,int *pt2,int n)
{ int i;
*pt1=*pt2=arr[0];
for(i=1;i<n;i++)< p="">
{ if(arr[i]>*pt1) (9) ;
if(arr[i]<*pt2) (10) ;
}
}
答案
一 选择题(24分,每小题2分)
1.( B ) 2.( C ) 3.( B ) 4.( D ) 5.( D ) 6.( A )
7.( D ) 8.( A ) 9.( D ) 10.( B ) 11.( C ) 12.( D )
二 判断对错,对的划“√”,错的划“×”(20分,每小题2分)
1.( × ) 2.( √ ) 3.( √ ) 4.( × ) 5.( × )
6.( √ ) 7.( √ ) 8.( × ) 9.( √ ) 10.( √ )
三 写出下列程序的运行结果(36分,每小题6分)
1. s=20 2.x=35 y=-4 s=-29 3.60,50,40,30,20,10,
4.e C pr*am 5.word value:1234 6.love China! H w l
high byte:12
low byte:34
word value:1274
the result:3ca8
四 阅读下列程序,在 处填入适当内容,使程序完整(20分,每个空2分)
1.(1) 3 (2) 2 (3)hm hl
2.(4) str (5) str[i]=str[i+1] (6) str[i+1]=t
3.(7) arr[i*n+j](或者arr[i*10+j])
(8) i<m-1(或者i<=m-2)< p="">
4.(9) *ptr1=arr[i] (10) *ptr2=arr[i]