C语言程序设计试题及答案解析[1]全解 下载本文

}

程序运行结果是:

A.SUM=55 B.SUM=-54 C.SUM=-55 D.SUM=54 28.下列程序

void inv(int*x,int n) {int *p,t,*i,*j,m=(n-1)/2; i=x; j=x+n-1; p=x+m;

for(;i

main( )

{ static int i,a[10]={3,7,9,11,0,6,7,5,4,2}; inv(a,10); for(i=0;i<10;i++) printf(“%d,”,a[i]); }

程序运行结果:

A.0,2,3,4,5,6,7,7,9,11 B.11,9,7,7,6,5,4,3,2,0 C.3,7,9,11,0,6,7,5,4,2 D.2,4,5,7,6,0,11,9,7,3 29.下列程序 main()

{ int a[10],b[10],*pa,*pb,i; pa=a;pb=b;

for(i=0;i<3;i++,pa++,pb++) {*pa=i;*pb=2*i;

printf(“%d\\t%d\\n”,*pa,*pb); }

printf(“\\n”); pa=&a[0]; pb=&b[0];

for(i=0;i<3;i++) {*pa=*pa+i; *pb=*pb*i;

printf(“%d\\t%d\\n”,*pa++,*pb++); } }

运行后输出的数据为______。

A. 0 0 B.0 0 C. 0 0 D. 0 0 1 2 1 2 1 2 2 2 2 4 2 4 2 4 2 4

0 0 0 0 0 0 0 0 2 2 2 2 1 2 1 2 4 8 2 4 2 4 4 8 30.下列程序

copy_string(from,to) char *from,*to;

{ while(*from) *to++=*from++; *to=’\\0’; }

main()

{ static char s1[ ]=”c_program.”; static char s2[80]; copy_string(s1,s2); printf(“%s\\n”,s2); copy_string(“123”,s2); printf(“%s\\n”,s2); }

运行后输出的数据为( )。

A. c_program 123 B.123 C. c_program123 D. c_program 123 31.下列程序:

#include main()

{ char a[40],b[40]; int i,j;

printf(“Enter the string:”); scanf(“%s”,a); i=j=0; while(a[i]!=’\\0’)

{ if(!(a[i]>=’\\0’&&a[i]<=’9’)) { b[j]=a[i]; j++; } ++i; }

b[j]=’\\0’;

printf(“%s”,b); }

运行后输出的结果是( ) 。 A. 把键盘输入的字符串显示在屏幕上

B. 把键盘输入的字符串中的数字字符删掉,然后显示该字符串 C. 把键盘输入的字符串中的字符0和9删掉,然后显示该字符串 D. 只保留由键盘输入的字符串中的字母数字,然后显示该字符串 32.下列程序 #include main()

{ char a[80];

int i,j;

printf(“Enter the string:”); scanf(“%s”,a); i=0;

while(a[i]!=’\\0’)

{ if(a[i]>=’A’&&a[i]<=’Z’) a[i]=a[i]-‘A’+’a’; }

printf(“%s”,a); }

运行后输出的结果是( )。

A. 把键盘输入的字符串中的大写字母变换成小写字母,然后显示变换后的字符串。 B. 把键盘输入的字符串中的数字字符删除掉,然后显示该字符串。

C. 把键盘输入的字符串中的小写字母变换成大写字母,然后显示变换后的字符串。 D. 把键盘输入的字符串原封不动地显示在屏幕上。

第二卷 说明:(1)第二卷含二大题,均属填空题,每题各有5个空栏,在阅读和理解原题程序的基础上,在空栏处填入适当的字符、语句,以构成一个正确的C语言程序。 (2)每空栏填对得3分,两大题共10个空栏,全填对得30分。

试题一

一个整数称为完全平方数,是指它的值是另一个整数的平方。如81是个完全平方数,因为它是9的平方。下列程序是在三位的正整数中寻找符合下列条件的整数:它既是完全平方数,且三位数字中又有两位数字相同:例如144(12*12)、676(26*26)等,从程序中找出并输出所有满足上述条件的三位数。 程序如下: main()

{ int n,k,a,b,c; for(k=1; ;k++) {______①______

if(n<100) _____②_____ if(n<999) _____③_____ a=n/100;

b=_____④_____ c=n, if(flag(a,b,c))

printf(“n=%d=%d*%d\\n”,n,k,k); } }

flag_____⑤_____

{ return(!(x-y)*(x-z)*(y-z)); }

试题二

以下程序所列函数replace(char *s1,char *s2,char str1,char *str2)的功能是将已知字符串s1中的

所有与字符串str1相同的子串替换成字符串str2,并将替换后所生成的新的字符串存于字符数组s2中。

说明:生成字符串s2的过程是一个循环,顺序访问字符串s1的每个字符;当从某个字符开始不能构成与str1相同的子字符时,就把该字符拷贝到数组s2,当从某个字符开始能构成一个与str1相同的子字符串时,就将字符串str2的各字符拷贝到字符数组s2,并继续访问字符串s1中那个子串之后的字符,直至字符串s1被访问完毕,字符复制即告结束。 下列程序运行的结果是输出:

ABCXYZdefg abABCXYZd abab 程序如下:

replace(char *s1,char *s2,char *str1,char *str2) { char *t0,*t1,*t2; while( ⑥ )

{ for(t0=s1,t1=str1;*t1!=’\\0’&& ⑦ ;t0++,t1++); if(*t1!=’\\0’) *s2++= ⑧ ;

else { for(t1=str2;*t1!=’\\0’;)

*s2++= ⑨ ; ⑩ ;} }

*s2=’\\0’; } main()

{ char s1[]=”abcdefg ababcd abab.”; char s2[80];

replace(s1,s2,”abc”,”ABCXYZ”); printf(“%s\\n”,s2); }

参考答案 第一卷

一.基础知识(20项,共40分)

1.C 2.C 3.C 4.A 5.D 6.B 7.B 8.B 9.C 10.A 11.C 12.B 13.B 14.D 15.A 16.D 17.D 18.B 19.D 20.A

二.简单程序

21.C 22.B 23.C 24.C 25.A 26.B 27.B 28.D 29.A 30.D 31.B 32.A 第二卷 试题一:①n=k*k ②continue③break④n0/10或(n-100*a)/10或n/10-(n/100)*10⑤int x,int y,int z 试题二:

⑥*s1或s1!=’\\0’ ⑦*t0==*t1或*t1==*t0 ⑧*s1++ ⑨*t1++ ⑩s1=t0或s1=s1+strlen(str1)