大学C语言期末考试练习题含答案.docx

上传人:知****量 文档编号:31749466 上传时间:2022-08-08 格式:DOCX 页数:12 大小:18.92KB
返回 下载 相关 举报
大学C语言期末考试练习题含答案.docx_第1页
第1页 / 共12页
大学C语言期末考试练习题含答案.docx_第2页
第2页 / 共12页
点击查看更多>>
资源描述

《大学C语言期末考试练习题含答案.docx》由会员分享,可在线阅读,更多相关《大学C语言期末考试练习题含答案.docx(12页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、大学C语言期末考试练习题含答案 大学C语言期末考试练习题(带详解答案)一、单项选择题1(A)是构成C语言程序的基本单位。 A、函数B、过程C、子程序D、子例程2C语言程序从C开始执行。 A)程序中第一条可执行语句B)程序中第一个函数C)程序中的main函数D)包含文件中的第一个函数3、以下说法中正确的是(C)。 A、C语言程序总是从第一个定义的函数开始执行B、在C语言程序中,要调用的函数必须在main()函数中定义C、C语言程序总是从main()函数开始执行D、C语言程序中的main()函数必须放在程序的开始部分4.下列关于C语言的说法错误的是(B)。 A)C程序的工作过程是编辑、编译、连接、

2、运行B)C语言不区分大小写。 C)C程序的三种基本结构是顺序、选择、循环D)C程序从main函数开始执行5.下列正确的标识符是(C)。 A.-a1B.aiC.a2_iD.intt58题为相同类型题考点:标识符的命名规则(1)只能由字母、数字、下划线构成(2)数字不能作为标识符的开头(3)关键字不能作为标识符选项A中的“-”,选项B中“”与“”不满足(1); 选项D中的int为关键字,不满足(3)6下列C语言用户标识符中合法的是(B)。 A)3axB)xC)caseD)-e2E)union选项A中的标识符以数字开头不满足(2); 选项C,E均为为关键字,不满足(3); 选项D中的“-”不满足(1

3、); 7下列四组选项中,正确的C语言标识符是(C)。 A)%xB)a+bC)a123D)123选项A中的“%”,选项B中“+”不满足(1); 选项D中的标识符以数字开头不满足(2)8、下列四组字符串中都可以用作C语言程序中的标识符的是(A)。 A、print_3ddb8aBcB、Iamone_halfstart$it3paiC、str_1CpppowwhileD、PxqMy-bookline#His.age选项B中的“”,”$”,选项D中“”,”#”,”.”,”-”不满足(1); 选项C中的while为关键字,不满足(3)9.C语言中的简单数据类型包括(D)。 A、整型、实型、逻辑型B、整型、

4、实型、逻辑型、字符型C、整型、字符型、逻辑型D、整型、实型、字符型10.在C语言程序中,表达式5%2的结果是C。 A)2.5B)2C)1D)3详见教材P5253.%为求余运算符,该运算符只能对整型数据进行运算。且符号与被模数相同。5%2=1; 5%(-2)=1; (-5)%2=-1; (-5)%(-2)=-1; /为求商运算符,该运算符能够对整型、字符、浮点等类型的数据进行运算,5/2=211如果inta=3,b=4; 则条件表达式“ab)min=b;if(minc)min=c;printf(“min=%d“,min);运行结果为: min=-34详见教材p89选择结构本题考点是选择结构3种基

5、本形式的第一种一共包含了两个选择结构(两个if语句)定义变量,并赋值此时a=12,b=-34,c=56,min=0将a中值拷贝,赋给min,覆盖了min中的0,此时min中的值被更新为12。 若minb成立,则执行min=b;若minc成立,则执行min=c;输出min中的值12大于-34,第一个if语句的表达式成立,因此执行min=b;执行后min中的值被更新为-34.-34小于56,第二个if语句的表达式不成立,因此不执行min=c;最后输出min中的值,为-34.3.#includemain()intx=2,y=-1,z=5;if(x-1,表达式xb)t=a;a=b;b=t;if(ac)

