




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2017年山西大学数学科学学院834程序设计考研题库(一)说明:①本资料为VIP包过学员内部使用资料。涵盖了历年考研常考题型和重点题型。一、选择题I•若有代瞄加+e'!(其中e仅代表自然对数的底数,不是变量),则以下能够正确表示该代数式的C语言表达式是( )«A)sqrt(fabs(pow(n,x)+exp(x))) B)sqrt(fabs(pow(n,x)+pow(x,e)))C)gqrt(ab§(iTx+e"x)) D)sqrt(fahs(pow(x,n)+exp(x)))【答案】A[解析]math.h是数学运算库函数的头文件名:doublesqn(double) 平方根函数doublefabs(double) 绝对值函数doublepow(doublex.doubley) 返回x>expfdoublex) 返回e*2.有以下程序:律include<stdio.h>main()inia=1.b=0;l<»r(;a<5;a++)iif(a%2==0)break:continue;b+=a;printf("%d\n",b);程序运行后的输出结果是(TOC\o"1-5"\h\zOl104【答案】A【解析】题for【解析】题for循环内有break和continue语句,且均放在b+=a语句前面,无论江条件是否满足,b+二/都不会被执行,因此b值始终为0。3.若有定义语句:ima⑷[10],*P,*q[4]:且凶<4,则错误的赋值是( )。p=aq[i]=a[i]p=a[i]p=&a[2][I]【答案】A【解析】二维数组名是指向指针的指针,所以a和q都为指向指针的指针,而p为指向int类型的指针,P和a不同类型,故A项P=a赋值语句错误。其余选项可以正确赋值’其中D项是用&返回整数的地址,然后复赋值已4.有以下程序:#include<sldio.h>#include<siring,h>char♦a="you";char♦b="WelcomeyoutoBeijing!";main()Ichar*p;P=b;while(*p!=•a)p++;p+=strlen(a)+1;printf("%s\n”,p);I程序运行后的输出结果是( \Beijing!youtoBeijing!WelcomeyoutoBeijing!toBeijing!【答案】D【解析】while函数判断p指针指向地址的内容是否和a指针指向地址的内容相等,如果不是,则移动指针P+1,当P指向%字符串中的y时,和*a首地址元素相等,退出while语句后,p再向右移动a字符串长度+1个单位地址,此时p指向・t'・输岀t及剩余的字符串,D项正确。.有如下定义:structstIinta;floatb;}x[10];FILE*fp;若文件已正确打开,且数组x的10个元素均已赋值,以下将数组元素写到文件中的语句错误的是(Xfbr(i=O;i<10;i++)fwrite(x,sizeof(structst).1,fp);(write(x,10♦sizeof(structsi).1Jp);fwrite(x,sizeof(structst),10.fp);for(i=0;i<10;i+4)fwrite(&x[i],sizeof(structst),1,fp);【答案】A[解析】A项中,因为n=L即每次写入I个结构体数据,x是数组的首地址,因此,每次写入的数据都是数组的首个结构体元素,没有将整个数组写入文件中去。.以下可以将任意一个两位整数n的个位数与十位数对换的表达式为( )。(n-n/10X10)X](bn/10n-n/10X10+n/10n/10+(n-n/10)(n-n/10)X10+(n/10)【答案】A【解析】A项n/1。得到十位数字,n-n/10得到个位数字,将个位数乘以10加上十囈字,(nn-10X10)XIO+n/lO实现将任意一个两位整数个位数与十位数对换,A项正确。B项n-n/10X10得到个位数字,n/10为十位数字,n-n/10X10+n/10实现两德数个隣与十位数之和,B项错误。C项n/IB(n-n/10)=n.不能实现题目中要求,C项错误。D项n/10是十位数字,n-n/10为原两位整数减去十位数字,不是个位数字,D项错误。有以下程序:以下聞:#include<stdio.h>#include〈string.h>main()Ichara[10]="abed";printf("%d,%d\n",strlen(a),sizeof(a));TOC\o"1-5"\h\z程序运行后的输出结果是( \7,44,108,810,10【答案】B【解析】C语言中,strlen()用来统计字符串的字符个数,sizeof()是求为数组分配的存储空间大小。该题中字符串P的字符个数为4.字符数组a的大小为10。有以下程序#incJude<stdio.h>voidfun(intn,int*s)Iintf;if(n==l)*s=n+l:elseIfun(n-l.&f);*s二f:I)main()intx=0:fun(4,&x);printf("%TOC\o"1-5"\h\z程序运行后的输出结果是( X3124【答案】B【解析】函数9dfun(inmim*s)有两个形参,第一个形参是传值,第二个形参是传引用,在函数fun内部改变、的值,贝IJ在函数I'un外部也会发生相应改变。f是函数内部的局部变量,递归调用时,把局部变量f以指针的形式传入,在下一层函数中会对f进行修改,当下一层函数返回后,再把当前局部变量I'赋值给形参s。函数调用过程如下表所示。函数调用f•sfun(4,&x)22fun(3,&D22fun(2,&f)22funs(1.&f)•2TOC\o"1-5"\h\z.若有定义语句:intx=10:,则表达式x-=x+x的值为( )。-20-10010【答案】B【解析】因为+的运算优先级高于赋值运算符,所以先做x+x结果为20,再做x-20,结果为-10赋值给X。.设有以下定义:charsi(1=“0123”:chars2[]=(*0,,'1','2','3'):则以下叙述正确的是( \数组si的长度小于s2的长度数组si和s2的长度相同数组si的长度大于s2的长度数组si和s2完全等价【答案】C[解析】为字符数组si赋值字符串“0123”时,字符串中字符依次放人数组中后,在最后f字符后要添加一个结束字符*\0,・数组si长度为5。数组s2只需要4个单元即可放下所有初始化值’故数组长度为4。所以数组si的长度大于S2的长度,C项正确。两个数组等价是指两个数组长度和类型以及对应每个元素值均相同’所以si和82不是完全等价,D项错误。11.有以下程序:^include<sldio.h>•include〈string.h>inain()Icharxf]="STRING”;k[0]=0;x[I]=:\0';x[2]='0I;printf("%d%d\n",sizeof(x),Mrlen(x))TOC\o"1-5"\h\z程序运行后的输出结果是( 161706371【答案】B[解析]charx[]="STR]NG”,这时分配的内存就是7个字节,包括结束字符,0,无论之后如何赋值,都不会改变,sizeof是计算字符串所占存储空间的大小,因此sizeof(x)=7,x[0]=0:x[l]='\0':[2]='0'.第一遇到结束字符’\0'结束赋值,这时char刈]为空,strlen(x)求的是字符串的个数,为0。12.若有定义语句:charstrlO14string*.str2[8].*str3,sir4[10]="string":,库函数strcpy的功能是复制字符串,以下选项中错误的函数调用是( )。strcpy<str3.strcpy(str2,strcpy<strl.strcpy(str4.“HELLO!”)“HELLO!”)“HELLO!”)“HELLO!M)【答案]A【解析]题目中字符指针str3,没有为指针开辟内存,能作为函数参数。13.关于C语言的变量名,以下叙述正确的是( )。变量名不可以与关键字同名变量名不可以与预定义标识符同名变量名必须以字母开头变量名是没有长度限制的【答案】A【解析】合法的标识符由字母(大、泻均可\数字和下划线组成,并且必须以字母或下划线开头。关键字是指被C语言保留的,不能用作其他用途的标识符,它们在程序中都代表着固定的含义,用户不可重新定义,A项正确。预定义标识符是系统已经有过定义的标识符,用户可以重新定义,所以可以作为变量名,B项错误。变量名除了以字母开头以外,还可以以下划线开头,C项错误。变量名没有长度限制,但不可超过编译器可以辨识的范围’D项错误。.有以下程序:#include<stdio.h>main(),char*mm[4j=t"abed”1234”mnop".”5678”;;char**|)m=mm;inti;for(i=0;i<4;i++)printf("%s",pm[i]+i);printf(”\n”);IITOC\o"1-5"\h\z程序的运行结果是( Xabcdl234mnop5678abcd234op8a2o8alm5【答案】B[解析】程序执行过程为:定义指针数组,长度为4,并为其初始化为4个字符串。定义指向指针的指针变量’并为其初始化为指针数组首地址。所循环依次输岀4个字符串,第i个字符串从第i个下标值处开始输出到字符串结束,即第f字符串输出abed,第二个字符串输出234,第三个字符串输出op,第四个字符串输出8。程序的运行结果是abcd2340p&故B项正确。.以下叙述中正确的是( )。C程序的基本组成单陳语句C程序中的每一行只能写一条语句简单C语句必须以分号结束C语言必须在一行内写完【答案】C[解析]c程序的基本组成单位是函数,A项错误:C程序以分号作为每个语句结尾,一行能写多条语句,也可以将f语句分几行书写,BD两项错误:而简单C语言语句必须以分号结束,所以C项正确。TOC\o"1-5"\h\z.以下选项中•合法的C语言实数是( )。3.lc0.4.2c0E137J2E【答案】B【解析】实型常朦数形式由十进制数加阶码标志飞”或“E”以及阶码(只能为整数,可以带符号)组成。•2。0为指数形式实数,B项正确。3.1e0.4,阶数不是整数,A项错误。E13阶码标志前缺少十进制数,C项错误。7.12E缺少阶码,D项错误。.以下叙述中正确的是( )。A在C语言程序中,main函数必须放在其他函数的最前面每个后缀为.C的C语言源程序都可以单独进行编译C在C语言程序中,只有main函数才可以单独进行编译D.每个后缀为.C的C语言源程序都应该包含一个main函数【答案】B[解析】main是主函数的起始行,每一个可执行的C程序都必须有一个且只能有一个主函数。后缀名为.C的C语言源程^都可以单独进行编译。.若变量己正确定义并赋值,则错误的赋值语句是( )。a=a+1;a=sizeof(double);a=dllc;a+l=a:【答案】D【解析】赋值号的左边必须是一代表某个存储单元的变量名’赋值号的右边必须是C语言中合法的表达式。赋值运算的功能是先求岀右边表达式的值,然后把此值赋给赋值号左边的变量。.有以下程序:二include<stdio.h>structst: intx.y;)data[2]={1.10.2,20Hmain()structst*p=data;printf(*%d..p->y);printf("%d\n-.(++p)->x);TOC\o"1-5"\h\z新运行的结果是( 110.I20,I10,220,2【答案】c【解析】题目在定义结构体st的同时便定义了结构体数组dala0可知. 结构体指针P指向数组的首地址,指向' 贝脂向dataJ.所以输出 即输岀和而「X。.以下叙述中正确的是( )程序设计的任务就是编写程序代码并上机调试程序设计的任务就是确定所用数据结构程序设计的任务就是确定所用算法。•心三种说法畔完整【答案】D【解析】程序设计是指设计、编程、调试程序的方法和过程。因为程序是软件的主体,软件的质量主要通过程序的质量来体现,在软件研究中’程序设计的工作^常重要,内容涉及相关的基本概念、工具、方法及方法学。二、设计题.请根据以下各小题的要求设计C应用程序(包括界面和代码)。请编写函数fun( ),它的功能是:将3行4列矩阵x乘以4行3列矩阵y.结果放在3行3列矩阵xy中。矩阵相乘的基本方法是:矩阵xy中行列下标分别为i,j的元素的值,是矩阵'中第i行上4个元素与矩阵y第j列上4个元素对应相乘的和。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序如下:include#includevoidfun(inia[3][4],intb[4][3],intab[3][3])IIvoidmain()IIint43][4]^||.1,|2,l,0,l|,|lt2,0,3ll;inty[4][3]=||l.lj|.10,0,01,|2,1,1|,11,intxy[3][3]=|0;,i.j;clrecr();fun(x.y.xy)printf("axb=ab:(3,3):\n");for(i=0;i<3;i++)Ifor(j=0;j<3;j++)printf("%d-,xy[i][j]);printf("\n");>I【答案】voidfun(inta[3][4],intb[4][3],intah[3][3J)Iintj,k,l;for(k=0;k<3;k++)for(l=0;l<3;l++)
for(j=0;j<4;j++)ab[k][l]+=a[k][j]【解析】本题首先要明确矩阵xy中行列下标分别为i,j的元素的值,是矩阵X中第i行上4个元素与矩阵y第j列上4个元素对应相乘的和。因此,每个元素的求解是循环控制来实现的,即ab|k]|l]Mk)[jl*bUI[l]-矩阵ab的每个元素的表示可用一个二重循环,整个函数是一个三重循环的嵌套。22.请编写_个函数fun,它的功能是:将一个表示正整数的数字字符串转换为一个整数(不得调用C语言提供的将字符串转换为整数的函数)。例如,若输入字符串“1234”,则函数把它转换为整数值1234。函数fun中给出的语句仅供参考。注意部分源程序存在文件PR0G1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入需要编写的若干语句。给定源程序:#include<stdio.h>include<string.h>longfun(char*p)I/*以下代码仅供参考*/intijen;/*ten%串长*/longx=0;len=strlen(p);/*以下完成数字字符串转换为-个数字注意:字符。不是数字0*/returnx;)mainO/*主函数*/{chars[6];longn;printf("Enterastring:\n");gets(s);n=fun(s);printf("%l(i\n".n);)【答案】iRW-1iRW-1)Ipx;/•负数时暨flag为-1,/elseif(*p=='+,)/•正数时置flag为I•/I件+;iH;G»rt;i<len:i++)I'fUO-叩-疗:/,将字符串转成相应的整数WX=X0flng:【解析】if( )语句的作用是判断该字符串应当为正数还是负数。注意:*P是f字符(如9、4),并不是一个数,要将其转成相应的数字需令其减去0(不是AO1).即*P-'O'就得到*P这个字符的相应数字’如"OF、‘8'-仲8等。【答案】【答案】A2017年山西大学数学科学学院834程序设计考研题库(二)说明:①本资料为VIP包过学员内部使用资料。涵盖了历年考研常考题型和重点题型。一、选择题I•有以下程序:#include<stdio.h>main()Iinta=3,b=3;printf("%d\n".a&b);JTOC\o"1-5"\h\z程序运行后的输出结果是( \6103【答案】D【解析】"&披位与运算符。a=3=H8,b=3=118,按位与结果为11B=3,D项正确。有以下程序:main()#include<stdio.h>Iinta=Itb=1;while(a一)b一;printf("%d,%d\n",a,b);TOC\o"1-5"\h\z新的运彳谒果是( \-l,00,0-l,-1l,1【答案】A【解析】本题执彳5H程为:極a值为1,执行循环,a=0,执行b--,b=0,再取a值为0,判断条件不成立,退出循环,再执行卜得到a=-l,最后输出a=-l,b=0o故A项正确。设有定义:inta=l.b=2,c=3:以下语句中执行效果与其他三个不同的是( \if(a>b)c=a;a=b:b=c;if<a>b)(c=a,a=b,b=c:}if(a>b)ca.a=b.b=c:if(a〉b)(c=a:a=b:b=c:}【解析】执行if语句时,首先计算紧跟在订后面一对圆括号中的表达式的值。如果表达式的值为非零(“真”>则执行其后的if子句,然后去执行if语句后的下f语句:如果表达式的值为零("假“、贝螂过订子句,直接执行订语句后的下f语句。A项中if子句只有。=4次0。三项中iI'子句包括c=a;a=b;b=c;4.有语句:k=x<y?(y<z?l:0):0:’以下选项中,与此语句功能相同的是( )。if(x<vIv<z)k=l:elsek=0:.if(x<y)k=O:elseif(y<z)k=l;.c.if(x<y)if(y<z)k=l:elsek=0;D.if(x<y&&y<z)k=l:elsek=O:【答案】D【解析】D项正确,题中,先判断x<y?_如果为假,直接返回0.如果为真’再判断y<z?如果为真返回为1,否则返回0,综合所知,只有时返回1,否则返回0。5.程序中已构成如下图所示的不带头结点的单向链表结构’指针变量s、P、q均已正确定义,并用于指向链表结点.指针变量s总是作为头指针指向链表的第一个结点。若有以下期段q=s;s=s->next;p=s;while(p->next)p=p->nexl;p->next=q:q->next=NULL;该程序段实现的功能是( \A删除首结点尾结点成为首结点首结点成为尾结点删除尾结点【答案】C【解析】进过while循环后,p指向链表的尾结点,P->next=q,是把q置为p的next结点:q->next=NULL.q的next结点为空,此时q结点成为链表的尾結点。6.在源程序的开始处加上“#include<stdio.h>”进行文件引用的原因以下叙述正确的是( XA.stdio.h文件中包含标准输入输出函数的函数说明’通过引用此文件以便能正确使用prinff、scanf等函数B将stdio.h中标准输入输出函数链接到编译生成的可执行文件中,以便能正确运行C将stdio.h中标准输入输出函数的源程序插入到弓I用处,以便进行编译链接D将stdio.h中标准输入输出函数的二进制代码插入到弓I用处,以便进行编译链接【解析】Fdio.h-文件中包含标准输入输出函数的函数说明,预处理指令#include<stdio.h濃指程序可以在该文件中找到printf,scanf等函数,因此答案为A选项。若有定义语句:doublex,y.*px.*py:执行px=&x:py=&y;正确的输入语句是( \A)scanf(”%lf%lf',px.py); B)gcanf(”%f%「&x,&y);C)Hcanf(,,%f%f\x,v); D)scanf(H%If【答案】A【解析】double类型,scanf函数中格式应该使用%lf,px中存储的是x的地址’可以直接在scanf函数中使用。有以下程序:#includc<stdio.h>main()iints[3][2]=11,2,3,4,5,6:.*ps[3],k;for(k=0;k<3;k++)Ips[k]=8(k];printf(M%dn.*(ps[k]+1));tf1TOC\o"1-5"\h\z程序的运行结果是( 1246I35I23456【答案】A[解析】程序执行过程为:定义二维数组s与指针数组ps,for循环实现将二维数组每一行的首地址赋值给对应的指针数组元素,然后输岀二维数组每行的第二个元素。程序的运行结果是246。.下面选项中关于位运算的叙述正确的是( )。典算符都需要两个操作数位运算的对象只能是整型或字符型数据左移运算的结果总是原操作数据2倍右移fe算时,尚位总是补0【答案】B【解析】B项正确,C语言中,位运算的对象只能是整型或字符型数据,不能是其他类型的数据。A项错误,位运算符中取反操作符只需要f操作符;C项错误,左移时,若左端移出的部分不包含有效二进制数1,则每左移一位,相当于移位对象乘以2,如果端移出的部分包含有效二进制数1,结论不成立;D项错误,右移运算时,对于无符号整数和正整数,高位补0;对于负整数,高位补I。.有以下程序#inclade<stdio.h>intf(intn){intt=0.a=5;if(n/2)(inta=6:t+=a++;)else{inta=7:t+=a++;}returnt+a++;Imain()(inis=0.i=0;for(;i<2;i++)s+=f(i);printf("%d\n",s);程序运行后的输出结果是( 1A.36B.28C.32D.24【答案】D【解析】函数f可以重写为:Iintf(intn){2intt=0,a=5;3if(n/2!=0){4inta=6;//此时第2行中定义的a失效5t=t+a;〃t与第4行中定义的a相加6a++;〃第4行定义的a自增7}〃第4行定义的a失效8else(9inta=7;〃此时第2行中定义的a失效10t=t+a;〃t与第9行中定义的a相加IIa++;〃第9行定义的a自增121〃第9行定义的a失效13inttemp=t+a;与第2行定义的a相加,此时a=514a++;〃第2行定义的a相加15retunitemp:16}调用f(0>进入第8行的else语句:第10行,t=7;第13行,兩5=12,返回12。调用f(丨),因为a都是函数f中的局部变量,在f(0)结束时都己经被销毁,所以f(1)和f(0)的返回值相同,返回12。s=f(0)+f(l)=24,结果输岀240.构成C程序的三种基本结构是( )序结构、转移结构、递归结构顺序结构、嵌套结构、递归结构CJ贿鋤勾、选择结构、循环鋤勾D蹈结构、循环结构、鱈结构【答案】C【解析】结构化程序由三种基本结构组成:顺序结构、选择结构和循环结构。已经证明,由三种基本结构组算法可以解决可复杂的问题。.以下选项中不能用作C程序合法常量的是( )o1,234"\123"123"\x7D"【答案】A【解析】常量分为数值常量和字符串常量,A项错误。BD两项为字符常量;C项为数值常量。.有以下程序:#include<sldio.h>main()Ichara='H';a=(a>='A,&&<=,Z')?(a-'A,+'a'):a;prinlf(c\nM.a);TOC\o"1-5"\h\z程序运行后的输出结果是( XAaHh【答案】D[解析】首先将H赋给变量a,问号前f表达式成立,问号后面减去—大写字母A再加上小写字母a实际是将原来的大写字母转换成小写字母,即H转换成h,再将结果赋给a。.以下叙述中错误的是( )。非零的数值型常量有正值和负值的区分常量是在程序运行过程中值不能被改变的量定义符号常量必须用类型名来设定常量的类型用符号名表示的常量叫符号常量【答案】C【解析】在C语言程序中,可以用一个符号名来代表一个常量,称为符号常量,符号常量在定义是不建’其本身就能表达其类型。15.若函数中有定义语句intk:.则( )。系统将自动给k赋初值。这时k中的值无定义系统将自动给k赋初值-I这时k中无任何值【答案】B[解析]intk;这条语句是定义一个整型变量k,这是动态定义,编译程序仅为k开辟存储单元,而没有在存储单元中存放任何初值,此时变量中的值时无意义的。若是静态定义,则会自动初始化,其默认值为0。.有以下程序:#include<stdio.h>#defineFNA(x)x♦x#defineFNB(x)x+xmain()Iinta=2,b=4;printf(”%d,%d\n”,FNA(FNB(a)),FNB(FNA(b)));ITOC\o"1-5"\h\z程序运行后的输出结果是( 18,1616,328,32I6,16【答案】C【解析】带参数的宏定义不是进行简单的字符串替换,而是要进行参数替换不计算,只是进行简单的替换。替换过程是:用宏调用提供的实参字符串,直接置换宏定义命令行中相应形参字符串,非形参字符保持不变。FNA(FNB(a))的替换过程为:FNA(2+2)替换为2+2X2+2,计算结果为8。FNB(FNA(b))的替换过程为:FNB(4*4)替换为4X4+4X4=32。程序运行后的输岀结果是8,32,故C项正确。.有以下程序#include<stdio.h>main(){inta=3;printf("%(l\n",(a+=a-=a*a));ITOC\o"1-5"\h\z程序运行后的输出结果是( 1-129OD.3【答案】A【解析】C语言中,表达式从右向左计算。a+=a-=a*a;可以写成a-=a*a;a+=a:而心血等价于a=a-(a*a)=3-(3*3)=-6;a+=a都介于a=a+a=(-6)+(-6)=-12O.以下关于字符串的叙述中正确的是( )。C语言中有字符串类型的常量和变量两个字符串中的字符个数相同时才能进行字符串大小的比较可以用关系运算符对字符串的大小进行比较D左串比空格打头的字符串小【答案】D【解析】字符串比较的方法是:依次对si和S2中对应位置上的字符两两进行比较’当出现第一对不相同的字符时,即由这两个字符决定所在串的大小(比较字符大小的依据是其ASCII码值\空格是一种字符,所以空串肯定比空格打头的字符串小。.设函数中有整型变量n,为保证其在未赋值的情况下初值为0.应选择的存储类别是( )。autoregisterstaticauto或register【答案】c【解析】静态存储类型定义变量在未对其初始化时会对其初始化为默认值’其中而型的默认初始化是0,其他选项的存储类型不能保证。.有以下程序:#include<stdio.h>main()Iintx=0,y=6;doIwhile(—y)x++;|while(y―);printf(”%d,%d\n”,x,y);ITOC\o"1-5"\h\z程序的运行结果是( 15.06,05,-16,-I【答案】c【解析】程序执行过程为:执行do-while的循环体:y=5,判断y为真,x=I;y=4,x=2;y=3,x=3;y=2,x=4;y=l.x=5;y=0,判断y为假,退出循环体。判断do・・・while条件y=o为假,y—1,退出循环。输出x,y为5,-1,故C项正确。二、设计题21.请编写一个函数曲,它的功能是将SS所指字符串中所有下标为奇数位置的字母转换为大写(若该位置上不是字母,则不转换).例如,若输入“abc4Efg”,则应输岀“aBc4EFg”。注意部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。鮑麝#include<conio.h>#include<stdio.h>#include<string,h>#include<stdlib.h>voidfiin(char*ss)IIvoidmain()IFILE•wf;chartt[81],s[81]="abc4Efg";system(”CLS");printf("\nPleaseenteranstringwithin80characters:\n"):gets(tt);printf("\n\nAfterchanging,thesiring\n%s".It);fun(tt);printf("\nbecomes\n%s\n",»);/******************************/wf=fopen("out.dat"w");fun(s);fprintf(wf,”%s”,s);fclose(wf);/*****************************/I【答案】voidfun(char•ss)if(ss=NULL)Ireturn;Iinii;for(i=0;8s[ij!='\0';i♦+) 所指字符串中所有下标为奇数位置的字号梏换为大写*/Iif(i%2==l&Mi]>=,a,&&ss[i]<=V)说i】=Wi]-32;【解析】题目要求将给定字符串中奇数位置的字母转换为大写,需要先判断奇数位置以及此位置的字符是否是/」泻字母,如果是再通过其转换方法进行转换。c语言中,只要将小写字母减去32即转成大写字母,将大写字母加上32即转成小写字母。程序用if语句实现转换功能。22.请编写一个函数,用来删除字符串中的所有空格。例如’输入asdafaaz67,则输岀为asdafaaz67。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。鮑新:#include<stdio.h>include<ctype.h>#include<conio.h>voidfun(char*slr)I)main()Icharstr(8l];charMsg[]="lnpulastring:";intn;printf(Msg);gets(str);puts(str):fun(str);printfC***str:%s\n'\str):I【答案】voidfun(char*str)(inti=0;char*p=str:while(*p)/*遍历字符串*/I/*如果当前元素不为空格*/if(*p!=*•)I/*将当前元素保存到紀中*/il;Ip++:)岫W字符串最后加上结束标记符•/【解析】题目要求删除空格’也就是重新保存空格以外的其他字符。通过循环删除字符串中的每f空格,将非空格字符进行重新保存。2017年山西大学数学科学学院834程序设计考研题库(三)说明:①本资料为VIP包过学员内部使用资料。涵盖了历年考研常考题型和重点题型。一、选择题-以下叙述正确的是( )。C程序总是以main( )作为程序执行的起始行main( )函数若不带参数’其后面的一对圆括号可省略函数体内的定义语句和可执行语句允许任意穿插出现C语言中的语句之间必须用分号作为分隔符【答案】A【解析】main( )函数后面的括号告诉编译器这是f函数,不可以省略,排除B选项;在复合语句中’不仅可以有执行语句,还可以有定义语句,定义语句应该出现在执行语句的前面’故排除C选项;C语言中的某些语句可以不用分号’例如if语句,宏定义,故D选项错误;答案为A选项。.有以下程序(strcat函数用以连接两个字符串):#include<stdio.h>#include<clype.h>main()chara[20]=”ABCD\0EFG\0”,b[]=”UK”;strcat(a,b);printf("%s\n",a);程序运行后的输出结果是( \ABCDE\0FG\0IJKABCDIJKUKEFGUK【答案】B[解析]在C语言中,系统在每个字符串的最后自动加入f字符’\0'作为字符串的结束标志。chara[20]="ABCD\0EFG\0"中,当遇到就结束初始化,因此a[]=”ABCD”.b[]=”IJK”.连接这两个字符串strcaKa.'\0'b)得到ABCDUK。•若有定义doublea=22:inti=0.k=l8;.则不符合C语言规定的赋值语句是( )。a=a++.1++-i=(a+k)<=(i+k)i=a%lli=!a【答案】c【解析】C项错误,在C语言的算术运算符中’取余运算符“%”的左右两侧的两个运算分量必须題数。A项,赋值运算符的优先级高于“,”运算法,先进行赋值;B项,将农”右边的逻辑表达式的计算结果赋给变量i:D项,首先对变量a求逻辑非操作,然后将结果赋值给变量i4.有如権序:#include<stdio.h>rnain()inta=0,*ptr;ptr=&a;*ptr=3;a=(*ptr)++;printf("%d,%d\n",a,*ptr);TOC\o"1-5"\h\z程序运行后的输岀结果是( X4,40,1l,40,4【答案】A【解析】程序执行过程为:定义整型变量a=0与指针pt「,使指针指向变量a。对指针指向的变量进行赋值a=3,将指针所指向变量加1,并赋值给a=4,此时指针依然指向变量a,输岀a与指针指向的变量值:4,4,故A项正确。5.下面是有关C语言字符数组的描述,其中错误的是( )。不可以用赋值语句给字符数组名赋字符串B可以用输入语句把字符串整体输入给字符数组字符数组中的内容不一定是字符串字符数组只能存放字符串【答案】D[解析】字符数组可以用来存放单个的字符或者字符串。设a,b,C是整型变量,且已正确赋初值,以下选项中错误的赋值语句是( )。a=l%(b=c=2):a=(b=3)*c;a=b=c/10:a=2=(b=9)=1;【答案】D[解析]D项,"( y具有最高优先级,b先赋值9,再根据赋值运算符号自右向左进行赋值,再给b赋值为1,再计算2=b,赋值运算符左边必须是一个变量,但数值2是常量,语法错误。有以下程序:二incluae<stdio.h-voidfun(intp){intd=2;p=d++;printf(%d.p);}main(){inta=1;fun(a)sprintf(%d\n\a);TOC\o"1-5"\h\z程序运行后的输出结果是( X32I22122【答案】C[解析】C语言中函数参数传递满足“单向传递“,实现传递值的功能,实参能传给形参,形参却不能传回给实参。fun函数体内输出p的值为2,并不影响到fun函数外a的值,a的值在main函数内依然为I。.若有定义语句intkl=10,k2=20;,执行表达式(klkl>k2)&&(k2k2>kl)后,kl和k2的值分别为()。0和10和2010和1I0和20【答案】B【解析】在C语言中,没有专门的“逻辑值”,而是用非。表示“真”,用。表示“假”。根据优先级,先计算括号内的。括号内先比较心和k2的大小,由于k2〉kl,,故左边括号中的kl与k2比较的结果为假,值为0,再赋值给kl,可得kl的值为0,由于()与任何值相与结果都是。,故右边f括号不需运算,即k2的值不变,仍为20。.以下叙述中正确的是( )OA在scanf函数的格式串中,必须有与输入项一对应的格式转换说明符只能在printf函数中指定输入数据的宽度,而不能在scanf函数中指定输入数据占的宽度C-scanf函数中的字符串是提示程序员的,输入数据时不必管它D.复合语句也被称为语句块,它至少要包含两条语句【答案】C【解析】c项正确,scanf函数中的字符串是为了増加程序的可读性,并不影响数据的输入。A项错误,可以在%和格式字符之间加入…号,作用是跳过对应的输入数据:B项错误,可以在格式字符前加入一正整数指定输入数据所占的宽度:D项错误,用一对花括号把若干语句括起来构成一条复合语句。一个复合语句在语法上视为一条语句,在一对花括号内的语句数量不限。10.以下选项中能表示合法常量的是( )。“\007”1.5E2.0'\'1,200【答案】A【解析】A项,表示的是字符串常量。B项,浮点数的指数部分应该是整型;C项,单个转义符没有意义:D项,整数常量中间不能岀现逗号。11.以下能正确定义字符串的语句是( )Ocharstr[]="\O":charstr=,'kx43";charslr=n;chars(r[]={'\064'!:【答案】A【解析】字符串末尾一定要有结束标记,双引号括起来的字符串系统会默认添加结束标记。A项正确,定义了空字符串str。B项错误,str是char类型变量,不能用字符串为其赋值;C项错误,字符串应该用双引号括起来;D项错误,如果一个字符数组用来作为字符串使用,一定要人为加入'\0',str字符串中str|0]='\064'='4‘,但是str缺少结束符。12.有以下程序#include<stdio.h>voidswap(char*x,char*y){chart;t=*x;*x=*y;*y=t;Imain()(char*sl=,,abc'\*s2=“123”;swap(sl,s2);printf("%s,%s\n'\sl,s2)I程序执行后的输出结果是( Xlbc,a23abc,123123,abc321,cba【答案】A【解析】字符串是一个特殊的数组,按照数组的规则,si应该指向的是数组的首地址,即%bc"的第一个字符的地址。s2指向的是“123”的第一个字符的地址。调用swap函数之后交换的是两个字符串的第—字符W和T的内容,因此打印输岀为A。有以下程序:#include<stdio.h>main()Ichara=4;printf("%d\nM,a=a<<l);tITOC\o"1-5"\h\z聞运行的结果是( 1401684【答案】C【解析】左移T立相当于原数乘以二,右移相当于除以二,a«l结果为4X2=8。没有超过char的类型表示范围,所以输出8。C语言中字符型变量可以用在任何整型变量可以使用的地方。C语言源程序名的后缀是( )Cexeobjcp【答案】A【解析】C语言源程序名的后缀为.C有以下程序:itincludeVstdio.h>voidfun(mt.intn)inti.t;for(i=0;i<n2;i-»♦)'t=a[,i':a[i*]=a[n-1-main(34 intk£10]=(1.2.3.4.5.6.7.8.9.10}.!:fun(k.5);for(i=2;i<8;i++)printf(%<f.ki]);printf;程序运行的结果是( X34567878765431098765321678【答案】D【解析】由于数组名本身是一个地址,所以在用数组名作为实参传递时’对应的形参相当于一个指针变量,在函数中可以通过指针变量来弓I用数组元素,从而改变元素的值。本题中函数fun的作用是」随组A的前n个元素进行逆转,fun(k,5)的结果是数组k的前五个元素I、2、3、4、5变为5、4、3、2、1、逆转后,输出数组中第3个至第8个元素。.有以下程序:#include<stdio.h>#include〈string.h>typedefstructJcharname[9j;charsex;fioatscore[2];:STU;voidf(STUa)ISTUb=\"Zhao",*m•,85.0,90.01;inti;strcpy(a.name.b.name);a.sex=b.sex;for(i=0;i<2;i++)a.score[i]=b.score[i];main()ISTUc=|,,Q>anM,'f',95.0,92.01;f(C);printf("%s,%c,%2.0f,%2.0f\n",c.name.c.sex.c.score[0j,c.scorefI]);I程序的运行结果是( IQian,f,95,92Qian,m,85,90Zhao,f,95.92Zhao,m,85,90【答案】A【解析】结构体作为函数参数时是传值调用。本题中,函数传递的是实参结构体变量中的值。函数体内对形参结构体变量中任何成员的操作都不会影响对应实参中成员的值。因此门)没有任何实际作用。.若有定义语句intx=12,y=8,z;,其后执彳福句z=0.9+x/y,则z的值为。TOC\o"1-5"\h\zI.9122.4【答案】B【解析】根据优先级先计算x/y,即12/8,由于是整型,故x/y的值为1,接着计算0.9+1=19由于z定义为整型’故最终结果为1。18.有以下程序:"include<stdio,h>main()Iinta=1.b=0:for(;a<5;a++)Iif(a%2==0)break;b+=a;printf("%d\n”,b);ITOC\o"1-5"\h\z程序的运行结果是( Xl10O4【答案】A【解析】程序的执行过程为:a=l时,a%2=l条件不成立,执彳請句b+=a;得到b=l;a=2时,a%2=0条件成立,执行语句break;跳出循环。输岀b=l,故A项正确。.有以下程序:^include<sldio.h>intk=5;voidf(int*s)I8=&k;♦s=7;I.Imain()Iintin=3;printf("%d,%d\n",m,k);ITOC\o"1-5"\h\z程序运行后的输出结果是( X3,57,75,73,7【答案】D【解析】函数f( )的功能是定义一个整型的指针变量s,指向全局变量k,然后修改S指向地址中的值为7,因此f( )函数只是修改全局变量k的值为7,与main( )函数中临时变量m无关,因此最后输出为3,7。.有以下程序(注:字符a的ASCII码值为97):^include<stdio.h>main()Ichar•s=I"abc"|doIprintf(H%d°.*s%l0);++a;|while(♦s);TOC\o"1-5"\h\z程序运行后的输出结果是( Xabc7897890979800【答案】B【解析】a、b、c的ASCII值分别为97、98、99。程序中执行输出S中的内容与1()进行模运算后的值,s是一个指针,首先指向字符a,先执行97%10,结果为7;然后++s,指针指向下一个字符b,执行98%10,结果为8,直到s所指为空,故最后输出的结果为789。二、设计题21.请根据以下各小题的要求设计C应用程序(包括界面和代码)。请编写函数fun( ),该函数的功能是:计算并输岀给定整数n的所有因子(不包括I和自身)之和。规定n的值不大于1000。例如,在主函数中从键盘给n输入的值为856,则输出为:sum二763。注意部分源新给出女吓。请勿改动主函数main( )和其他函数中的任何内容,仅在fun( )函数的花括号中填入所编写的若干语句。试题程序如下:^include<sl(iio.h>ini(un(inin)Ivoidmain()Iintnt»um:printf(nInputn:n);scanf(”%d",&n);sum=fun(n);printf("sum=%d\n",sum);I【答案】intfun(intn)ints=0,i;for(i=2;i<=n-I;i++)if(n%i=0)s+=i;returns;【解析】本题的设计思路是:①遍历从2到M的所有整数;②用条件语句找出能被n整除的整数i,并累加求和;③用return语句返回因子的和。22.规定输入的字符串中只包含字母和*号。请编写函数fun,其功能是:使字符串中尾部的李号不多于n个若多于n个,则删除多余的点号;若少于或等于n个,则不做任何操作,字符串中间和前面的*号不删除。例如,字符串中的内容为“****A+BC*DEF*G*******”,若n的值为4,删除后,字符串中的内容应;“****A*BC*DEF*G****”;若n的值为7,则字符串中的内容仍为“****A*BC*DEF*G*******”n的值在:函数中输入。编写函数时不得使用C语言提供的字符串函数。注意:部分源程序给出如下。请勿改动主画数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<stdio.h>voidfunfchar*a,intn)main()(chars[81];intn:printf("Entera^tring:\n");printlf"Entern:");sranf(',%(l".&n);fun(s,n);printi'C'Thestringafterdeleted:\n");puLs(s);)【答案】void(im(char*a.intn)Iinti=O.k=0;char*p,*1;p=l=a:while(*t)t++:while(*t=='**)if(k>n)[while(*p&&p<t+n+1)(a[i]=*p;i++:p++:I明迎:【解析】通过while循环统计字符串尾部号*的个数,然后通过if语句比较尾部*号数是否多于n个,若大于则保留n个*号和其余字符。2017年山西大学数学科学学院834程序设计考研题库(四)说明:①本资料为VIP包过学员内部使用资料。涵盖了历年考研常考题型和重点题型。一、选择题•有以下程序段:charname[20::intnum:scanf("namc=%snum=%d”.name.&num):当执行上述程序段,并从键盘输入:name=Lilinum=1001<回车〉后,name的值为( \Liliname=LiliLilinum=name=Lilinum=l001【答案】A【解析】在C语言中输入多个字符串时,系统会把空格字符作为输入的字符串之间的分隔符。本题中,由于输入两个变量,所以中间应该以回车键为间隔,当从键盘输入name=Lilinum=IOOl只是输入第f变量,并且只将Lili赋值给了name。.以下能够实现计算5!的程序段是( )O(A)intfac=1,k=0; (B)intfac=0,k=l;dolk;fac*=k;lwhile(k<5);do|fack;k++;Iwhile(k<5);(C)intfac=1.k=1; (D)intfac=1.k=0;do|k;fac*=^;|while(k<=5);do|fac*=k;k|while(k<5);【答案】A[解析】do-while循环语句形式为:do{循环体}while(表达式),执行过程为:首先执行循环体,之后判断表达式,成立(非0.则再一次执行循环体’不成立(0.则退出循环。A选项:k=l,fac=1*I,判断kv5,条件成立进行下一次循环,直到k=5,fac=l*2*3*4*5,版5不成立退出循环,实现计算5!,A选项正确。B选项:fae从()开始,做乘法一直都是0,无法实现5!,错误。C选项:k=2,fac=l*2.循环条件成立,直到k=6,fac=l*2*3*4*5*6才因循环条件不成立退出循环,实现6!,错误。D选项:k=0,fae=l*0=0,之后做乘法一直为0,无法实现5!.错误。故选择A选项。3.有以下程序:#include<stdio.h>voidf(intx[],intn)Iif(n>1))n-1);printf(rt%d,",x[O]);Ielseprintf("%d,”,x[0]);Imain()I =11,2,3.4.5,6};f(z.6);printf("\ntt);I程序的运行结果是( X6,5,4,3,2,1,l,1l.1,1,1,1.1.l,2,3,4,5,6,【答案】A【解析】本题中递归函数调用执行过程为:f(z.6)->f 5)>f(&z[2].4)->f(&z[3].3)->f (&z[4],2)->f(&z[5],I),输岀x[Oh也即z[5〕=6,返回执行f(&H4],2)之后的输出x[0]语句,即5,同理再返回上一f函数.依次输出4,3,2,1。4.若要实现total=l+2+3+4+5求和,以下程序段错误的是( )。inti=1,total=1;while(i<5)Itotal+=i;i+=l;Iinti=1,total=0;while(i<=5)Itotal+=i;i+=l;iinti=0,total=0;while(i<5)ii+=I;total+=i;}inti=0,total=0;while(i<=5)Itotal+=i;i+=l;}【答案】A【解析】A项执行过程为:i=l,total=L判断while循环劉牛1<5成立,total=l+l,i=2;判断循环条件执行函数体,直到i=4,total=l+l+2+3+4,i=5;i=5循环条件不成立,退出循环,A项不能实现题目要求,错误。B项执行过程:i=l,total=0,1<=5成立,total=0+l=l,i=2;直到i=5,total=I+2+3+4+5,i=6;i=6条件不成立,退出循环,程序正确。C项执行过程:i=0.total=<).(R5成立,i=l,total=1i:直到i=5‘total=1+2+344+5:i=5劉牛不成立’退出循环’¥^^正确。D项执彳5^;程:i=0.t()ial=0,0<=5成立•total=0,i=5,total=l+2+3+4+5.i=6;i=6条件不成立,退出循环,程序正确。.以下叙述错误的是( )。未经赋值的全局变量值不确定未经赋值的auto变量值不确定未经赋值的register变量值不确定未经赋值的静态局部变量值为0【答案】A【解析】C语言中,系统将未经赋初值的全局变量默认为0,答案为A选项。.有以下程序(程序中库函数iMwench)用以判断ch中的字符是否为小写字母):#include<skiio.h>#includeVctype.h>voidfun(char*p)Iinti=0;while(p[ij)Iif(p[i]=="&&islower(p[i-l]))p[i-1]=p[i-1]-'a'+'A1;i++;IImain()IcharsiI100|="abcdEFG!”fun(si);printf("%s\n",sl);程序运行后的输出结果是( \abedEFG!AbCdEFg!aBcDEFG!abedEFg!【答案】c【解析】fun函数实现的功能是将字符串中空格前面的小写字母转换为对应的大写字母,“abedEFG!中需要改变的是b和d,因此为aBcDEFG!。.有如下程序:#include<stdio.h>structSIintx,y;I;main()structSdata[2]=}4,3,1,9};inti;for(i=0;i<2;i++)printf("%d,%d;",data[i].x,data[i].y»1);printf("\n");I程序运行后的输岀结果是( X4,1:1,4:4,1:2.4;4.3:1.9:4,3:2,3;【答案】A【解析】“>>”右移运算符。程序执行过程为:定义结构体数组data,并且初始化,则data[O].x=4.data[O]•y=3.data[l].x=l,data[l].y=9.For循环依次输出结构体变量的成员与经过位运算之后的结果o3=llB,9=1001B.data[01.y»l=l,data[l],y>>1=4“程序运行后输出结果为:4,1,1,4。.有以下定义语句,编译时会出现编译错误的是( )。chara='a'chara=*\n*;D.chara='\x2d'chara=,aa*;【答案】c【解析】本题中a为f字符型变量,只能为其赋值一个字符常量。C项中Wa.不是字符常量,所以会编译错误。BD两项为转义字符’编译可以通过。.以下选项中叙述正确的是( )。C语言的标识符可分为关键字、预定义标识符和用户标识符三类C语言的标识符可分为语句、变量和关键字三类C语言的标识符可分为函数名、变量和预定义标识符三类C语言的标识符可分为运算符、用户标识符和关键字三类【答案】A[解析]C语言的标识符可分为关键字、预定义标识符和用户标识符三类,A项正确,B、C、D项鲍.有以下程序:#include<stdio.h>main()IFILE»fp;inti,a[6]={1,2,3,4,5,6」;fp=fopen("d2.dat".Hw+H);for(i=0;i<6;i++)fprintf(fp,"%d\n",a[i]);rewind(fp);£or(i=0;i<6;i++)fscanf(fp,”%d”,&a[5-i]);fclose(fp);for(i=0;i<6;i++)printf("%d,",a[i]);I程序运行后的结果是( 14.5.6.1.2,3.1,2,3,3,2,).1.2,3.4.5.6.6,5.4,3,2.I,【答案】D【解析】main函数首先将数组a中的元素值写入文件,再将文件中的元素倒序存放在数组a中,最后答应数组a的值,最终输出为6,5,4,3,2,1。11.有以下程序#include<stdio.h>main()(inta=7:while(a;printf("%d\n",a);)TOC\o"1-5"\h\z程序运行后的输出结果是( X-lOl7【答案】A【解析】当a为。时,a-表达式为0,条件为假,循环结束,执行判断条件后a为-1。'2.有以下程序:#include<stdio.h>main()Ichar*pl=0;ini♦p2=0;float*p3=0;printf("%d,%d,%d\n",sizeof(pl),sizeof(p2).sizeof(p3));I程序运行后的输出结果是( 1l,4,84,4,4l,2.4l.1,4【答案】B【解析】sizeof( )函数表示求该变量所占字节空间,同时f指针变量占用4字节长度[在Win32系统中],因此输出为4。.有以下程序#include<stdio.h>main()Iinii.s=O,i[]=fl,2.3.4.5.6.7.8.91;for(i=0;i<9:i+=2)fi+=*(t+i);printf("%d\n",s);)TOC\o"1-5"\h\z程序执行后的输出结果是( 125204536【答案】A【解析】%司.等价于卧依次访问数组t中的偶数位元素,s=l(O|+t[2|+t|41+U61+t|81=1+3+5+7+9=25。.设有定义:in(k=0;TOC\o"1-5"\h\z以下选项的四个表达式中与其他三个表达式的值不相同的是( I++kk+=lk++k+1【答案】c【解析】I表达式值为k的值,其余为k,l的值。.设a,b,c是整型变量且均已赋值,则以下选项中错误的赋值语句是( )0a=<b=3)=1;a=(b=2)+c:a=b=c+10;a=1+(b=c=2):【答案】A【解析】赋值运算结合性为由右向左结合,赋值运算符左值为变量,右值为变量或常量,且左右两边数据类型相同才能实现赋值。A项中,赋值运算(b=3)=1,左值为表达式,不是变量不能被赋值,A项错误。B项运算过程为,先赋值阵2,再计算b+c,将结果赋给a,是正确的赋值语句。C项运算过程为.先计算c+IO将结果赋给b,再将b赋给a,是正确的赋值语句。D项运算过程为,先将2曜c,胡各c赋给b,然后计算l_b,将结果睽編証确的赋值语句。.下列叙述中正确的是( )。A每个C程序文件中都必须要有一个main函数B在C程序中main函数的位置是固定的C.C程序中所有函数之间都可以相互调用D在C程序的函数中不能定义另f函数【答案】D[解析]D项正确,C语言语法规定,在函数中不能定义其他函数。A项错误,C程序必须要有一个main函数,但并不是每个文件中都要有;B项错误,main函数的位置没有特殊要求;C项错误,从其他函数中不能调用main函数。.在以下程序:"include<stdio.h>main()Iinta=I.b=0:iff»a)bi:elseif(a==O)if(a)b+=2;elseb+=3;printf(”%d\iT.b)TOC\o"1-5"\h\z程序运行后的输出结果是( \0I23【答案】A【解析】if(!a>不满足跳出,if(a==O)不满足,跳出if-&循环,并没有往下执行,因此b值没有改变。.以下叙述中正确的是( )。在算法设计时,可以把复杂彳琦分解成一些简单的子任务B在C语言程序设计中,所有函数必须保存在—源文件中只要包含了三种基本结构的算法就是结构礎序结构化程序必须包含所有的三种基本结构,缺一不可【答案】A【解析】A项正确,模块化的程序设计方法;B项错误,C语言中,函数可以放在不同的源文件中:CD两项错误,由三种基本结构所构成的程序称为结构化程序,三种基本结构可以任意组合。TOC\o"1-5"\h\z.以下选项中合法的标识符是( )o1_11-1111 【答案】C[解析]C语言中标识符的命名规则是:标识符由字母、数字和下画线组成,并且第一个字符必须是字母或下画线。C语言的标识符是区分大/」泻字母的。.有以下程序:#include<stdio.h>main()inia=1,b=2;while(a<6)ib+=a;a+=2;b%=10;Iprintf("%d.%d\n",a,b):TOC\o"1-5"\h\z程序运行后的输出结果是( \5,117,17,116,1【答案】B【解析】第—'次循环,a=l,b=b+a=3,a=a+2=3,b=b%10=3;第二次循环,a=3,b=b+a=6,a=a+2=5.b=b%10=6;第二次循环,a=5,b=b+a=lha=a+2=7,b=b%10=1;结束循环。二、设计题.程序定义了NXN的二维数组,并在主函数中自动赋值。请编写函数讪(inla||[N|.ini2,该函数的功能是使数组左下半三角元素中的值乘以n。例如’若n的值为3,a数组中的值为:则返回主程序后a数组中的值应为:(3 9 7'6 9 8J21518,注意:部分源程序给岀如下。请勿改动函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程*#include<stdio.h>#include<conio.h>"include<stdlib.h>#defineN5voidfun(inta[][NJ,intn)IImain()Iinta[N][N],n,i,j;printf(*******Thearray*****\nM):for(i=0;i<N;i++)Ifor(j=0;j<N;j++)Ia[j]=rand()%IO;printf("%4d\a[i][j]);Iprintf(”\nH);In=rand()%4;printf("n=%4d\n",n);fun(a.n);printf("*****THERESULT*****\n”);for(i=0;i<N;i++)for(j=O;j<N;j++)printf(”%4d”,a[i][j]);printf("\nM);I【答案】voidfun(inta[][N],intn)Iinti,j;if(a==NULL)return;for(i=0;i<N;i++)fbr(j=O;j<=i;j++)/*矩形的下三角时,积相乘*/a[i][j]=a[i][j]♦n;I[解析】首先从数组中找出要被乘以n的元素,即找出将被挑出的元素在原数组中的分布规律。通过观察得出’要被处理的元素下标值的范围是每行中从第一元素开始,直到列数等于该行行数时为止。找到这个规律后,依次从数组中取得符合要求的元素,然后乘以n。22.请根据以下各小题的要求设计C应用程序(包括界面和代码)0请编写函数fun( ),它的功能是統计各年龄段的人数。N个年龄通过调用随机函数获得,并放在主函数的age数组中;要求函数把。至9岁年龄段的人数放在叩WP,把10至19岁年龄段的人数放在岫中,把20至29岁年龄段的人数放在d|2]中,其余依次类推,把100岁(含100岁)以上年龄的人数放在叩0]中。结果在主函数中输出。注意:部分源程序给出如下。请勿改动主函数main( )和其他函数中的任何内容,仅在函数fun的花括号中填入所编写
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论