测试题3 1.C语言中不合法的字符常量是 C A、’\65’ B、’\xff’ C、’\028’ D、’&’ 2.具有相同类型的指针变量p与数组a,不能进行的操作是(C)。 A、p=&a[0]; B、p=a; C、p=&a; D、*p=a[0]; 3.若有x=22,y=26,z=0;,则执行下面语句后,z的输出结果是(B ) z=x>y?x:y A、72 B、26 C、48 D、22 4.对于建立函数的目的,正确的说法是 D A、提高程序的执行效率 B、减少程序的篇幅 C、减少程序文件所占的内存 D、提高程序的可读性 5.有定义:char*p1,*p2;则下列表达式中正确合理的是 C A、p1/=5 B、p1+=5 C、p1=&p2 D、p1*=p2 6.以下程序的运行结果是(B)。 main() { int i=1,sum=0; while(i<10) sum=sum+1;i++; printf("i=%d,sum=%d",i,sum); } A、i=10,sum=9 B、运行出现错误 C、i=2,sum=1 7.若变量已正确定义且 k 的值是 4,计算表达式 ( j =4, k--) 后,j和k的值为(C) A、j=4, k=4 B、j=3, k=3 C、j=4, k=3 D、j=3, k=4 8.给出以下定义: char x[ ]="abcdefg"; char y[ ]={'a','b','c','d','e','f','g'}; 则正确的叙述为(A) A、数组x的长度大于数组y的长度 B、数组x和数组y等价 C、数组x和数组y的长度相同 D、数组x的长度小于数组y的长度 9.在下述程序中,判断i > j共执行了多少次 C #include main() { int i = 0, j = 10, k = 2, s = 0; for( ; ; ) { i += k; if(i > j) { printf(“%d\n”, s); break; } s += i; } } A、4 B、8 C、6 D、7 10.下列各m的值中,能使m%3==2&&m%5==3&&m%7==2为真的是(D)。 A、8 B、17 C、6 D、23 11.下面判断正确的是(D)。 A、char *a="china";等价于 char *a;*a="china"; B、char str[10]={"china"};等价于char str[10];str[]={"china"}; C、char c[4]="abc",d[4]="abc";等价于 char c[4]=d[4]="abc"; D、char *s="china";等价于 char *s;s="china"; 12.设 b的值为二进制数, b=00000010;表达式(b>>2)/(b>>1)的值是(A)。 A、0 B、2 C、8 D、4 13.以下叙述正确的是(A)。 A、用do-while语句构成的循环,在while后的表达式为零时结束循环 B、do-while语句构成的循环只能用break语句退出. C、do-while语句构成的循环不能用其它语句构成的循环来代替. D、用 do-while 语句构成的循环,在 while 后的表达式为非零时结束循环. 14.以下正确的说法是(D)。 A、如果形参与实参类型不一致,以实参类型为准 B、return后边的值不能为表达式 C、定义函数时,形参的类型说明可以放在函数体内 D、如果函数值的类型与返回值类型不一致,以函数值类型为准 15.已定义两个字符数组a,b,则以下正确的输入格式 是 B A、scanf("%s%s", &a, &b); B、scanf("%s%s", a, b); C、gets("a"),gets("b"); D、get(a, b); 16.宏定义#define PI 3.14中的宏名PI代替 C A、不确定类型的数 B、一个单精度实数 C、一个字符串 D、一个双精度实数 17.以下叙述中正确的是(A)。 A、C程序中注释部分可以出现在程序中任意合适的地方 B、分号是C语句之间的分隔符,不是语句的一部分 C、花括号“{“和”}”只能作为函数体的定界符 D、构成C程序的基本单位是函数,所有函数名都可以由用户命名 18.若有说明:int a[3][4];则数组a中各元素(A)。 A、不能得到确定的初值 B、可在程序的编译或运行阶段得到初值0 C、可在程序的运行阶段得到初值0 D、可在程序的编译阶段得到初值0 19.下面四个选项中,均是不合法的用户标识符的选项是(D)。 A、_123 B、A D、b-a P_0 C、float temp do la0 int _A gotoint 20.以下不能对二维数组a进行正确初始化的语句是(B)。 A、int a[][3]={{1,2},{0}}; B、int a[2][3]={{1,2},{3,4},{5,6}}; C、int a[2][3]={0}; D、int a[][3]={1,2,3,4,5,6}; 21.若a为int类型,且其值为3,则执行完表达式a+=a-=a*a后,a的 值是(B)。 A、9 B、-12 C、6 D、-3 22.一个算法应该具有“确定性”等5个特性,下面对另外4个特性的描述 中错误的是(B)。 A、有穷性 B、有零个或多个输出 C、可行性 D、有零个或多个输入 23.下列语句中,不正确的是(C)。 A、static char a[2]={'1'}; B、static char a[2]={1,2}; C、static char a[2]={'1','2','3'}; D、static int a[2]={'1','2'}; 24.若有下列定义,则对a数组元素地址的正确引用是(D)。 int a[5],*p=a; A、*(p+5) B、*&a[5] C、*p+2 D、*(a+2) 25.若有定义:char *p1,*p2,*p3,*p4,ch; 则不能正确赋值的程序语句为(D)。 A、p4=&ch;*p4=getchar(); B、p2=(char *)malloc(1);scanf("%c",p2); C、p1=&ch; scanf("%c",p1); D、*p3=getchar(); 26.以下选项中合法的实型常数是(A)。 A、.2E0 B、E-3 C、5E2.0 D、1.3E 27.若要说明一个类型名STP,使得定义语句STP s等价于char *s, 以下选项中正确的是(A)。 A、typedef char* STP; B、typedef *char STP; C、typedefstp *char; D、typedef STP char *s; 28.sizeof(float)是(B)。 A、一种函数调用 B、一个整型表达式 C、一个不合法的表达式 D、一个双精度型表达式 29.下面程序的输出结果是 main(C) { int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; printf("%d\n",*(p+2) ); } A、2 B、4 C、3 D、1 30.以下四个程序中,不能对两个整型值进行交换的是 A、 D B、 C、 D、 判断 1.C 语言规定,必须用 main 作为主函数名 T 2.如果想使一个数组中全部元素的值为0,可以写成 F int a[10]={0*10}; 3.若 i =3,则 printf("%d",-i++);输出的值为-4 F 4.在C 语言中,此定义和语句是合法的: enumaa{ a=5,b,c}bb;bb=(enumaa)5; 5.用fopen("file","r+");打开的文件"file"可以进行修改。 6.循环结构中的continue语句是使整个循环终止执行 F T T 7.在C语言中,对于数组的定义char a[8]="computer"是错误的. T 8.C语言本身不提供输入输出语句,输入和输出操作是由函数来 T 实现的。 9.共同体变量所占的内存长度等于最长的成员的长度。 T 10.#define 和printf 都不是C语句。 T 程序设计 1./*-----------------------------------------------【程序设计】 -------------------------------------------------功能:给定n个数据, 求最大值出现的位置(如果最大值出 现多次,求出第一次出现的位置即可)。 ------------------------------------------------*/ #include int station(int s[],int n) { /**********Begin**********/ /********** End **********/ } main() { int a[100],n,i,t; scanf("%d",&n); for(i=0;is[k]) k=i; return(k+1); 2./*-----------------------------------------------【程序设计】 -------------------------------------------------功能:求n阶方阵主、副对角线上的元素之积。 ------------------------------------------------*/ #define N 4 #include "stdlib.h" #include void bky(); floatmul(intarr[][N]) { /**********Begin**********/ /********** End } main() { int a[N][N],i,j; for(i=0;i0.0) { 累计营业额; 输入下一笔交易额; } 输出营业额; } 记一笔交易额为变量sale,营业额为sigma。 ------------------------------------------------------*/ #include void main() { /**********ERROR**********/ floatsale,sigma sigma=0.0; printf("Enter sale data.\n"); /**********ERROR**********/ scanf("%f",sale); while(sale>0.0) { /**********ERROR**********/ sigma+==sale; printf("Enter next sale data(<=0 to finish).\n"); scanf("%f",&sale); } printf("Sigma of sale is %.2f\n",sigma); } 答案【改错1】 【学生答案】 float sale,sigma 【参考答案】 float sale,sigma; 错误 ============================================================ 【改错2】 错误 【学生答案】 scanf("%f",sale); 【参考答案】 scanf("%f",&sale); ============================================================ 【改错3】 错误 【学生答案】 sigma+==sale; 【参考答案】 sigma+=sale; sigma=sigma+sale; 2.【程序改错】 -------------------------------------------------------功能:m个人的成绩存放在score数组中,请编写函数fun, 它的功能是:将高于和等于平均分的人数作为函数值返回, 将高于和等于平均分的分数放在above所指的数组中。 程序中共有4条错误语句,请改正错误。 -------------------------------------------------------注意:不可以增加或删除程序行,也不可以更改程序的结构。 ------------------------------------------------------*/ #include int fun(float score[], int m, float above[]) { /**********ERROR**********/ floatav=1; inti,n=0; for(i=0;i #include "string.h" JOIN(s1,s2) char s1[80],s2[40]; { inti,j; /**********FILL**********/ _____ /**********FILL**********/ for (i=0; _____'\0';i++) s1[i+j]=s2[i]; /**********FILL**********/ s1[i+j]= _____; } main ( ) { char str1[80],str2[40]; gets(str1);gets(str2); puts(str1);puts(str2); /**********FILL**********/ _____ puts(str1); } 答案【空1】 【学生答案】 _____ 【参考答案】 j=strlen(s1) 错误 for(j=0;s1[j]!='10';j++); for(j=0;s1[j];j++); ============================================================ 【空2】 错误 【学生答案】 for (i=0; _____'\0';i++) 【参考答案】 s2[i]!= *(s2+i)!= *(i+s2)!= 【空3】 错误 【学生答案】 s1[i+j]= _____; 【参考答案】 '\0' NULL 0 【空4】 _____ 【参考答案】 JOIN(str1,str2) 错误 【学生答案】 2.【程序填空】 --------------------------------------------------------