C语言程序设计项目教程教学课件ppt作者王瑞红C语言程序设计项目教程习题答案

上传人:沈*** 文档编号:144874051 上传时间:2022-08-28 格式:DOC 页数:45 大小:223.50KB
返回 下载 相关 举报
C语言程序设计项目教程教学课件ppt作者王瑞红C语言程序设计项目教程习题答案_第1页
第1页 / 共45页
C语言程序设计项目教程教学课件ppt作者王瑞红C语言程序设计项目教程习题答案_第2页
第2页 / 共45页
C语言程序设计项目教程教学课件ppt作者王瑞红C语言程序设计项目教程习题答案_第3页
第3页 / 共45页
点击查看更多>>
资源描述
习题答案模块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. n C. 中国 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. !(ab)&c|1)(10)设有以下定义:int i;char c;float f;,以下结果为整型的表达式是( B )。A. i+f B. i*c C. c+f D. i+c+f2. 填空题(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) 。(4)若有语句double x=15.5;int y;,当执行y=(int)(x/5)%2;之后y的值是 1 。(5)若有语句double y=3.6;,则执行完+y;语句后,(+y)表达式的值是 4.6 ,变量y的值是 4.6 。(6)代数式-2ab+40-4ac改写成C语言的表达式是 -2*a*b+40-4*a*c 。(7)在计算机中,字符的比较是对它们的ASCII码值进行比较。(8)已知字母a的ASCII码为十进制数97,且设ch为字符型变量,则表达式ch=a+8-3的值为 f 。3. 分析下列程序的运行结果(1)#include void main( ) int a=21,b=11;printf(%dn,-a+b,-b+a);程序的运行结果:(2)#include void main( ) printf (nABCtDEnFGHn);printf (nwhy is 31+31 equal to %d?nn,21+31);程序的运行结果:(3)#includevoid main( ) char ch=65; printf(%cn,ch); 程序的运行结果:(4)#includevoid main( ) int x=10,y=20,z=30; z=x!=y; printf(%dn,z); 程序的运行结果:(5)#includevoid main( ) int x=10; printf(%dn,(x%3=0);程序的运行结果:(6)#includevoid main( ) int k=4,a=3,b=2,c=1; printf(%dn ,(ka?k:(cb?c:a);程序的运行结果:模块2 顺序结构1. 程序填空题(1)要得到下列输出结果:a,bA,B97,98,65,66请按要求填空,补充以下程序:#include 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 ) ;(2)要得到下列输出结果:a=%2,b=%5#includevoid main( ) int a=2,b=5;printf(a=%d,b=%dn ,a,b );2. 分析下列程序的运行结果(1)#includevoid main( ) int n=5,m=5; printf(%d,%dn,+m,n-);程序的运行结果:(2)执行下列程序时输入:2468101#includevoid main( ) int x,y; scanf(%2d%*2d%2d,&x,&y); printf(%ldn,x+y);程序的运行结果:(3)执行下列程序时输入:ABCD#includevoid main( ) char x,y; x=getchar( ); y=getchar( ); putchar(x);putchar(n);putchar(y);程序的运行结果:(4)#include #includevoid main( ) int a=1,b=2,c=2; float x=10.5,y=4.0,z; z=(a+b)/c+sqrt(int)y)*1.2/c+x; printf(z=%fn,z);程序的运行结果:3. 编程实现以下功能(1)从键盘输入一个整数x,若x大于0,则显示“红”;若x等于0,则显示“黄”;若x小于0,则显示“绿”。#includevoid main() int x;printf(请输入一个整数:); scanf(%d,&x); printf(%sn,(x0?红:(x=0?黄:绿);(2)假设银行定期存款的年利率rate为2.25%,并已知存款期为n年,存款本金为capital元,试编程计算n年后可得到本利之和deposit(假设不计算复利)。提示:2.25%编写程序时应写为0.0225,本金和年数未知,从键盘输入。#include#includevoid main() int n;float capital,rate=0.0225,deposit;printf(请输入存款期和本金:); scanf(%d%f,&n,&capital); deposit=capital*pow(1+rate,n); printf(deposit=%fn,deposit); (3)编写程序,把700分钟换算成用小时和分钟表示。#include#includevoid main() int n=700,x,f;x=n/60;f=n%60; printf(700分钟是%d小时,%d分钟。n,x,f); 模块3 选择结构1. 分析下列程序的运行结果(1)#includevoid main( ) int x=1,y=5,z=3; if(z=x) printf(%dn,z); else printf(%d n,y);程序的运行结果:(2)#includevoid main( ) int x=1,a=0,b=0; switch(x) case 0:b+; case 1:a+; case 2:b+,a+; printf(a=%d,b=%dn,a,b);程序的运行结果:(3)#includevoid main( ) int n=6; if(n+6) printf(%dn,n); else printf(%d n,n-); 程序的运行结果: (4)#include void main() int a=1,b=-1,c; if(a*b0) c=1; else if(a*b0)c=2; else c=3; printf(c=%dn,c);程序的运行结果:2. 编程实现以下功能(1)从键盘输入一个整数,如果是偶数,输出“Is Even”;如果是奇数,输出“Is Odd”。#include void main()int i;printf(请输入一个整数:); scanf(%d,&i);if(i%2=0) printf(%d %sn,i,Is Even);else printf(%d %sn,i,Is Odd);(2)求解一元二次方程ax2+bx+c=0。如果有实根,则输出;否则输出“无实根”(a、b、c由键盘输入)。#include #include 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; if(d0) printf(无实根!n);elsef=sqrt(d);x1=(-b+f)/(2*a); x2=(-b-f)/(2*a);if(f=0) printf(x1=x2=%lfn,x1);else printf(x1=%lf,x2=%lfn,x1,x2);(3)编写可以完成加、减、乘、除、求余运算的简易计算器程序。#include #include#include 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(); switch(ch) case 0:exit(0); case 1:printf(nn请输入两个整数:); scanf(%d%d,&a,&b);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=(float)a/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);(4)某商场给顾客购物的折扣率如下: 购物金额200元 不打折 200元=购物金额500元 9折 500元=购物金额=1000元 7.5折输入一个购物金额,输出打折率、购物实际付款金额。要求:分别用i f语句和switch语句两种方法完成编程。方法一:用i f语句#include void main()float gwje; printf(请输入购物金额:);scanf(%f,&gwje);if(gwje=200&gwje=500&gwje1000) printf(折扣率为8折,实际应付金额为:%fn,gwje*0.8);else printf(折扣率为7.5折,实际应付金额为:%fn,gwje*0.75);方法二:用进制switch语句#include void main()float gwje,zk,fkje;int n; printf(请输入购物金额:);scanf(%f,&gwje);n=(int)gwje/100;switch(n) 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; printf(折扣率为:%f,应付购物金额为:%fn,zk,fkje);(5)某市出租车计费,起步价8元,前3km不计费;超过3km但不足20km,按单程1.4元/km计费;从20km开始,一律按单程1.0元/km计费;实际行驶里程不足1km的按1km计费。请为出租车写一个程序,当输入实际里程时,立即输出乘客应付的出租车费。#include void main()int jl; printf(请输入实际里程(公里):);scanf(%d,&jl); if(jl3&jl20) printf(应付车费为:%f元n,8+(jl-3)*1.4); else printf(应付车费为:%f元n,8+17*1.4+(jl-20)*1); 模块4 循环结构程序设计1. 分析下列程序的运行结果(1)#include void main( ) int x,n=0; float sum=0,ave;printf(input scores: );scanf(%d,&x);while(x!=-1) sum+=x; n+;scanf(%d,&x); ave=sum/n; printf(average score=%.2fn,ave);程序的运行结果:(2)#includevoid main( ) int n=0,s=0; do n=n+1; s=s+n; while(s200); printf(n=%d,sum=%dn,n-1,s-n);程序的运行结果:(3)#includevoid main( ) float x,min; int i; scanf(%f,&x); min=x; for(i=1;i5; i+) scanf(%f,&x); if(xmin)min=x; printf(min=%fn,min); 程序的运行结果: (4)#include void main( ) int i,j; for(i=1;i=5;i+) for(j=1;j=20-i;j+) printf( ); for(j=1;j=2*i-1;j+) printf(*); printf(n); 程序的运行结果:2. 编程实现以下功能(1)编写程序,将1100之间个位数是6的数据输出。#include void main()int i,k=0;for(i=1;i=100;i+)if(i%10=6)printf(%3d ,i);k+;if(k%10=0) printf(n);printf(n);(2)从键盘上连续输入字符,统计其中大写字母的个数,直到输入换行符结束。#include void main() int n=0; char c; printf(请输入一串字符,以回车结束:); while(c=getchar()!=n) if(c=A)&(c=Z) n+; printf(大写字母有%d个。n,n);(3)输入5位同学3门课程成绩,分别计算并输出每位同学3门课程成绩的平均分。#include void main() int n; float cj1,cj2,cj3,pjf=0; for(n=1;n=5;n+) 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担,试编程计算大、中、小马的数目。#includevoid main() int i,j; for (i=0;i34;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就是素数,正常退出循环;如果其中某个数被n整除,则n不是素数,需要退出循环。#includevoid main() int i,num; printf(请输入一个自然数:); scanf(%d,&num); if(num=1) printf(%d为非素数,num); else for(i=2;inum;i+) if(num%i=0) break; if(i=num) printf(%d为素数n,num); else printf(%d为非素数n,num); 模块5 数组1. 分析下列程序的运行结果(1)#includevoid main( ) int a=1,2,3,4,i,s=0,j=1; for(i=3;i=0;i-) s=s+ai*j; j=j*10;printf(“s=%dn”,s); 程序的运行结果: (2)#includevoid main( ) int i,j,s=0; int a33=1,2,3,4,5,6,7,8,9; s=0; for(i=0;i3;i+) for(j=0;j3;j+) s=s+aii; printf(s=%dn,s);程序的运行结果:(3)#includevoid main( ) char ch7=65ab21; int i,s=0; for(i=0;chi=0&chi=9;i+=2) s=10*s+chi-0; printf(%dn,s);程序的运行结果:(4)运行时输入“Hello!”#includevoid main( ) char ss10=1,2,3,4,5; gets(ss); strcat(ss,6789); printf(%sn,ss);程序的运行结果:(5)#include#includevoid main( ) char arr24; strcpy(arr0,you); strcpy(arr1,me); arr03=&; printf(%sn,arr0);2. 编程实现以下功能(1)输入一个数,插入到某升序排列的一维数组中,使插入后的数组仍然升序。#includevoid main() int a11=1,4,6,9,13,16,19,28,40,100; int num,i,j; printf(数组a:n); for(i=0;ia9) a10=num; /*num比a9大则num插入到最后*/ else for(i=0;inum) /*只到num比ai小则将num插入到ai*/ for(j=9;j=i;j-) /*要把num插入到ai就必须把ai到a9的所有数依次后移一位*/ aj+1=aj; ai=num; break; printf(插入后的数组a:n); for(i=0;i11;i+) printf(%5d,ai); printf(n);(2)从键盘上输入一行由小写英文组成的字符串,用置换法(置换规律:按字母表逆序)对其加密。#includevoid main()char list27=zyxwvutsrqponmlkjihgfedcba;char str80;int i,j;printf(请输入一小写字母串(长度小于80):);scanf(%s,&str);i=0;while(stri!=0)j=stri-97;stri=listj;i+;printf(加密成为:%sn,str);(3)输入一行简单英文句子,统计其中单词的个数。#includevoid main() char s80,c; int i,n=0,word=0; printf(请输入一句英语:); gets(s); for(i=0;(c=si)!=0;i+) if(c= ) word=0; else if(word=0) word=1; n+; printf(这个句子里包含%d个单词。n,n);/*单词的数目可以由空格出现的次数决定,连续若干个空格作为出现一次空格;一行开头的空格不统计在内.如果测出某一个字符为非空格,它的前面的字符是空格,则表示新的单词开始了,此时n+.若当前字符为非空格而其前面的字符也是非空格,则意味着仍然是原来那个单词的继续,n不加1.若word=0,则表示前一个字符是空格;.若word=1,则表示前一个字符不是空格;*/(4)编写程序,输入10个整数放入数组a 中,求数组中最小值min及其下标k并输出。#includevoid main()int a10,i,min,k;printf(请输入10个整数:);for(i=0;i10;i+) scanf(%d,&ai);min=a0;k=0; for(i=1;i10;i+) if(aimin) min=ai; k=i; for(i=0;i10;i+) printf(%d ,ai);printf(n最小值是%d,其下标是%dn,min,k); (5)求一个3*3矩阵对角线元素之和。#includevoid main()int a33,i,j,s=0;printf(请输入一个3x3的矩阵:);for(i=0;i3;i+)for(j=0;j3;j+) scanf(%d,&aij);for(i=1;i10;i+) for(j=0;j3;j+)if(i=j) s=s+aij; for(i=0;i3;i+)for(j=0;j3;j+) printf(%4d,aij); printf(n);printf(n对角线之和是:%dn,s); (6)编程打印出图5-2所示的杨辉三角形。(10行) 规律:除两侧元素均为1之外,其余每个位置上的元素的值为其左上角元素与其正上方元素之和。 1 1 11 2 11 3 3 11 4 6 4 11 5 10105 1 1 6 15 20 15 6 1图5-2 杨辉三角形#include #define N 10void main() int i,j,n; int aNN; a00=1;a10=1;a11=1; for (i=2;iN;i+) for (j=0;j=i;j+) if (j=0) aij=1; else if (i=j) aij=1; else aij=ai-1j-1+ai-1j; for (i=0;iN;i+) for (j=0;j=i;j+) printf(%dt,aij); printf(n); 模块6 函数1. 程序填空题(请按要求填空,补充以下程序)(1)下列程序功能是统计从键盘上输入的字符中大写字母的个数,输入时用“*”作为输入结束标志。#include#includevoid main( ) char c1;int count=0;scanf(%c,&c1);while( c1 ) !=*) if (isupper(c1) count+; scanf(%c,&c1);printf(“ %dn ” ,count);(2)下列程序的功能是求101000之间的所有素数。#includevoid main( ) int i;for (i=10;i=1000);i+) if (isprime( i )printf(“%d, ”,i);printf(“n”);#include isprime(int n) int i; for (i=2;i=sqrt(n);i+) if(n%i=0) return( 0 ); return( 1 );2. 分析下列程序的运行结果(1)#includeint d=1;f(int p)int d=1;d+=p+;void main() int a=5; f(a);d+=a+;printf(“%dn”,d);程序的运行结果:(2)#includevoid main( ) int k=4,m=1,p; p=fun(k,m); printf(%d ,p); p=fun(k,m); printf(“%d”,p);fun(int a,int b) static int m=0,i=2;i+=m+1;m=i+a+b;return (m);程序的运行结果:(3)#includevoid main( ) int a=2,i; for (i=0;i3;i+);printf(“%d”,func(a);func(int a)int b=0;static c=3;b+;c+;return (a+b+c);程序的运行结果:3. 编程实现以下功能(1)编写一个函数,统计一个字符串中所含字母、数字、空格和其他字符的个数。#include #include int letter,digit,space,other;void count(char str);main() char str100; letter=digit=space=other=0; printf(请输入一个字符串:n); scanf(%n,str); /请注意这里的正规写法!意思即匹配任意非换行符n的字符 count(str); printf(所输入字符串中有字母%d个,数字%d个,空格%d个,其他字符%d个。n,letter,digit,space,other);void count(char str) int i; for(i=0;i=a&stri=A&stri=0&stri=9) digit+; else if(stri=32) space+; else other+;(2)某班(假设有10人)期中考试共有5门成绩,分别用函数求:每个学生的平均分;每门课程的平均分;按每个学生的平均分排序。#include int m=0,n=0;/*定义全局变量m,n*/ float average (float score6,int i)/* 求每个学生平均分*/ int j; float ave=0,sum=0; for (j=1;j6;+j) sum+=scoreij; ave=sum/5; return ave; float perave (float score6,int j)/*求每门课程平均分*/ int i; float aveper=0,sums=0; for (i=1;i11;+i) sums+=scoreij; aveper=sums/10; return aveper; maxper (float score6)/*求最大分数所在学生和课程*/ int i,j; float max; max=score11; for (i=1;i11;+i) for (j=1;jmax) max=scoreij; m=i;n=j; return 0; void main() float score116; int i,j; for (i=1;i11;+i) printf (# %d:,i); for(j=1;j6;j+) scanf(%f,%f,%f,%f,%f,&scoreij); printf(n); for (i=1;i11;+i) printf (# %d student:,i); printf (%fn,average(score,i); printf(n); for (i=1;i6;+i) printf (# %d lesson:,i); printf (%fn,perave(score,i); printf(n); maxper(score); printf (Max:Line:%d Row:%dn,m,n); system(pause); (3)用递归方法调用函数fun(int n),计算1+2+3+4+n的和。#include int fun(int n)int sum = 0;if (n = 1)sum = n;elsesum = n + fun (n-1);return sum;void main()int n;printf(请输入一个整数:);scanf(%d,&n);printf(%dn,fun(n);模块7 灵活运用指针实训要求:所有实训任务均要求用指针方法进行处理。(1) 输入3个整数,按由小到大输出。#include void sort(int *b,int m) int t,i,j; for (j=0;jm-1;j+) for (i=0;i*(b+i+1) t=*(b+i); *(b+i)=*(b+i+1); *(b+i+1)=t; for (i=0;im;i+) printf(%6d,*(b+i); printf(n);void main() int a6,i; printf(请输入6个整数:); for (i=0;i6;i+) scanf(%d,&ai); sort(a,6); (2) 输入3个字符串,按由小到大输出。#include #includevoid main() char str150,str250,str350; char *p3,*temp; int i,j; printf(input a string:); scanf(%s,str1); printf(input a string:); scanf(%s,str2); printf(input a string:); scanf(%s,str3); p0=str1;p1=str2;p2=str3; for(i=0;i2;i+) for(j=i+1;j0) temp=pi; pi=pj; pj=temp; printf(%s,%s,%sn,p0,p1,p2);(3) 写一函数,求字符串的长度。在main( )函数中输入字符串,并输出字符串长度。#includeint longs(char *s) int i=0,n=0; for(i=0;*(s+i)!=0;i+)n+; return(n);void main() char *s; char c100; int num; s=c; printf(请输入一个字符串:);gets(c); num=longs(s);/传递一个指针而不是*s printf(字符串长度为:%dn,num); (4) 写一函数,将33的整型矩阵转置。#include void Transpose(int (*matrix)3) int temp; int i, j; for(i=1;i3;i+)/*转置*/ for(j=0;ji;j+) temp = *(*(matrix+j)+i); *(*(matrix+j)+i) = *(*(matrix+i)+j); *(*(matrix+i)+j) = temp; void main() int i,j,a33 = 1,2,3,4,5,6,7,8,9; printf(原始矩阵为:n);for(i=0;i3;i+) for(j=0;j3;j+) pr
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!