2012c语言全校模拟一、单项选择C1.sizeof(float)是()。A、一个浮点表达式B、一个不合法的表达式C、运算结果是一个整型表达式。D、一种函数调用B2.下列数据中属于字符串常量的是()。A、'A'B、ABCC、ABCD、'ABC'B3.用下面的scanf函数输入数据,使得i=10,k=15选择正确的键盘输入方法().(用[CR]表示回车,U表示空格)main(){inti,k;scanf(i=%d,k=%d,&i,&k);}A4.逻辑表达式32||-1&&43-!0的值为:()A、1B、3C、0D、2C5.下列运算符中是C语言关系运算符的是()。A、&B、~C、!=D、!D6.语句while(!E);中的表达式!E等价于()。A、E==1B、E!=0C、E!=1D、E==0A7.以下正确的描述是().A、只能在循环体内和switch语句内使用break语句B、continue语句的作用是终止整个循环的执行C、从多层嵌套的外层循环中退出时,只能使用goto语句D、在循环体内使用break和continue语句的作用相同B8.下面各语句中,能正确进行赋字符串操作的语句是().A、chars1[5][]={ABCDE};B、chars2[6]={'A','B','C','D','E'};C、charst[][]={ABCDE};D、chars[5]={'A','B','C','D','E'};A9.若有说明:inta[3][4]={0};则下面正确的叙述是()。A、数组a中每个元素均可得到初值0B、只有元素a[0][0]可得到初值0C、数组a中各元素都可得到初值,但其值不一定为0D、此说明语句不正确B10.若有说明inta[3][4];则a数组元素的非法引用是()。A、a[1][3]B、a[0][4]C、a[0][2*1]D、a[4-2][0]D11.执行下面程序后,输出结果是()。main(){inta,b,c;a=45,b=27,c=0;c=max(a,b);printf(%d\n,c);}intmax(intx,inty){intz;if(xy)z=x;elsez=y;return(z);}A、72B、18C、27D、45B12.以下正确的描述是:在C语言程序中()。A、函数的定义可以嵌套,但函数的调用不可以嵌套B、函数的定义不可以嵌套,但函数的调用可以嵌套C、函数的定义和函数的调用均可以嵌套D、函数的定义和函数的调用均不可以嵌套B13.在C语言的函数中,下列正确的说法是()。A、形参可以是常量和变量B、可以有也可以没有形参C、数组名不能作形参D、必须有形参B14.设有宏定义#definePI3.14和#defineS(r)PI*r*r,则S(2)的值为().A、6.28B、12.56C、3.14D、9.42D15.inta[10]={1,2,3,4,5,6,7,8};int*p;p=&a[5];p[-3]的值是()。A、4B、2C、不一定D、3C16.若有以下程序段,则使用错误的选项是().structstudent{intnum;intage;};structstudentstu[3]={{1001,20},{1002,19},{1004,20}};main();{structstudent*p;p=stu;…;}A、(*p).numB、(p++)-numC、p=&stu.ageD、p++A17.若以a+方式打开一个已存在的文件,则以下叙述正确的是()。A、文件打开时,原有文件内容不被删除,位置指针移到文件末尾,可作添加和读操作B、以上各种说法皆不正确C、文件打开时,原有文件内容不被删除,位置指针移到文件开头,可作重写和读操作D、文件打开时,原有文件内容被删除,只可作写操作二、判断T1.#define和printf都不是C语句。T2.格式字符%x用来以十六进制形式输出整数.F3.语句if(ab)printf(%d,a);elseprintf(%d,b);可以用条件表达式ab?a:b取代.F4.逻辑表达式-5&&!8的值为1.F5.循环结构中的continue语句是使整个循环终止执行F6.for循环语句不能用于循环次数未知的情况下.F7.引用数组元素时,数组元素下标必须是整型常量.T8.数组的首地址一定是第一个数组元素的地址.T9.数组整体不参加数据处理(即不参加各种运算),参加数据处理的只能是数组的元素.F10.数组名作为函数调用时的实参,实际上传递给形参的是数组全部元素的值.F11.在主函数中,必须要对被调用函数进行类型说明,否则在编译时会出现错误.T12.在一个函数中定义的静态局部变量不能被另外一个函数所调用.F13.计算机编译系统对宏定义在编译时进行语法检查.T14.计算机编译系统对宏定义在编译时进行语法检查.T15.对于不同类型的数据,若想合成一个有机的整体,可以引用结构体进行定义。T16.在打开文件时,必须说明文件的使用方式,r表示以只读方式打开一个文件.三、填空1.intx=2;z=x++-1;则x的值为_____.32.设x=2.5,a=7,y=4.7,算术表达式x+a%3*(int)(x+y)%2/4的值为_____.2.53.设x=62,表达式x=60&&x70||x==1的值为_____.14.c语言表达式5278的值是_____.05.字符串比较的库函数是_____,只写函数名即可.Strcmp6.从函数的形式上看,函数分为无参函数和_____两种类型.有参函数7.设有以下共用体类型说明和变量定义,则变量a在内存所占字节数是_____。unionstud{charnum[6];floats[4];doubleave;}a,*p;168.在C语言中,根据要处理的文件存储的编码形式,可以把文件分为ASCII文件和_____文件.二进制四、程序设计1./*------------------------------------------------【程序设计】--------------------------------------------------功能:用函数求N个[10,60]上的整数中能被5整除的最大的数,如存在则返回这个最大值,如果不存在则返回0。------------------------------------------------*/#includestdio.h#includestdlib.h#defineN30intfind(intarr[],intn){intm=0;/*********Begin**********//**********End**********/return(m);}main(){inta[N],i,k;voidTestFunc();for(i=0;iN;i++)a[i]=rand()%50+10;for(i=0;iN;i++){printf(%5d,a[i]);if((i+1)%5==0)printf(\n);}k=find(a,N);if(k==0)printf(NOFOUND\n);elseprintf(themaxis:%d\n,k);TestFunc();}voidTestFunc(){FILE*IN,*OUT;intn;inti[5];into;IN=fopen(in.dat,r);if(IN==NULL){printf(ReadFileError);}OUT=fopen(out.dat,w);if(OUT==NULL){printf(WriteFileError);}for(n=0;n5;n++){fscanf(IN,%d,&i[n]);}o=find(i,5);fprintf(OUT,%d\n,o);fclose(IN);fclose(OUT);}【参考代码】inti;for(i=0;in;i++)if(arr[i]%5==0&&arr[i]m)m=arr[i];2./*------------------------------------------------【程序设计】--------------------------------------------------功能:根据整型参数n,计算如图公式的值。------------------------------------------------*/#includestdio.h#includeconio.hdoublefun(intn){/*********Begin**********//**********End**********/}main(){intm;voidTestFunc();printf(Enterm:);scanf(%d,&m);printf(\nTheresultis%f\n,fun(m));TestFunc();}voidTestFunc(){FILE*IN,*OUT;ints;intt;doubleo;IN=fopen(in.dat,r);if(IN==NULL){printf(ReadFileError);}OUT=fopen(out.dat,w);if(OUT==NULL){printf(WriteFileError);}for(s=1;s=5;s++){fscanf(IN,%d,&t);o=fun(t);fprintf(OUT,%f\n,o);}fclose(IN);fclose(OUT);}【参考代码】doublea=1;inti;for(i=1;in;i++)a=1.0/(1+a);returna;五、程序改错1./*------------------------------------------------------【程序改错】--------------------------------------------------------功能:实现3行3列矩阵的转置,即行列互换。------------------------------------------------------*/#includestdio.hvoidfun(inta[3][3],intn){inti,j,t;for(i=0;in;i++)for(j=0;jn;j++)/**********ERROR**********/scanf(%d,a[i][j]);for(i=0;in;i++){for(j=0;jn;j++)printf(%4d,a[i][j]);printf(\n);}for(i=0;in;i++)/**********ERROR**********/for(j=0;jn;j++){/**********ERROR**********/a[i][j]=t;a[i][j]=a[j][i];/**********ERROR**********/t=a[j][i];}for(i=0;in;i++){for(j=0;jn;j++)printf(%4d,a[i][j]);printf(\n);}}main(){intb[3][3];fun(b,3);}【参考答案】scanf(%d,&a[i][j]);scanf(%d,(*(a+i)+j));============================================================【改错2】错误【学生答案】for(j=0;jn;j++)【参考答案】for(j=0;ji;j++)for(j=0;ij;j++)for(j=0;j=i;j++)for(j=0;i=j;j++)for(j=i+1;jn;j++)for(j=i;jn;j++)for(j=0;j=i-1;j++)for(j=0;i-1=j;j++)for(j=i+1;j=n-1;j++)for(j=i;j=n-i;j++)==============================================