C语言程序设计(第二版)习题参考答案1_第1页
C语言程序设计(第二版)习题参考答案1_第2页
C语言程序设计(第二版)习题参考答案1_第3页
C语言程序设计(第二版)习题参考答案1_第4页
C语言程序设计(第二版)习题参考答案1_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

C语言程序设计(第二版)习题参考答案1C语言程序设计(第二版)习题参考答案1C语言程序设计(第二版)习题参考答案1xxx公司C语言程序设计(第二版)习题参考答案1文件编号:文件日期:修订次数:第1.0次更改批准审核制定方案设计,管理制度C语言程序设计习题参考答案习题1一、判断题1.在计算机中,小数点和正负号都有专用部件来保存和表示。2.二进制是由0和1两个数字组成的进制方式。3.二进制数的逻辑运算是按位进行的,位与位之间没有进位和借位的关系。4.在整数的二进制表示方法中,0的原码、反码都有两种形式。5.有符号数有三种表示法:原码、反码和补码。6.常用字符的ASCII码值从小到大的排列规律是:空格、阿拉伯数字、大写英文字母、小写英文字母。解:1.F2.T3.T4.T5.T6.T二、单选题1.在计算机中,最适合进行数值加减运算的数值编码是。A.原码 B.反码 C.补码 D.移码2.已知英文小写字母m的ASCII码为十进制数109,则英文小写字母y的ASCII码为十进制数。A.112B.120C.121D.1223.关于ASCII码,在计算机中的表示方法准确地描述是。A.使用8位二进制数,最右边一位为1B.使用8位二进制数,最左边一位为1C.使用8位二进制数,最右边一位为0D.使用8位二进制数,最左边一位为04.设在机器字长4位,X=0111B,Y=1011B,则下列逻辑运算中,正确的是___________。A.X∧Y=1000B.X∨Y=1111C.X⊕Y=0011D.=10005.下列叙述中正确的是()。A.高级语言就是机器语言B.汇编语言程序、高级语言程序都是计算机程序,但只有机器语言程序才是计算机可以直接识别并执行的程序C.C语言因为具有汇编语言的一些特性,所以是汇编语言的一种D.C源程序经过编译、连接,若正确,执行后就能得到正确的运行结果6.用C语言编写的源程序经过编译后,若没有产生编译错误,则系统将()。A.生成可执行文件 B.生成目标文件C.输出运行结果 D.自动保存源文件7.下列叙述中不正确的是()。A.main函数在C程序中必须有且只有一个B.C程序的执行从main函数开始,所以main函数必须放在程序最前面C.函数可以带参数,也可以不带参数。D.每个函数执行时,按函数体中语句的先后次序,依次执行每条语句解:1.C2.C3.D4.B5.B6.B7.B三、填空题1.()10=()2=()8=()162.(.10111)2=()8=()16=()103.输入三个数,计算并输出三个数的和与三个数的乘积。程序如下:#include<>voidmain(){inta,b,c,s,z;printf("Pleaseinputabc:\n");s=a+b+c;printf("%d\n",s);}*4.输入三角形三条边的边长,计算并输出三角形的面积。 根据三条边的边长,计算三角形面积的公式如下:程序如下:#include<>#include<>voidmain(){doublex,y,z,s,dime;scanf("%lf%lf%lf",&x,&y,&z);dime=sqrt(s*(s-x)*(s-y)*(s-z));}解:1.2.3.scanf("%f%f%f",&a,&b,&c);z=a*b*c;printf("%f",z);4.s=(x+y+2)/2;printf("%f",dim);四、编程题1.仿照例,编程序在屏幕上显示:*****************************MerryChristmas!HappyNewYear!*****************************解:#include<>voidmain(){printf("*****************************\n");printf("MerryChristmas!\n");printf("HappyNewYear!\n");printf("*****************************\n");}2.仿照例编程,输入一个整数,计算这个数的平方。解:#include<>voidmain(){inta,z; printf("请输入一个整数:\n"); scanf("%d",&a);z=a*a; printf("%d*%d=%d\n",a,a,z);}*3.仿照例编程,输入两个数后,输出其中较小值。解:#include<>floatmin(floatx,floaty) {floatm; if(x<y)m=x;elsem=y;returnm; }voidmain(){floata,b,c,mindata; printf("请输入二个数:\n"); scanf("%f%f",&a,&b);mindata=min(a,b); printf("较小数:%f\n",mindata); }*4.仿照例编程,输入a、b后,输出一元一次方程ax+b=0的解。解:#include<>voidmain(){floata,b,x; printf("请输入a、b:\n"); scanf("%f%f",&a,&b);x=-a/b; printf("x=%f\n",x);}*5.仿照例编程,输入圆柱体的半径和高,计算并输出圆柱体的体积。解:#include<>voidmain(){floatr,h,s,v;printf("Pleaseinputrandh:\n");scanf("%f%f",&r,&h);v=*r*r*h;printf("V=%f\n",v);}习题2一、判断题1.任何变量都必须要定义其类型。2.C语言的double类型数据在其数值范围内可以表示任何实数。3.C语言的任何类型数据在计算机内都是以二进制形式存储的。4.isdigit(‘5’)的结果为0。5.printf函数中格式符“%c”对应的参数只能是字符类型。6.按格式符“%d”输出float类型变量时,截断小数位取整后输出。7.在C语言程序中,ABC与abc是两个相同的变量。8.scanf函数中的格式符“%d”不能用于输入实型数据。9.格式符“%f”不能用于输入double类型数据。10.当格式符中指定宽度时,输出的信息完全取决于所指定的宽度。解:(1)T(2)F(3)T(4)F(5)F(6)F(7)F(8)T(9)T(10)F二、指出下列各项中哪些是C语言中的常量,并指出其类型10,150007–0x3dπ1e0e1o7o8‘x’‘xo’sin(3)0xf16‘\a’‘\009’+2‘\\’‘a’+20x100h012810L解:合法的C常量有:整型常量:007–0x3d0xf1610L实型常量:1e0+2字符型常量:‘x’‘\a’‘\\’三、指出下列各项中哪些是C语言中的用户标识符x_1X_2Highprintfβ3DSi/je2-e2countIntnumber$23next_sizeofIFsum_12_123#NO1:doublefor解:C的用户标识符有:x_1X_2Highe2countIntnumbernext_IFsum_12四、单项选择题1.C语言中,char型数据在内存中的存储形式是()。A.原码 B.反码 C.补码 D.ASCII码2.若有定义语句“charc='\72';”则变量c()。A.包含1个字符 B.包含2个字符C.包含3个字符D.定义不合法3.C语言中的基本数据类型包括()。A.整型、实型、逻辑型 B.整型、实型、字符型C.整型、逻辑型、字符型 D.整型、实型、逻辑型、字符型4.设c1、c2为字符型变量,执行语句“c1=getchar();c2=getchar();”时,从键盘输入A↙,c1和c2的值分别为()。A.都是‘A’ B.c1是‘A’,c2未输入C.c1未输入,c2是‘A’ D.c1是‘A’,c2是‘\n’5.a、b是整型变量,执行语句“scanf("a=%d,b=%d",&a,&b);”,使a和b的值分别为1和2,正确的输入是()。A.12 B.1,2 C.a=1,b=2 D.a=1b=26.设c为字符型变量值为‘A’,a为整型变量值为97,执行语句“putchar(c);putchar(a);”后,输出结果为()。A.Aa B.A97 C.A9 D.aA7.已知字母A的ASCII码值为65,以下语句段的输出结果是()。charc1='A',c2='Y';printf("%d,%d\n",c1,c2);A.输出格式非法,输出错误信息 B.65,90C.A,Y D.65,898.若要使用输入语句“scanf("%4d%4d%10f",&i,&j,&x);”,为i输入-10,为j输入12,为x输入,则正确的输入形式是()。A.–↙ B.–1012↙C.–.67↙ D.–10,12,↙9.能正确地定义符号常量的是()。A.#definen=10 B.#definen10C.#definen10;D.#DEFINEN1010.在C语言中,int、char、short三种类型数据在内存中所占的字节数()。A.由用户自己定义B.均为2个字节C.是任意的D.由机器字长决定解:(1)D(2)A(3)B(4)D(5)C(6)A(7)D(8)B(9)B(10)D五、填空题1.charch='$';floatx=;语句“printf("%c%–\\n",ch,x);”的输出结果是。解:$\n2.inti=123;floatx=–;语句“printf("i=%5dx=%\n",i,x);”的输出结果是。解:i=123x=3.charc='a';inta=65;语句“putchar(c+1);putchar(a);”的输出结果是。解:bA4.inta=98;语句“printf(“%d,%c,%o,%x”,a,a+1,a+2,a+3);”的输出结果是。解:98,c,144,655.intk;floatf;语句“scanf(“%3d%*4d%6f”,&k,&f);”执行时输入.43↙则k=,f=。解:k=123f=6.使用pow()函数时,程序的开头必须写一条预处理命令:。解:#include<>5.填空题。(1)inti=123,j=45;函数printf("%d,%d\n",i,j);的输出结果是。解:123,45(2)inti=123;floatx=;语句printf("i=%5dx=%\n",i,x);的输出结果是。解:i=123x=(3)floatalfa=60,pi=3习题3一、根据下列数学式,写出C的算术表达式。解:-(a2+b2)×y4的C表达式:-(a*a+b*b)*pow(y,4)的C表达式:(sqrt(2)+10*10)/(pow(tan(x),-1)+的C表达式:sqrt(pow(fabs(sin(x)),)的C表达式:pow(x,6)-exp(5)的C表达式:2*a*b+c+d)/(a+2*b-(c+d)/c/d)二、按照要求,写出下列C的表达式。1.写出int类型变量x为“奇数”的表达式。解:x%2==12.Int类型变量x、y、z,写出描述“x或y中有且仅有一个小于z”的表达式。解:x<z&&y>=z||x>=z&&y<z3.将double类型变量y保留四位小数的表达式。解:(int)(y*10000+/4.为变量s赋值:取变量x的符号,取变量y的绝对值。解:s=(x>=01:-1)*(y>=0y:-y)5.条件“-5≤x≤3”所对应的C逻辑表达式。解:-5<=x&&x<=36.a、b是字符变量,已知a的值为大写字母、b的值为小写字母,写出判断a、b是否为同一字母(不区分大小写)的逻辑表达式解:a+32==b或b-a==321:07.int类型变量a、b均为两位正整数,写出判断a的个位数等于b的十位数、且b的个位数等于a的十位数的逻辑表达式。解:a%10==b/10&&a/10==b%108.写出判断某个人是否是成年人(年龄大于21),且不是老年人(年龄大于65)的逻辑表达式。解:y>21&&y<=659.写出取变量a、b、c中最大值的条件表达式。解:(a>ba:b)>c(a>ba:b):c10.若字符变量ch为小写字母,则将其转换为对应的大写字母。解:ch=ch>='a'&&ch<='z'ch-32:ch三、单项选择题1.设intx=3,y=4,z=5;,下列表达式中值为0的是()。A.'x'&&'y' B. x<=yC.x||y+z&&y–z D. !((x<y)&&!z||1)2.已知x=10,ch='A',y=0;,则表达式“x>=y&&ch<'B'&&!y”的值是()。A.0 B. 1 C.“假” D.“真”3.判断char型变量c为数字字符的正确表达式为()。A.'0'<=c<='9' B.'0'<=c&&c<='9'C.c>='0'||c<='9'D.c>=0&&c<=94.下列运算符中,优先级最低的是()。A.: B.&& C.== D.*=5.若有条件表达式“xa++:b--”,则以下表达式中()等价于表达式x。A.x==0 B.x!=0 C.x==1 D.x!=16.有定义intk=4,a=3,b=2,c=1;,表达式“k<ak:c<bc:a”的值是()。A.4 B.3 C.2 D.17.执行下列程序段后,变量a,b,c的值分别是()。intx=10,y=9,a,b,c;a=(--x==y++)--x:++y;b=x++;c=y;A.a=9,b=9,c=9 B.a=8,b=8,c=10C.a=9,b=10,c=9 D.a=1,b=11,c=108.有定义inta=9;,语句“a+=a–=a+a;”执行后,变量的值是()。A.18 B.9 C.–18 D.–99.设x和y均为int型变量,则语句“x+=y;y=x–y;x–=y;”的功能是()。A.把x和y按从小到大排列 B.把x和y按从大到小排列C.无确定结果 D.交换x和y中的值10.有定义doublex=1,y;,表达式“y=x+3/2”的值是()。A.1 B.2 C. D.11.设有定义intx;doubley;,则下列表达式中结果为整型的是()。A.(int)y+x B.(int)x+yC.int(y+x) D.(double)x+y12.设有整型变量x,下列说法中,错误的是()。A.“”不是表达式 B.“x”是表达式C.“!x”是表达式 D.“sqrt(x)”是表达式解:(1)D(2)B(3)B(4)D(5)B(6)D(7)B(8)C(9)D(10)C(11)A(12)A四、填空题。1.设floatx=,y=;inta=7;,表达式x+a%3*(int)(x+y)%2/4值为。解:2.设intx=2,y=3;,执行语句“x*=x+y”后x的值为。解:103.设intx=17,y=5;,执行语句“x%=x–y”后x的值为。解:54.设inta=6,b=4,c=2;,表达式!(a-b)+c-1&&b-c/2的值为。解:15.设inta=2,b=4,x,y;,表达式!(x=a)||(y=b)&&!的值为。解:06.判断变量a、b是否绝对值相等而符号相反的逻辑表达式为。解:a==-b7.判断变量a、b中必有且只有一个为0的逻辑表达式为。解:a*b==0&&a+b!=08.设intm=2,n=2,a=1,b=2,c=3;执行语句d=(m=a==b)&&(n=b>c);后,m和n的值分别为。解:m为0,n为29.设inta=2;,表达式“a%2!=0”的值为。解:010.设charc='y';,表达式“c>='a'&&c<='z'||c>='A'&&c<='Z'”的值为。解:111.写出与代数式(x+2)ex+2对应的C表达式。解:(x+2)*exp(x+2)12.设inta=2;执行语句a=3*5,a*4;后a的值为。解:15五、写出下列程序的输出结果。1.#include<>voidmain(){unsignedk,n;scanf("%u",&n);f\n”,r,gv);}4.输入三角形的底和高,求三角形面积。解:#include<>#definePIvoidmain(){doublea,h,s;printf(“请输入三角形的底,高\n”);scanf(“%lf,%lf”,&a,&h);s=a*h/2;printf(“三角形面积=%f\n”,s);}5.编写程序,输入一个实数后输出该数的绝对值。解:#include<>voidmain(){doublex,y;printf(“请输入一个实数\n”);scanf(“%lf”,&x);y=x>=0x:-x;printf(“|%g|=%g\n”,x,y);}6.输入梯形的上底、下底和高,求梯形面积。解:#include<>voidmain(){doublea,b,h,s;printf(“请输入梯形的上底,下底,高\n”);scanf(“%lf,%lf,%lf”,&a,&b,&h);s=(a+b)*h/2;printf(“梯形面积=%f\n”,s);}7.输入矩形的边长,求矩形面积。解:#include<>voidmain(){doublea,b,s;printf(“请输入矩形的长,宽\n”);scanf(“%lf,%lf”,&a,&b);s=a*b;printf(“矩形面积=%f\n”,s);}8.已知等差数列的第一项为a,公差为d,求前n项之和,a、d、n由键盘输入。解:#include<>voidmain(){inta,d,n,sum;printf(“请输入等差数列的首项公差项数\n”);scanf(“%d%d%d”,&a,&d,&n);sum=a*n+n*(n-1)*d/2;printf(“sum=%d\n”,sum);}9.编写程序,将d天h小时m分钟换算成分钟,输入d、h、m,输出换算结果。解:#include<>voidmain(){intd,h,m,t;printf(“请输入天小时分钟\n”);scanf(“%d%d%d”,&d,&h,&m);t=d*24*60+h*60+m;printf(“%d天%d小时%d分钟=%d分钟\n”,d,h,m,t);}10.编写程序,求出给定半径r的圆以及内接正n边形的面积,输出计算结果。r和n的值由键盘输入。解:#include<>#include<>#definePIvoidmain(){doubler,s1,s2;intn;printf(“Inputrn\n”);scanf(“%lf%d”,&r,&n);s1=PI*r*r;s2=n/*r*r*sin(2*PI/n);printf(“圆面积=%f,正内接%d边形面积=%f\n”,s1,s2);}习题4一、单项选择题1.下列语句将小写字母转换为大写字母,其中正确的是()。A.if(ch>='a'&ch<='z')ch=ch-32; B.if(ch>='a'&&ch<='z')ch=ch-32;C.ch=(ch>='a'&&ch<='z')ch-32:''; D.ch=(ch>'a'&&ch<'z')ch-32:ch;2.下列各语句中,能够将变量u、s中最大值赋给变量t的是()。A.if(u>s)t=u;t=s; B.t=s;if(u>s)t=u;C.if(u>s)t=s;elset=u D.t=u;if(u>s)t=s;3.假设变量x、k都已定义,下列语句片段中,无语法错误的是()。A.switch(x){casex>=90:putchar('A');casex<60:putchar('E');}B.switch(x){case1+2:k='A';defualt:k='E';case2*4:k='B';}C.switch(x){case2+x:k=x-2;case3*x:k=x+3;default:k=0;}D.switch(x){case:k=*x;case:k=8*x;default:k=0;}*4.与语句while(!s)中的条件等价的是()。A.s==0 B.s!=0 C.s==1 D.s=05.下列语句中,哪一个可以输出26个大写英文字母()。A.for(a='A';a<='Z';printf("%c",++a)); B.for(a='A';a<'Z';a++)printf("%c",a);C.for(a='A';a<='Z';printf("%c",a++)); D.for(a='A';a<'Z';printf("%c",++a));6.判断下面的while循环体的执行次数()。i=0;k=10;while(i=8)i=k––;A.8次 B.10次 C.2次 D.无数次解:(1)B(2)B(3)B(4)A(5)C(6)D二、写出下列程序的输出结果1.#include<>voidmain(){ charx; intn=0,k=0; while((x=getchar())!='#'){ nnf\n”,area);nn }else printf(“线段%f,%f,%f不能构成三角形\n”,a,b,c);}6.输入1~7,输出对应的星期一~星期天。解:#include<>voidmain(){ints;printf(“Inputs(1~7):\n”);scanf(“%d”,&s);switch(s){ case1:printf(“星期一\n”);break; case2:printf(“星期二\n”);break;case3:printf(“星期三\n”);break;case4:printf(“星期四\n”);break;case5:printf(“星期五\n”);break;case6:printf(“星期六\n”);break;case7:printf(“星期天\n”);break; default:printf(“Thesiserror!\n”); }}7.输入年、月、日,输出是该年的第几天。解:#include<>voidmain(){inty,m,d,days;printf(“Input年月日:\n”);scanf(“%d%d%d”,&y,&m,&d); days=d;switch(m){ case12:days+=30; case11:days+=31;case10:days+=30;case9:days+=31;case8:days+=31;case7:days+=30;case6:days+=31;case5:days+=30;case4:days+=31;case3:if(y%4==0&&y%100!=0||y%400==0) days+=29; elsedays+=28;case2:days+=31; } printf(“%d月%d日是%d年的第%d天\n”,m,d,y,days);}8.输入n和相应的n个数,输出它们中所有奇数的乘积。解:#include<>voidmain(){intn,i,t,x;printf(“请输入n:\n”);scanf(“%d”,&n); printf(“请输入%d个数:\n”,n);for(i=1,t=1;i<=n;i++){ scanf(“%d”,&x); if(x%2==1) t*=x; } printf(“%d\n”,t);}9.输入一个正整数,求它们所有数字之和。解:#include<>voidmain(){inta,sum=0;printf(“请输入一个正整数:\n”);scanf(“%d”,&a); a=a>=0a:-a;while(a!=0){ sum+=a%10; a/=10; } printf(“%d\n”,sum);}10.输入n和相应的n个数,统计输入的数中负数、零及正数的个数。解:#include<>voidmain(){intn,i,t,s,k; doublex; t=s=k=0;printf(“请输入n:\n”);scanf(“%d”,&n); printf(“请输入%d个数:\n”,n);for(i=1;i<=n;i++){ scanf(“%lf”,&x); if(x>0) t++; elseif(x<0) s++; elsek++; } printf(“负数:%d\t零:%d\t正数:%d\n”,s,k,t);}11.输入10个学生的成绩,输出最低分数。解:#include<>voidmain(){inti; doublescore,min; printf(“请输入10个学生成绩:\n”); scanf(“%lf”,&score); min=score;年信息查询2.元旦是星期几信息查3.程序结束\n”);printf(“请输入年份:\n”);scanf(“%d”,&year);printf(“请选择功能:\n”);scanf(“%d”,&number);if(number==1){year=legal(year);leapyear(year);}if(number==2){week=judgeweeknumber(year);judgeweekchinese(week);}if(number==3)return;}intlegal(inty){if(y<0)do{printf(“请重新输入一个年份:”);scanf(“%d”,&y);}while(y<0);returny;}voidleapyear(inty){if(y%4==0&&y%100!=0||y%400==0)printf(“%d是闰年\n”,y);elseprintf(“%d不是闰年\n”,y);}intjudgeweeknumber(inty){intweek;week=(y+(y-1)/4-(y-1)/100+(y-1)/400)%7;returnweek;}voidjudgeweekchinese(intweek){switch(week){case0:printf(“星期天”);break; case1:printf(“星期一”);break; case2:printf(“星期二”);break; case3:printf(“星期三”);break; case4:printf(“星期四”);break; case5:printf(“星期五”);break; case6:printf(“星期六”);break; }}*14.输入n、x,计算xn输出。要求定义一个递归函数计算xn。解:#include<>doublemypow(doublex,intn){doubley=1;if(n>0) return(x*mypow(x,n-1));else if(n<0) return(1/x*mypow(x,n+1)); else return1;}voidmain(){doublex;intn;printf(“请输入xn:\n”);scanf("%lf%d",&x,&n);printf("%f\n",mypow(x,n));}*15.数列的第1、2项为1,此后各项为前两项之和。编制求数列中任何一项值的递归函数。解:此数列为1、1、2、3、5、8、13……。#include<>intf(intn){if(n==1||n==2) return(1);else return(f(n-1)+f(n-2));}voidmain(){intn;while(scanf("%d",&n),n<0);printf("数列第%d项为:%d",n,f(n));}习题5一、单项选择题1.下列能正确定义一维数组a的语句是()。A.inta(10); B.intn=10,a[n];C.intn;scanf("%d",&n); D.#definen10inta[n]; inta[n];2.若有定义语句“inta[10];”则下列对a中数组元素正确引用的是()。A.a[10/2–5] B.a[10] C.a[] D.a(1)3.能对一维数组正确初始化的语句是()。A.inta[6]={6*1}; B.inta[6]={1,,,3};C.inta[6]={}; D.inta[6]=(0,0,0);4.以下能正确定义二维数组的语句为()。A.inta[][]; B.inta[][4]; C.inta[3][]; D.inta[3][4];5.若有数组定义语句“inta[4][5];”,则对a中数组元素的正确引用是()。A.a[4][1] B.a[2,1] C.a[4][5] D.a[4–1][5–5]6.以下能对二维数组a进行正确初始化的语句为()。A.inta[2][]={{1},{4,5}};B.inta[2][3]={1,2,3,4,5,6,7};C.inta[][]={1,2,3,4,5,6};D.inta[][3]={1,2,3,4,5};7.下列对字符数组s的初始化不正确的是()。A.chars[5]="abc"; B.chars[5]={'a','b','c','d','e'};C.chars[5]="abcde"; D.chars[]="abcde";8.下列程序段的运行结果为()。chars[]="ab\0cd";printf("%s",s);A.ab0 B.ab C.Abcd D.abcd9.下列数组s中所存放字符串的长度为()。chars[]="a\128b\\\tcd\xdg\n";A.9 B.10 C.11 D.1810.有数组定义语句“chara[20];”,则正确的输入语句为()。A.scanf("%s",&a); B.scanf("%s",a[]);C.gets(a[20]); D.gets(a);11.下面程序执行后的正确输出项是()。#include<>voidswap1(inta[]){intt;t=a[0];a[0]=a[1];a[1]=t;}voidswap2(inta,intb){intt;t=a;a=b;b=t;}voidmain(){intx[2]={1,5};inty[2]={1,5};swap1(x);swap2(y[0],y[1]);printf("x:%d%d\n",x[0],x[1]);printf("y:%d%d\n",y[0],y[1]);}A. x:51 B.x:15 C. x:15 D. x:51y:15 y:51 y:15 y:5112.执行下列程序后的输出结果是()。#include<>charf(chars[],intn){return(s[n]);}main(){chara[]="ABCD";printf("%c",f(a,2)+1);}A.D B.C C.B D.A13.执行下列程序后的输出结果是()。#include<>intf(inta[],intn){if(n==0)returna[0];elsereturnf(a,n-1)+a[n];}main(){intx[]={1,3,5,7,9};printf("%d\n",f(x,3));}A.1 B.4 C.9 D.16解:二、填空题1.构成数组的各个元素必须具有相同的。解:数据类型2.若有定义“inta[10]={1,2};”,则数组元素a[2]的值为。解:03.若有定义“inta[3][4];”,则数组a行下标的上限为,列下标的下限为。解:204.C语言程序在执行过程中,不检查数组下标是否。解:越界5.C语言中,二维数组元素在内存中的存放顺序是。解:按行存放6.若有定义“inta[3][4];”,则在数组元素a[2][2]前有个元素。解:107.若用数组名作为函数调用的实参,传递给形参的是。解:数组第一个元素的地址8.若有定义语句“chars1[]="abc",s2[]={'a','b','c'};”,则数组s1有个元素,数组s2有个元素。解:43三、写出下列程序的输出结果1.#include<>voidmain(){inta[6]={2,3,7,1,9,6},i,j,k,m;for(i=5;i>=0;i--){k=a[5];for(j=4;j>=0;j--)a[j+1]=a[j];a[0]=k;for(m=0;m<6;m++)printf("%2d",a[m]);putchar('\n');}}解:6237199623711962377196233719622371962.#include<>voidmain(){intn[3],i,j,k;for(i=0;i<3;i++)n[i]=0;k=3;for(i=0;i<k;i++)for(j=0;j<k;j++)n[j]+=n[i]+1;for(i=0;i<3;i++)printf("%5d",n[i]);}解:1314173.#include<>voidmain(){inta[6][6],i,j;for(i=1;i<6;i++)for(j=1;j<6;j++)a[i][j]=(i/j)*(j/i);for(i=1;i<6;i++){for(j=1;j<6;j++)printf("%3d",a[i][j]);printf("\n");}}解:10000010000010000010000014.#include<>voidmain(){intx[10];inti,m=1;voidsort(inta[],intn);for(i=0;i<10;i++){m=-m;x[i]=m*i;}sort(x,10);for(i=0;i<10;i++)printf("%3d",x[i]);}voidsort(inta[],intn){inti,j,t;for(i=1;i<10;i++){t=a[i];for(j=i-1;j>=0;j--) if(t>a[j])break;elsea[j+1]=a[j]; a[j+1]=t;}}解:-8-6-4-20135795.#include<>voidmain(){chars1[]="aex",s2[]="dpsy",s[10];inti1,i2,i,flag;i1=i2=i=flag=0;while(1){if(s1[i1]=='\0'){flag=1;break;}if(s2[i2]=='\0'){flag=2;break;}if(s1[i1]<s2[i2])s[i++]=s1[i1++];elses[i++]=s2[i2++];}if(flag==1)while(s2[i2]!='\0')s[i++]=s2[i2++];elsewhile(s1[i1]!='\0')s[i++]=s1[i1++];s[i]='\0';puts(s);}解:adepsxy6.#include<>voidmain(){charh[11];intd[10];inti,n=0,x=1; gets(h);统计在一个字符串中各元音字母(a、e、i、o、u)出现的次数。#include<>voidmain(){chars[80];inti,; printf("inputastring:\n");gets(s); for(i=0;;i++)if() elseif(s[i]=='e'||s[i]=='E')a[1]++; elseif(s[i]=='i'||s[i]=='I')a[2]++; elseif(s[i]=='o'||s[i]=='O')a[3]++; elseif(s[i]=='u'||s[i]=='U')a[4]++; printf("AEIOU\n"); for(i=0;i<5;i++)}解:①a[5]②s[i]!='\0'③s[i]=='a'||s[i]=='A'④printf(“%5d”,i)五、编程题1.在数组x的10个数中求平均值v,找出与v相差最小的数组元素。解:#include<>#include<>voidmain(){doublex[10],v,d;inti;for(i=0,v=0;i<10;i++){scanf("%lf",&x[i]);v+=x[i];}v=v/10;d=x[0];for(i=1;i<10;i++)if(fabs(d-v)>fabs(x[i]-v))d=x[i];printf("平均值:%,与平均值最近元素:%\n",v,d);}2.输入n(n≤20)个数放在一维数组中,找出其中最小的数,将它与数组最前面的元素交换后输出这些数。解:#include<>voidmain(){inti,k,temp,n,a[20];printf("Inputn:\n");scanf("%d",&n);for(i=0;i<n;i++)scanf("%d",&a[i]);for(k=0,i=1;i<n;i++)if(a[i]<a[k])k=i;temp=a[0];a[0]=a[k];a[k]=temp;for(i=0;i<n;i++)printf("%d",a[i]);}3.输入一个字符串,统计其中数字字符出现的次数。解:#include<>voidmain(){chars[80];inti,n=0;gets(s);for(i=0;s[i]!='\0';i++)if(s[i]>='0'&&s[i]<='9')n++;printf("%s中包含%d个字符\n",s,n);}4.设有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。问在第20年时,共有多少头牛分别输出从第1年至第20年每年的母牛数。解:#include<>#defineN20voidmain(){intx[N+1]={1},i;f,",a[i]);printf("\n");}17.统计学生成绩:某班有30人,每人学4门课,求每个人的总分和平均分。要求编三个函数:①输入成绩函数input()。②计算每人总分及各课平均分函数process()。③输出该班同学每人各课成绩,总成绩和各课平均分函数output()。解:#include<>voidinput(floata[][5],intn,intm){inti,j;for(i=0;i<n;i++){for(j=0;j<m;j++) scanf("%f",&a[i][j]);}}voidprocess(floata[][5],intn,intm){inti,j;for(i=0;i<n;i++)f,",*p);printf("\n");for(i=0;i<10;i++){p=a+i; for(j=i+1;j<10;j++) if(fabs(*(a+j))<fabs(*p))p=a+j;temp=*(a+i);*(a+i)=*p;*p=temp;}for(p=a,i=0;i<10;i++,p++)printf("%.2f,",*p);printf("\n");}3.输入n和x,n和x分别表示对数组前n个元素赋初值为x。要求定义一个函数value,完成对一维整型数组的n个元素进行赋值,具体赋值x。解:#include<>voidvalue(double*a,intn,doublex){inti;for(i=0;i<n;i++)*(a+i)=x;}voidmain(){doublea[10],x;inti,n;printf(“Inputnx:\n");scanf("%d%lf",&n,&x);value(a,n,x);for(i=0;i<n;i++)printf("%",*(a+i));}4.定义一个函数,将一个字符串中的所有小写字母转换为相应的大写字母,其余字符不变。解:#include<>voidmain(){chara[80],*p;inti,j;gets(a);for(p=a;*p!='\0';p++) if(*p>='a'&&*p<='z') *p-=32;puts(a);}5.定义一个函数,将数组中最大值及最小值交换位置。解:#include<>voidf(int*a,intn){inti,*p,*q,t;for(i=0,p=q=a;i<n;i++){if(*p<*(a+i))p=a+i;if(*q>*(a+i))q=a+i;}t=*p;*p=*q;*q=t;}voidmain(){inta[10],i;for(i=0;i<10;i++)scanf("%d",a+i);f(a,10);for(i=0;i<10;i++)printf("%d",*(a+i));}6.定义一个函数,计算两个数的和与乘积。解:#include<>voidf(doublex,doubley,double*p,double*q){*p=x+y;*q=x*y;}voidmain(){doublea,b,add,mult;printf("Inputab:\n");scanf("%lf%lf",&a,&b);f(a,b,&add,&mult);printf("add=%mult=%\n",add,mult);}*7.输入一个年号,输出它是否润年及元旦星期几。要求定义一个函数同时返回是否闰年和元旦星期几。解:#include<>intleap(intyear)f",a[i][j]);printf("\n");}}12.编写函数,将5×5的二维数组每行中最大值,按一一对应的顺序放入一维数组中。如inta[5][5],s[5],即将a中的第1行最大值存放于s[0],将a中的第2行最大值存放于s[1],以此类推。解:#include<>voidfun(inta[][5],intm[]){inti,j,max;for(i=0;i<5;i++){max=**(a+i);for(j=0;j<5;j++) if(max<*(*(a+i)+j))max=*(*(a+i)+j); *(m+i)=max; }}voidmain(){inti,j;inta[5][5],b[5];for(i=0;i<5;i++) for(j=0;j<5;j++)scanf("%d",&a[i][j]);fun(a,b);for(i=0;i<5;i++) printf("每行最大值:%d",b[i]);}13.编写函数,根据星期几的数值(0~6),输出该星期几的英文名。解:#include<>voidfindweek(intweek){char*p[]={"SUN","MON","TUE","WED","THU","FRI","SAT"};puts(p[week]);}voidmain(){intw;printf("请输入星期几(0~6)\n");scanf("%d",&w);if(w>=0&&w<=6)findweek(w);elseprintf("数据输入错误!\n");}14.编写函数,根据月份号,输出该月的英文名。解:#include<>voidfindmonth(intm){char*p[]={"Jan.","Feb.","Mar.","Apr.","May.","Jun.","July.","Aug.","Sept.","Oct.","Nov.","Dec."};puts(p[m-1]);}voidmain(){intno;printf("请输入月份(1--12)\n");scanf("%d",&no);if(no>=1&&no<=12)findmonth(no);elseprintf("数据输入错误!\n");}15.输入5个字符串,输出其中最长的字符串。解:#include""#include""voidmain(){charstr[5][100],*p[5];inti,k;ame); B.printf("%s",&stu[1].name);C.printf("%s",stu[1].name[0]); D.printf("%s",&stu[1].name[0]);*5.以下程序的输出结果是()。#include<>voidmain(){intx=1,y=2,z=3;structaa{inta;int*p;}s[]={4,&x,5,&y,6,&z};structaa*q=s+1;printf("%d\n",*(q–>p)++);}A.1 B.2 C.3 D.46.有以下定义语句:structnode{intn;structnode*next;}x,y,*p=&x,*q=&y;则能将y节点链接到x节点之前的语句是()。A.=p B.=q C.=p D.=q*7.以下程序的输出结果为()。#include<>voidmain(){structnode{intn;structnode*next;}a[4];inti;for(i=0;i<3;i++){(a+i)–>n=i+1;(a+i)->next=a+i+1;}(a+i)->next=a;printf("%d,%d\n",(a[1].next)->n,a[3].next->n);}A.1,2 B.2,1 C.1,3 D.3,18.已建立一单向链表,指针变量p1指向链表中某一节点,p2指向下一节点,将p2所指节点从链表中删除并释放的语句为()。A.p1=p2;free(p2); B.p1–>next=p2–>next;free(p2);C.*=*;free(p2); D.p1=p2–>next;free(p2);9.已建立一单向链表,指针变量p1指向链表中某一节点,p2指向下一节点;指针变量p指向新申请节点,将p所指节点插入到链表中p1与p2之间的语句为()。A.p–>next=p2;p1–>next=p; B.p1–>next=p;p–>next=p2;C.p=p2;p1–>next=p; D.p1=p;p–>next=p2;10.若要利用下面的程序片段使指针变量p指向一个整型变量的存储单元则括号中需填入的内容是()。int*p;p=()malloc(sizeof(int));A.int B.*int C.&int D.int*解:(1)B(2)C(3)A(4)D(5)B(6)C(7)D(8)B(9)A(10)D二、写出下列程序的输出结果1.#include<>structst{intnum;charname[10];intage;}x[3]={{1,"zhang",19},{2,"li",20},{3,"wang",21}},*p=x;voidmain(){printf("%s,%d\n",(p+2)->name,(*p).age);}解:wang,19*2.#include<>#include<>structs{inta[4];char*pa[4];}x,*p=&x;voidmain(){inti;chary[4][8]={"A","AB","ABC","ABCD"};for(i=1;i<4;i++)[i]=y[i];for(i=1;i<4;i++)[i]=strlen[i]);printf("%d,%d,%s\n",[1],++p->a[2],++p->pa[2]);}解:2,4,BC*3.#include<>structks{inta;int*b;}s[4],*p;voidmain(){intn=1,i;for(i=1;i<4;i++){s[i].a=n;s[i].b=&s[i].a;n+=2;}p=&s[0];p++;printf("%d,%d\n",(++p)->a,p->a);}解:3,14.#include<>structs{inta;floatb;char*c;};voidmain(){structsx={19,,"zhang"};structs*px=&x;printf("%d,%.1f,%s\n",,,;printf("%d,%.1f,%s\n",px->a,(*px).b,px->c);printf("%c,%s\n",*px->c-1,&px->c[1]);}解:19,,zhang19,,zhangy,hang三、程序填空题1.已知head指向一个单向链表,链表中每个节点包含整型数据域(data)和指针#include<>structlink{intdata;structlink*next;};voidmain(){structlink*head,*q;structlink*max(structlink*);um=i+1;scanf("%lf",&a[i].x);}for(i=0;i<9;i++)for(j=0;j<9-i;j++)if(a[j].x<a[j+1].x){t=a[j];a[j]=a[j+1];a[j+1]=t;}for(i=0;i<10;i++)printf("%d,%.3f\n",a[i].num,a[i].x);}5.有10个学生,每个学生的数据包括学号、姓名、三门课的成绩。数据从键盘输入,要求打印出每个学生的总分、三门课的总平均成绩,以及总分最高的学生数据。解:#include""structstudent{charnum[6];um);scanf("%s",stu[i].name);for(j=0;j<3;j++) scanf("%d",&stu[i].score[j]);}printf(“姓名总分\n”);for(i=0;i<10;i++){sum=0;for(j=0;j<3;j++)sum+=stu[i].score[j];stu[i].avr=sum/;aver+=stu[i].avr;if(sum>max){max=sum;maxi=i;}printf(“%-8s%-7d\n”,stu[i].name,sum);}aver=aver/10;for(i=0;i<10;i++){printf("%8s%10s",stu[i].num,stu[i].name);for(j

温馨提示

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

评论

0/150

提交评论