第3部分综合训练 3.1综合练习及参考答案 一、 选择题(每题1分,共30分) 1. 下列合法的变量名为()。 A) void、define、WORDB) a3_b3、_123、IF C) FOR、 -abc、Case D) 2a、Do、Sizeof 2. C语言中用于结构化程序设计的3种基本结构是()。 A) if、switch、break B) 顺序结构、选择结构、循环结构 C) for、while、do-whileD) if、for、continue 3. 下列说法正确的是()。 A) int类型占24个二进制位B) char类型占16个二进制位 C) float类型占4个字节D) double类型占6个字节 4. 若已定义a和b为double类型,则表达式a=1.5,b=a+7/2的值是()。 A) 5 B) 4.5 C) 4 D) 5.5 5. 表达式 5.78+'b'-100 的结果类型是()。 A) intB) floatC) charD) double 6. 下列数据中,为字符串常量的是()。 A) 'a'B) "house"C) how do you doD) '$abc' 7. 表达式 (int)11.89%3 值为()。 A) 4.5B) 4C) 5D) 2 8. 能正确表示数学关系式5<=x<=10 的C语言表达式是()。 A) x>=5 or x<=10B) x>=5 && x<=10 C) x>=5||x<=10D) x>=10||x<=5 9. 以下符合C语言语法的实型常量是()。 A) 1.2E0.5 B) 3.14159EC) E10D) .5E-3 10. 一个C程序至少包含函数的个数是()。 A) 无限制B) 2 C) 1D) 0 11. 若变量已正确定义并赋值,以下符合C语言语法的语句是()。 A) a+b=100;B) a=b=c+2; C) int 18.5%3;D) a=a+7=c+b; 12. 以下程序的输出结果是()。 main() { int a=4; printf("%d\n",(a+=a*=a-2) ); } A) 18B) 28C) 16D) 24 13. 执行下列程序的结果是()。 main() { int x=2, y; y=++x*x; printf("%d",y); } A) 4B) 9C) 16D) 程序有错误 14. 以下语句输出结果是()。 float x=423.5685; printf("%.2f\n",x); A) 423B) .57C) 423.57D) 423.56 15. 若已定义: int a[]={0,1,2,3,4,5,6,7,8,9}, *p=a, i; 其中 0≤i≤9, 则对a数组元素不正确的引用为()。 A) a[p-a]B) *(&a[i]) C) p[i]D) a[10] 16. 若有以下定义int m[10], *p=m; 则p+3表示的是()。 A) 元素m[3]的地址  B) 元素m[3]的值 C) 元素m[4]的地址  D) 元素m[4]的值 17. 有如下程序段 int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a+3,b; b=p[5]; 则b的值是()。 A) 5B) 6C) 9 D) 8 18. 若有以下定义 char st[]="AB\142\ncd\0A98"; 则语句printf("%d,%d",strlen(st),sizeof(st));输出结果为()。 A) 10,11 B) 10,10C) 6,11D) 6,10 19. 如有定义: char s1[20], s2[20]; 则以下正确的输入格式是()。 A) gets(s1,s2);B) getchar("s1"), getchar("s2"); C) scanf("%s,%s",&s1,&s2);D) scanf("%s%s",s1,s2); 20. 以下程序的输出结果是()。 main() { char st[3][20]={"AAAA","BBB","CC"}; printf("%s",&st[0][0]+20); } A) AAAAB) BBBC) BBBCCD) CC 21. 如有定义int x=3,y=4,z=5; 则下面表达式中值为0的是()。 A) x&&y B) x<=yC) ++y&&y-zD) !(x>y) 22. C语言中文件的存储方式是()。 A) 只能顺序存取 B) 只能随机存取 C) 可以顺序存取,也可以随机存取 D) 只能从文件的开头进行存取 23. 若有以下定义 structstudent { char st[12];int m;floatsr; } stu; 则stu在内存中所占的字节数是()。 A) 12B) 18C) 4D) 2 24. 若有下面的程序段: char s[]="china",char *p; p=s; 则下列叙述正确的是()。 A) s和p完全相等 B) 数组s中的内容和指针变量p中的内容相同 C) s数组长度和p所指向的字符串长度相等 D) *p与s[0]相等 25. 若有说明int a[][3]={1,2,3,4,5,6,7,8,9,10}; 则a数组第一维的大小是()。 A) 2B) 3C) 4D) 6 26. 如有定义int n, m[ ][3]={{1,2,3},{2,3,4},{3,4,5}}; 则下面语句: for(n=0; n<3; n++) prinf("%2d",m[n][2-n]); 输出结果是()。 A) 1 2 3B) 2 3 4C) 3 4 5D) 3 3 3 27. 设int a=25; 则 printf("\n%d", a>>2); 的输出结果是()。 A) 6B) 8C) 12D) 9 28. 以下程序的输出结果是()。 #define add(u) u*u main() {int sum, a=3; sum=add(a+1); printf("%d\n",sum); } A) 7B) 16C) 9D) 12 29. 若有以下程序段: main() {int x=2,y=4; printf("%d%3d\n",(y++,++x),++x);} 运行该程序的输出结果是()。 A) 43B) 34C) 44D) 33 30. 以下对指针的操作中不正确的是()。 A) int *p,q; p=&q; B) int *p,*q; p=q=NULL; C) int a=5,*p,*q; p=q=&a;D) int a=5,*p; p=a; 二、 写出以下程序的运行结果(每题3分,共30分) 1. 有如下程序: main() { int m,n,k,t,a[4]={5,4,7,6}; for(m=0;m3;m++) { k=m; for(n=m+1; n=3;n++) if(a[n]>a[k]) k=n; t=a[m]; a[m]=a[k]; a[k]=t; } for(m=0; m=3; m++) printf("%4d", a[m]); } 该程序的输出结果是()。 2. 有以下程序: main() { int a,b,c; a=b=c=1; ++a&&++b||++c; printf("%d,%d,%d",a,b,c); } 该程序的输出结果是()。 3. 有以下程序: int f(int b[], int n) { int i,r=1; for(i=0;i=n;i++) r=r*b[i]; return r; } main() { int x,a[]={2,3,4,5,6,7,8,9}; x=f(a,3); printf("%d",x); } 该程序运行后的输出结果是()。 4. 有如下程序: #include "string.h" main() { char str[30]; strcpy(&str[0],"CH"); strcpy(&str[1],"DEF"); strcpy(&str[2],"ABC"); printf("\n%s",str); } 该程序的输出结果是()。 5. 有如下程序: void fun( int *s,int t) { *s=*s+10; t+=10; } main() { int a=2,b=2; fun(&a,b); printf("\n %d,%d",a,b); } 该程序的输出结果是()。 6. 有以下程序: main() { int a[4][4]={{1,2,3,4},{1,2,3,4},{1,2,3,4},{1,2,3,4}}; int i, j, s[4]={0}; for(i=0; i=3; i++) { for(j=0; j=3 ;j++) s[i]+=a[j][i]; } for(i=0;i=3;i++) printf("%3d ",s[i]); } 该程序的输出结果是()。 7. 有以下程序: #includestdio.h int k=3; fun(int p) { static int t=1; t+=p+k; return(t); } main() { int a=2,k=3; printf("%d \n",fun(a+fun(k))); } 该程序的输出结果是()。 8. 有如下程序: #include"string.h" main() { char sp[4][20]={ "abc","efght","123456","89"},sk[20]; int n; strcpy(sk,sp[0]); for(n=1; n=3; n++) if(strlen(sp[n])strlen(sk)) strcpy(sk,sp[n]); printf("\n%s",sk); } 该程序的输出结果是()。 9. 有如下程序: main() { int k,m; for(k=2;k=9;k++) { m=k*k; if(m%10==k) printf("%3d",k); } } 该程序的输出结果是()。 10. 有以下程序: main() { int n=0; char s[100]= "xabstabuvabcde",t[3]= "ab",*p,*q; for(p=s, q=t; *p ; p++) if(*p == *q && *(p+1)==*(q+1)) {n++; p++;} printf("\n %d", n); } 该程序的输出结果是()。 三、 完善程序(每题2分,共12分) 1. 求p=1-2+3-4+…+100的值。 main() { int i,p=0,t=1; for(i=1;i=100;i++) { p=p+t*i; ; } printf("p=%d",p); } 2. 输出数组x中的最大值。 main() { int x[6]={5,8,12,3,35,6},*p,max=x[0]; ; while(p-x=5) { if(*pmax) max=*p; p++; } printf("\n%d", max); } 3. 找出200~300之间既能被3整除又能被5整除的第一个数。 main() { int n; for(n=200;n=300;n++) if(n%3==0&&n%5==0) { printf("n=%d",n); ;} } 4. 输出50~100间的全部素数。 #include "math.h" main() { int m,k,i,n=0; for(m=51;m=100;m=m+2) { k=sqrt(m); for(i=2;i=k;i++) if(m%i==0) break; if {printf("%4d ",m); n++;} } } 5. 使输入的一个字符串按逆序存放,并输出。 #includestdio.h main() { char str[100], t; int i,n; gets(str); { n=strlen(s); for {t=s[i];s[i]=s[n-i-1];s[n-i-1]=t;} printf("%s",str); } } 6. 按逆序打印出一个正整数各位上的数字。如: 原数为1234,则输出4321。 main() { long m,x; scanf("%d",&x); m=x; while(m0) { printf("%3d",m%10); ; } } 四、 编写C语言程序实现以下各题功能(每题7分,共28分) 1. 求100~200之间能被3整除但不能被7整除的数之和。 2. 统计100至999之间满足下面条件的数的个数: “各位上数字之和能被7整除”。 3. 由键盘输入一个整数x,将x插入到有序整型数组a中,使数组a仍然有序,然后输出数组a。已知a[11]={68,57,55,42,31,24,12,8,3,1}。 4. 从键盘输入两个字符串分别存入数组at和bt 中,然后将bt逆序连接到at中,并输出at。 【综合练习参考答案】 一、 选择题 1~5BBCBD6~10BDBDC 11~15BCBCD16~20ACCDB 21~25CCBDC26~30DAAAD 二、 写出以下程序的运行结果 1. 7 6 5 4 2. 2,2,1 3. 120 4. CDABC 5. 12,2 6. 4 8 12 167. 19 8. 1234569. 5 6 10. 3 三、 完善程序 1. t= -t 2. p=x或p=&x[0] 3. break 4. i>=k+1 或 i>k5. i=0;i