6、t=a;a=c;c=t;if(bc)t=b;b=c;c=t;printf(“%5.2f,%5.2f,%5.2f“,a,b,c);运行结果为:1.00,2.00,7.00详见教材p72数据的输出形式本题包含了3个if语句,每个if语句后的都不可省略,因为每个中都包含了多条语句若表达式ab成立,则执行t=a;a=b;b=t;若表达式ac成立,则执行t=a;a=c;c=t;若表达式bc成立,则执行t=b;b=c;c=t;输出a,b,c中的值,要求输出的每个数据宽度为5个空格,小数部分保留2位,数据右对齐3小于7,因此表达式ab不成立,因此不执行t=a;a=b;b=t;3大于1,因此表达式ac成立,则

7、执行t=a;a=b;b=t;。第一句,将a中的3拷贝,粘贴到t中; 第二句,将c中的1拷贝,粘贴到a中,覆盖掉先前的3; 第三句。将t中的3拷贝到c中,覆盖掉c中先前的1.执行完复合语句后实现了a,c元素的值的互换,a为1,c为3,t为3,。 7大于c中的3,因此bc成立,执行则执行t=b;b=c;c=t;,过程同上,执行后b为3,c为7,t为7此时输出a,b,c中的值为1.00,2.00,7.005#includemain()floatc=3.0,d=4.0;if(cd)c=5.0;elseif(c=d)c=6.0;elsec=7.0;printf(“%.1fn”,c);运行结果为:7.0此

8、题为if.else.语句的嵌套,第二if.else.作为第一个if.else.语句else部分的复合语句。 若表达式cd成立,则执行c=5.0;否则(表达式cd不成立)若表达式c=d成立,则执行c=6.0;否则,执行c=7.0;输出c中的值3.0小于4.0,因此表达式cd不成立,执行第二个ifelse。 3.0不等于4.0,因此表达式c=d不成立,执行c=7.0,将7.0赋给c,覆盖掉c中的3.0,此时c中的值为7.0输出此时的c中的值6.#includemain()intm;scanf(“%d“,&m);if(m=0)if(m%2=0)printf(“%disapositiveevenn“,

9、m);elseprintf(“%disapositiveoddn“,m);elseif(m%2=0)printf(“%disanegativeevenn“,m);elseprintf(“%disanegativeoddn“,m);若键入9,则运行结果为:-9isanegativeodd7.#includemain()intnum=0; while(num0);printf(“n“);从键盘输入23,则运行结果为:32详见教材p117循环结构; p60复合的赋值运算符dowhile(表达式);先无条件执行循环体,再判断循环条件。注意while(表达式)后有分号定义整型变量num,c;为num赋一

10、个整型值; 执行c=num%10;printf(“%d“,c);直到循环条件(num/=10)0不成立; 输出换行已知为num赋值23第1次执行循环体执行c=num%10=23%10=3;执行printf(“%d“,c);输出3判断循环条件num/=10等价于num=num/10;因此num=23/10=2,2大于0,因此循环条件(num/=10)0成立,继续执行循环体。执行完第1次循环时,num为2,c为3第2次执行循环体执行c=2%10=2;执行printf(“%d“,c);再输出2判断循环条件num=2/10=0,0等于0,因此循环条件(num/=10)0不成立。结束循环10#inclu

11、demain()ints=0,a=5,n;scanf(“%d“,&n);dos+=1;a=a-2;while(a!=n);printf(“%d,%dn“,s,a);若输入的值1,运行结果为: 2,1详见教材p117循环结构; p60复合的赋值运算符执行s+=1;a=a-2;直到循环条件a!=n不成立; 已知为n赋值1,s为0,a为5第1次执行循环体执行s+=1;等价于s=s+1=0+1执行a=a-2;a=5-2=3判断循环条件,3不等于1,因此循环条件a!=n成立,继续执行循环体。 执行完第1次循环时,s为1,a为3第2次执行循环体执行s+=1;等价于s=s+1=1+1=2执行a=a-2;a=

