版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机等级考试二级C语言上机题库(含答案)(精品)一、选择题高频考点题库(共15道,覆盖90%以上二级C语言上机选择题考点)1.题干:以下符合C语言语法的实型常量是()选项:A)1.2E0.5B)3.14159EC).5E-3D)E15答案:C解析:实型常量的指数表示法要求E(或e)之前必须有数字,之后必须为整数。A选项E后为小数、B选项E后无数字、D选项E前无数字,均不符合语法规则;C选项合法,等价于0.5×10^-3。2.题干:设有定义chars[]="hello\0world";则strlen(s)的值是()选项:A)5B)11C)12D)0答案:A解析:strlen函数的功能是统计字符串中第一个'\0'之前的字符个数,不包含'\0'本身,本题中字符串前5个字符为'hello',之后遇到'\0'停止统计,因此结果为5。若用sizeof(s)计算则结果为12,因为sizeof统计整个数组的总字节数,包含所有字符和结束符。答案:A选项:A)else与最近的if匹配B)else与缩进对齐的if匹配C)else与之前最近的未配对的if匹配D)else与第一个if匹配答案:C解析:C语言中if-else的匹配规则为:else总是与它之前最近的、未和其他else配对的if匹配,和代码缩进无关,编写多层分支代码时建议用大括号明确代码块范围,避免匹配错误。5.题干:有定义inta[10],*p=a;以下表达式不能表示a[2]的是()选项:A)*(p+2)B)*(a+2)C)p[2]D)*p+2答案:D解析:数组名a是指向数组首元素的指针常量,p是指向首元素的指针变量,p+2、a+2都表示下标为2的元素的地址,解引用后即为a[2],p[2]是数组下标的写法等价于*(p+2);D选项*p是a[0]的值,*p+2是a[0]加2的结果,不等价于a[2]。6.题干:以下关于函数参数传递的说法正确的是()选项:A)值传递时形参的修改会影响实参B)地址传递时形参的修改一定会影响实参C)值传递时实参和形参占用不同的存储单元D)数组作为参数传递时是值传递答案:C解析:值传递时实参将值拷贝给形参,二者占用独立存储单元,形参修改不影响实参;地址传递时形参接收的是实参的地址,通过解引用修改地址对应存储单元的值时才会影响实参,如果仅修改形参本身的指针值不会影响实参;数组作为参数传递时会退化为指针,属于地址传递。7.题干:有递归函数如下:intf(intn){if(n==1)return1;elsereturnn+f(n-1);},则f(5)的返回值是()选项:A)5B)10C)15D)20答案:C解析:该递归函数的功能是计算1到n的累加和,f(5)=5+f(4)=5+4+f(3)=5+4+3+f(2)=5+4+3+2+f(1)=5+4+3+2+1=15。8.题干:以下字符串处理函数使用正确的是()选项:A)strcmp("abc","def")返回值小于0B)strcpy("abc",s)将s的内容拷贝到字符串常量"abc"中C)strlen("abc")返回值为4D)strcat("abc","def")将两个字符串拼接后存储到"abc"中答案:A解析:strcmp函数比较两个字符串的ASCII码值,"abc"小于"def",返回值小于0;B、D选项中字符串常量存储在只读内存区,不能被修改;strlen("abc")返回值为3,不包含结束符。9.题干:有结构体定义typedefstruct{intnum;charname[20];}Student;以下定义正确的是()选项:A)Students={1,"张三"};B)structs={1,"张三"};C)Student.s.num=1;D)structStudents={1,"张三"};答案:A解析:typedef将struct结构体类型重命名为Student,之后可以直接用Student定义变量,无需加struct关键字;B选项没有指定类型名,C选项s是变量名需要先定义再访问成员,D选项多了struct关键字。10.题干:若要以只读方式打开一个文本文件file.txt,以下fopen函数调用正确的是()选项:A)fopen("file.txt","r")B)fopen("file.txt","w")C)fopen("file.txt","a")D)fopen("file.txt","rb")答案:A解析:"r"模式为只读打开文本文件,"w"为只写创建文本文件,"a"为追加模式,"rb"为只读打开二进制文件。11.题干:有定义inta=3,b=5;则a&b的结果是()选项:A)1B)3C)5D)7答案:A解析:按位与运算规则是对应位都为1时结果为1,3的二进制是011,5的二进制是101,按位与后结果为001,即十进制1。12.题干:有宏定义#defineN2+3,则表达式N*2的结果是()选项:A)10B)8C)5D)7答案:B解析:宏替换是直接文本替换,N*2替换后为2+3*2,先算乘法3*2=6,再加2结果为8,若要得到10需要将宏定义改为#defineN(2+3)。13.题干:以下关于动态内存分配的说法正确的是()选项:A)malloc函数返回的是void*类型指针,需要强制转换为对应类型B)malloc函数分配的内存会自动初始化为0C)free函数可以释放任意指针指向的内存D)动态分配的内存不需要手动释放,程序结束后会自动回收,不会产生内存泄漏答案:A解析:malloc返回void*指针,使用时需要强制转换为目标类型;malloc分配的内存是未初始化的,内容为随机值;free只能释放malloc、calloc、realloc动态分配的内存,不能释放栈内存或已经释放过的内存;动态分配的内存如果不手动free,程序运行期间会一直占用,产生内存泄漏。14.题干:以下循环语句的执行次数是()for(inti=0;i<5;i++){if(i==3)break;printf("%d",i);}选项:A)3B)4C)5D)6答案:B解析:循环依次执行i=0、1、2、3,当i=3时执行break跳出循环,共执行4次。15.题干:有定义inta[3][4];则a[1]+2表示()选项:A)第1行第2列元素的地址B)第1行第2列元素的值C)第2行第3列元素的地址D)第2行第3列元素的值答案:A解析:二维数组a[1]是第1行的行指针,指向第1行首元素,a[1]+2是第1行下标为2的元素的地址,对应元素为a[1][2]。二、程序填空题题库(共3道,每道18分,覆盖核心操作题考点)第1题题目要求:函数fun的功能是计算N×N矩阵的主对角线元素和反向对角线元素之和,作为函数值返回,要求先累加主对角线元素,再累加反向对角线元素。给定程序代码:intfun(intt[][N]){inti,sum;/*found*/___1___;for(i=0;i<N;i++)/*found*/sum+=___2___;for(i=0;i<N;i++)/*found*/sum+=t[i][N-1-___3___];returnsum;}main(){intt[][N]={21,2,13,24,25,16,47,38,29,11,32,54,42,21,3,10};inti,j;printf("Theoriginaldata:\n");for(i=0;i<N;i++){for(j=0;j<N;j++)printf("%4d",t[i][j]);printf("\n");}printf("Theresultis:%d\n",fun(t));}答案:1.sum=02.t[i][i]3.i解析:空1需要初始化累加变量sum为0,否则sum为随机值会导致计算结果错误;空2主对角线元素的行下标和列下标相等,因此取t[i][i]累加;空3反向对角线元素的列下标为N-1减去当前行下标i,因此填i。本题N为4,没有重复的中心元素,最终计算结果正确。第2题题目要求:函数fun的功能是统计字符串s中大写字母的个数,并将所有大写字母转换为小写字母,其余字符保持不变。给定程序代码:intfun(char*s){intcount=0;while(*s!='\0'){if(*s>='A'&&*s<='Z'){count++;/*found*/*s=*s+___1___;}/*found*/___2___;}/*found*/___3___;}main(){charstr[80];intnum;gets(str);num=fun(str);printf("大写字母个数:%d,转换后字符串:%s\n",num,str);}答案:1.322.s++3.returncount解析:空1大写字母的ASCII码比对应小写字母小32,因此加32即可转换为小写;空2需要将指针s向后移动一位,遍历下一个字符;空3函数要求返回大写字母的个数,因此返回count变量。第3题题目要求:函数fun的功能是遍历带头结点的单向链表,统计所有节点数据域的和并返回。给定程序代码:typedefstructNode{intdata;structNode*next;}Node;intfun(Node*head){Node*p=head->next;intsum=0;while(p!=NULL){/*found*/sum+=___1___;/*found*/p=___2___;}/*found*/return___3___;}//主函数生成链表代码省略,考试时会自动提供答案:1.p->data2.p->next3.sum解析:空1累加当前节点p的数据域值;空2将指针p移动到下一个节点;空3返回累加和sum。三、程序改错题题库(共3道,每道18分,覆盖常见错误类型)第1题题目要求:函数fun的功能是计算正整数num各位上的数字之积,例如输入252返回20,输入102返回0。给定程序代码(错误行用found标注):longfun(longnum){/*found*/longk;do{k*=num%10;/*found*/num\=10;}while(num);returnk;}main(){longn;printf("Pleaseenteranumber:");scanf("%ld",&n);printf("\n%ld\n",fun(n));}答案:第一处错误:longk;改为longk=1;第二处错误:num\=10;改为num/=10;解析:第一处错误为变量未初始化,k作为乘积的累加变量初始值必须为1,否则初始为随机值会导致结果错误;第二处为运算符书写错误,C语言中整除运算符为/,\是转义字符的开头,无法实现整除功能。第2题题目要求:函数fun的功能是将字符串s逆序存放,例如输入"abcd",输出"dcba"。给定程序代码:voidfun(char*s){inti,j;charch;/*found*/for(i=0,j=strlen(s);i<j;i++,j--){ch=s[i];s[i]=s[j-1];s[j-1]=ch;}/*found*/s[j]='\0';}main(){charstr[80];gets(str);fun(str);puts(str);}答案:第一处错误:for(i=0,j=strlen(s);i<j;i++,j--)改为for(i=0,j=strlen(s)-1;i<j;i++,j--)第二处错误:s[j]='\0';改为直接删除该行,或者注释掉解析:第一处错误为循环边界错误,strlen(s)返回字符串长度,最大下标为长度减1,因此j初始值应该为strlen(s)-1,否则会交换到结束符'\0',导致字符串开头出现空白字符;第二处错误多余,逆序过程没有修改结束符的位置,不需要手动赋值'\0',反而会因为循环结束后j值小于i,导致修改数组前半部分的内容,出现乱码。第3题题目要求:函数fun的功能是计算N名学生的平均成绩,将低于平均分的学生姓名和成绩输出。给定程序代码:typedefstruct{charname[20];floatscore;}Student;voidfun(Students[]){floatsum=0,avg;inti;for(i=0;i<N;i++){/*found*/sum+=s.score;}avg=sum/N;printf("平均分:%.2f\n",avg);printf("低于平均分的学生:\n");for(i=0;i<N;i++){/*found*/if(s[i].score>avg)printf("%s%.2f\n",s[i].name,s[i].score);}}main(){Students[N]={{"张三",85},{"李四",59},{"王五",72}};fun(s);}答案:第一处错误:sum+=s.score;改为sum+=s[i].score;第二处错误:if(s[i].score>avg)改为if(s[i].score<avg)解析:第一处为结构体数组成员访问错误,s是数组名,需要用下标i指定具体的学生元素再访问score成员;第二处为逻辑错误,题目要求输出低于平均分的学生,判断条件应该为小于avg。四、程序设计题题库(共3道,每道24分,覆盖高频编程考点)第1题题目要求:编写函数fun,其功能是找出1到m之间(含m)能被7或11整除的所有整数,放在数组a中,通过n返回这些数的个数。例如m=50时,输出结果为711142122283335424449。给定程序框架:voidfun(intm,int*a,int*n){//考生在此处编写代码}main(){intaa[M],n,k;fun(50,aa,&n);for(k=0;k<n;k++)if((k+1)%10==0)printf("\n");elseprintf("%4d",aa[k]);printf("\n");}参考代码:voidfun(intm,int*a,int*n){inti,count=0;for(i=1;i<=m;i++){//判断是否能被7或11整除a[count]=i;//符合条件的数存入数组count++;//计数累加}}*n=count;//通过指针返回符合条件的数的个数}给定程序框架:voidfun(char*s){//考生在此处编写代码}main(){charstr[80];gets(str);fun(str);puts(str);}参考代码:voidfun(char*s){inti=0,j=0;while(s[i]!='\0'){if(s[i]!='')//当前字符不是空格则保留{s[j]=s[i];j++;}i++;}s[j]='\0';//字符串末尾添加结束符}得分要点:1.使用双指针法遍历字符串,i遍历原字符串,j指向新字符串的存储位置;2.判断条件正确,仅保留非空格字符;3.末尾
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026及未来5年中国家用器皿数据监测研究报告
- 2026及未来5年中国女式唐装数据监测研究报告
- 2026事业单位工勤技能-湖南-湖南造林管护工三级(高级工)历年参考题库含答案详解3套试卷
- 2026事业单位工勤技能-湖南-湖南放射技术员三级(高级工)历年参考题库含答案详解3套试卷
- 2026事业单位工勤技能-湖南-湖南中式面点师一级(高级技师)历年参考题库含答案详解3套试卷
- 2026事业单位工勤技能-湖北-湖北检验员二级(技师)历年参考题库含答案详解3套试卷
- 2026事业单位工勤技能-海南-海南园林绿化工四级(中级工)历年参考题库含答案详解3套试卷
- 2026事业单位工勤技能-浙江-浙江堤灌维护工三级(高级工)历年参考题库含答案详解3套试卷
- 2026事业单位工勤技能-新疆-新疆土建施工人员一级(高级技师)历年参考题库含答案详解3套试卷
- 2026事业单位工勤技能-四川-四川家禽饲养员一级(高级技师)历年参考题库含答案详解3套试卷
- 新二升三暑假英语26个字母每日一练过关练22天
- 2026年高校行政管理岗招聘笔试典型试题及要点含答案
- 光伏施工方案范文模板
- 2026年时事政治考试题库及答案(100题)
- 2026年危险化学品生产单位安全生产管理人员安全生产模拟考试题库及答案
- 高标准农田建设技术工作手册
- 魏家凉皮考勤制度
- 无刷电机培训
- 临床医学大三《急性脑梗塞合并一氧化碳中毒》教学设计
- 全口吸附性义齿知情同意书
- 《大明太祖高皇帝实录》(点校标注版1-30卷)
评论
0/150
提交评论