《湖南工商大学C语言程序设计专升本.docx》由会员分享,可在线阅读,更多相关《湖南工商大学C语言程序设计专升本.docx(56页珍藏版)》请在课桌文档上搜索。
1、C语言程序设计专升本(一)一、单项选择题(每小题2分,共40分)1、在C语言中,要求运算数必须是整数的运算符是OA、B、%C、/D、【答案】B2、在C语言中,能表示无符号长整型常数的是OA、OLB、 4962710UC、 912374uD、2UL【答案】D3、有定义intn=789;下列表达式结果为8的是。A、n/10%2B、(n-n%10)100C、n%10D、n%10010【答案】D【解析】/比的优先级要高。注意:n/10%2的结果应是0,n/10结果为78,用78在除以2求余则得0;(n-n%10)100的结果应是7,n%10得9,780/100得7;n%10的结果显而易见是9。4、有如
2、下程序:main()intx=l,a-0,b=0;switch(x)case0:b+;case 1:a+;case 2:a+;b+;printfCa=%d,b=%dn”,a,b);)该程序的输出结果是OA、 a=2,b=lB、 a=l,b=lC、a=Lb=0D、a=2b=2【答案】A5、设i和X都是int类型,则for循环语句。for(i=0,x=0;i=9&x!=876;i+)scanf(%d,&x);A、最多执行10次B、最多执行9次C、是无限循环D、循环体一次也不执行【答案】A6、己有函数max(a,b),为了让函数指针变量p指向函数max,正确的赋值方法是。A、 p=max;B、 *p
3、=max;C、 p=max(a,b);D、 *p=max(a,b);【答案】A7、设x、y和Z是int型变量,且x=4,y=6,z=8,则下列表达式中值为0的是A、x&yB、x=yC、Xjy+z&yZD、!(XVY)&!Z;1)【答案】D8、若希望下列的程序运行后输出25,程序空白处的正确选项是main()(inti,j=50,a=7,4,10,5,8;for()j+=ai;print(,%dw,j-40);)A、i=l;i4;+iB、i=l;i2;iD、i=2;ic2-cl,c2-iaf+,a,);则输出结果是OA、2,MB、3,EC、2,ED、输出项与相应的格式控制不一致,输出结果不确定【
4、答案】B10、以下正确的字符串常量是oA、B、abc,C、OlympicGamesD、【答案】D11、以下函数func()的功能是:使具有n个元素的一维数组b的每个元素的值都增加2,划线处应填入.func(intb,intn)(int;for(i=0;in;i+);)Aybi+B、bi+C、bi+=2D、bi+=2【答案】D12、以下叙述中正确的是oA、全局变量的作用域一定比局部变量的作用域范围大B、静态(static)类别变量的生存期贯穿于整个程序的运行期间C、函数的形参都属于全局变量D、未在定义语句中赋初值的auto变量和static变量的初值都是随机值【答案】B13、在64位计算机中,一
5、个字长所占字节数为0A、64B、8C、4D、1【答案】B14、以下叙述正确的是oA、在C程序中,主函数必须位于程序的最前面B、在C程序中,一行只能写一条语句C、C程序的基本结构是程序行D、C语句是完成某种程序功能的最小单位【答案】D15、有以下程序voidsum(inta)(a0=al+a2;)main()(inta10=l,2,3,4,5,6,7,8,9,10;sum(&a2);printf(/%dnz,a2);)程序运行后的输出结果是OA、6B、7C、5D、9【答案】D16、下面程序输出的结果为Oincludeintmain()ints=3;switch(s)(case5:Printf(我
6、);break;case4:Printf(是);case3:Printf(好);case2:Prirrtf(学”);break;default:Printf(生);)A、好B、好学C、好学生D、我是好学生【答案】B17、设有如下定义:structsk(intn;floatx;data,*p;若要使P指向data中的n域,正确的赋值语句是。A、 p=&datn;B、 *p=datn;C、 p=(structsk*)&datn;D、 p=(structsk*)datn;【答案】C【解析】本题主要考查了结构体变量引用成员数据的方法,主要有以下几种:结构体变量名,成员名或结构体指针成员名的方法来引用结
7、构体成员。18下面程序段的运行结果是.chara7=z,abcdefz,;charb4=abc;strcpy(a,b);Printfa5);A、空格B、0C、eD、f【答案】D19、以下叙述中正确的是OA、一条语句只能定义一个数组B、每个数组包含一组具有同一类型的变量,这些变量在内存中占有连续的存储单元C、数组说明符的一对方括号中只能使用整型常量,而不能使用表达式D、在引用数组元素时,下标表达式可以使用浮点数【答案】B【解析】A选项中,一条语句只能定义一个数组是不准确的,可以通过一条语句定义多个数组;C选项中,数组说明符的一对方括号中可以是整型常量,可以是整型常量表达式;D选项中,在引用数组元
8、素时,下标表达式必须是整型的。因此B选项正确。20、有以下结构体说明和变量的定义,且指针P指向变量a,指针q指向变量bo则不能把结点b连接到结点a之后的语句是structnodechardata;structnode*next;a,b,*p=&a,*q=&b;A、 next=q;B、 next=&b;C、pnext=&b;D、(*p).next=q;【答案】B【解析】要把结点b连接到结点a之后,必须把b的地址给a的next指针,选项A中,指针变量q保存的就是变量b的地址,选项B中的P是指针变量,应该是p-next=&b;在选项D中,用*运算符取出结构体变量,并且保存的就是b的地址,所以正确。二
9、、判断题(每小题2分,共20分)()1、若变量定义为intfahr;,则表达式5*(fahr-32)/9和表达式5/9*(fahr-32)是等价的。【答案】错误()2、C语言中,所有的变量在使用前都必须先声明。【答案】正确()3、内层break语句可以终止嵌套的SWiteh,使最外层的SWitCh结束。【答案】错误()4、COntinUe语句的作用是结束本次循环。【答案】正确()5、比较两个字符串是否相等不能通过条件运算符【答案】正确()6、C语言中不允许嵌套定义函数。【答案】正确()7、在C语言中,引用数组元素时,数组下标的数据类型只能是整型常量。()【答案】错误()8、当函数的实参与形参同
10、名时,它们将共占内存单元。()【答案】错误()9、一个数组是由连续的一块内存单元组成的,指针变量就是这块连续内存单元的首地址【答案】错误()10、全局静态变量的作用域限制在定义它的源文件内,只能为该源文件内的函数公用。【答案】正确三、编程题(每小题分,共40分)1、从键盘输入10个数,统计非负数的个数,并计算非负数的和。(本题10分)【答案】includevoidmain()(inti,n=0,sum=0;inta10;Printf(“请输入10个数个);for(i=0;i10;i+)scanf(a%dff,&ai);for(i=0;i=O)sum=sum+ai;n+;)Printf(非负个数
11、是d,SUm=%dn”,n,sum);)2、编写程序,从输入的一行字符串中抽取一部分(从第n个字符开始,抽取m个字符)构成一个新的字符串,并输出。其中n0且n二字符串的长度,否则打印“起始位置n越界”要求:n和ITI都由用户输入。如果抽取的字符串长度不够,则按照实际长度抽取,例如,字符串为“abcde”,若n=2,m=3,则抽取结果为“bed;若n=3,m=5,则抽取结果为“cde;若n=0,m=4则输出:起始位置0越界;若n=6,m=2则输出:起始位置6越界(本题14分)【答案】#include#includeintmain()(intn,m,i;unsignedlong1;chars80;
12、gets(s);scanf(%d%d”,&n,&m);I=Strlen(s);if(n+m-ll)m=l+l-n;if(n0&n=l)for(i=n-l;in+m-l;i+)printf(,z%c*,si);elsePrintf(起始位置%d越界,n);returnO;3、有以下职工信息,使用结构体数组存储这些信息,从键盘输入5条记录,之后在屏幕上依次输出职工信息。structstuffintStUffID;职工编号floatbonus;工资);【输入形式】5条职工信息,分行输入,数据间空格隔开【输出形式】分行输出5条职工信息和最低工资,每行数据均使用1个空格分隔【输入样例】10018540.
13、5910026345.4510033500.6510044898.8610055345.80【输出样例】每行数据均使用一个空格分割,分五行输出10018540.5910026345.4510033500.6510044898.8610055345.80minBonus=3500.65(本题16分)【答案】includestructstuff(intstuffID;floatbonus;a5;intmain()inti;floatmin;for(i=0;i5;i+)scanf(zz%d%fzx,&,ai.stuffID,&ai.bonus);min=a0.bonus;for(i=1;i=ai.b
14、onus)min=ai.bonus;)for(i=0;i5;i+)printf(,/%d%.2fnz,ai.stuffID,ai.bonus);printf(z,ninBonus=%.2f”,min);C语言程序设计专升本(二)一、单项选择题(每小题2分,共40分)1、以下关于链式存储结构的叙述中哪一条是错误的?A、结点除自身信息外还包括指针域,因此存储密度小于顺序存储结构B、逻辑上相邻的结点物理上不必邻接C、可以通过计算直接确定第i个结点的存储地址D、插入、删除运算操作方便,不必移动结点【答案】C【解析】链式存储方式的主要特点如下:结点除自身信息外,还有表示连接信息的指针域,因此存储密度小于
15、顺序存储结构,存储空间利用率低。逻辑上相邻的结点物理上不必相邻,可用于线性表、树、图等多种逻辑结构的存储表示。插入、删除操作方便灵活,只要改变结点中的指针域即可,不必移动结点。其缺点也主要有以下两个方面:每个结点增加了一个后继指针域,要花费更多的存储空间。不能随机的直接访问线性表的任一结点。2、下列条件语句中输出结果与其他语句不同的是。A、if(a)Printf(%dn,x);elsePrintf(%dn”,y);B、if(a=0)Printf(%dn,y);elsePrintf(%dn”,x);C、if(a!=0)printf(%dnw,x);elsePrintf(%dn”,y);D、if(
16、a=0)Printf(%dn,x);elsePrintf(%dn”,y);【答案】D3、以下选项中正确的实型常量是oA、0B、3.1415C、0.329X102D、871【答案】B4、有以下程序main()inti;for(i=0;i3;i+)switch(i)case1:Printf(%d”,i);case2:Printf(%c,i);default:Printf(%d”,i);执行后输出的结果是。A、011122B、012C、 012020D、120【答案】A【解析】当执行SWitCh语句时,首先计算紧跟其后一对括号中的值,然后在语句体内寻找与该值吻合的CaSe标号。若相等,则执行该标号后
17、开始的各语句,包括在其后的所有case和default后的语句,直到switch语句体结束。5、下面程序的运行结果是oincludemain()inta=l,b=10;do(b-=a;a+;while(b0);printf(,a=%d,b=%dn”,a,b);A、 a=3,b=llB、 a=2,b=8C、a=Lb=-lD、 a=4,b=9【答案】B【解析】本题考杳两个知识点:自加自减运算符和Ck)-while循环语句。dowhile循环条件是b-0,所以循环体语句只执行一次。6、有以下程序voidfun(int*a,intn)/*fun函数的功能是将a所指数组元素从大到小排序*intt,i,j
18、;for(i=0;in1;j+)for(j=i+l;jn;j+)if(aimain()(intc10=l,2,3,4,5.6,7,8,9,0,i;fun(c+4.6):for(i=0;ici);printf(n):)程序运行的结果是OA、1,2,3,4,5,6,7,8,9,0,B、0,9,8,7,6,5,1,2,3,4,C、0,9.8,7.6,5,4,3,2,1.D、1,2,3,4,9,8,7,6,5,0,【答案】D7、下列运算符中优先级最高的是oA、IIB、&C、+D、=【答案】C【解析】在选项中的几个运算符中,+运算符的优先级最高。8、合法的数组定义是OA、inta=string”;B、i
19、nta5=0,L2,3,4,5;C、chara=string;D、chara=0,1,2,3,4,5;【答案】D9、以下选项中可作为C语言合法常量的是0A、-80B、-080C、-8el.0D、-80.Oe【答案】A【解析】C语言的常量分为整型常量、实型常量和字符型常量。本题中包含整型常量和实型常量。选项B)以0打头,应该属于八进制整数,而八进制整数只能用数字07表示,所以选项B)不合法;选项C)和D)从形式上看属于实型常量,但对于指数形式的实型常量,e(或E)之前必须有数字,且e后面的指数必须为整数,所以选项C)和D)都不合法;选项A)属于实型常量中正确的十进制小数形式。10、下列选项中,能
20、够满足若字符串si等于字符串s2,则执行St要求的是A、 if(strcmp(s2,si)=0)ST;B、 if(sl=s2)ST;C、if(strcpy(s1,s2)=1)ST;D、if(sl-s2=0)ST;【答案】A11、具有相同类型的指针变量P与数组a,不能进行的操作是OA、 p=a;B、 *p=a0;C、 p=&a0;D、 p=&a;【答案】D12、以下有关function过程的说法中,正确的是。A、函数名在过程中只能被赋值一次B、如果在函数体内没有给函数名赋值,则该函数无返回值C、如果在定义函数时没有说明函数的类型,则该函数是无类型的D、执行函数过程中的EXitFUnetiOn语句
21、,将退出该函数,返回到调用点【答案】D13、下列不正确的转义字符是oA、BJ,C、,D、088【答案】D【解析】是反斜线转义字符是水平跳格转义字符;饭是换行转义字符;C语言中没有规定088为转义字符。14、以下对二维数组a进行正确初始化的是OA、inta23=l,2,3,4,5,6;B、inta3=1,2,3,4,5,6;C、inta2=1,2,3,4,5,6;D、inta=1,2,3,4;【答案】B15、执行语句Printf(%un”,+12345)的输出结果是。A、12345B、OC、-1D、非定值【答案】A16、有以下程序main()(inta=15,b=21,m=0;switch(a%
22、3)(caseO:m+;break;case1:m+;switch(b%2)(default:m+;caseO:m+;break;)Printf(%dn”,m);)程序运行后的输出结果是OA、1B、2C、3D、4【答案】A17、相同结构体类型的变量之间,可以A、相加B、赋值C、比较大小D、地址相同【答案】B18、下列程序的输出结果是Omain()inta,b,d=25;a=d10%9;b=aM(-l);printf(,%d,%d”,a,b);)A、6,1B、2,1C、6,0D、2,0【答案】B19、以下叙述中正确的是oA、每个数组包含一组具有同一类型的变量,这些变量在内存中占有连续的存储单元B
23、、一条语句只能定义一个数组C、数组说明符的一对方括号中只能使用整型常量,而不能使用表达式D、在引用数组元素时,下标表达式可以使用浮点数【答案】A【解析】数组的元素是同一类型,占用连续空间,所以选择A。20、有以下程序ftincludetypedefstructintb,p;a;voidf(ac)/*注意:C是结构变量名*/intj;(c.b+=l;c.p=2;main()(inti;aa=l,2;f(a);printf(,%d,%dn”,a.b,a.p);程序运行后的输出结果是OA、1,2B、2,4C、1,4D、2,3【答案】A【解析】结构体变量可以作为函数的参数和返回值。作为函数的实参时,可
24、以实现函数的传值调用。当使用结构体变量作为函数的形参时,实参也应该是结构体变量名以实现传值调用,实参将拷贝的副本传递给形参,在被调用函数中改变形参值对于调用函数中的实参没有影响。因此本题选择A。二、判断题(每小题2分,共20分)()1、在标准C中=是判断两个数是否相等。【答案】错误()2、全局变量本身就是静态存储方式。【答案】正确()3、逻辑表达式的值只能为1或。【答案】正确()4、COntinUC语句只能用于三个循环语句中。()【答案】正确()5、宏定义是用宏名来表示一个字符串,在宏代换时以该字符串取代宏名。【答案】正确()6、函数的实参传递到形参有两种方式:值传递和地址传递。【答案】正确(
25、)7、在对数组全部元素赋初值时,可以省略行数,但不能省略列数【答案】正确()8、定义在main函数后的任何函数都需在main中进行函数声明【答案】错误()9、指向数组元素的指针只可指向数组的首元素【答案】错误()10、在同一源文件中,使用extern可将全局变量的作用域向上扩展。【答案】正确三、编程题(每小题分,共40分)1、编写程序:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13.求出这个数列的前20项之和。(本题10分)【答案】#includeintmain()inti,t;floatsum=0;floata=2,b=l;for(i=l;i=20;i+)(sum=sum
26、+ab;t=a;a=a+b;b=t;)printf(z,%9.6fn,sum);2、编写程序:计算字符串中子串出现的次数。请输入两个字符串,以回车隔开,母先串在前,子串在后,比如:abcaa2(本题14分)【答案】#includettinclude#includeintmain()inti,j,k,TLen,PLen,count=0;charT50,P10;Printf(请输入两个字符串,以回车隔开,母串在前,子串在后:n);gets(T);gets(P);TLen=Strlen(T);PLen=Strlen(P);for(i=0;i=TLen-PLen;i+)(for(j=0,k=iJPLe
27、nttPj=Tk;j+,k+)9if(j=PLen)count+;printf(zz%dnzz,count);system(z,pausez,);return0;3、编程序建立一个带有头结点的单向链表,链表结点中的数据通过键盘输入当输入数据为-1时表示输入结束,使用结构体实现。(本题16分)【答案】ttincludetrincludestructlist(intdata;structlist*next;;typedefstructlistnode;typedefnode*link;intmain()(linkptr,head;intnum;ptr=(link)malIoc(sizeof(nod
28、e);head=ptr;printf(z,pleaseinputdata=nzx);scanf(%d,&num);while(num!=-1)ptr-data=num;scanf(z,%dz,&num);if(num!=-l)(ptr-next=(link)malIoc(sizeof(node);ptr=ptr-next;)else(ptr-next=NULL;break;)ptr=head;whiIe(ptr!=NULL)Printf(Thevalueis=%dn”,ptr-data);ptr=ptr-next;C语言程序设计专升本(三)一、单项选择题(每小题2分,共40分)1、以下关于IO
29、ng、int和short类型数据占用内存大小的叙述中正确的是,A、均占4个字节B、根据数据的大小来决定所占内存的字节数C、由用户自己定义D、由C语言编译系统决定【答案】D2、已知Chara;intb;floatc;doubled;则表达式a*b+c-d的结果为A、doubleB、intC、 floatD、 char【答案】A【解析】本题考杳混合运算表达式类型,由表达式中具有最高优先级的类型所确定,所以答案为A。3、若有定义语句:inta410,*p,*q4;且0V=iV4,则错误的赋值是A、p=aB、qi=aiC、p=aiD、p=&a21【答案】A4、有以下程序main()(inti=l,j=
30、l,k=2;if(j+Ilk+)Mi+)printf(,%d,%d,%dn”,i,j,k);)执行后输出结果是OA、 1,1,2B、 2,2,1C、 2,2,2D、 2,2,3【答案】C【解析】首先计算if语句后面的表达式值,先计算运算符&前面括号里的M”运算。在“运算中先计算j+,值为1(j的值为2),为真,后面的k+将不再计算,k的值依旧为2。计算&后面的表达式i+,值为l(i的值变为2)。整个表达式的值为真,所以执行后面的输出语句,最后输出的i、j和k的值为2、2和2。5、下列WhiIe循环的次数是。while(inti=0)i一;A、OB、1C、5D、无限【答案】A6、若有说明:int
31、a34=0;则下面正确的叙述是()oA、只有元素a00可得到初值OB、此说明语句不正确C、数组a中各元素都可得到初值,但其值不一定为OD、数组a中每个元素均可得到初值O【答案】D7、inta=l,b=2,c=3;if(ac)b=a;a=c;c=b;则C的值为OA、1B、2C、3D、不一定【答案】B8、以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。defineN10voidarrin(intxN)(inti=0;while(iN)scanf(%d,);在下划线处应填入的是OA、x+iB、&xi+lC、 &xi+D、 &x+i【答案】C9、在位运算中,操作数每右移一位,其结果相当于(
32、)A、操作数乘以2B、操作数除以2C、操作数除以16D、操作数乘以16【答案】B【解析】本题考查的知识点是:右移运算。根据右移运算的原理,右移一位相当于操作数缩小为原来的二分之一,故本题选B)。10、在C语言中,以作为字符串结束标志A、 n,BJ,C、0,D、0,【答案】D11、如有定义语句inta=1,8,2,8,3,8,4,8,5,8;则数组a的大小是A、10B、11C、8D、不定【答案】A12、下列程序的输出结果是includeintf(inta,intb);main()(inti=2,p,j,k;J=i;k=+i;P=f(j,k);printf(%c,p);)intf(inta,int
33、b)if(ab)c=l;elseif(a=b)c=0;elsec=-l;return(c);)A、-1B、1C、2D、编译出错,无法运行【答案】A【解析】函数调用相当于f(2,3),程序运算结果为-1。13、己知大写字母a的ascii码是65,小写字母a的acsii码是97。下列能将变量C中的大写字母转换为对应小写字母的语句是OA、C=(C-A)%26+AB、 C=c+32C、c=c,A,+,AtD、c=(A+C)%26-a【答案】B14、有以下程序charfun(charX,chary)(if(xtypedef【答案】B18、下面程序的输出是.includevoidmain()intx=02
34、3;Printf(%dn”,-x);A、17B、18C、23D、24【答案】B19、有以下程序main()(inta44=1,4,3,2,8,6,5,7,3,7,2,5,4,8,6,1,i,k,t;for(i=0;i3;i+)for(k=i+l;k4;k+)if(aiiakk)(t=aii;aii=akk;akk=t;)for(i=0;i4;i+)Printf(d,,a0i);程序运行后的输出结果是。A、 6,2,1,1,B、 6,4,3,2,C、 1,1,2,6,D、2,3,4,6,【答案】B【解析】本题使用选择法对二维数组对角线上的元素按从大到小的顺序进行排列。最后输出数组第一行的数据。故
35、本题答案为B)。20、下面哪个不是关键字?A、intB、 structC、 defineD、 continue【答案】C二、判断题(每小题2分,共20分)()1、内存中的每个存储单元都有一个惟一的地址【答案】正确()2、for(i=l;i+4;);语句结束后变量i的值是4【答案】错误()3、对于如下的SWitCh语句(使用break)的一般形式,其执行流程是:首先求解表达式,如果表达式的值与某个常量表达式的值相等,则执行该常量表达式后的相应语句段;如果表达式的值与任何一个常量表达式的值都不相等,则执行default后的语句段,最后执行break语句,跳出SWitCh语句。switch(表达式)
36、(case常量表达式1:语句段1;break;case常量表达式2:语句段2;break;-case常量表达式n:语句段n;break;default:语句段n+1;break;【答案】正确()4、break语句可以用来跳出整个循环语句【答案】正确()5、charS=CLangUage;表示S是一个指向字符串的指针变量,把字符串的首地址赋予S【答案】正确()6、输入操作称为写操作,将输入流中的信息存到内存时,使用写函数。【答案】错误()7、二维数组在定义时,只能省略第一维的长度。【答案】正确()8、实参向形参进行数值传递时,数值传递的方向是单向的,即形参变量值的改变不影响实参变量的值。【答案】
37、正确()9、任何数组在使用前必须先定义。【答案】正确()10、一个源程序可使用多个文件包含命令,但一个文件包含命令只能包含一个文件。【答案】正确三、编程题(每小题分,共40分)1、编写程序:从键盘上输入若干个整数,并将这些整数存放在数组X中,统计计算出平均成绩,当输入负数时结束()例如,如果从键盘上输入:1234-8,则程序的输出应为:output:ave=2.50(本题10分)【答案】includemain()(floatx1000,sum=0.0,ave,a;intn=0,i;printf(z,entermark:nzz);scanf(z,%f,z,&a);while(a=0.0&n100
38、0)(sum+=a;x11=a;n+;scanf(%f,&a);)ave=sumn;printf(z,output:n);printf(zzave=%.2fn”,ave);2、编写程序:判断输入字符的字母的个数,以*结束输出。(本题14分)【答案】includemain()(charch;inti=0;ch=getchar();while(ch!=,*,)if(ch三,a,&ch三,a,&ch=,z,)(i+;ch=getchar();printf(%dn”,i);3、编写程序:编写input()和OUtPUt()函数输入,输出5个学生的数据记录。(本题16分)【答案】ttincludetti
39、ncludetypedefstructcharname20;charsex5;intage;Stu;voidinput(Stu*stu);voidoutput(Stu*stu);intmain()Stustu5;Printf(请输入5个学生的信息:姓名性别年龄:n);input(stu);Printf(5个学生的信息如下:n姓名性别年龄n);output(stu);system(,pausez,);return0;)voidinput(Stu*stu)inti;for(i=0;i5;i+)scanf(zz%s%s%dz,stui.name,stui.sex,&(StUi.age);)voidoutput(Stu*stu)inti;for(i=0;i5;i+)printf(zz%s%s%dnzz,s