2022年C语言程序设计项目教程教学课件C语言程序设计项目教程习题答案.docx
名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -习题答案模块 1 C 语言基础学问1. 挑选题(1)C 语言中运算对象必需是整型的运算符是 B ;A. %= B. / C. = D. <= (2)以下所列的 C 语言常数中,错误选项 B ;A. 0xFF B. 1.2E0.5 C. 2L D. -.67 (3)以下选项中能作为用户标识符的是 C ;A. void B. 7_9 C. _3_ D. Dr.Tom (4)以下所列的 C 语言字符常量中,合法的是 B ;A. ”B” B. nC. 中国 D. d (5)以下选项中正确的定义语句是 D ;A. int a:b; B. int ,a,b; C. int a+b=6; D. int a=6,b; (6)以下关于 long、int、short 型数据占用内存大小的表达中正确选项 D ;A. 均占 4 个字节B. 依据数据的大小来打算所占内存的字节数C. 由用户自己定义 D. 由 C 语言编译系统打算(7)如有定义语句:int x=10; ,就表达式 x-=x+x 的值为 B ;A. -20 B. -10 C. 0 D. 10 (8)表达式 a=3*5,a+4,a+5 的值是 A ;A. 20 B. 29 C. 60 D. 90 (9)如有定义语句:int a=3,b=4,c=5; ,就以下表达式中值为 0 的是 D ;A. a&&b B. a<=b C. a|b+c&&b-c D. .a<b&&c|1 (10)设有以下定义:int i;char c;float f; ,以下结果为整型的表达式是 B ;A. i+f B. i*c C. c+f D. i+c+f 2. 填空题(1)设有 int n=12; ,就表达式( n+*1/3 )的值是 4 ;(2)定义以下变量:char c;int x;float y;double z;,就表达式 c*x+y-z ,所求得的数据类型为 double ;细心整理归纳 精选学习资料 (3)设变量 a 和 b 已正确赋初值,请写出a/=a+b 等价的赋值表达式a=a/a+b ; 第 1 页,共 45 页 (4)如有语句double x=15.5;int y; ,当执行 y=intx/5%2; 之后 y 的值是1 ; - - - - - - - - - - - - - - - - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -(5)如有语句double y=3.6; ,就执行完 +y; 语句后,(+y )表达式的值是4.6 ,变量 y 的值是4.6 ;-2*a*b+40-4*a*c ;(6)代数式 -2ab+40-4ac 改写成 C 语言的表达式是(7)在运算机中,字符的比较是对它们的ASCII 码值进行比较;(8)已知字母 a的 ASCII 码为十进制数97,且设 ch为字符型变量, 就表达式 ch=a+3的值为f ;3. 分析以下程序的运行结果(1)#include <stdio.h> void main int a=21,b=11; printf"%dn",-a+b,-b+a; 程序的运行结果:(2)#include <stdio.h> void main printf "nABCtDEnFGHn" printf "nwhy is 31+31 equal to %d.nn,21+31" 程序的运行结果:细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 2 页,共 45 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -(3)#include< stdio.h > void main char ch=65; printf"%cn",ch; 程序的运行结果:(4)#include< stdio.h > void main int x=10,y=20,z=30; z=x.=y; printf"%dn",z; 程序的运行结果:(5)#include< stdio.h > void main int x=10; printf"%dn",x%3=0; 程序的运行结果:细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 3 页,共 45 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -(6)#include< stdio.h > void main int k=4,a=3,b=2,c=1; printf"%dn" ,k<a.k:c<b.c:a; 程序的运行结果:模块 2 次序结构1. 程序填空题(1)要得到以下输出结果:a,b A,B 97,98,65,66 请按要求填空,补充以下程序:#include <stdio.h> void main char c1,c2; c1='a' c2='b' printf"%c,%cn", c1,c2; printf"%c,%cn", c1-32,c2-32 ; printf"%d,%d,%d,%dn", c1,c2,c1-32,c2-32 ; 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 4 页,共 45 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -(2)要得到以下输出结果:a=%2,b=%5 #include<stdio.h> void main int a=2,b=5; printf"a=%d,b=%dn" ,a,b ; 2. 分析以下程序的运行结果(1)#include<stdio.h> void main int n=5,m=5; printf"%d,%dn",+m,n-; 程序的运行结果 : (2)执行以下程序时输入:2468101 #include<stdio.h> void main int x,y; scanf"%2d%*2d%2d",&x,&y; printf"%ldn",x+y; 细心整理归纳 精选学习资料 程序的运行结果: 第 5 页,共 45 页 - - - - - - - - - - - - - - - - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -(3)执行以下程序时输入:ABCD #include<stdio.h> void main char x,y; x=getchar ; y=getchar ; putcharx;putchar'n'putchary; 程序的运行结果 : (4)#include<stdio.h> #include<math.h> void main int a=1,b=2,c=2; float x=10.5,y=4.0,z; z=a+b/c+sqrtinty*1.2/c+x; printf"z=%fn",z; 细心整理归纳 精选学习资料 程序的运行结果: 第 6 页,共 45 页 - - - - - - - - - - - - - - - - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -3. 编程实现以下功能(1)从键盘输入一个整数x,如 x 大于 0,就显示“ 红”;如 x 等于 0,就显示“ 黄”;如 x 小于 0,就显示“ 绿”;#include<stdio.h> void main int x; printf" 请输入一个整数:" scanf"%d",&x; printf"%sn",x>0." 红":x=0." 黄":" 绿" (2)假设银行定期存款的年利率 rate 为 2.25%,并已知存款期为 n 年,存款本金为 capital n 年后可得到本利之和 deposit假设不运算复利) ;提示: 2.25%编写程序时 元,试编程运算 应写为 0.0225,本金和年数未知,从键盘输入;#include<stdio.h> #include<math.h> void main int n; float capital,rate=0.0225,deposit; printf" 请输入存款期和本金:" scanf"%d%f",&n,&capital; deposit=capital*pow1+rate,n; printf"deposit=%fn",deposit; 细心整理归纳 精选学习资料 (3)编写程序,把700 分钟换算成用小时和分钟表示; 第 7 页,共 45 页 - - - - - - - - - - - - - - - - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -#include<stdio.h> #include<math.h> void main int n=700,x,f; x=n/60; f=n%60; printf"700 分钟是 %d 小时, %d 分钟; n",x,f; 模块 3 挑选结构1. 分析以下程序的运行结果(1)#include<stdio.h> void main int x=1,y=5,z=3; ifz=x printf"%dn",z; else printf"%d n",y; 程序的运行结果 : (2)#include<stdio.h> void main int x=1,a=0,b=0; switchx case 0:b+; case 1:a+; 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 8 页,共 45 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -case 2:b+,a+; printf"a=%d,b=%dn",a,b; 程序的运行结果 : (3)#include<stdio.h> void main int n=6; ifn+>6 printf"%dn",n; else printf"%d n",n-; 程序的运行结果 : (4)#include<stdio.h> void main int a=1,b=-1,c; ifa*b>0 c=1; else ifa*b<0 c=2; else c=3; printf"c=%dn",c; 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 9 页,共 45 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - - 程序的运行结果 : 2. 编程实现以下功能(1)从键盘输入一个整数,假如是偶数,输出“ Is Even ”;假如是奇数,输出“ Is Odd ”;#include<stdio.h> void main int i; printf" 请输入一个整数:" scanf"%d",&i; ifi%2=0 printf"%d %sn",i,"Is Even" else printf"%d %sn",i,"Is Odd" (2)求解一元二次方程ax2+bx+c=0 ;假如有实根,就输出;否就输出“ 无实根 ”(a、b、c 由键盘输入);#include<stdio.h> #include<math.h> void main float a,b,c,d; double f,x1,x2; " printf" 请输入三个系数:scanf"%f%f%f",&a,&b,&c; d=b*b-4*a*c; ifd<0 printf" 无实根! n" else 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 10 页,共 45 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - - f=sqrtd; x1=-b+f/2*a; x2=-b-f/2*a; iff=0 printf"x1=x2=%lfn",x1; else printf"x1=%lf,x2=%lfn",x1,x2; (3)编写可以完成加、减、乘、除、求余运算的简易运算器程序;#include<stdio.h> #include<stdlib.h> #include<conio.h> void main char ch; int a,b,c; float div; printf"tt 简易运算器 nn" printf"t1. 加法运算 2.减法运算 nn" printf"t3. 乘法运算 4.除法运算 nn" printf"t5. 求余运算 0.减法运算 nn" printf"t 请挑选( 0-5):" ch=getche; switchch case '0': exit0; case '1': printf"nn请输入两个整数:" scanf"%d%d",&a,&b; 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 11 页,共 45 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -c=a+b; printf"%d+%d=%dn",a,b,c; break; case '2': printf"nn请输入两个整数:" scanf"%d%d",&a,&b; c=a-b; printf"%d-%d=%dn",a,b,c; break; case '3': printf"nn请输入两个整数:" scanf"%d%d",&a,&b; c=a*b; printf"%d*%d=%dn",a,b,c; break; case '4': printf"nn请输入两个整数:" scanf"%d%d",&a,&b; div=floata/b; printf"%d/%d=%fn",a,b,div; break; case '5': printf"nn请输入两个整数:" scanf"%d%d",&a,&b; c=a%b; printf"%d%d=%dn",a,b,c; break; default: printf"nnt 挑选错误! n" 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 12 页,共 45 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - - (4)某商场给顾客购物的折扣率如下:购物金额 <200 元 不打折 200 元<= 购物金额 <500 元 9 折 500 元<= 购物金额 <1000 元 8 折 7.5 折 购物金额 >=1000 元 输入一个购物金额,输出打折率、购物实际付款金额;要求:分别用 i f 语句和 switch 语句两种方法完成编程;方法一:用 i f 语句#include<stdio.h> void main float gwje; printf" 请输入购物金额:" scanf"%f",&gwje; ifgwje<200 printf" 折扣率为 0,实际应对金额为:%fn",gwje; else ifgwje>=200&&gwje<500 printf" 折扣率为9 折,实际应对金额为:%fn",gwje*0.9; else ifgwje>=500&&gwje<1000 printf" 折扣率为8 折,实际应对金额为:%fn",gwje*0.8; else printf" 折扣率为 7.5 折,实际应对金额为:%fn",gwje*0.75; 方法二:用进制 switch 语句#include<stdio.h> void main float gwje,zk,fkje; int n; printf" 请输入购物金额:" scanf"%f",&gwje; 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 13 页,共 45 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -n=intgwje/100; switchn case 0: case 1: zk=1; break; case 2: case 3: case 4: zk=0.9; break; case 5: case 6: case 7: case 8: case 9: zk=0.8; break; default: zk=0.75; fkje=gwje*zk; %fn",zk,fkje; printf" 折扣率为: %f, 应对购物金额为: (5)某市出租车计费,起步价 8 元,前 3km 不计费;超过 3km 但不足 20km ,按单程 1.4 元/km 计费;从 20km 开头,一律按单程 1.0 元/km 计费;实际行驶里程不足 1km 的按 1km 计费;请为出租车写一个程序,当输入实际里程时,立刻输出乘客应对的出租车费;#include<stdio.h> void main int jl; 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 14 页,共 45 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -printf" 请输入实际里程(公里) :" scanf"%d",&jl; ifjl<=3 printf" 应对车费为: %f 元n",8; else ifjl>3&&jl<20 printf" 应对车费为: %f 元 n",8+jl-3*1.4; else printf" 应对车费为: %f 元 n",8+17*1.4+jl-20*1; 模块 4 循环结构程序设计1. 分析以下程序的运行结果(1)#include <stdio.h> void main int x,n=0; float sum=0,ave; printf"input scores: " scanf"%d",&x; whilex.=-1 sum+=x; n+; scanf"%d",&x; ave=sum/n; printf"average score=%.2fn",ave; 程序的运行结果 : (2)#include<stdio.h> 细心整理归纳 精选学习资料 void main 第 15 页,共 45 页 - - - - - - - - - - - - - - - - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - - int n=0,s=0; do n=n+1; s=s+n; whiles<200; printf"n=%d,sum=%dn",n-1,s-n; 程序的运行结果 : (3)#include<stdio.h> void main float x,min; int i; scanf"%f",&x; min=x; fori=1;i<5; i+ scanf"%f",&x; ifx<minmin=x; printf"min=%fn",min; 细心整理归纳 精选学习资料 程序的运行结果: 第 16 页,共 45 页 - - - - - - - - - - - - - - - - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -(4)#include<stdio.h> void main int i,j; fori=1;i<=5;i+ forj=1;j<=20-i;j+ printf" " forj=1;j<=2*i-1;j+ printf"*" printf"n" 程序的运行结果 : 2. 编程实现以下功能(1)编写程序,将1100 之间个位数是6 的数据输出;#include<stdio.h> void main int i,k=0; fori=1;i<=100;i+ 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 17 页,共 45 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -ifi%10=6 printf"%3d ",i; k+; ifk%10=0 printf"n" printf"n" (2)从键盘上连续输入字符,统计其中大写字母的个数,直到输入换行符终止;#include <stdio.h> void main int n=0; char c; printf" 请输入一串字符 ,以回车终止 :" whilec=getchar.='n' ifc>='A'&&c<='Z' n+; printf" 大写字母有 %d 个; n",n; (3)输入 5 位同学 3 门课程成果,分别运算并输出每位同学#include <stdio.h> void main int n; float cj1,cj2,cj3,pjf=0; forn=1;n<=5;n+ 3 门课程成果的平均分;细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 18 页,共 45 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -printf" 请输入第 %d 位同学的三门课成果:",n; scanf"%f%f%f",&cj1,&cj2,&cj3; pjf=cj1+cj2+cj3/3; printf" 第 %d 位同学的平均成果是 %f 分; nn",n,pjf; (4)100 匹马驮 100 担货,大马一匹驮3 担,中马一匹驮2 担,小马两匹驮1 担,试编程运算大、中、小马的数目;#include<stdio.h> void main int i,j; for i=0;i<34;i+ /* 大马 */ for j=0;j<100-i*3/2+1;j+ /*中马 */ if 100-i-j%2=0 && 3*i+2*j+100-i-j/2 =100 printf" 大马 %d 匹,中马 %d 匹,小马 %d 匹nn",i,j,100-i-j; (5)编写程序,判定从键盘输入的自然数是否为素数(质数);说明:1)所谓素数就是只能被 1 和它自身整除的大于 1 的整数;2)要判定 n 是否为素数,就要用 2、3、 、n-1 分别去除 n,假如都不能被整除,就n 就是素数,正常退出循环;假如其中某个数被 #include<stdio.h> void main int i,num; printf" 请输入一个自然数:" scanf"%d",# n 整除,就 n 不是素数,需要退出循环;细心整理归纳 精选学习资料 ifnum<=1 printf"%d为非素数 ",num; 第 19 页,共 45 页 - - - - - - - - - - - - - - - - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -else fori=2;i<num;i+ ifnum%i=0 break; ifi=num printf"%d 为素数 n",num; else printf"%d 为非素数 n",num; 模块 5 数组1. 分析以下程序的运行结果(1)#include<stdio.h> void main int a=1,2,3,4,i,s=0,j=1; fori=3;i>=0;i- s=s+ai*j; j=j*10; printf “s=%dn ”,s; 程序的运行结果 : (2)#include<stdio.h> 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 20 页,共 45 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -void main int i,j,s=0; int a33=1,2,3,4,5,6,7,8,9; s=0; fori=0;i<3;i+ forj=0;j<3;j+ s=s+aii; printf"s=%dn",s; 程序的运行结果 : (3)#include<stdio.h> void main char ch7="65ab21" int i,s=0; fori=0;chi>='0'&&chi<='9'i+=2 s=10*s+chi-'0' printf"%dn",s; 程序的运行结果 : (4)运行时输入“Hello. ”#include<stdio.h> 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 21 页,共 45 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -void main char ss10="1,2,3,4,5" getsss; strcatss,"6789" printf"%sn",ss; 程序的运行结果 : (5)#include<stdio.h> #include<string.h> void main char arr24; strcpyarr0,"you" strcpyarr1,"me" arr03='&' printf"%sn",arr0; 2. 编程实现以下功能(1)输入一个数,插入到某升序排列的一维数组中,使插入后的数组仍旧升序;#include<stdio.h> void main int a11=1,4,6,9,13,16,19,28,40,100;