下列正确的标识符是(C ).
A、a+b B、6a C、_do D、%y
执行以下程序段后,输出结果和a的值是(B)。 int a=10; printf(\"%d\
A、11 和 10 B、10 和 11 C、11 和 11 D、10 和 10 以下不正确的if语句形式是(B)。
A、if(x int a=3,b=2,c=1; if(a>b && b>c)a=b; else a=c;则a的值为(C)。 A、1 B、0 C、2 D、3 对for(表达式1; ;表达式3)可以理解为(C ). A、for(表达式1;表达式3;表达式3) B、for(表达式1;表达式1;表达式3) C、for(表达式1;1;表达式3) D、for(表达式1;0;表达式3) 运行结果是\" 11 12\"的程序段是:请在A处填写正确内容(B )。 for(i=1;i<=2;i++) ___A___ A、for(j=1;j<=2;j++)printf(\"%3d\B、{for(j=1;j<=2;j++)printf(\"%3d\C、for(j=1;j<=2;j++)printf(\"%3d\D、{for(j=1;j<=2;j++)printf(\"%3d\static char str[10]=\"China\";数组元素个数为(D)。 A、6 B、9 C、5 D、10 以下程序的输出结果是:(C ). fun(int x, int y, int z){ z=x*x+y*y; }main( ) { int a=31; fun(5,2,a); printf(\"%d\ a);} A、无定值 B、29 C、31 D、0 文件包含中,被包含文件(B ). A、可以是可执行文件. B、可以嵌套其它文件. C、可以是目标文件或源文件. D、必须用\".h\"为后缀. 下列程序段的输出结果是:(C ). void fun( int *x, int *y){ printf(\"%d %d\main( ){ int x=1, y=2;fun(&y, &x); printf(\"%d %d\A、2 1 1 2 B、1 2 3 4 C、2 1 4 3 D、1 2 1 2 1.在C程序中,main函数必须位于程序的最前面 错误 2.表达式 (j=3, j++) 的值是4. 错误 3.已知a=3,b=4,c=5,则逻辑表达式a||b+c && b-c的值为0.【参考答案】错误 4.循环结构中的continue语句是使整个循环终止执行【参考答案】错误 5 在实际编程中,do-while循环完全可以用for循环替换.【参考答案】正确 6 引用数组元素时,数组元素下标必须是整型常量.【参考答案】错误 7 如果函数值的类型和return语句中表达式的值不一致,则以函数类型为准。正确 8 带参数的宏定义不是进行简单的字符串替换,还要进行参数替换.【答案】正确 9 下列的初始化的方式是正确的吗? char st[10]; st=\"string\";【答案】错误 10 在定义结构体变量时不允许对它赋初值.【参考答案】错误 三.填空 设i,j,k均为int型变量,则执行完下面的for循环后,k的值为__10___. for(i=0,j=10;i<=j;i++,j--) k=i+j; 4.结构体是不同数据类型的数据集合,作为数据类型, 必须先说明结构体_类型____,再说明结构体变量. 四.【程序设计】 功能:将主函数中输入的字符串反序存放。例如:输入字符串\"abcdefg\",则应输出\"gfedcba\"。 注意: 请在Begin 和 End 注释行之间填写代码, 所有注释语句都不能删除。 #include \"stdio.h\" #include \"string.h\" #include \"conio.h\" #define N 81 void fun(char str[],int n) { /*********Begin**********/ 【参考代码】 int i,j; char c; for(i=0,j=n-1;i void main() { void TestFunc(); char s [N]; int l; printf(\"input a string:\");gets(s); l=strlen(s); fun(s,l); printf(\"The new string is :\");puts(s);TestFunc();} 五.【程序改错】 功能:先从键盘上输入一个3行3列矩阵的各个元素的值,然后输 出主对角线上的元素之和sum。 #include \"stdio.h\" int fun() { int a[3][3],sum;int i,j; /**********ERROR**********/ a=0; for(i=0;i<3;i++) for(j=0;j<3;j++) /**********ERROR**********/ scanf(\"%d\ for(i=0;i<3;i++) /**********ERROR**********/ sum=sum+a[i][j]; /**********ERROR**********/ printf(\"sum=%f\\n\} void main() {fun();} 1【参考答案】sum=0;2【参考答案】scanf(\"%d\ 3【参考答案】sum=sum+a[i][i]; sum+=a[i][i];4【参考答案】printf(\"sum=%d\\n\六.【程序填空】先将在字符串s中的字符按正序存放到t串中,然后把s中的 字符按逆序连接到t串的后面。 #include \"stdio.h\" #include \"string.h\" void fun (char s[], char t[]) { int i, sl; /***********FILL***********/ sl = _____; for(i=0; i /***********FILL***********/ t[sl+i]=_____; } void main() { char s[100], t[100]; /***********FILL***********/ printf(\"\\nPlease enter string s:\"); _____(\"%s\ fun(s, t); printf(\"The result is: %s\\n\ 1【参考答案】 strlen(s) 2【参考答案】 s[sl-i-1] s[strlen(s)-i-1] 3【参考答案】 '\\0' 0 4【参考答案】 scanf 第二套 若变量均已正确定义并赋值,以下合法的C语言赋值语句是(C )。 A、x+n=I; B、x==5; C、x=n/2.5; D、5=x=4+1; 用scanf函数输入数据,使得x=9.6,y=81.73选择正确的输入语句(D ). A、scanf(\"x=%3f\、scanf(\"x=%f\C、scanf(\"x=%3.1f\、scanf(\"x=%f\int a=1,b=2,c=3; if(a>c)b=a;a=c;c=b;则c的值为(C)。 A、1 B、3 C、2 D、不一定 为了避免在嵌套的条件语句 if-else 中产生二义性,C语言规定:else子句总是与(A)配对。 A、其之前最近的未配对的ifB、其之后最近的if C、同一行上的if D、缩排位置相同的if 存在多层嵌套循环时,下列说法正确的是(D ). A、continue语句可以中止所有循环B、break语句可以中止所有循环 C、continue语句能够中止包含该语句的最内层循 D、break语句能够中止包含该语句的最内层循环 下面程序正确的运行结果是(B ).(答案中用大写字母U代表空格) main() { int num=0; while(num<=2) { num++; printf(\"%3d\ A、UU 1 B、UU1UU2UU3 C、UU1UU2UU3UU4 D、UU1UU2 int a[10];合法的数组元素的最小下标值为(D)。 A、10 B、9 C、1 D、0 下面叙述中错误的是( B)。 A、在其它函数中定义的变量在主函数中也不能使用B、主函数中定义的变量在整个程序中都是有效的C、复合语句中定义的变量只在该复合语句中有效D、形式参数也是局部变量 设有宏定义#define MAX(x,y) (x)>(y)?(x):(y),则F=4*MAX(2,3)的值为(B ). A、3 B、2 C、12 D、8 设有以下定义: int w[3][4]={{0,1},{2,4},{5,8}}; int (*p)[4]=w; 则数值为4的表达式是(B ). A、*w[1]+1 B、p[1][1] C、p++,*(p+1) D、w[2][2] 1 .printf 函数的一般格式为:printf (格式控制,输出表列). 【参考答案】 正确 2在C程序中,%是只能用于整数运算的运算符【参考答案】正确 3逻辑表达式4>2&&1||5<3-!0的值为1.【参考答案】正确 4continue语句对于while和do-while循环来说,意味着转去计算While表达式. 【参考答案】正确 5do-while循环由do开始,while结束,在while(表达式)后面不能加分号. 【参考答案】错误 6对任何一个二维数组的元素,都可以用数组名和两个下标唯一地加以确定. 【正确 7每次调用函数时,都要对静态局部变量重新进行初始化.【参考答案】错误 8若有 #define S(a,b) a*b 则语句 area=S(3,2); area的值为6。【参考答案】正确 9设有定义 : int a[10], *p; 则下列的语句是等价的. p=&a[0]; p=a; 正确 10共用体变量在引用时不能只用共用体变量名,必须使用某个成员名.【答案】正确 三.填空,1已知a=13,b=6, a%b的十进制数值为__1___. 2当a=3,b=2,c=1;时,执行以下程序段后 b=__1___. if(a>b) a=b; if(b>c) b=c; else c=b; c=a; 3若输入字符串:abcde<回车>,则以下while循环体将执行 __0___ 次. while((ch=getchar())=='e') printf(\"*\"); 4求字符串长度的库函数是_strlen____,只写函数名即可. 5 feof(fp)函数用来判断文件是否结束,如果遇到文件结束,函数值为_非0值_, 否则为__0__. 四【程序设计】 功能:对任意输入的 x,用下式计算并输出 y 的值。(还可以尝试用case语句) -1 x<0 y= 0 x=0 1 x>0 #include \"stdio.h\" int fun(int n) { /*********Begin**********/ 【参考代码】 int m; if(n<0) m=-1; else if(n==0) m=0; else m=1; return m; /********** End **********/ } void main () { void TestFunc(); int x,y; printf(\"enter x:\"); scanf(\"%d\ y=fun(x); printf(\"x=%d,y=%d\\n\ TestFunc(); } 六 改错-功能:将6个数按输入时顺序的逆序进行排列. #include \"stdio.h\" void sort(char *p,int m) { int i; char change,*p1,*p2; for(i=0;i /***********ERROR***********/ char p,num[6]; for(i=0;i<=5;i++) /***********ERROR***********/ scanf(\"%d\ p=&num[0]; /***********ERROR***********/ sort(*p,6); for(i=0;i<=5;i++) printf(\"%d\} 【参考答案】p1=p+i; p2=p+(m-1-i);【参考答案】char *p,num[6]; 【参考答案】scanf(\"%d\【参考答案】sort(p,6); 【程序填空】功能:输入3个数a,b,c,按从小到大的顺序输出。(冒泡法或选择法,尝试用来程序设计) #include \"stdio.h\" main() { void swap(int *p1, int *p2); int n1,n2,n3; int *pointer1,*pointer2,*pointer3; printf(\"please input 3 number:n1,n2,n3:\"); scanf(\"%d,%d,%d\ pointer1=&n1; pointer2=&n2; pointer3=&n3; /***********FILL***********/ if(_____) swap(pointer1,pointer2); /***********FILL***********/ if(_____) swap(pointer1,pointer3); /***********FILL***********/ if(_____) swap(pointer2,pointer3); printf(\"the sorted numbers are:%d,%d,%d\\n\} /***********FILL***********/ void swap(_____) int *p1,*p2; { int p; p=*p1;*p1=*p2;*p2=p;} 【参考答案】n1>n2 n2 第三套 若x,i,j,k 都是int型变量,则计算x=(i=4,j=16,k=32)后,x的值为:( D). A、52 B、16 C、4 D、32 执行以下程序段后,输出结果和a的值是(B)。 int a=10; printf(\"%d\、11 和 10 B、10 和 11 C、11 和 11 D、10 和 10 以下程序的输出结果是:(A ) main() {int m=5; if(m++>5) printf(\"%d\\n\ else printf(\"%d\\n\A、6 B、5 C、7 D、4 执行下面程序段后,i的值是( A). int i=10; switch(i) {case 9: i+=1; case 10: i--;case 11: i*=3;case 12: ++i;} A、28 B、10 C、9 D、27 下面有关 for 循环的正确描述是(C )。 A、for 循环是先执行循环体语句,后判断表达式B、在 for 循环中,不能用 break 语句跳出循环体C、for 循环的循环体语句中,可以包含多条语句,但必须用花括号括起来 D、for 循环只能用于循环次数已经确定的情况 若char a[10];已正确定义,以下语句中不能从键盘上给a数组的 所有元素输入值的语句是(A)。 A、for(i=0;i<10;i++)a[i]=getchar(); B、scanf(\"%s\、gets(a);D、a=getchar(); 下面叙述中错误的是(B )。 A、在其它函数中定义的变量在主函数中也不能使用B、主函数中定义的变量在整个程序中都是有效的C、复合语句中定义的变量只在该复合语句中有效D、形式参数也是局部变量 file1.c中有命令,#include A、a在file1.c中应用extern说明.B、a在file1.c中有效,不必用extern说明. C、a在file1.c中不生效D、a在file1.c和file2.c中均不生效. 若有定义:int aa[ 8];则以下表达式中不能代表数组元素aa[1]的地址的是(C)。 A、&aa[1] B、&aa[0]+1 C、&aa[0]++ D、aa+1 1.在C程序中,main函数必须位于程序的最前面【参考答案】错误 2若a和b类型相同,在计算了赋值表达式a=b后,b中的值将放入a中,而b中的值不变 【参考答案】正确 3逻辑表达式4>2&&1||5<3-!0的值为1. 正确 4 break语句不能终止正在进行的多层循环.【参考答案】正确 5 C语言中三种基本结构:顺序选择循环,其结构内的每个部分都会被执行到.【答案】错误 6数值型数组整体不参加数据处理(即不参加各种运算),参加数据处理的只能是数组的元素. 【参考答案】正确 7 在C语言中,函数名代表函数的入口地址.【参考答案】正确 8宏名有类型,其参数也有类型.【参考答案】错误 9数组名与指针变量是相互等价的. 错误 10 一个共用体变量中不能同时存放其所有成员.【参考答案】 正确 三1int x=2;z=++x+1; 则x的值为__3___. 2当a=1,b=2,c=3时,执行以下程序段后c=__2___. if (a>c) b=a; a=c; c=b; 3设x和y均为int型变量,则以下for循环中的scanf语句最多可执行的次数是__3___. for (x=0,y=0;y!=123&&x<3;x++) scanf (\"%d\4.字符串比较的库函数是_____,只写函数名即可. strcmp 5调用 fopen 函数打开一文本文件,在\"使用方式\"这一项中, 为追加而打开需填入 a 或 a+ 【程序设计】在键盘上输入一个3行3列矩阵的各个元素的值(值为整数),然后输出主对角线元素的平方和,并在fun()函数中输出。 #include \"stdio.h\" void main() { int i,j,s,a[3][3]; int fun(int a[3][3]); void TestFunc(); for(i=0;i<3;i++) { for(j=0;j<3;j++) scanf(\"%d\ s=fun(a);printf(\"Sum=%d\\n\ TestFunc();} int fun(int a[3][3]) { /*********Begin**********/ 【参考代码】 int sum=0,i; for(i=0;i<3;i++) sum=sum+a[i][i]*a[i][i]; return sum; /********** End **********/ } 【程序改错】 功能:输入10个数,要求输出这10个数的平均值 #include \"stdio.h\" float average(float array[10]) {int i; float aver,sum=array[0]; /***********ERROR***********/ for(i=0;i<10;i++) sum=sum+array[i]; aver=sum/10.0; return(aver); } void main( ) { /***********ERROR***********/ int score[10],aver ; int i; printf(\"input 10 scores:\\n\"); for(i=0;i<10;i++) /***********ERROR***********/ scanf(\"%f\ printf(\"\\n\"); /***********ERROR***********/ aver=average(score[10]); printf(\"average score is %5.2f\} 【参考答案】for(i=1;i<10;i++) for(i=1;i<=9;i++ 【参考答案】float score[10],aver; float aver,score[10]; 【参考答案】scanf(\"%f\ scanf(\"%f\【参考答案】aver=average(score); 【程序填空】有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来 第几号的那位。 #include \"stdio.h\" #define nmax 50 void main() { int i,k,m,n,num[nmax],*p; printf(\"please input the total of numbers:\"); scanf(\"%d\ p=num; /***********FILL***********/ for(i=0;_____;i++) /***********FILL***********/ *(p+i)=_____; i=0; k=0; m=0; while(m { *(p+i)=0; k=0; m++; } i++;if(i==n) i=0; } /***********FILL***********/ while(_____) p++; printf(\"%d is left\\n\ 【参考答案】 i 第四套 若有说明:int a[3][4];则数组a中各元素(A)。 A、不能得到确定的初值B、可在程序的编译阶段得到初值0 C、可在程序的运行阶段得到初值0D、可在程序的编译或运行阶段得到初值0 已定义float a; int i;选择正确的输入语句(C ). A、scanf(\"%6.2f%3d\、scanf(\"%f%s\C、scanf(\"%6f%3d\、scanf(\"%f%d\执行下面程序段后,k的值是:(B ) int k=2; switch(k+1) {case 3:k+=1;case 4:k--;break; case 5:k*=3;case 6:++k;} A、10 B、2 C、28 D、27 执行下列语句后的输出为(B)。 int j=-1; if(j<=1) printf(\"****\\n\"); else printf(\"%%%%\\n\"); A、%%%% B、****C、有错,执行不正确D、%%%%c 以下程序段中,能够正确地执行循环的是(B )。 A、int s=6; m:if(s<100) exit(0); else s-=2; goto m: B、int s=6; do s-=2; while(s);C、for(i=1;i>10;i++) D、static int a; while(a) 运行结果是\" 11 12\"的程序段是:请在A处填写正确内容(B )。 for(i=1;i<=2;i++) [A] A、for(j=1;j<=2;j++)printf(\"%3d\B、{for(j=1;j<=2;j++)printf(\"%3d\C、for(j=1;j<=2;j++)printf(\"%3d\D、{for(j=1;j<=2;j++)printf(\"%3d\ 对以下说明语句 int a[10]={6,7,8,9,10}; 的正确理解是(B)。 A、将5个初值依次赋给a[6]至a[10]B、将5个初值依次赋给a[0]至a[4] C、因为数组长度与初值的个数不相同,所以此语句不正确D、将5个初值依次赋给a[1]至a[5] 如果在一个函数中的复合语句中定义了一个变量,以下正确的说法是(C ). A、该变量在本程序范围内均有效B、该变量在主函数中有效 C、该变量只在该复合语句中有效D、该变量在该函数中有效 设有宏定义#define PI 3.14 和#define S(r) PI*r*r,则S(2)的值为(B ). A、6.28B、12.56C、3.14D、9.42 设有以下定义: int a[10]={1,2,3,4,5,6,7,8,9,10};int *p=a; 则数值为6的表达式是(D ). A、p+5 B、*p+6 C、*(p+6) D、*p+=5 1.C程序的每行中只能写一条语句错误 2在C语言中,各种类型的整型数据在内存中都占2个字节。错误 3条件表达式x?'a':'b'中,若x=0时,表达式的值为'b'. 正确 4while和do…while循环不论什么条件下它们的结果都是相同的. 错误 5for循环体中遇到continue语句,会转向执行for语句中的条件判断(语句2). 错误 6 int a[3][4]={{1},{5},{9}}; 它的作用是将数组各行第一列的元素赋初值,其余元素值为0。正确 7函数的返回值可以通过函数中的return语句获得。正确 8若有 #define S(a,b) a*b 则语句 area=S(3,2); area的值为6。正确 9指向某一变量的指针,就是该变量的内存地址.正确 10对于不同类型的数据,若想合成一个有机的整体,可以引用结构体进行定义。正确 三填空 1若有定义:int a=10,b=9,c=8;接着顺序执行下列语句后,变量c中的值是 _9____ . c=(a-=(b-5)); c=(a%11)+(b=3); 2当a=3,b=2,c=1;时,执行以下程序段后 b=_____. if(a>b) a=b; if(b>c) b=c; else c=b; c=a; 以下程序的输出结果为_10____, #include \"stdio.h\" void main() {int a;for(a=0;a<10;a++);printf(\"%d\ 4.若有fp=fopen(\"a1.dat\打开文件语句,这个文件的数据是以_____的形式存放在内存中,该文件的使用方式为读/_____。【参考答案】二进制【参考答案】写 【程序设计】题目:用函数求一个N阶方阵右下三角元素的和(包括副对角线上的元素)。 #include \"stdlib.h\"#include \"stdio.h\"#define N 3 int sum(int a[][N]) { /*********Begin**********/ 【参考代码】 int i,j,k=0; for(i=0;i { int a[N][N],i,j; void TestFunc(); for(i=0;i } printf(\"===================\\n\"); printf(\"sum=%5d\\n\ TestFunc(); }【程序改错】 功能:用指针作函数参数,编程序求一维数组中的最大和最小的元素值. #include \"stdio.h\"#define N 10 /***********ERROR***********/ void maxmin(int arr[ ],int *pt1, *pt2, n) { int i; /***********ERROR***********/ *pt1=*pt2=&arr[0]; for(i=1;i if(arr[i]<*pt1) *pt1=arr[i]; if(arr[i]<*pt2) *pt2=arr[i]; } } main( ) { int array[N]={10,7,19,29,4,0,7,35,-16,21},*p1,*p2,a,b; /***********ERROR***********/ *p1=&a;*p2=&b; maxmin(array,p1,p2,N); printf(\"max=%d,min=%d\} 【参考答案】void maxmin(int arr[ ],int *pt1,int *pt2,int n)【参考答案】*pt1=*pt2=arr[0]; 【参考答案】if(arr[i]>*pt1) *pt1=arr[i]; if(*(arr+i)>*pt1)) *pt1=arr[i]; if(*pt1<*(arr+i))) *pt1=arr[i]; if(*pt1 { /***********FILL***********/ _____; int i,j,k; int a[10]; for(i=0;i<10;i++) a[i]=rand()%61+30; //产生[30,90]区间上的随机整数 for(i=0;i<9;i++) {/***********FILL***********/ _____; for(j=i+1;j<10;j++) /***********FILL***********/ if(_____) k=j; if(k!=i) { t=a[k];a[k]=a[i]; a[i]=t;} } /***********FILL***********/ for(_____ ) printf(\"%5d\} 【参考答案】int t【参考答案】k=i 【参考答案】a[k]>a[j] a[j]i;i++ i=0;i<=9;i+=1 第五套 1假设所有变量均为整型,则表达式(a=2,b=5,b++,a+b)的值是(C)。 A、2 B、6 C、8 D、7 2已知i、j、k为int型变量,若从键盘输入:1,2,3<回车>,使i的值为1、j 的值为2、k的值为3,以下选项中正确的输入语句是(C)。 A、scanf(\"%d %d %d\、scanf(\"%2d%2d%2d\ C、scanf(\"%d,%d,%d\、scanf(\"i=%d,j=%d,k=%d\3 int a=3,b=2,c=1; if(a>b && b>c)a=b; else a=c;则a的值为(C)。 A、1 B、0 C、2 D、3 4 main() {int x=1,a=0,b=0; switch (x){ case 0: b++; case 1: a++;case 2: a++;b++; } printf(\"a=%d,b=%d\该程序的输出结果是(D ) A、a=1,b=1B、a=1,b=0C、a=2,b=2D、a=2,b=1 5 以下能计算1×2×3×┈×10的程序段是(C ). A、do{ i=1;s=1;s=s*i;i++;}while(i>=10) ;B、do{ i=1;s=1;s=s*i;i++;}while(i<=10) ; C、i=1;s=1;do {s=s*i; i++; }while(i<=10) ;D、i=1;s=1; do { s=s*i; i++;}while(i>=10) ; 6针对下列程序段回答问题(B ). for(t=1;t<=100;t++) {scanf(\"%d\ if(x<0) continue; printf(\"%3d\A、x>=0时什么也不输出B、最多允许输出100个非负整数 C、printf函数永远也不执行D、当x<0时整个循环结束 7 以下程序的运行结果是(B ). main( ){int i,x[3][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i<3;i++) printf(\"%d,\A、1,5,9 , B、3,5,7, C、3,6,9, D、1,4,7, 8 以下不正确的说法是:C语言规定(C)。 A、实参可以是常量,变量或表达式 B、实参可以为任何类型 C、形参可以是常量,变量或表达式 D、形参应与其对应的实参类型一致 9 在执行\"文件包含\"命令时,下列说法正确的是(A ). A、作为一个源程序编译,得到一个目标文件.B、一个 include 命令可指定多个被包含文件. C、在编译时作为两个文件联结. D、被包含的文件可以是源文件或目标文件. 10 已定义char str1,str2[10];选择正确的输入语句(C ). A、scanf(\"%c%s\、scanf(\"%c%s\C、scanf(\"%c%s\、scanf(\"%c%s\选择 1在C程序中,注释说明只能位于一条语句的后面错误 2.x*=y+8 等价于 x=x*(y+8)。正确 3.设o=1,p=2,q=3,则逻辑表达式!(o 4.在do-while循环中,当while表达式为\"假\"时,循环就停止了.正确 5 C语言中三种基本结构:顺序、选择、循环都只有一个入口. 正确 6 定义 int x[5],n;则x=x+n;或x++;都是不正确的. 正确 7在一个函数中定义的静态局部变量可以被另一个函数调用. 错误 8如果被包含文件中有全局静态变量,它们在用#include命令的源文件中有效. 正确 9指向某一变量的指针,就是该变量的内存地址. 正确 10 结构体变量的地址与其各成员具有相同的地址. 错误 填空 1.已知 i=5;写出语句 i+=012; 执行后整型变量 i 的十进制值是_15____. 2当a=1,b=2,c=3时,执行以下程序段后a=__3___. if (a>c) b=a; a=c; c=b; 3 若输入字符串:abcde<回车>,则以下while循环体将执行 __0___ 次. 4 while((ch=getchar())=='e') printf(\"*\"); 5 数组在内存中占一段连续的存储区,由_____代表它的首地址. 数组名 6 C语言中调用_____函数来关闭文件. fclose 【程序设计】功能:对任意输入的 x,用下式计算并输出 y 的值。 5 x<10 y= 0 x=10 -5 x>10 #include \"stdio.h\" int fun(int n) { /*********Begin**********/ int m; if(n<10) m=5; else if(n==10) m=0; else m=-5;return m; /********** End **********/ } void main () { int x,y; void TestFunc();printf(\"enter x:\"); scanf(\"%d\ printf(\"x=%d,y=%d\\n\} 【程序改错】计算正整数num的各位上的数字之积。例如:输入252,则输出应该是20。 #include \"stdio.h\" long fun (long num) {/**********ERROR**********/ long k; do { k*=num%10; /**********ERROR**********/ num\\=10; }while (num); return k; } main() {ong n; printf(\"\\nPlease enter a number:\"); /**********ERROR**********/ scanf(\"%ld\ /**********ERROR**********/ printf(\"\\n%ld\\n\ }【参考答案】long k=1;【参考答案】 num/=10; num=num/10; 【参考答案】 scanf(\"%ld\【参考答案】printf(\"\\n%ld\\n\【程序填空】功能:以下程序是用选择法对10个整数按升序排序。 #include \"stdio.h\" /***********FILL***********/ _____ void main() { int i,j,k,t,a[N]; for(i=0;i<=N-1;i++) scanf(\"%d\ { /***********FILL***********/ _____; /***********FILL***********/ for(j=i+1; _____;j++) if(a[j]/***********FILL***********/ if(_____) { t=a[i]; a[i]=a[k]; a[k]=t;} } printf(\"output the sorted array:\\n\"); for(i=0;i<=N-1;i++) printf(\"%5d\ 【参考答案】#define N 10【参考答案】k=i【参考答案】j 以下叙述中不正确的是(A)。 A、在C程序中,赋值运算符的优先级最低B、在C程序中,j++;是一条赋值语句 C、C程序中的#include和#define均不是C语句D、一个好的程序应该有详尽的注释 若变量已正确定义,执行语句scanf(\"%d,%d,%d \时,正确输入是(A )。 A、20,30,40B、2030,40C、20, 30 40D、20 30 40 int a=1,b=2,c=3; if(a>c)b=a;a=c;c=b;则c的值为(C)。 A、1 B、3 C、2 D、不一定 C语言的if语句中,用作判断的表达式为(A )。 A、任意表达式B、算术表达式C、逻辑表达式D、关系表达式 while(fabs(t)<1e-5) if(!(s/10))break; 循环结束的条件是(B )。 A、s/10==0 B、t>=1e-5 ||t<=-1e-5 && s>-10 && s<10 C、fabs(t)<1e-5 && !(s/10)D、fabs(t)<1e-5 若有语句char x[ ]=\"12345\则正确的描述是(D ). A、x数组和y数组的长度相同. B、x数组的长度小于y数组的长度. C、x数组等价于y数组. D、x数组的长度大于y数组的长度. 设函数的调用形式如下: f((x1, x2),(y1,y2,y3)),则函数有 (A )个形参. A、2 B、4 C、3 D、5 设有宏定义#define SUB(x,y) (x)*y,且a=3,b=4,则 SUB(a++,b++) 的值为(D ). A、13 B、16 C、20 D、12 下列选项中正确的语句组是(C)。 A、char *s; s={\"Beijing\、char s[8]; s={\"Beijing\C、char *s; s=\"Beijing\";D、char s[8]; s=\"Beijing\"; 判断 1一个C程序只能由一个主函数组成 错误 2 表达式 (j=3, j++) 的值是4. 错误 3 若float x=2.0,y=1.0; , 则条件表达式x>y?1:1.5的值为1.0. 正确 4 continue语句用于终止循环体的本次执行. 正确 5 在循环嵌套中,使用break语句只可以跳出所在循环. 正确 i!=k 6 引用数组元素时,下标可以是整型表达式或整型常量. 正确 7在主调函数中,必须要对被调用函数进行类型说明,否则在编译时会出现错误. 错误 8静态局部变量在整个程序运行期间都不释放. 正确 9下列的定义和赋值是正确的. int x=10,y=20,*p; p=&x; 正确 10共用体类型可以出现在结构体类型定义中,但结构体类型不能出现在共用体类型定义中.错误 四 1int x=2;z=++x+1; 则x的值为__3___. 2 当a=1,b=2,c=3时,执行以下程序段后c=___2__. if (a>c) b=a; a=c; c=b; 3若输入字符串:abcde<回车>,则以下while循环体将执行 _0____ 次. while((ch=getchar())=='e') printf(\"*\"); 4 C语言中,数组元素的下标下限为__0___. 5若有以下整型数组aa[10],其值为 9 4 12 8 2 10 7 5 1 3 该数组可用的最小下标值是___0__. 【程序设计】功能:计算并输出给定整数n的所有因子之和(不包括1与自身)。 注意:n的值不大于1000。例如:n的值为855时,应输出704。 #include \"stdio.h\" int fun(int n) {/********** End **********/ 【参考代码】 int s=0,i; for(i=2;i void main() {void TestFunc(); printf(\"s=%d\\n\ TestFunc();} void TestFunc() { FILE *IN,*OUT; int iIN,iOUT,i; IN=fopen(\"in.dat\ { printf(\"Please Verify The Currernt Dir..It May Be Changed\"); } OUT=fopen(\"out.dat\ { printf(\"Please Verify The Current Dir.. It May Be Changed\"); } for(i=0;i<5;i++) { fscanf(IN,\"%d\ fprintf(OUT,\"%d\\n\ fclose(IN); fclose(OUT); } 【程序改错】 功能:求如下表达式: 1 1 1 S = 1 + -- + ----- + ...... + ------------- 1+2 1+2+3 1+2+3+......+n #include \"stdio.h\" void main() { int n; float fun(); printf(\"Please input a number:\"); /**********ERROR**********/ print(\"%d\ printf(\"%10.6f\\n\} /**********ERROR**********/ fun(int n) { int i,j,t;float s; s=0; /**********ERROR**********/ while(i=1;i<=n;i++); { t=0; for(j=1;j<=i;j++) t=t+j; /**********ERROR**********/ =s+1/t; } return s;} 【参考答案】scanf(\"%d\【参考答案】float fun(int n) 【参考答案】for(i=1;i<=n;i++) for(i=1;n>=i;i++)【参考答案】s+=1.0/t; s=s+1.0/(float)t; s=s+1.0/t; 【程序填空】功能:百马百担问题:有100匹马,驮100担货,大马驮三担,中 马驮2担,两匹小马驮一担,求大、中、小马各多少匹? #include \"stdio.h\" main() { int hb,hm,hl,n=0; /***********FILL***********/ for(hb=0;hb<=100;hb+=_____) /***********FILL***********/ for(hm=0;hm<=100-hb;hm+=_____) { /***********FILL***********/ hl=100-hb-_____; /***********FILL***********/ if(hb/3+hm/2+2*_____==100) { n++; printf(\"hb=%d,hm=%d,hl=%d\\n\ } } printf(\"n=%d\\n\} 【参考答案】3【参考答案】2【参考答案】hm【参考答案】hl 第七套 1 在C语言中,要求运算对象必须是整型的运算符是(B)。 A、++ B、% C、!= D、/ 3 在C语言中,if语句后的一对圆括号中,用以决定分支的流程的表达式(C)。 A、只能用逻辑表达式或关系表达式B、只能用关系表达式 C、可用任意表达式D、只能用逻辑表达式 4 C语言的switch语句中case后(C )。 A、可为任何量或表达式B、可为常量或表达式或有确定值的变量及表达式 C、只能为常量或常量表达式D、只能为常量 5 t为int类型,进人下面的循环之前,t的值为0 while( t=1 ) { ……} 则以下叙述中正确的是( C)。 A、循环控制表达式的值为0 B、循环控制表达式不合法 C、循环控制表达式的值为1 D、以上说法都不对 6 下面有关 for 循环的正确描述是(C )。 A、for 循环是先执行循环体语句,后判断表达式 B、在 for 循环中,不能用 break 语句跳出循环体 C、for 循环的循环体语句中,可以包含多条语句,但必须用花括号括起来 D、for 循环只能用于循环次数已经确定的情况 7 char a[]=\"This is a program.\";输出前5个字符的语句是(B)。 A、puts(a); B、printf(\"%5s\、printf(\"%s\ D、a[5*2]=0;puts(a); 8 下列说法中错误的是(A )。 A、如果在对数组进行初始化时,给定的数据元素个数比数组元素个数少时,多余的数组元素会被自动初始化为最后一个给定元素的值B、一个数组只允许存储同种类型的变量 C、数组的名称其实是数组在内存中的首地址 D、当数组名作为参数被传递给某个函数时,原数组中的元素的值可能被修改 9 下列形式,不属于编译预处理命令的是(D ). A、#ifdef M B、#undef M C、#if (M>1) D、while (M>1) 10 设p1和p2是指向同一个int型一维数组的指针变量,k为int型变量,则不能正确执行的语句是(C ). A、p1=p2; B、k=*p1*(*p2); C、p2=k; D、k=*p1-*p2; 判断 1 一个C程序的执行是从本程序文件的第一个函数开始,到本程序文件的最后一个函数结束 错误 2 整型变量在可输出字符范围内,可以和字符型数据相互转化. 正确 3 设f=1,m=2,n=3,则逻辑表达式!(f==n)&&(f==m)&&0的值为0. 正确 4 do-while循环由do开始,while结束,循环体可能一次也不做。 错误 5 因为程序包含循环结构,所以程序算法可以包含无限的操作步骤. 错误 6 对静态数组的初始化是在编译阶段完成的. 正确 7 若一个函数中没有return语句,则意味着该函数没有返回值. 错误 8 若有宏定义:#define S(a,b) t=a;a=b;b=t由于变量t没定义,所以此宏定义是错误的。 【参考答案】错误 9用指针取值比用数组名取值速度要快.正确 10 在定义结构体变量时,不允许对其整体赋初值. 正确 填空 1 设x的值为15,n的值为2,则表达式x%=(n+=3)运算后x的值是0_____. 2 当a=1,b=2,c=3时,执行以下程序段后c=2_____. if (a>c) b=a; a=c; c=b; 3 设i,j,k均为int型变量,则执行完下面的for循环后,k的值为_10____. for(i=0,j=10;i<=j;i++,j--) k=i+j; 4若有以下数组a,数组元素:a[0]~a[9],其值为 9 4 12 8 2 10 7 5 1 3 数组元素a[3]的值是_8____. 5从函数的形式上看,函数分为无参函数和_____两种类型. 有参函数 【程序设计】功能:求x到y之间的奇数和(包括x和y)。 #include \"stdio.h\" int fun(int x,int y) { /*********Begin**********/ 【参考代码】 int i,s=0; for(i=x;i<=y;i++) if(i%2!=0) s=s+i; return s; /********** End **********/ } main() { int s; s=fun(1,1999); printf(\"s=%d\\n\ TestFunc(); }【程序改错】功能:实现3行3列矩阵的转置,即行列互换。 #include \"stdio.h\" void fun(int a[3][3],int n) { int i,j,t; for(i=0;i a[i][j]=a[j][i]; /**********ERROR**********/ t=a[j][i]; } for(i=0;i { int b[3][3];fun(b,3);} 【参考答案】scanf(\"%d\ scanf(\"%d\【参考答案】 for(j=0;jj;j++) 【参考答案】t=a[i][j]; 【参考答案】a[j][i]=t; 【程序填空】功能:产生10个[30,90]区间上的随机整数,然后对其用选择法 进行由小到大的排序。 #include \"stdio.h\"#include \"stdlib.h\" void main() { /***********FILL***********/ _____; int i,j,k; int a[10]; for(i=0;i<10;i++) a[i]=rand()%61+30; //产生[30,90]区间上的随机整数 for(i=0;i<9;i++) { /***********FILL***********/ _____; for(j=i+1;j<10;j++) /***********FILL***********/ if(_____) k=j; if(k!=i) { t=a[k];a[k]=a[i]; a[i]=t; } } /***********FILL***********/ for(_____ ) printf(\"%5d\ 【参考答案】int t【参考答案】k=i【参考答案】a[k]>a[j] a[j]i;i++ 第八套 若a为int类型,且其值为3,则执行完表达式a+=a-=a*a后,a的值是(B)。 A、6 B、-12 C、9 D、-3 求平方根函数的函数名为(C)。 A、abs B、pow C、sqrt D、cos int a=1,b=2,c=3; if(a>b)a=b; if(a>c)a=c; 则a的值为(C)。 A、3 B、2 C、1 D、不一定 执行下面程序段后,f的值是:( A) int f=5; switch(f) {case 5:f+=1; case 6:f--; case 7:f*=3;break; case 8:++f;} A、15 B、10 C、28 D、9 在以下给出的表达式中,与 do--while(E)语句中的(E)不等价的表达式是(B )。 A、(E>0||E<0) B、(E==0 ) C、(!E==0) D、(E!=0) 能够完成求出两个正整数a,b最小公倍数max的程序段.请在下划线处填写正确内容(D )。 if(a>=b) t=a; else t=b; for(i=t; ;i++) if(i%a==0&&i%b==0) ___________ printf(\"%d\ A、{max=i;continue;} B、max=i;break; C、max=i;continue; D、{max=i;break;} 以下能对一维数组a进行正确初始化的语句是(B)。 A、int a[10]={}; B、int a[]={0}; C、int a[10]={10*1}; D、int a[10]=(0,0,0,0,0) 以下只有在使用时才为该类型变量分配内存的存储类说明是(D)。 A、auto和 static B、register和 static C、extern和 register D、auto和 register file1.c中有命令,#include A、a在file1.c中应用extern说明.B、a在file1.c中有效,不必用extern说明. C、a在file1.c中不生效 D、a在file1.c和file2.c中均不生效. 在说明语句:int *f();中,标识符f代表的是(A)。 A、一个返回值为指针型的函数名B、一个用于指向函数的指针变量 C、一个用于指向一维数组的行指针D、一个用于指向整型数据的指针变量 判断 1 一个C程序只能由一个主函数组成 错误 2 语句scanf(\"%7.2f\是合法的。 错误 3 设u=1,v=2,w=3,则逻辑表达式u||v-w&&v+w的值为0. 错误 4 对于for(表达式1;表达式2;表达式3)语句来说,continue语句意味着转去执行表达式2.错误 5 在循环嵌套中,使用break语句可以跳出所有循环. 错误 6 定义一维数组的形式为:类型说明数组名[表达式],其中表达式可以是正整型常量表达式、字符常量表达式. 正确 7 数组名作为函数调用时的实参,实际上传递给形参的是数组第一个元素的值. 错误 8 计算机编译系统对宏定义在编译时进行语法检查. 错误 9 任何一个地址前缀*运算符后都等同于一个变量. 正确 10 typedef可以定义生成新的数据类型. 错误 填空 1在C语言中,字符的比较就是对它们的_____进行比较。ASCII 2 当a=1,b=2,c=3时,执行以下程序段后a=_3__. if (a>c) b=a; a=c; c=b; 3 以下程序的输出结果为_10____, #include \"stdio.h\" void main() {int a;for(a=0;a<10;a++);printf(\"%d\4 字符串比较的库函数是_____,只写函数名即可. strcmp 5 函数的_____调用是一个函数直接或间接地调用它自身. 递归 【程序设计】功能:实现两个整数的交换。 例如:给a和b分别输入:60和65,输出为:a=65 b=60 #include \"stdio.h\" #include \"conio.h\" void fun(int *a,int *b) { /*********Begin**********/ 【参考代码】 int t; t=*a;*a=*b;*b=t; /********** End **********/ } main() { int a,b; void TestFunc(); printf(\"Enter a,b:\"); scanf(\"%d%d\ fun(&a,&b); printf(\"a=%d b=%d\\n\ TestFunc(); } 【程序改错】用指针作函数参数,编程序求一维数组中的最大和最小的 元素值. #include \"stdio.h\" #define N 10 /***********ERROR***********/ void maxmin(int arr[ ],int *pt1, *pt2, n) { int i; /***********ERROR***********/ *pt1=*pt2=&arr[0]; for(i=1;i main( ) { int array[N]={10,7,19,29,4,0,7,35,-16,21},*p1,*p2,a,b; /***********ERROR***********/ *p1=&a;*p2=&b; maxmin(array,p1,p2,N); printf(\"max=%d,min=%d\} 【参考答案】void maxmin(int arr[ ],int *pt1,int *pt2,int n)【参考答案】*pt1=*pt2=arr[0]; 【参考答案】if(arr[i]>*pt1) *pt1=arr[i];【参考答案】p1=&a;p2=&b; 【程序填空】 ***** ***** ***** ***** ***** #include \"stdio.h\" void main ( ) { char a[5][9]={\" \ int i,j; for (i=0;i<5;i++) /***********FILL***********/ for(j=i; _____;j++) a[i][j]='*'; /***********FILL***********/ for(_____;i<5;i++) { for(j=0;j<9;j++) /***********FILL***********/ printf(\"%c\ /***********FILL***********/ _____; } } 【参考答案】jj【参考答案】i=0【参考答案】a[i][j]【参考答案】printf(\"\\n\") 第九套 已知大写字母A的ASCII码值是65,小写字母a的ASCII码是97,则用八进制表示的字符常量'\\101'是(A)。 A、字符A B、字符a C、字符e D、非法的常量 下面程序的 正确输出结果是(A ).(规定用U表示空格) main() { float x=5.783,y= -10.2345; printf (\"x=%-8.2f ,y=%-8.2f \\n\A、x=5.78UUUU,y=-10.23UUB、x=5.78,y=-10.23 C、5.78,-10.23D、x=UUUU5.78,y=UU-10.23 执行下面程序段后,i的值是(A ). int i=10;switch(i){case 9: i+=1;case 10: i--; case 11: i*=3; case 12: ++i;} A、28 B、10 C、9 D、27 请写出下面程序的运行结果( D)。 #include \"stdio.h\" void main() { int k=0;char c='A'; do { switch(c++){ case 'A':k++;break; case 'B':k--;default:k=k/3; } k++; } while(c<'C');} A、k=0 B、k=2 C、k=4 D、k=1 以下程序的执行结果是(B )。 void main() { int x = 0, s = 0; while( !x != 0 ) s += ++x; printf( \"%d \A、语法错误 B、1 C、0 D、.无限循环 若有说明:int a[][3]={1,2,3,4,5,6,7};则a数组第一维的大小是(A)。 A、3 B、无确定值 C、4 D、2 用户定义的函数不可以调用的函数是(D)。 A、本文件外的 B、本函数下面定义的 C、非整型返回值的 D、main函数 以下叙述正确的是(C)。 A、可以把if定义为用户标识符,但不能把define定义为用户标识符 B、define和if都不能定义为用户标识符 C、可以把define定义为用户标识符,但不能把if定义为用户标识符 D、可以把define和if定义为用户标识符 下面选择中正确的赋值语句是(设char a[5],*p=a;)(A)。 A、p=\"abcd\";B、a=\"abcd\";C、*a=\"abcd\";D、*p=\"abcd\"; 判断 1 一个C程序的执行是从本程序的main函数开始,到本程序文件的最后一个函数结束 错误 2 若a和b类型相同,在计算了赋值表达式a=b后,b中的值将放入a中,而b中的值不变 正确 3 已知a=3,b=4,c=5,则逻辑表达式!(a+b)+c-1 && b+c/2的值为0. 错误 4 在do-while循环中,任何情况下都不能省略while. 正确 5 do-while循环中,根据情况可以省略while. 错误 6 设有数组定义: char array [ ]=\"hello\"; 则数组 array所占的内存空间为5字节. 错误 7 数组名作为函数调用时的实参,实际上传递给形参的是数组全部元素的值. 错误 8 如果字符串与宏名相同,则不管其是否在双括号内,都要进行宏替换. 错误 9 定义 int d[ ]={1,2,3,4},x,*m=d;,则执行x=*m++后,x的值是2. 错误 10 共用体变量所占的内存长度是各成员占的内存长度之和. 错误 填空 1设x和y均为int型变量,且x=1,y=2,则表达式1.0+x/y的值为_1____. 2当a=3,b=2,c=1;时,执行以下程序段后 c=__2___. if(a>b) a=b; if(b>c) b=c; else c=b; c=a; 3以下程序段要求从键盘输入字符,当输入字母为'Y' 时,执行循环体,则下划线处应填写_____. ch=getchar(); while(ch ____ 'Y' ch=getchar(); 【参考答案】== 4 执行语句char str[81]=\"abcdef\";后,字符串str结束标志存储在数组元素str[__6___] 中. 5设有以下共用体类型说明和变量定义,则变量a在内存所占字节数是 _16__。 union stud { char num[6]; float s[4]; double ave; } a,*p; 【程序设计】编写函数fun求一个字符串的长度,在main函数 输入字符串,并输出其长度。 #include \"stdio.h\" int fun(char p[]) {/*********Begin**********/ 【参考代码】 int n=0; while(p[n]!=’\\0’) n++; return n; /********** End **********/ } void main() { char a[20]; void TestFunc(); int len; printf(\"please input a string:\\n\"); gets(a); len=fun(a); printf(\"The string's length is:%d\\n\ TestFunc(); } 【程序改错】在一个已按升序排列的数组中插入一个数,插入后,数 组元素仍按升序排列。 #include \"stdio.h\"#define N 11 void main() { int i,j,t,number,a[N]={1,2,4,6,8,9,12,15,149,156}; printf(\"please enter an integer to insert in the array:\\n\"); /**********ERROR**********/ scanf(\"%d\