201507南京师范大学计算机考试(C语言)(试卷1)【程序设计理论】1.[题号:1](单选题)分值:2下列四个选项中,属于C语言关键字的是__________。A.FloatB.singleC.doubleD.real【答案:C】2.[题号:2](单选题)分值:2某程序需要使用一个代表常数3.14的符号常量名P,以下定义中正确的是__________。A.#defineP3.14;B.#defineP(3.14)C.#defineP=3.14;D.#defineP3.14【答案:D】3.[题号:3](单选题)分值:2以下关于if语句和switch语句的叙述中错误的是__________。A.if语句和switch语句都可以实现算法的选择结构B.if语句和switch语句都能实现多路(两路以上)选择C.if语句可以嵌套使用D.switch语句不能嵌套使用【答案:D】4.[题号:4](单选题)分值:2以下叙述中错误的是__________。A.在函数外可以声明变量B.变量声明的位置决定了该变量名的使用范围C.函数调用时在函数内声明的变量所得到的值将无法保存到该函数的下一次调用D.在函数外声明的变量,其值可以保存到该程序运行结束【答案:C】5.[题号:61](单选题)分值:2有如下程序段:charp1[80]=NanJing,p2[20]=Young,*p32=Olympic”;strcpy(p1,strcat(p2,p3));printf(“%s\n”,p1);执行该程序段后的输出是__________A.NanJingYoungOlympicB.YoungOlympicC.OlympicD.NanJing【答案:B】6.[题号:62](单选题)分值:2已有声明”intx,a=3,b=2;”,则执行赋值语句”x=ab++?a++:b++;”后,变量x、a、b的值分别为__________。A.343B.334C.333D.434【答案:A】7.[题号:63](单选题)分值:2已有预处理命令#includemath.h和声明inta=4,b;.以下语句中语法正确的是__________。A.if(a%2=1)b=a;B.if(sqrt(a)%2)b=a;C.if(a==1)b=a;D.if(a==1)b=*a;【答案:C】8.[题号:64](单选题)分值:2已有如下定义和声明:structdata{inta;charb;floatc;}s={1,2,3};charm;以下语句中正确的是__________。A.s=5;B.s={4,5,6};C.s.a=5;D.m=s;【答案:C】9.[题号:65](单选题)分值:2已有声明int*p;,若用语句p=(int*)malloc(20*sizeof(int));动态申请一个int型数组存储区,则p所指向的数组中可存储__________个int型数据。A.10B.20C.40D.80【答案:B】10.[题号:66](单选题)分值:2已有声明intx=0,*p;,则以下赋值表达式中正确的是__________。A.p=x;B.*p=*x;C.&p=&x;D.p=&x;【答案:D】11.[题号:67](单选题)分值:2&&、+、=、[]是C语言中的四个运算符,其中优先级最高的是__________。A.[]B.&&C.+D.=【答案:A】12.[题号:68](单选题)分值:2假定指针变量p指向对象的值为16,p+1指向对象的值为35,则*p++的值为__________。A.15B.16C.17D.18【答案:B】13.[题号:69](单选题)分值:2在系统头文件中定义的符号常量NULL代表的数值(整数)是__________。A.-1B.1C.0D.0.0【答案:C】14.[题号:70](单选题)分值:2以下程序运行时输出到屏幕的结果是__________。#includestdio.hvoidmain(){inta=011;printf(%d,a);}A.6B.7C.8D.9【答案:D】15.[题号:71](单选题)分值:2用系统库函数fprintf写到磁盘文件中的数据通常应当用系统库函数__________读出。A.fscanfB.sscanfC.fgetsD.fread【答案:A】16.[题号:72](填空题1空)分值:2下程序运行时,输出到屏幕的结果是__________。#includestdio.hintmain(){inta=6,b=15,t=a;while(t%b!=0)t+=a;printf(%d,t);return0;}【答案:】[第1空答案1]:(分值:2)3017.[题号:73](填空题1空)分值:2以下程序运行时,输出到屏幕的结果是__________。#includestdio.hvoidfun(char*a,char*b){while(*a=='*')a++;while((*b=*a)!='\0'){b++;a++;}}intmain(){char*s=*******a*b**,t[80];fun(s,t);puts(t);return0;}【答案:】[第1空答案1]:(分值:2)a*b**18.[题号:74](填空题1空)分值:2以下程序运行时,输出到屏幕的结果是__________。#includestdio.h#includestring.hvoidf(chars[],chart[]){inti,m=strlen(t),k;for(i=0;s[i]!='\0';i++)if(s[i]='a'&&s[i]='z'){k=t[i%m]-'0';s[i]=(s[i]-'a'+k)%26+'a';}}intmain(){chars1[10]=abc2013;f(s1,123);puts(s1);return0;}【答案:】[第1空答案1]:(分值:2)bdf201319.[题号:75](填空题2空)分值:4以下程序运行时,输出到屏幕的结果中第一行是__________,第二行是__________。#includestdio.hvoidfun(int*t){staticinti=0;dot[i]+=t[i+1];while(++i3);}intmain(){inti,a[10]={1,2,3,4,5};for(i=1;i3;i++)fun(a);for(i=0;i4;i++)printf(%d,a[i]);printf(\n%d\n,a[i]);return0;}【答案:】[第1空答案1]:(分值:2)3579[第2空答案1]:(分值:2)520.[题号:76](填空题3空)分值:6以下程序运行时,输出到屏幕的结果中第一行__________是,第二行是__________,第三行是__________。#includestdio.h#defineN3intmain(){inta[N][N],b[N*N]={1,1},i,j;for(i=2;iN*N;i++)b[i]=b[i-1]+b[i-2];for(i=0;iN;i++)for(j=0;jN;j++)a[i][j]=b[i*N+j];for(i=0;iN;i++){for(j=0;jN;j++)printf(%5d,a[i][j]);printf(\n);}return0;}【答案:】[第1空答案1]:(分值:2)112[第2空答案1]:(分值:2)358[第3空答案1]:(分值:2)13213421.[题号:77](填空题2空)分值:4以下程序运行时,输出到屏幕的结果中第一行是__________,第二行是__________。#includestdio.hvoidfun(inta[],intn){inti,j,t;for(i=0;in-1;i++)for(j=i+1;jn;j++)if(a[i]a[j]){t=a[i];a[i]=a[j];a[j]=t;}}intmain(){intaa[6]={1,2,3,4,5,6},i;fun(aa+2,3);for(i=0;i6;i++){printf(%d,aa[i]);if((i+1)%3==0)printf(\n);}return0;}【答案:】[第1空答案1]:(分值:2)125[第2空答案1]:(分值:2)436【操作题】22.[题号:9](完善程序)分值:12【要求】1.打开T盘中的文件myf0.c,按以下程序功能完善文件中的程序。2.修改后的源程序仍保存在T盘myf0.c文件中。【程序功能】以下程序的功能是反转一个字符串中单词的顺序。例如,将字符串thereisnotry中单词顺序反转后变为trynoisthere,假定以空格作为单词分隔符。【测试数据与运行结果】测试数据:thereisnotry屏幕输出:trynoisthere【待完善的源程序】#includestdio.h#includestdlib.h#includestring.hvoidreverseWords(charstr1[],charstr2[]){inttokenPos,wReadPos,wEnd,writePos;writePos=0;/*tokenPos记录向前扫描(从串尾到串首扫描)strl字符串时当前被判断字符的下标*/tokenPos=__________;while(tokenPos=0){if(strl[tokenPos]==''){str2[writePos++]=str1[tokenPos--];/*复制单词之间的空格*/}else{wEnd=tokenPos;/*wEnd记录strl字符串中被处理单词的尾字符下标*/While(tokenPos=0&&str1[tokenPos]!='')/*向前扫描到空格为止+,tokenPos--;/*wReadPos记录str1字符串中被处理单词的首字符下标*/wReadPos=__________;while(wReadPos=wEnd)str2[writePos++]=str1[wReadPos++];}}tr2[writePos]=__________;/*在str2数组中置字符串的终止符*/}intmain(){char*sentence=thereisnotry,*reverse;reverse=(char*)malloc(strlen(__________)+1);printf(%s\n,sentence);reverseWords(sentence,reverse);printf(%s\n,reverse);free(reverse);return0;}【答案:】strlen(str1)-1tokenPos+1'\0'sentence23.[题号:10](改错题)分值:16【要求】打开T盘中的文件myf1.c,按以下程序功能改正文件中程序的错误。可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或者编译预处理命令,但不能增加其他语句,也不能删去整条语句。修改后的源程序仍保存在T盘myf1.c中。【程序功能】一个字符串与它的反序串相同,这样的串称为回文。例如“12321”,”1”等就是回文。判断一个字符串是否是回文,同时从左往右和从右往左逐个判断所有字符是否相同,如果都相同则为回文。【测试数据与运行结果】测试数据:12321屏幕输出:回文测试数据:1234屏幕输出:不是回文【含有错误的源程序】#includestdio.hvoidmain(){charstr[20];inti=0,len=0;intp=0,q=0;scanf(%s,str);while(str)i++;len=i;p=0;q=len;while(p=q){if(str[p]!=str[q])break;p--;q++;}if(pq)printf(回文);elseprintf(不是回文);}【答