还剩38页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
《程序设计基础》习题参考答案与部分解析第1章C语言概述
一、填空aC源程序的基本单位是函数b一个C程序中至少应包括一个main函数c在C语言中,输出操作是有库函数printf函数完成
二、单选题
1、A
2、C
3、B解析第1题答案A因为一个C程序总是从main函数开始执行的, 而不论main函数在程序中的位置且到main函数结束第2题答案C因为main函数没有限制必须位于程序的最前面C程序书写自由,一行内可写几个语句在对一个C程序进行编译的过程中,无法检查注释当中的拼写错误不过C语言本身并没有输入输出语句,输入输出是由函数完成的第3题答案B因为一个C语言程序是由若干个函数组成的但至少包含一个main函数,且main函数的位置不限
三、编程题
1、编写一个输出“WelcometoC!”信息的小程序解程序如下#include“stdio.h”main{printf“WelcometoC!”;}
2、已知三角形的三边长分别为3,4,5,试用海轮公式编程求其面积海伦公式为S△=其中s=a+b+s/2; 解程序如下#include“math.h”#include“stdio.h”main{intabc;/*abc3个整型变量表示三角形的3条边*/floatss1;/*s1作为面积变量,s作为中间变量是都应该是实形*/a=3;b=4;c=5;s=a+b+c/
2.0; s1=sqrts*s-a*s-b*s-c;/*sqrt函数完成开平方根功能*/printf“area=%f\n”s1;}第2章程序设计基础知识
一、单选题
1、C
2、A
3、C
4、A
5、C
6、C
7、D
8、C
9、D
10、A
11、D
12、A
13、C
14、C
15、BA
16、B17D解析
1.答案C这里考察的是用户标识符的定义用户标识符由字母、数字、下划线组成且必须以字母或下划线开头,区分大小写,且不能与C语言已有的32个关键字同名由于选择不合法的用户标识符, A项的A、P_
0、Do都是合法的用户标识符;B项的_A是合法的;D项的_
123、temp、INT也都是合法的只有C选项的标识符都是错误的用户标识符
2.答案A这里考察的是整型常量的概念B项当中01a不正确,C项当中的0668不是正确的八进制常量,D项当中的2e5是float型常量3.答案C这里考察的是字符常量的定义字符常量是用单撇号括起来的单个字符或转义字符所以答案是C4.答案A字符变量只能包含一个字符5.答案C这里考察的是转义字符的正确表示C项的’074’是错误的转义字符,正确表示方法是’\074’6.答案C字符变量只能包含一个字符,而C项的c=’yes’是错误的 7.答案D这里考察的是输入格式的控制输入格式要与scanf语句中字符串格式相对应8.答案C这里考察的是输出格式和字符对应的ASCII码值’A’的ASCII码值是65,’Y’字符的ASCII码值是899.答案D这里考察输入格式和输出结果形式由于输入格式不正确,所以输出的是不确定值10.答案A这里考察的是标识符的特点区分大小写,变量sum和变量sUM是两个不同的变量,sum并没有参加运算,所以它的值不边仍然是711.答案D%运算符要求两边的运算数必须是整型12.答案A这里考察的是复合赋值运算a%=b+1;等价与a=a%b+1;由于a=10b=4;所以运算后a的值是013.答案C这里考察的是在变量定义类型是进行赋值操作要求 abc都赋值为5,且为int类型只有C正确14.答案C这里考察的是类型的自动转换,只要有单精度类型或双精度类型参加运算,结果都是double(双精度)类型15.答案BA这里考察的是逻辑表达式的运算过程表达式1表达式2若表达式1的值是0的话,结果就是0,表达式2就不参加运算要注意赋值表达式的值是左边赋值变量的值所以答案为B,A16.答案B这里考察的是逗号表达式运算过程是从第1个表达式开始运算,然后依次运行到最后一个表达式逗号表达式的值是最后表达式的值,且注意逗号运算符优先级低于赋值运算符所以表达式(a=2b=5b++a+b)运算过程a=2—b=5—b++—a+b=8;结果是817.答案D这里考察的是条件表达式的结合性是从右向左所以 kak:cbc:a;等价于kak:(cbc:a);先运算cbc:a;的值是1,然后计算kak:1;的值是1
二、填空题
1、-32768-
327672、字母,数字,下划线
3、分号(;)
4、30,
155、
186、
07、-
2648、
79、
010、
111、y%2==
112、xz||yz
13、
014、x2x3||x-
1015、1
三、编程题
1、编写程序,输入一个长方形的二边长,输出其面积 解程序如下#include“stdio.h”main{intabs;/*ab作为长方形的两个边长,s为面积*/printf“请输入两个边长\n”;scanf“%d%d”ab;s=a*b;printf“Thearea:%d\n“s;}
2、设置半径为r=
2.9,编程求圆周长和圆面积解程序如下#include“stdio.h”#definePI
3.14main{floatrLS;L=2*PI*r; S=PI*r*r;printf“L=%fS=%f\n“LS;}
3、输入一个华氏温度,输出相应的摄氏温度二者的换算公式是c=5/9F–32其中F表示华氏温度,c表示摄氏温度解程序如下#include“stdio.h”main{floatcF;printf“请输入一个华氏温度\n”;scanf“%f”F;c=float5/9*F-32;printf“F=%fc=%f\n”Fc; }第3章程序设计初步
一、单选题
1、C
2、C
3、B
4、B
5、B解析
1.答案C这里考察的是if-else语句和表达式中有增量和减量的执行过程ifm++5printf“%d\n”m;elseprintf“%d\n”m++;先执行m5的值是0,然后执行m=m+1;得到m=6;由于m5的值是0所以执行else语句,应先输出m的值是6,然后m再自增一个单位变成72.答案C这里考察的是if语句的嵌套根据else子句总是与之前最近的if语句配对来进行选择满足条件的答案3.答案B这里也考察的是if语句的嵌套同理ifxyify0z=0;elsez+=1;等价与ifxy{ify0z=0; elsez+=1;}因此答案是B4.答案B这里考察的是if语句的嵌套根据else子句总是与之前最近的if语句配对5.答案B由于B项ifx=yx!=0x+=y;if后的条件表达式没有用圆括号括起来正确的是if(x=yx!=0)x+=y;
二、根据要求完成程序填空
1、zyzxyx
2、ch=‘A’ch=’Z’ch=ch-
323、x0x/10y!=2
三、编程题
1、编写一个程序,要求用户从终端键入两个整数数值检测这两个数,判定第一个数是否能被第二数整除,并在终端上显示相应的信息解程序如下#include“stdio.h”main{intab;/*a为第一个数,b为第二个数*/printf“Pleaseinputtwonumbers:\n”;scanf“%d%d”ab;ifa%b==0printf“%d能被%d整除\n”ab;elseprintf“%d不能被%d整除\n”ab; }
2、有3个整数abc由键盘输入,输出其中最大的数解程序如下#include“stdio.h”main{intabcmax;printf“Pleaseinputthreenumbers:\n”;scanf“%d%d%d”abc;ifabmax=a;elsemax=b;ifmaxcmax=c; printf“Themaxis%d\n”max;}
3、给出一百分制成绩,要求输出成绩等级A、B、C、D、E其中90分以上为A,80~89分为B70~79为C60~69为D60分以下为E解程序如下#include“stdio.h”main{floatscore;intgrade;printf“Pleaseinputascore:\n”;scanf“%f“score;grade=intscore/10;switchgrade{case10:case9:printf“gradeisA\n”;break;case8:printf“gradeisB\n”;break; case7:printf“gradeisC\n”;break;case6:printf“gradeisD\n”;break;default:printf“gradeisE\n”;}}
4、新世纪百货进行打折促销活动,消费金额(P)越高,折扣(d)越大,标准如下消费金额折扣P1000%100≤P2005%200≤P50010%500≤P100015%P≥100020%编程实现从键盘输入消费金额,输出折扣率和实付金额(f)要求分别用 if语句和switch语句实现解1用if语句编程实现如下#include“stdio.h”main{floatPdf;printf“输入消费金额\n”;scanf“%f”P;ifP100d=0;ifP>=100P200d=
0.05;ifP>=200P500d=
0.10;ifP>=500P1000d=
0.15;ifP>=1000d=
0.20;f=P*1-d; printf“折扣是%f,则实付金额为%f\n”df;}2用switch语句编程实现如下#include“stdio.h”main{floatPdf;intc;printf“输入消费金额\n”;scanf“%f”P;c=intP/100;switchc {case0:d=0;break;case1:d=
0.05;break;case2:case3:case4:d=
0.10;break;case5:case6:case7:case8:case9:d=
0.15;break; default:d=
0.20;}f=P*1-d;printf“折扣是%f,则实付金额为%f\n”df;}第4章循环结构程序设计
一、单项选择
1、A
2、D
3、C
4、D
5、B
6、D
7、B
8、B
二、按要求完成程序填空
1、c!=’\n’c>=’0’c=’9’
2、i%3==2i%5==3i%7==2j%5==
03、i10j%3!=0
三、编程题
1、编程求n的阶乘(n由键盘输入)解程序如下#include“stdio.h”main{intni;longfac;fac=1;printf“Inputanumber:”; scanf“%d”n;i=1;whilei=n{fac=fac*i;i++;}printf“%d!is%ld\n”nfac;}
2、计算1!+2!+3!+…+10!的值解方法一#include“stdio.h”main{inti=1j;doublefacsum=0;whilei=10{j=1; fac=1;whilej=i{fac=fac*j;j++;}sum=sum+fac;i++;}printf“1!+2!+3!+…+10!=%.0f\n”sum;}方法二#include“stdio.h”main {intij;doublefacsum=0;fori=1;i=10;i++{forj=1fac=1;j=i;j++fac=fac*j;sum=sum+fac;}printf“1!+2!+3!+…+10!=%.0f\n”sum;}方法三#include“stdio.h”main{inti;doublefacsum; sum=0;fac=1;fori=1;i10;i++{fac=fac*i;sum=sum+fac;}printf“1!+2!+3!+…+10!=%.0f\n”sum;}
3、求Sn=a+aa+aaa+…+aaa…an个a的值,其中a是一个数字例如3+33+333+3333(此时n=4)n由键盘输入 解程序如下#include“stdio.h”main{intani;longSnt;Sn=0;printf“Pleaseinputa:\n”;scanf“%d”a;printf“Pleaseinputn:\n”;scanf“%d”n;t=a;fori=1;i=n;i++{Sn=Sn+t; t=t*10+a;}printf“Sn=%ld\n”Sn;}
4、打印出所有的“水花仙数”,所谓“水花仙数”是指一个3位数,其各位数字立方和等于该数本身例如,153是一个水花仙数解程序如下#include“stdio.h”main{inttabcn;/*变量n为统计水花仙数的个数*/n=0;fort=100;t1000;t++{a=t/100;b=t–a*100/10;c=t%10;ifa*a*a+b*b*b+c*c*c==t {n++;ifn%6==0printf“\n”;printf“%5d”t;}}}
6、每个苹果
0.8元,第一天买2个苹果,第二天开始,每天买前一个的2倍,直至购买的苹果个数达到不超过100的最大值编写程序求每天平均花多少钱?解程序如下#include“stdio.h”main{ intdaynumsum;floatmoneyevery;sum=0;num=2;forday=1;num100;{sum=sum+num;day++;num=num*2;}money=sum*
0.8; every=money/day;printf“every=%f\n”every;}
7、变成完成用一元人民币换成一分、二分、五分的所有兑换方案,即输出所有满足搭配要求的1分币个数,2分币个数,5分币个数解程序如下#include“stdio.h”main{intonetwofive;forone=0;one=100;one++fortwo=0;two=50;two++forfive=0;five=20;five++ ifone+two*2+five*5==100printf“one=%dtwo=%dfive=%d\n”onetwofive;}第5章模块化程序设计---函数
一、单选题
1、B
2、B
3、A
4、A
5、D
6、D
7、B
8、B
9、B
10、A
二、编程题
1、已知三角形的三边长,编一实现求三角形面积的功能函数说明用海伦公式来求面积,但要注意输入的三边长要符合构成三角形的条件海伦公式为SΔ=其中s=a+b+c/2解程序如下 #include“stdio.h”#include“math.h”floatAreaintaintbintc{floatsarea;s=floata+b+c/2;ifa+bca-bcarea=sqrts*s-a*s-b*s-c;elsearea=0;returnarea;}main {intabc;floatarea;floatAreaintintint;printf“请输入三角形的三边长\n”;scanf“%d%d%d”abc;area=Areaabc;ifarea!=0printf“area=%f\n”area;elesprintf“error!\n”;}
2、写一个判断素数的函数,在主函数输入一个整数,输出是否素数的信息解程序如下#include“stdio.h”intprimeintn{intta=1;fort=2;t=n/2;t++ ifn%t==0{a=0;break;}returna;}main{intn;printf“inputanumber:\n”; scanf“%d”n;ifprimen==1printf“%disprime\n”n;elesprintf“%disnotprime\n”n;}
3、编写函数,求1!+2!+3!+…+K!的和解程序如下#include“stdio.h”doubleSUMintk {intij;doublefacsum;sum=0;fori=1;i=k;i++{forj=1fac=1;j=i;j++fac=fac*j;sum=sum+fac;}returnsum; }main{intk;doublesum;scanf“%d”k;sum=SUMk;printf“1!+2!+3!+…+K!=%.0f\n”sum;}
4、求方程ax2+bx+c=0的根,用2个函数分别求当b2-4ac大于0和等于0的根并输出结果,从主函数中输入a、b、c的值#include“stdio.h”#include“math.h” voidf1floatafloatbfloatc{floatt1t2;t1=-b+sqrtb*b-4*a*c/2*a;t2=-b-sqrtb*b-4*a*c/2*a;printf“t1=%ft2=%f\n”t1t2;}voidf2floatafloatbfloatc{floatt1;t2=-b/2*a;printf“t1=%f\n”t1;}main{ floatabc;printf“inputabc\n”;scanf“%f%f%f”abc;ifb*b–4*a*c0f1abc;elesifb*b-4*a*c==0f2abc;elseprintf“nojie!\n”;}第6章数组
一、单项选择题
1、C
2、D
3、D
4、C
5、C
6、D
7、B
8、C
9、D
10、B
11、B
12、B(原题数组改为a[]
[3])
13、D
14、B
15、D
16、B
17、D
18、D
19、B
20、D
二、按要求完成程序的空缺1.下面程序以每行4个数据的形式输出a数组,请填空a[I]i%4==0printf“\n”;2.下面程序将二维数组a的行和列元素互换后存到另一个二维数组b中,请填空j=2b[j][i]=a[i][j]i=2
三、读程序段分析程序运行结果1.下面程序运行结果是6002下面程序运行结果是he3.下面程序的运行结果是Theresultis:167111213161718192121232425
四、编程题
1、从键盘输入若干整数(个数应少于50),其值在0到4的范围内,用-1作为输入结束的标志统计每个整数的个数试编程序完成解程序如下#include“stdio.h” main{inth
[50]abcdenti;a=b=c=d=e=0;n=0;scanf“%d”t;whilet!=-1{h[n++]=t;scanf“%d”t;}fori=0;in;i++switchh[i]{case0:a++;break; case1:b++;break;case2:c++;break;case3:d++;break;case4:e++;}printf“0:%d1:%d2:%d3:%d4:%d\n”abcde;}
2、将一个数组中的值按逆序重新存放例如,原来顺序为8,6,5,4,2要求改为2,4,5,6,8解程序如下#include“stdio.h”main {inta
[50]intempt;n=0;scanf“%d”t;whilet!=-1{a[n++]=t;scanf“%d”t;}fori=0;in/2;i++temp=a[i]a[i]=a[n-1-i]a[n-1-i]=temp;fori=0;in;i++printf“%5d”a[i];}
3、已有一个排好序的数组,有键盘输入一个数,要求按原来的排序规律将其插入到数组中解程序如下#include“stdio.h”main {inta
[50]nti;n=0;scanf“%d”t;whilet!=-1{a[n++]=t;scanf“%d”t;}printf“inputanumber:\n”;scanf“%d”t;fori=n-1;a[i]t;i-- a[i+1]=a[i];a[i+1]=t;fori=0;in+1;i++printf“%5d”a[i];}
4、写一函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串解程序如下#include“stdio.h”#include“string.h”voidfanxuchara[]intn{inti;chartemp;fori=0;in/2;i++temp=a[i]a[i]=a[n-1-i]a[n-1-i]=temp;} main{chara
[50]n;printf“inputstring:\n”;getsa;n=strlena;fanxuan;printf“outputstring:\n”;putsa;}
5、编一程序,将两个字符串连接起来,不要用strcat函数解程序如下#include“stdio.h”#include“string.h”voidlianjiechara
[50]charb
[30]{intn1n2i;n1=strlena; n2=strlenb;fori=n1;i=n1+n2;i++a[i]=b[i-n1];}main{chara
[50]b
[30];printf“inputstringa:\n”;getsa;printf“inputstringb:\n”;getsb;lianjieab;printf“outputstring:\n”;putsa;}
6、写一程序,使给定的一个二维数组(3×2)转置,即行列互换 解程序如下#include“stdio.h”main{inta
[3]
[2]b
[2]
[3]ij;printf“inputarraya:\n”;fori=0;i3;i++forj=0;j2;j++scanf“%d”a[i][j];fori=0;i2;i++forj=0;j3;j++b[i][j]=a[j][i];printf“inputarraya:\n”;fori=0;i3;i++{forj=0;j2;j++printf“%5d”a[i][j];printf“\n”;} printf“outputarrayb:\n”;fori=0;i2;i++{forj=0;j3;j++printf“%5d”b[i][j];printf“\n”;}}第7章指针
一、单选题
1、B
2、B
3、B
4、D
5、B
6、D
7、C
8、C
9、B
10、B
11、C
12、B
13、D
14、B
15、D
16、D
二、分析程序或程序段,写出运行结果1.运行结果是C512.运行结果是dl3.运行结果是aabcabc4.运行结果是*ptr1=7*ptr2=5a=7b=
55.运行结果是hELLO!
6.运行结果是bcdABCD
三、编程题
7.
1、输入3个整数,按由小到大的顺序输出(书中没该题)解程序如下#include“stdio.h”main{intabc*pa*pb*pctemp;pa=a;pb=b;pc=c;printf“inputa、b、c:\n”;scanf“%d%d%d”abc;if*pa*pbtemp=*pa*pa=*pb*pb=temp;if*pa*pctemp=*pa*pa=*pc*pc=temp;if*pb*pctemp=*pb*pb=*pc*pc=temp;printf“从小到大的顺序是:\n”;printf“%d%d%d\n”abc;}
7.
2、输入3个字符串,按由小到大的顺序输出(书中没该题)解程序如下#include“stdio.h”#include“string.h”main{chara
[50]b
[50]c
[50]*pa*pb*pc*ch;pa=a;pb=b;pc=c;getspa;getspb;getspc;ifstrcmppapb0 ch=papa=pbpb=ch;ifstrcmppapc0ch=papa=pcpc=ch;ifstrcmppbpc0ch=pbpb=pcpc=ch;putspa;putspb;putspc;}
2、输入10个整数,将其中最小的数与第一个对换,把最大的数与最后一个数对换写出3个函数
①输入10个整数;
②进行处理;
③输出10个数解程序如下#include“stdio.h”voidinputint*a{intn;forn=0;n10;n++scanf“%d”a+n;}voidprocessint*a {intmintempmaxn1n2i;min=max=*a;n1=n2=0;fori=1;i10;i++{if*a+imin{min=*a+i;n1=i;}if*a+imax{max=*a+i;n2=i;}}temp=a
[0]a
[0]=a[n1]a[n1]=temp;temp=a
[9]a
[9]=a[n2]a[n2]=temp;}voidoutputint*a{intn;forn=0;n10;n++printf“%5d”*a+n;}main{ inta
[10]*pa;pa=a;inputpa;processpa;outputpa;}
7.6写一函数,将一个3×3的矩阵转值(书中没该题)解程序如下#include“stdio.h”voidzhuanzhiint*a{intijtemp;fori=0;i3;i++forj=0;j=i;j++ temp=*a+i*3+j*a+i*3+j=*a+j*3+i*a+j*3+i=temp;}main{inta
[3]
[3]*paij;pa=a;fori=0;i3;i++forj=0;j3;j++scanf“%d”pa+i*3+j;zhuanzhipa;printf“outputarraya:\n”;fori=0;i3;i++{forj=0;j3;j++printf“%5d”*pa+i*3+j;printf“\n”;} }
5、输入一行文字,找出其中大写字母、小写字母、空格、数字、以及其它字符各有多少?解程序如下#include“stdio.h”#include“string.h”main{charch
[50]*pnabcdei;a=b=c=d=e=0;p=ch;printf“inputstring:\n”;getsp;n=strlenp;fori=0;in;i++{if*p+i=‘A’*p+i=‘Z’a++;elseif*p+i=‘a’*p+i=‘z’ b++;elseif*p+i==‘’c++;elseif*p+i=‘0’*p+i=‘9’d++;elsee++;}printf“大写字母%d小写字母%d空格%d数字%d,其他字符%d\n”abcde;}第8章结构体与共用体
一、单选题
1、A
2、C
3、A
4、D
5、D
6、D
7、D
8、C
9、C
10、B
11、B
二、判断分析题(对的打“√”;错的打“×”并分析原因)1.×分析因为结构体中是可包含多种不同数据类型的变量一种构造类型2.√3.×分析因为face是char类型的指针,所以语句printf“%s\n”*cPtr-face;是错误的改为printf“%c\n”*cPtr-face;4.×分析共用体变量的各个成员共享同一块内存区域,这里所谓的共享不是指把多个成员同时装入一个共用体变量内,而是指该共用体变量可被赋予任一成员值,但每次只能赋一种值,赋入新值则冲去旧值5.√
三、编程题
1、定义一个结构体变量,其成员包括职工号、职工名、性别、年龄、工资、地址程序如下structemployee{intcode;charname
[20];charsex;intage;floatmoney;charaddress
[30];}emp;
2、针对上述定义,从键盘输入所需的具体数据,然后用printf函数打印出来程序如下structemployee{intcode; charname
[20];charsex;intage;floatmoney;charaddress
[30];}emp;main{scanf“%d%s%c”emp.codeemp.nameemp.sex;scanf“%d%f%s”emp.ageemp.moneyemp.address;printf“输出职员信息\n”;printf“职工号是%d\n”emp.code;printf“职工名是%s\n”emp.name;printf“职工性别%c\n”emp.sex;printf“职工年龄%d\n”emp.age;printf“职工工资%f\n”emp.money;printf“职工地址%s\n”emp.address;}
3、有10个学生,每个学生的数据包括学号、姓名及3门课的成绩,从键盘 输入10个学生数据,要求打印出3门课总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课的成绩,平均成绩)程序如下structstudent{intnum;charname
[10];floatscore
[3];}stu
[10];main{intIj;floatavg
[10]summax;printf“输入10个学生数据\n”;forI=0;I10;I++{scanf“%d”stu[I].num; scanf“%s”stu[I].name;forj=0;j3;j++scanf“%f”stu[I].score[j];}forI=0;I10;I++{sum=0;forj=0;j3;j++sum=sum+stu[I].score[j];avg[I]=sum/3;printf“avg[%d]=%f\n”Iavg[I];}max=avg
[0];forj=1;j10;j++ifmaxavg[j]{max=avg[j];I=j;}printf“num=%dname=%s\n”stu[I].numstu[I].name; printf“score
[0]=%fscore
[1]=%fscore
[2]=%f\n”stu[I].score
[0]stu[I].score
[1]stu[I].score
[2];printf“avg=%f\n”avg[I];} 。