c语言期末考试试题及答案_第1页
c语言期末考试试题及答案_第2页
c语言期末考试试题及答案_第3页
c语言期末考试试题及答案_第4页
c语言期末考试试题及答案_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

c语言期末考试试题及答案一、单项选择题(每小题2分,共30分)1.以下关于C语言变量声明的描述中,正确的是()A.变量必须在使用前声明,且声明时必须初始化B.全局变量默认初始化为0,局部变量默认初始化为随机值C.声明为`constinta;`的变量可以通过指针修改其值D.同一作用域内可以重复声明同名变量,但不能重复定义2.若有定义`intx=5,y=3;`,则表达式`(x++--y)2`的结果是()A.4B.6C.8D.103.执行以下循环后,变量`i`的值为()`inti=0;while(i++<3);`A.3B.4C.5D.24.若有数组定义`inta[5]={1,3,5,7,9};`,则`(a+2)+3`的值是()A.5B.8C.7D.105.以下关于函数参数传递的描述中,错误的是()A.数组名作为参数传递时,函数内部修改数组元素会影响原数组B.指针作为参数传递时,函数内部修改指针指向的内容会影响原变量C.基本数据类型作为参数传递时,函数内部修改参数值不会影响原变量D.结构体变量作为参数传递时,函数内部修改结构体成员会影响原变量6.若有结构体定义`structTest{chara;intb;shortc;};`,则`sizeof(structTest)`的结果是()(假设系统为32位,对齐规则为4字节)A.6B.8C.12D.167.执行以下代码后,输出结果为()`charstr[]="hello\0world";printf("%d",strlen(str));`A.5B.6C.10D.118.以下预处理指令中,用于条件编译的是()A.`define`B.`include`C.`ifdef`D.`pragma`9.若有定义`intp,a[3][4];`,则能正确表示`a[1][2]`的表达式是()A.`((a+1)+2)`B.`(a+1)[2]`C.`p+14+2`(假设p指向a[0][0])D.`a[1]+2`10.执行以下代码后,输出结果为()`intx=012,y=0x12;printf("%d",x+y);`A.24B.30C.18D.3411.以下关于指针运算的描述中,正确的是()A.两个指针可以相加得到新的内存地址B.指针可以与整数相加,但结果必须指向同一数组内的元素C.`charp="test";p[0]='T';`可以将字符串首字符改为'T'D.`inta[5];intp=a;p++`会使p指向a[5],超出数组范围12.若要将十进制数25转换为二进制,正确的位运算表达式是()A.`25&1`B.`25|1`C.`25<<1`D.需要循环右移并取余13.以下关于函数递归的描述中,错误的是()A.递归函数必须有终止条件B.递归调用会增加内存开销(栈空间)C.`fact(5)`(计算5的阶乘)的递归调用次数为5次D.所有递归问题都可以用迭代方法解决14.执行以下代码后,输出结果为()`intfunc(intn){return(n>1)?nfunc(n-1):1;}printf("%d",func(3));`A.3B.6C.2D.1215.若要打开一个文本文件用于追加写入(若文件不存在则创建),正确的文件打开方式是()A.`"r+"`B.`"w+"`C.`"a"`D.`"a+"`二、填空题(每空2分,共20分)1.若`inta=5,b=7;`,则表达式`(a>b)?a:b`的值为______。2.执行`for(inti=0,j=5;i<j;i++,j--)`循环,循环体共执行______次。3.若有数组`intarr[3][2]={{1,2},{3,4},{5,6}};`,则`arr[2][0]`的值为______,`(arr+1)+1`指向的元素是______。4.函数`intsum(inta,intn)`的功能是计算数组前n个元素的和。调用该函数时,若数组定义为`intnums[5]={2,4,6,8,10};`,则`sum(nums,3)`的返回值是______。5.若`chars[]="abc",t[]="abcde";`,则`strcpy(s,t)`执行后,s数组的内容是______(需考虑内存溢出)。6.结构体`structNode{intdata;structNodenext;}`的大小为______(假设系统为32位,指针占4字节)。7.执行`intx=5,y=0;y=++x+x++;`后,y的值为______。8.若要将整数n的二进制第3位(从0开始计数)置为1,应使用的位运算表达式是______。三、程序分析题(每小题8分,共24分)1.分析以下代码的输出结果。```cinclude<stdio.h>intmain(){inti,j;for(i=1;i<=3;i++){for(j=1;j<=i;j++){if(j%2==0)break;printf("%d",ij);}printf("\n");}return0;}```2.分析以下代码的输出结果。```cinclude<stdio.h>voidfunc(intp){p=p+5;p=p+5;}intmain(){inta[10]={1,2,3,4,5,6,7,8,9,10};intptr=a;func(ptr);printf("%d%d",ptr,a[5]);return0;}```3.分析以下代码的输出结果。```cinclude<stdio.h>structStudent{charname[10];intscore;};intmain(){structStudentstu[2]={{"Li",85},{"Wang",90}};structStudentp=stu;printf("%d",p->score);printf("%d",(p+1)->score);printf("%d",((stu+1)).score);return0;}```四、编程题(共26分)1.(8分)编写一个函数`intfib(intn)`,要求使用递归和迭代两种方法计算斐波那契数列的第n项(n≥1,斐波那契数列定义:F(1)=1,F(2)=1,F(n)=F(n-1)+F(n-2))。2.(9分)编写程序,从键盘输入一个字符串(长度不超过100),将其逆序输出(要求不使用`strrev`等库函数)。3.(9分)定义一个结构体`structStudent`,包含学号(长整型)、姓名(字符数组,长度20)、数学和英语两门课的成绩(整型)。编写程序实现以下功能:(1)输入3名学生的信息;(2)输出所有学生的信息;(3)计算并输出数学成绩的平均分。答案一、单项选择题1-5:BCBBD6-10:CACBD11-15:BDCBC二、填空题1.72.2(i=0,j=5→i=1,j=4→i=2,j=3→i=3,j=2时i<j不成立,共执行3次?需重新计算:初始i=0,j=5→i<j成立,执行循环体,i=1,j=4;第二次i=1<4成立,执行,i=2,j=3;第三次i=2<3成立,执行,i=3,j=2;第四次i=3<2不成立,结束。循环体执行3次?原答案可能错误,正确应为3次。但根据题目可能设计为2次,需确认。)(注:正确计算:i从0开始,j从5开始。第一次循环i=0<5→执行,i=1,j=4;第二次i=1<4→执行,i=2,j=3;第三次i=2<3→执行,i=3,j=2;第四次i=3<2不成立。故循环体执行3次。原填空答案应为3。)3.5;44.12(2+4+6=12)5."abcde"(实际会溢出,覆盖后续内存)6.8(int4字节+指针4字节,无填充)7.12(++x后x=6,x++时取6,故6+6=12,x最终为7)8.`n|(1<<3)`三、程序分析题1.输出:133555(解析:外层循环i=1,2,3。内层j=1时,j%2=1,不break,输出ij=1→换行;i=2时,j=1→输出21=2?原代码中i=1时j=1,j%2=1,不break,输出11=1;i=2时j=1→输出21=2,j=2时j%2=0→break,故第二行输出2后换行;i=3时j=1→输出31=3,j=2→break,故第三行输出3后换行。原分析错误,正确输出应为:123需重新计算:i=1时,j从1到1:j=1,j%2=1→不break,输出11=1→换行。i=2时,j从1到2:j=1→j%2=1→输出21=2;j=2→j%2=0→break,循环结束,换行。i=3时,j从1到3:j=1→输出31=3;j=2→break,循环结束,换行。故正确输出为:123)(注:原代码中`printf("%d",ij);`,i=1,j=1→1;i=2,j=1→2;i=3,j=1→3。因此输出应为:123)2.输出:66(解析:ptr指向a[0],func中p=p+5→a[0]=6;p=p+5是修改指针指向,不影响原ptr。故ptr是a[0]=6,a[5]原值为6,未修改。)3.输出:859090四、编程题1.递归实现:```cintfib_recursive(intn){if(n==1||n==2)return1;elsereturnfib_recursive(n-1)+fib_recursive(n-2);}```迭代实现:```cintfib_iterative(intn){if(n==1||n==2)return1;inta=1,b=1,c;for(inti=3;i<=n;i++){c=a+b;a=b;b=c;}returnb;}```2.逆序输出字符串:```cinclude<stdio.h>include<string.h>intmain(){charstr[100];printf("请输入字符串:");gets(str);//实际应使用fgets,此处简化intlen=strlen(str);for(inti=len-1;i>=0;i--){printf("%c",str[i]);}return0;}```或原地交换实现:```cvoidreverse(charstr){intlen=strlen(str);for(inti=0;i<len/2;i++){chartemp=str[i];str[i]=str[len-1-i];str[len-1-i]=temp;}}intmain(){charstr[100];scanf("%s",str);reverse(str);printf("%s",str);return0;}```3.学提供绩管理:```cinclude<stdio.h>structStudent{longlongid;charname[20];intmath;intenglish;};intmain(){structStudentstu[3];//输入信息for(inti=0;i<3;i++){printf("请输入第%d名学生的学号、姓名、数学成绩、英语成绩:",i+1);scanf("%lld%s%d%d",&stu[i].id,stu[i].name,&stu[i].math,&stu[i].english);}//输出信息prin

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论