还剩18页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
c语言期末考试题和答案及解析
一、选择题(共15题,每题1分,共15分)
1.以下选项中,不属于C语言关键字的是()A.auto B.struct C.string D.return
2.变量int a;在未显式初始化时,其存储单元中的默认值为()A.0B.随机值C.空字符\0D.未定义
3.若有定义int a=5,b=3;,则表达式a/b+a%b的结果为()A.2B.3C.5D.
84.以下关于for循环的描述,错误的是()A.for循环可以用于实现循环次数已知的循环B.for循环的三个表达式(初始化、条件、增量)都可以省略C.for;;表示无限循环D.for循环只能用于遍历数组
5.以下数组定义中,正确的是()A.int a
[5]={1,2,3};B.int a[]={1,2,3,4,5};C.int a
[5]={1,2,3,4,5,6};D.int a
[5]={1,2,3,4,5,};
6.执行语句printf%d,5310:20;后,输出结果为()A.5B.3C.10D.
207.以下函数调用中,属于值传递的是()A.swapa,b;(函数swap参数为int a,int b)B.swapa,b;(函数swap参数为int*a,int*b)C.swapa
[0],a
[1];(函数swap参数为int a,int b)第1页共20页D.以上都是
8.若有指针int*p;,则p指向的是()A.一个整数B.一个整数的地址C.一个字符D.一个字符的地址
9.以下关于while循环和do-while循环的描述,正确的是()A.while循环的循环体至少执行一次B.do-while循环的循环体至少执行一次C.while循环先判断条件,后执行循环体D.do-while循环先执行循环体,后判断条件
10.以下结构体定义中,正确的是()A.struct Student{int age;char name;};B.struct{int age;char name;}Student;C.struct Student{int age;char name
[20];};D.struct Student{int age;char name;};
11.若有定义char s[]=hello;,则s
[4]的值为()A.h B.e C.l D.o
12.函数main的返回值类型是()A.int B.void C.char D.无类型
13.以下关于宏定义的描述,错误的是()A.宏定义以#define开头B.宏定义中的参数可以没有类型C.宏定义在编译时被展开D.宏定义可以带参数,且参数必须加括号
14.若有二维数组int arr
[3]
[4];,则arr
[1]
[2]表示的元素是()第2页共20页A.第1行第2列B.第1行第3列C.第2行第2列D.第2行第3列
15.以下关于指针运算的描述,正确的是()A.指针可以直接与整数相加B.指针可以直接相乘C.指针可以直接相减D.以上都正确
二、填空题(共15题,每题2分,共30分)
1.若要定义一个可以存储10个浮点数的数组,正确的定义语句是______
2.C语言中,用于输入数据的标准库函数是______,用于输出数据的标准库函数是______
3.函数void funint x{x=x+10;}中,x是______参数(填“值传递”或“地址传递”)
4.指针变量p指向整数a,则*p表示的是______
5.数组int arr
[5]={1,2,3,4,5};中,元素arr
[2]的值为______,数组长度为______
6.若有定义int a=10,b=20;int*p=a,*q=b;,则*p+*q的结果为______
7.结构体struct Person{char name
[20];int age;};中,sizeofstruct Person的值至少为______(假设char占1字节,int占4字节)
8.循环语句fori=0;i5;i++中,循环体共执行______次
9.函数int maxint a,int b{return aba:b;}的功能是______
10.字符A的ASCII码值为65,表达式A+3的结果为______(以字符形式表示)第3页共20页
11.数组int arr[]={1,2,3,4,5};,则arr[sizeofarr/sizeofarr
[0]-1]的值为______
12.指针int*p=int*malloc5*sizeofint;中,malloc函数的作用是______
13.宏定义#define ADDa,b a+b,执行ADD2,3*4的结果为______
14.函数void printint n{ifn0{printn-1;printf%d,n;}}的功能是______
15.变量static int a=0;在函数fun中定义,每次调用fun时,a的值会______(填“保持不变”或“重新初始化为0”)
三、程序阅读题(共10题,每题3分,共30分)(阅读以下程序,写出运行结果)#include stdio.hint main{int a=5,b=3;if ab{printfab\n;}else{printfa=b\n;}return0;}运行结果______#include stdio.hint main{第4页共20页int i,sum=0;fori=1;i=5;i++{sum+=i;}printfsum=%d\n,sum;return0;}运行结果______#include stdio.hvoid funint x{x+=10;printffun:x=%d\n,x;}int main{int a=5;funa;printfmain:a=%d\n,a;return0;}运行结果______#include stdio.hint main{int arr[]={1,2,3,4,5};int i;fori=0;i5;i++{第5页共20页printf%d,arr[i];}return0;}运行结果______#include stdio.hint main{int a=10;int*p=a;*p=20;printfa=%d\n,a;return0;}运行结果______#include stdio.hint addintx,int y{return x+y;}int main{int a=3,b=5;int result=adda,b;printfresult=%d\n,result;return0;}运行结果______第6页共20页#include stdio.hint main{int i,j;fori=1;i=3;i++{forj=1;j=i;j++{printf*;}printf\n;}return0;}运行结果______#include stdio.hstruct Student{char name
[20];int score;};int main{struct Students={Tom,90};printfName:%s,Score:%d\n,s.name,s.score;return0;}运行结果______#include stdio.hint main{第7页共20页int a=0,b=0;whilea3{a++;b+=a;}printfb=%d\n,b;return0;}运行结果______#include stdio.hvoid swapint*a,int*b{int temp=*a;*a=*b;*b=temp;}int main{intx=3,y=5;swapx,y;printfx=%d,y=%d\n,x,y;return0;}运行结果______
四、程序填空题(共10题,每题2分,共20分)(补全以下程序中的空缺部分,使程序功能完整)
1.以下程序计算1到n的和,请补全______处的代码第8页共20页#include stdio.hint sumint n{int i,s=0;fori=1;i=n;i++{s+=______;//第1空}return s;}int main{int n;scanf%d,n;printfsum=%d\n,sumn;return0;}
2.以下程序输出数组中的最大值,请补全______处的代码#include stdio.hint max_arrayint arr[],int len{int i,m=arr
[0];fori=1;ilen;i++{//假设len=1ifarr[i]m{m=______;//第2空}}return m;}第9页共20页int main{int arr[]={5,2,8,1,9};int len=sizeofarr/sizeofarr
[0];printfmax=%d\n,max_arrayarr,len;return0;}
3.以下程序判断一个数是否为素数(只能被1和自身整除的数),请补全______处的代码#include stdio.hint is_primeint num{int i;ifnum=1return0;fori=2;i=num/2;i++{ifnum%i==0{return______;//第3空}}return______;//第4空}int main{int n;scanf%d,n;ifis_primen{printf%d是素数\n,n;}else{第10页共20页printf%d不是素数\n,n;}return0;}
4.以下程序求斐波那契数列的第n项(斐波那契数列1,1,2,3,...,第1项和第2项为1,后续每项为前两项之和),请补全______处的代码#include stdio.hint fibonacciintn{int a=1,b=1,c;//a为第1项,b为第2项ifn==1n==2return1;forint i=3;i=n;i++{c=a+b;a=b;b=______;//第5空}return b;}int main{intn;scanf%d,n;printffibonacci%d=%d\n,n,fibonaccin;return0;}第11页共20页
5.以下程序将字符串hello逆序输出,请补全______处的代码#include stdio.h#include string.hvoid reverse_strchar*str{int len=strlenstr;char temp;int i,j;fori=0,j=len-1;ij;i++,j--{temp=str[i];str[i]=str[j];str[j]=______;//第6空}}int main{char s[]=hello;reverse_strs;printf%s\n,s;return0;}
6.以下程序输出100到200之间的所有素数,请补全______处的代码#include stdio.h#include math.hint is_primeint num{int i;第12页共20页fori=2;i=sqrtnum;i++{ifnum%i==0return0;}return1;}int main{int i;fori=100;i=200;i++{ifis_primei{printf%d,i;}}return0;}
7.以下程序定义一个结构体存储学生信息,并输出,补全______处的代码#include stdio.hstruct Student{char name
[20];int age;float score;};int main{struct Students;printf请输入学生姓名;第13页共20页scanf%s,______;//第7空printf请输入学生年龄;scanf%d,s.age;printf请输入学生成绩;scanf%f,______;//第8空printf学生信息:姓名=%s,age=%d,score=%.1f\n,s.name,s.age,s.score;return0;}
8.以下程序用冒泡排序法对数组{3,1,4,2}升序排序,请补全______处的代码#include stdio.hvoid bubble_sortint arr[],int len{int i,j,temp;fori=0;ilen-1;i++{forj=0;jlen-1-i;j++{ifarr[j]arr[j+1]{temp=arr[j];arr[j]=arr[j+1];arr[j+1]=______;//第9空}}}}int main{第14页共20页int arr[]={3,1,4,2};int len=sizeofarr/sizeofarr
[0];bubble_sortarr,len;forint i=0;ilen;i++{printf%d,arr[i];}return0;}
9.以下程序求两个数的最大公约数(GCD),请补全______处的代码(使用辗转相除法)#include stdio.hint gcdint a,int b{int temp;whileb!=0{temp=a%b;a=b;b=______;//第10空}return a;}int main{int a,b;scanf%d%d,a,b;printfgcd=%d\n,gcda,b;return0;第15页共20页}
五、程序改错题(共5题,每题4分,共20分)(以下程序存在错误,请找出错误并改正,每处错误1分,改正1分)#include stdio.hint main{inta=
[5];//错误1______fori=0;i5;i++{//错误2______scanf%d,a[i];}//错误3______return0;}#include stdio.hint maxinta,int b{//错误1______ifab returna;else returnb;}int main{intx=3,y=5;printfmax=%d,maxx,y;//错误2______return0;}#include stdio.hvoid print_hello{printfHello World!;第16页共20页}int main{print_hello;//错误1______return0;}#include stdio.hint main{inta=10,b=20;int*p=a;*p=*p+b;//错误1______printfa=%d\n,a;return0;}#include stdio.hstruct Person{char name
[20];int age;};int main{struct Personp={Alice,20};printfName:p.name,Age:p.age\n;//错误1______return0;}
六、程序设计题(共2题,每题10分,共20分)第17页共20页
1.编写一个函数void count_even_oddint arr[],int len,int*even,int*odd,功能是统计数组arr中偶数和奇数的个数,分别存储到指针even和odd指向的变量中
2.编写程序,从键盘输入一个正整数n,计算并输出1!+2!+...+n!的和(其中!表示阶乘)(注n!=1×2×...×n,1!=1)答案汇总
一、选择题答案
1.A
2.B
3.D
4.D
5.B
6.C
7.A
8.B
9.B
10.C
11.D
12.A
13.D
14.D
15.A
二、填空题答案
1.float arr
[10];
2.scanf,printf
3.值传递
4.整数a的值
5.3,
56.
307.24(20+1+4=25?不,name
[20]是20字节,age是4字节,共24字节)
8.
59.返回两数中的较大值
10.D
11.
512.动态分配5个int大小的内存空间
13.2+3*4=
2014.递归输出1到n的数
15.保持不变
三、程序阅读题答案
1.ab
2.sum=
153.fun:x=15,main:a=
54.
123455.a=
206.result=
87.*,**,***
8.Name:Tom,Score:
909.b=
610.x=5,y=3
四、程序填空题答案
1.i
2.arr[i]
3.0,
14.c
5.temp
6.(无需补全,程序正确)
7.s.name,s.score
8.temp
9.temp
五、程序改错题答案
1.错误1数组定义错误,应改为inta
[5];;错误2变量i未定义,应改为int i;;错误3(无,原代码错误1和2已改)第18页共20页
2.错误1函数定义无返回类型(C语言中默认返回int,但建议显式写int);错误2调用函数时缺少括号,应改为maxx,y
3.错误1函数调用缺少括号,应改为print_hello;
4.错误1无错误,正确(*p初始为10,加b=20得30,a=30)
5.错误1输出格式错误,应改为printfName:%s,Age:%d\n,p.name,p.age;
六、程序设计题答案void count_even_oddint arr[],int len,int*even,int*odd{*even=0;*odd=0;forint i=0;ilen;i++{ifarr[i]%2==0*even++;else*odd++;}}#include stdio.hint main{intn,sum=0,factorial=1;printf请输入正整数n:;scanf%d,n;forint i=1;i=n;i++{factorial*=i;sum+=factorial;}第19页共20页printf1!+2!+...+%d!=%d\n,n,sum;return0;}第20页共20页。
个人认证
优秀文档
获得点赞 0