12、3-2=1判断循环条件,1等于1,因此循环条件a!=n不成立,结束循环。 执行完第2次循环时,s为2,a为1输出此时s,a中的值,结果为2,111#include“stdio.h“main()charc;c=getchar();while(c!=?)putchar(c);c=getchar();如果从键盘输入abcde?fgh(回车)运行结果为:abcde12#includemain()charc;while(c=getchar()!=$)if(A0;y-)if(y%3=0)printf(%d”,-y);运行结果为: 852详见教材p53,自增自减符号此题表达式1被省略,表达式2(循环条件)为

13、y0,表达式3为y-初值y为9,循环条件(即表达式2)y0成立,进入循环体第1次循环执行if语句。9%3=0,if语句的条件表达式成立,执行printf(%d”,-y),即y先自减1变为8,然后在输出,因此屏幕上输出8转向表达式3,执行y-,y=y-1=8-1=7。循环条件y0成立,进入第2次循环第2次循环执行if语句。7%3不为0,if语句的条件表达式不成立,不执行printf(%d”,-y)转向表达式3,执行y-,y=y-1=7-1=6。循环条件y0成立,进入第3次循环第3次循环执行if语句。6%3=0,if语句的条件表达式成立,执行printf(%d”,-y),即y先自减1变为5,然后在

14、输出,因此屏幕上输出5转向表达式3,执行y-,y=y-1=5-1=4。循环条件y0成立,进入第4次循环第4次循环执行if语句。4%3不为0,if语句的条件表达式不成立,不执行printf(%d”,-y)转向表达式3,执行y-,y=4-1=3。循环条件y0成立,进入第5次循环第5次循环执行if语句。3%3=0,if语句的条件表达式成立,执行printf(%d”,-y),即y先自减1变为2,然后在输出,因此屏幕上输出2转向表达式3,执行y-,y=y-1=2-1=1。循环条件y0成立,进入第5次循环第6次循环执行if语句。1%3不为0,if语句的条件表达式不成立,不执行printf(%d”,-y)转

15、向表达式3,执行y-,y=1-1=0。循环条件y0不成立,循环结束。 18.#includemain()inti,sum=0;i=1;dosum=sum+i;i+;while(i=10,y=0;i-)ai=10-i;printf(“%d%d%d”,a2,a5,a8);运行结果为: 852详见p143-146.例题6.1一定看懂!首先定义整型变量i,整型数组a,a的长度为10,即a中包含10个整型元素(整型变量)执行for循环语句初值i=9,使得循环条件i=0成立,执行循环体第1次循环执行ai=10-i等价于a9=10-9=1计算表达式3,即i-,i为8,使得循环条件i=0成立,继续执行循环体第

16、2次循环执行ai=10-i等价于a8=10-8=2计算表达式3,即i-,i为7,使得循环条件i=0成立,继续执行循环体第3次循环执行ai=10-i等价于a7=10-7=3计算表达式3,即i-,i为6,使得循环条件i=0成立,继续执行循环体第4次循环执行ai=10-i等价于a6=10-6=4计算表达式3,即i-,i为5,使得循环条件i=0成立,继续执行循环体第5次循环执行ai=10-i等价于a5=10-5=5计算表达式3,即i-,i为4,使得循环条件i=0成立,继续执行循环体第6次循环执行ai=10-i等价于a4=10-4=6计算表达式3,即i-,i为3,使得循环条件i=0成立,继续执行循环体第

17、7次循环执行ai=10-i等价于a3=10-3=7计算表达式3,即i-,i为2,使得循环条件i=0成立,继续执行循环体第8次循环执行ai=10-i等价于a2=10-2=8计算表达式3,即i-,i为1,使得循环条件i=0成立,继续执行循环体第9次循环执行ai=10-i等价于a1=10-1=9计算表达式3,即i-,i为0,使得循环条件i=0成立,继续执行循环体第10次循环执行ai=10-i等价于a0=10-0=10计算表达式3,即i-,i为-1,使得循环条件i=0不成立,跳出循环体2.#includemain()inti,a6;for(i=0;i=0;i-)printf(“%3d“,ai);运行结

18、果为: 543210首先定义整型变量i,整型数组a,a的长度为6,即a中包含6个整型元素(整型变量)执行第一个for循环语句初值i=0,使得循环条件i=0成立,继续执行循环体第2次循环执行printf(“%3d“,ai);即输出a4的值计算表达式3,即i-,i为3,使得循环条件i=0成立,继续执行循环体第3次循环执行printf(“%3d“,ai);即输出a3的值计算表达式3,即i-,i为2,使得循环条件i=0成立,继续执行循环体第4次循环执行printf(“%3d“,ai);即输出a2的值计算表达式3,即i-,i为1,使得循环条件i=0成立,继续执行循环体第5次循环执行printf(“%3d

19、“,ai);即输出a1的值计算表达式3,即i-,i为0,使得循环条件i=0成立,继续执行循环体第6次循环执行printf(“%3d“,ai);即输出a0的值计算表达式3,即i-,i为6,使得循环条件i=0不成立,结束循环3.#includemain()inti,k,a10,p3; k=5; for(i=0; iy)m=x; elsem=y; return(m); main()inta=3,b=5,abmin; abmin=min(a,b); printf(“minis%d”,abmin); 运行结果为: minis53.#includefunc(intx)x=10;printf(“%d,”,x

20、);main()intx=20;func(x);printf(“%d”,x);运行结果为: 10,20在main函数中调用函数func,main函数将20作为实参穿给func,并转向开始执行func.main()对应的内存func()对应的内存20x20xfunc()执行x=10;,其内存中x变为10.10xfunc()执行printf(“%d,”,x);即输出func函数对应内存中x的值,输出的是10.至此,func函数执行结束,返回main函数。 main函数执行printf(“%d”,x);此时输出main函数对应内存中的x,即204.#includeintm=4;intfunc(int

21、x,inty)intm=1;return(x*y-m);main()inta=2,b=3;printf(“%dn“,m);printf(“%dn“,func(a,b)/m);运行结果为: 41整型变量m在函数外定义,因此m为全局变量,其作用于范围为其定义位置开始,一直到整个程序结束。因此func与main函数都可以访问m程序首先执行main函数执行printf(“%dn“,m);即输出m中的值4,并换行。 执行printf(“%dn“,func(a,b)/m);即输出表达式func(a,b)/m的值,为了计算该表达式,需要调用函数func。此时main将a,b中的2和3值作为实参传递给func

22、的x和y程序开始转向执行func函数,此时func中的x为2,y为3执行intm=1;此句定义了一个局部变量m并赋值为1。m的作用域为其所在的复合语句,即func的函数体,因此在func的函数体重,有限访问局部变量m。 执行return(x*y-m);即return(2*3-1);返回的是整数5.func函数返回至main函数中的被调用处main函数中func(a,b)的值为5,func(a,b)/m=5/4=1,注意,在main函数中访问的m为全局变量m,此时main函数无法访问func中的m,因为不在func中m的作用域。 5.#includeintfun(inta,intb)if(ab)

23、return(a);elsereturn(b);main()intx=15,y=8,r;r=fun(x,y);printf(“r=%dn“,r);运行结果为:r=15程序首先执行main函数执行r=fun(x,y);即将func(x,y)的值赋给r,为了计算该表达式,需要调用函数func。此时main将x,y中的15和8值作为实参传递给func的a和b程序开始转向执行func函数,此时func中的a为15,b为8执行if语句;判断if后面的表达式,ab成立,因此执行相应的操作return(a); 即返回a的值。 func函数返回至main函数中的被调用处main函数中func(x,y)的值为1

24、5,即将15赋给r。 执行printf(“r=%dn“,r);即输出r=156.#includeintfac(intn)intf=1,i;for(i=1;ib成立,因此执行相应的操作return(a); 即返回a的值。 func函数返回至main函数中的被调用处main函数中func(x,y)的值为15,即将15赋给r。 执行printf(“r=%dn“,r);即输出r=157.#includeunsignedfun6(unsignednum)unsignedk=1;dok*=num%10;num/=10;while(num);returnk;main()unsignedn=26;printf

25、(“%dn”,fun6(n);运行结果为:12程序首先执行main函数执行printf(“%dn”,fun6(n);即输出表达式func(6)的值,为了计算该表达式,需要调用函数func。此时main将n中的26作为实参传递给func的num程序开始转向执行func函数,此时func中的num为26执行do-while语句第1次循环执行k*=num%10,即k=k*(num%10)=1*(26%10)=6执行num/=10;即num=num/10=26/10=2while后面循环条件为num,此时num为2,是非0值,即表示循环条件成立,继续执行循环体。此时k为6第2次循环执行k*=num%1

26、0,即k=k*(num%10)=6*(2%10)=12执行num/=10;即num=num/10=2/10=0while后面循环条件为num,此时num为0,表示循环条件不成立,结束循环执行returnk;即返回至main函数中的被调用处执行main函数继续执行printf(“%dn”,fun6(n);即输出128.#includeintmax(intx,inty);main()inta,b,c;a=7;b=8;c=max(a,b);printf(“Maxis%d“,c);max(intx,inty)intz;z=xy?x:y;return(z);运行结果为: Maxis8指针1.#inclu

27、demain()intx=10,20,30,40,50;int*p;p=x;printf(“%d”,*(p+2);运行结果为: 30首先定义一个整型数组x,x的长度为5;然后定义一个指针变量p;对p进行初始化,将数组x的地址赋给p。因此此时p中存放的数组x的首地址,即数组中第一个元素x0的地址。 然后执行printf语句,输出表达式*(p+2)的值。p+2表示以p当前指向的位置起始,之后第2个元素的地址,即a2的地址。*(p+2)则表示该地址内所存放的内容,即a2的值30,因此输出302.#includemain()chars=”abcdefg”;char*p;p=s;printf(“ch=%

28、cn”,*(p+5);运行结果为: ch=f首先定义一个字符型数组s,并用字符串abcdefg对s进行初始化;然后定义一个字符型指针变量p;对p进行初始化,将数组s的地址赋给p。因此此时p中存放的数组s的首地址,即数组中第一个元素s0的地址。 然后执行printf语句,输出表达式*(p+5)的值。p+5表示以p当前指向的位置起始,之后第5个元素的地址,即a5的地址。*(p+5)则表示该地址内所存放的内容,即a5的值f,因此输出ch=f3.#includemain()inta=1,2,3,4,5; intx,y,*p; p=a; x=*(p+2); printf(“%d:%dn“,*p,x);

29、运行结果为:1:3首先定义一个整型数组a,并对a进行初始化;然后定义整型变量x,y,整型指针变量p;再将数组a的地址赋给p。因此此时p中存放的数组a的首地址,即数组中第一个元素a0的地址。执行x=*(p+2); p+2表示以p当前所指向的位置起始,之后第2个元素的地址,即a2的地址。*(p+2)则表示该地址内所存放的内容,即a2的值3,然后再把3赋给x然后执行printf语句,先输出表达式*p的值。此时*p表示的是p所指向变量的内容,即a0的值1。再输出一个冒号。然后再输出x中的值3。 4.#includemain()intarr=30,25,20,15,10,5,*p=arr;p+;prin

30、tf(“%dn”,*(p+3);运行结果为:10首先定义一个整型数组arr,并对arr进行初始化;然后定义整型指针变量p;再将数组arr的地址赋给p。因此此时p中存放的数组arr的首地址,即数组中第一个元素a0的地址。 执行p+,即p=p+1。p+1表示以p当前所指向的位置起始,之后第1个元素的地址,即arr1的地址,然后再将arr1的地址赋给p,执行完此语句后,p不再指向arr0,而是指向arr1。 然后执行printf语句,输出表达式*(p+3)的值。p+3表示以p当前指向的位置起始(此时p指向arr1),之后第3个元素的地址,即arr4的地址。*(p+3)则表示该地址内所存放的内容,即a

31、rr4的值10,因此输出105.#includemain()inta=1,2,3,4,5,6;intx,y,*p;p=&a0;x=*(p+2);y=*(p+4);printf(“*p=%d,x=%d,y=%dn”,*p,x,y);运行结果为: *p=1,x=3,y=5首先定义一个整型数组a,并对a进行初始化;然后定义整型变量x,y,整型指针变量p;再将数组元素a0的地址赋给p。 执行x=*(p+2); p+2表示以p当前所指向的位置起始,之后第2个元素的地址,即a2的地址。*(p+2)则表示该地址内所存放的内容,即a2的值3,然后再把3赋给x执行y=*(p+4);p+4表示以p当前所指向的位置

32、起始,之后第4个元素的地址,即a4的地址。*(p+4)则表示该地址内所存放的内容,即a4的值5,然后再把5赋给y执行printf语句,先输出表达式*p的值。此时*p表示的是p所指向变量的内容,即a0的值1。再输x的值3。再输出y的值5。 6.#includemain()staticchara=”Program”,*ptr;for(ptr=a,ptrchars=”ABCD”;main()char*p;for(p=s;p=a&ch=A&ch=0&ch=97&ch=65&ch0,则令i加1,相当于令正整数的个数加1; 否则(即n=A&c=a&c0)/C语言中乘号不能省略,且用*表示乘法运算fun(a

33、,b);/调用带有返回值的函数,应将函数的返回值保存在变量里printf(“Theresultis:%dn“,&f)/与第6题中printf错误相同elseprintf(“error!”);fun(x,y)/定义函数的一般形式p173-174floatresult;result=sqrt(a+b);return;/return语句后面可以返回0、常量、变量和表达式的值。 第一处改为:if(a*b0)第二处改为:f=fun(a,b);第三处改为:printf(“Theresultis:%dn“,f);第四处改为:floatfun(intx,inty)第五处改为:f=fun(a,b);第六处改为:

34、result=sqrt(a*b);第七处改为:returnresult;五、编程题1.输入2个整数,求两数的平方和并输出。 #includeintmain(void)intta,b,s;printf(“pleaseinputa,b:n“);scanf(“%d%d”,&a,&b);s=a*a+b*b;printf(“theresultis%dn“,s);return0;2.输入一个圆半径r,当r0时,计算并输出圆的面积和周长,否则,输出提示信息。 #include#definePI3.14intmain(void)doubler,area,girth;printf(“pleaseinputr:n

35、“);scanf(“%lf“,&r);if(r=0)area=PI*r*r;girth=2*PI*r;printf(“theareais%.2fn“,area);printf(“thegirthis%.2fn“,girth);elseprintf(“Inputerror!n“);return0;3、已知函数y=f(x),编程实现输入一个x值,输出y值。 2x+1(x0)#includevoidmain()intx,y;scanf(“%d”,&x);if(x0)y=2*x-1;elsey=0;printf(“%d”,y);4.从键盘上输入一个百分制成绩score,按下列原则输出其等级:score

36、90,等级为A; 80score=y)returnx;elsereturny;12.编写程序,其中自定义一函数,用来判断一个整数是否为素数,主函数输入一个数,输出是否为素数。 #include#includeintIsPrimeNumber(intnumber)inti;if(number=1)return0;for(i=2;isqrt(number);i+)if(number%i)=0)return0;return1;voidmain()intn;printf(“Pleaseinputn:”);scanf(“%d”,&n);if(IsPrimeNumber(n)printf(“n%disaP

37、rimeNumber”,n);elseprintf(“n%disnotaPrimeNumber”,n);13、从键盘输入n个数存放在数组中,将最小值与第一个数交换,输出交换后的n个数。 #includeintmain(void)inti,n,iIndex,temp;inta10;printf(“Entern:“);scanf(“%d“,&n);printf(“Enter%dintegers:n“);for(i=0;in;i+)scanf(“%d“,&ai);iIndex=0;for(i=1;in;i+)if(aiintcomp(intarry,intn)inti,index,temp;printf(“为数组赋值:n“);for(i=0;in;i+)scanf(“%d“,&arryi);for(i=1,index=0;i=n-1;i+)if(arryi12

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com