已阅读5页,还剩77页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言程序设计实训教程习题和实验解答2.1 C语言概述【习题解答】1结构化程序有三大基本结构:顺序、分支和循环.2.算法可以理解为有基本运算及规定的运算顺序所构成的完整的解题步骤。或者看成按照要求设计好的有限的确切的计算序列,并且这样的步骤和序列可以解决一类问题。有穷性:一个算法应包含有限的操作步骤而不能是无限的。 确定性:算法中每一个步骤应当是确定的,而不能应当是含糊的,有零个或多个输入输出,有一个或多个输出。有效性:算法中每一个步骤应当能有效地执行,并得到确定的结果。对于程序设计人员,必须会设计算法,并根据算法写出程序。可以用自然语言、流程图、伪代码和计算机语言表示算法。3.C语言的主要特点有:语言简洁、紧凑,使用方便、灵活。ANSI C一共只有32个关键字;控制语句丰富,程序书写自由,主要用小写字母表示,压缩了一切不必要的成分;运算符丰富,共有34种;数据结构类型丰富;具有结构化的控制语句;语法限制不太严格,程序设计自由度大;C语言允许直接访问物理地址,能进行位(bit)操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作。因此有人把它称为中级语言;生成目标代码质量高,程序执行效率高;与汇编语言相比,用C语言写的程序可移植性好。4.用传统流程图表达如下:2.2 数据类型与表达式【习题解答】一、选择题1.C 2.B 3.A 4.B 5.A 6.B 7.D 8.B 9.D 10.C二、填空题1.整型、实型、字符型、枚举类型2.3.0000003.逗号运算符4.三,自右向左5.1,06.32767三、编程题1.已知球的半径为1.5cm,计算球的体积。#include void main()float r=1.5,volume; volume=4.0/3*r*r*r; printf(“%fn”,volume);2.输入两个数a和b,求a除以b的商和余数?#include void main()int a,b,c,d; scanf(“%d,%d”,&a,&b); c=a/b; d=a%b; printf(“%d,%d”,c,d);3.输入三个学生的成绩,求这三个学生的总成绩和平均成绩。#include void main()int a,b,c,sum; float average; printf(“please input students score:”); scanf(“%d,%d,%d”,&a,&b,&c); sum=a+b+c; average=sum/3.0; printf(“sum=%d,average=%fn”,sum,average);【实验解答】1.c=102. 程序功能为输入两个数,求两数的差c=103. #include void main() int a,b,c; a=b=5; c=a+b;printf(“a+b=%d”,c);4.运行结果i=8,j=10,m=9,n=10,u=9,v=-10(回车)5.x=16,y=24,z=246. 100 68 100 68d D 100 68d D 120 112x p 出错 304 321 0 A7.编写一个C 程序,输入a,b,c三个整数,求这三个数之和。具体要求:1) 在Turbo C环境或其他编译环境下编辑该程序,然后进行编译连接。2) 运行该程序,检查你所编写的程序是否正确。#include void main()int a,b,c,sum; scanf(“%d,%d,%d”,&a,&b,&c);sum=a+b+c;printf(“sum is : %dn”,sum);2.3 顺序结构程序设计【习题解答】一、选择题1. B2. C3. A 4.A 5.D 6.B二、填空题1. y=2 2.666.006.00 (表示空格)3. k=11,k8=13,k16=b。 4. ! ! ahpu ahpu5. 5,4,c=3 6. i=56,j=789.000000,x=12345.000000,y=a,c=72三、编程题1.已知x=3.2,y=7,z=2,计算y/3*x-2的值。#includevoid main() float x=3.2; int y=7,z=2; printf(“%f”, y/3*x-2);2.输入一个华氏温度,要求输出摄氏温度(结果保留2位)。公式为c=5/9*(f-32)。#include void main() float f,c; scanf(“%f”,&f); c=5.0/9*(f-32); printf(“c=%.2f”,c);3.从键盘输入一个小写字母,用大写形式输出该字母。#include void main() char a,b; printf(“please input a little letter:”); scanf(%c,&a); b=a-32; printf(%c,b);4.把16进制数12a以10进制形式输出。#include void main()int a=0x12a;printf(%d,a);5.输入两个整数,将其值交换。#include void main()int a,b,t; scanf(a=%d,b=%d,&a,&b); t=a; a=b; b=t; printf(a=%d,b=%d,a,b);【实验解答】实验 顺序结构程序设计1. 结果为0,因为a,b被定义为实型,而却以整型输入,类型不匹配。2. 错误之处: s=3 /(a+b)*(a+b); 应改为:s=3.0/(a+b)*(a+b);3. 运行结果 -1,177777,ffff,65535 b=-24.编程并上机调试运行1) 设圆半径为r=1.5,求圆周长、面积。要求用scanf函数输入数据,输出时取小数点后两位。#include void main() float r,l,s,v;scanf(%f,&r);l=2*3.14*r;s=3.14*r*r;printf(l=%.2f,s=%.2f,v=%.2f,l,s);2) 输入一个3位十进制整数,分别输出百位、十位以及个位上的数。#include void main() int a,b,c,d; scanf(%d,&a); b=a/100; c=a/10%10; d=a%10; printf(%d %d %d,b,c,d);3) 从键盘输入一个带2位的实数,将其整数部分和小数部分分离后输出。例如:输入321.54,输出321.54=321+0.54。#include void main() int a; float b,c; scanf(%f,&b); a=(int)b; c=b-a; printf(%.2f=%d+%.2f,b,a,c);4) 用getchar函数读入两个字符,然后分别用putchar和printf函数输出这两字符。#include void main()char a,b; a=getchar(); b=getchar(); putchar(a); putchar(b); printf(n%c%c,a,b);2.4 选择结构程序设计【习题解答】一、选择题1. A。 2. D。 3. A。 4. B。 5. C。 6. A。二、填空题1. (x20&x30)|x-100。2. 1,0,0。3. 585858。4. 20,0。5. 2。6.a=3,b=2。三、编程题1.要求输入三个数,输出其中最大值。#includevoid main() int a,b,c,max; scanf(%d%d%d,&a,&b,&c); max=a; if(maxb) max=b; if(maxc) max=c; printf(max is:%dn,max);2.由键盘输入3个数,若输入的这3个数可以构成三角形,则计算以这3个数为边长的三角形周长;如果不能,则输出提示错误信息。#include void main() float a,b,c,l; printf(please input a,b,cn); scanf(%f,%f,%f,&a,&b,&c); if(a+b)c&(a+c)b&(b+c)a) l=a+b+c; printf(l=%fn,l); else printf(It is not triangle!n);3.从键盘上输入一个整数判断其奇偶以及正负。#include stdio.hvoid main() int a; scanf(%d,&a); if(a0) if(a%2=0) printf(It is PLUS even number); else printf(It is PLUS odd number); else if(a0) printf(2); else if(b*b-4*a*c=0) printf(1); else printf(0);5.从键盘输入表示年份的整数,判断是否为闰年。#include stdio.hvoid main() int year; scanf(%d,&year); if(year%400=0)|(year%4=0&year%100!=0) printf(It is runnian); else printf(It is not runnian);【实验解答】实验名称 选择结构程序设计1. if(0=c&c=9) if(A=c&c=Z)|(a=c&c=z)else2.编程并上机调试运行1) 给出一个不多于4位的正整数,求它是几位数?#includevoid main() int n; printf(Input a num(0num10000); scanf(%d,&n); if(n10) printf(1n); else if(n100) printf(2n); else if(n1000) printf(3n); else printf(4n);2) 给出一个百分制成绩,要求输出成绩等级A、B、C、D、E。90分及以上为A,8089为B,7079为C,6069为D,60以下为E。用switch语句来实现。#includevoid main() int score; scanf(%d,&score); if(score100) printf(Error!); else score=score/10; switch(score) case 10: case 9:printf(An);break; case 8:printf(Bn);break; case 7:printf(Cn);break; case 6:printf(Dn);break; default:printf(En); 3) 输入四个数,要求按从大到小顺序输出。#includevoid main()int a,b,c,d,t; scanf(%d%d%d%d,&a,&b,&c,&d); if(ab)t=a;a=b;b=t; if(ac)t=a;a=c;c=t; if(ad)t=a;a=d;d=t; if(bc)t=b;b=c;c=t; if(bd)t=b;b=d;d=t; if(cd)t=c;c=d;d=t; printf(%d,%d,%d,%dn,a,b,c,d);4) 输入3个整数,将最大数与最小数输出。#include void main() int a,b,c,t; int max,min; scanf(%d%d%d,&a,&b,&c); max=min=a; if(maxb) max=b; else min=b; if(max=0&a=9) a=a-0; printf(%d,a); else printf(%d,a);2.5 循环结构程序设计【习题解答】一、选择题1.A 2. A 3. C 4. B 5. C6. C二、填空题1. 18或192. 03. 89214. 3,45. 356. 4三、编程题1.设计程序计算并输出1+#include void main() int i; float s=0; for(i=1;i=99;i+=2) s=s+1.0/i; printf(“s=%fn”,s);2.编写程序输出下面图形 1 21 321432154321#include void main() int i,j; for(j=5;j=1;j-) for(i=1;i=j-1;i+) printf(“ “); for(;i=5;i+) printf(“%d”,5-i+1); printf(“n”); 3.一球从100m高度自由落下,每次落地后又反跳原高度的一半,再下落。求在第10次落地时,共经多少米?第10次反弹高度?#include void main() float s=100,m=100,i; for(i=2;i=10;i+) m=m/2; s=s+m*2; printf(“No.10 drops all distance is=%fn”,s); printf(“No.10 ups distance is=%f”,m/2);4.输入两个整数求其最大公约数。#include void main() int m,n,i,t; scanf(%d %d,&m,&n); if (mn) t=n; n=m; m=t; i=n; while(m%i!=0)|(n%i!=0) i=i-1; printf(%dn,i);5.输入一个正整数,将其逆序输出。#include stdio.hvoid main() int m,n; scanf(%d,&n); while(n!=0) m=n%10; n=n/10; printf(%d,m); 【实验解答】实验一 循环结构程序设计1. 1) %1d s=0 i+=22)s=0 ld i=2*n-1 i+=23)s=0,n,i=1 i+=2 while(i=2*n-1);2. 编程并上机调试运行1) 编程求1!+2!+3!+10!#include void main() long s=1,i,t=1; for(i=2;i=10;i+) t=t*i; s=s+t; printf(%ld,s); 2) 打印以下图案#include void main() int i,j; for(i=1;i=4;i+) for(j=1;j4+i;j+) if(i+j5) printf( ); else printf(*); printf(n); for(i=1;i=3;i+) for(j=1;j=j) printf( ); else printf(*); printf(n); 3) 猴子吃桃。猴子第一天摘若干桃子,当即吃了一半,又加一个。第二天吃了剩下桃子一半又多一个。以后每天早上都吃前一天剩下的一半多一个。第十天,只剩一个。问第一天共摘多少个桃子。#include void main() int s=1,i; for(i=2;i=10;i+) s=(s+1)*2; printf(%d,s);4) 打印九九乘法表#include void main() int i,j; for(i=1;i=9;i+) for(j=1;j=i;j+) printf(%d*%d=%d ,i,j,i*j); if(i=j) printf(n); 5) 输出10-100之间的全部素数。#includevoid main() int i,j; for(i=10;i=100;i+) for(j=2;j=i;j+) if(i%j=0) if(i=j) printf(%d ,i); break; 实验二 综合运用三种基本结构进行程序设计1.百马百担。100匹马,驮100担,大马3担,中马2担,2个小马驮1担。问大、中、小马各多少?#include void main() int i,j,k; for(i=0;i=33;i+) for(j=0;j=50;j+) k=100-i-j; if(3*i+2*j+k/2.0=100) printf(“Da=%d,Zhong=%d,Xiao=%dn”,i,j,k); 2.输入一行字符,分别统计其中英文字母、空格、数字和其它字符个数。#include void main() char c; int letter=0,space=0,digtal=0,other=0; while(c=getchar()!=n) if(c=A&c=a&c=0&c=9) digtal+; else other+; printf(“letter=%d,space=%d,digtal=%d,other=%d”,letter,space,digtal,other);3.打印输出”水仙花数”。”水仙花数”是指一个3位,其各位数字的立方和等于该数本身。例如:153。 #include void main() int i,j,k; for(i=1;i=9;i+) for(j=0;j=9;j+) for(k=0;k=9;k+) if(i*100+j*10+k=i*i*i+j*j*j+k*k*k) printf(“%dn”,i*100+j*10+k); 4.将一个正整数分解成质因数的乘积。例如:输入90,打印90=2*3*3*5。#include void main() int n,i=2; scanf(“%d”,&n); printf(“%d=“,n); while(n1) if(n%i=0) printf(“%d*”,i); n=n/i; else i+; printf(“b “);5.利用循环语句编写程序:对一个正整数,将各位数字反序后的数组成一个整数输出。例如:输入12345,输出54321。#include void main() long m,n,sum=0; scanf(“%ld”,&m); while(m0) n=m%10; m=m/10; sum=sum*10+n; printf(“%ld”,sum);6.一个素数加上1000以后是37的倍数,求满足这个条件的最小素数。#include void main()int n=1,i; while(1) n+; for(i=2;in/2)&(n+1000)%37=0) printf(“%d”,n); break; 7.”完数”。找1000以内的所有完数。一个数如果恰好等于它的因子之和,这个数就称为”完数”。#include void main() int i,j,sum,m; for(i=2;i1000;i+) sum=0; for(j=1;ji;j+) if(i%j=0) sum+=j; if(sum=i) printf(%d its factors are 1,i); for(m=2;mi;m+) if(i%m=0) printf(,%d,m); printf(n); 2. 6 数组【习题解答】一、选择题1. A 2. D 3. A 4. D 5. B 6. B 7. C 8. D 9. C 10. D 11. A 12. D 二、填空题1. 2 2. r 3. 7 4. !dlrowolleh 三、编程题1.从键盘输入n个整数,统计所有下标为奇数且数组元素的值为偶数的个数。#includevoid main() int a100; int i,j,n,t,num=0; scanf(“%d”,&n); for(i=0;in;i+) scanf(“%d”,&ai); for(i=0;in;i+) if(i%2= =1&ai%2= =0) num+; for(i=0;in;i+) printf(“%5d”,ai); printf(“n%d”,num);2.将字符数组中的字母变换为其字母表顺序两位后的字母,如果是z或Z,则分别变为b或B,非字母字符不变。 即a c b d #include#includevoid main() char a50; int i,j,n,t,num=0; gets(a); n=strlen(a); for(i=0;in;i+) scanf(“%d”,&ai); for(i=0;i=a&ai=“A”&ai=X) ai=ai+2; else if(ai= =y| ai= =z| ai= =Y| ai= =Z) ai=ai-24; puts(a);3. 判断任意整数n是否为回文数。(回文数指正读反读都一样的数,如:2112,121等)#includevoid main() long n;int i,j,m,d20;scanf(“%ld”,&n);m=0;while(n!=0) n=n/10;m+;for(i=0,j=m-1;ij;i+,j-)if(di!=dj) break;if(ij) printf(“NOT”);else printf(“YES”);4.从键盘输入10个整数,检查整数5是否包含在这些数据中,若是的话,找出它是第几个被输入的。#includevoid main() int a10,i;for(i=0;i10;i+)scanf(“%d”,&ai);for(i=0;i=10)printf(“5 is not in data.n”);5.任意输入20个正整数,找出其中的素数,将这些素数由小到大排序并输出。#includevoid main() int a20,b20,i,j,k,m; for(i=0;i20;i+) scanf(“%d”,&ai); k=0; for(i=0;i20;i+) for(j=2;j=ai-1) bk=ai; k+; for(i=0;ik-1;i+) for(j=i+1;jk;j+) if(bjbi) m=bi; bi=bj; bj=m; for(i=0;ik;i+) printf(“%5d”,bi); printf(“n”);6.将4*5矩阵每一行按由大到小排序。 #includevoid main() int a45,i,j,k,m; for(i=0;i4;i+) for(j=0;j5;j+) scanf(“%d”,&aij); for(i=0;i4;i+) for(j=0;j5;j+) for(k=j+1;kaij) m=aik;aik=aij;aij=m; for(i=0;i4;i+) for(j=0;j5;j+) printf(“%5d”,aij); printf(“n”); 【实验解答】实验一 数组的定义及使用I1.&ai ai n-1 i+1 min=j ai amin2.编程并上机调试运行1) 将一个数组中的值逆序存储,然后按顺序输出数组。如:原来数组存储为1,2,3,4,5的,按要求重新存为5,4,3,2,1。#includevoid main() int i,j,t,n,a100; scanf(“%d”,&n); for(i=0;in;i+) scanf(“%d”,&ai); for(i=0,j=n-1;ij;i+,j-) t=ai; ai=aj; aj=t; for(i=0;in;i+) printf(“%5d”,ai);2) 打印出以下杨辉三角(要求打印8行)。 1 11 12 1 1 3 3 1 14 6 41 15 10 105 1 #includevoid main() int i,j,a88; for(i=0;i8;i+) for(j=0;j8;j+) if(i= =j|j= =0) aij=1; else aij=ai-1j-1+ai-1j; for(i=0;i8;i+) for(j=0;j8;j+) printf(“%5d”,aij); printf(“n”); 3) 求4*4方阵两对角线元素之和及其转置矩阵。#includevoid main() int i,j,a44,b44,s=0; for(i=0;i4;i+) for(j=0;j4;j+) scanf(“%d”,&aij); for(i=0;i4;i+) for(j=0;j4;j+) bij=aij; if(i= =j|i+j=3) s=s+aij; for(i=0;i4;i+) for(j=0;j4;j+) printf(“%5d”,bij); printf(“n”); printf(“%5d”,s);4) 输出Fibonacci数列的前20项。#includevoid main() long a20=1,1; int i; for(i=2;i20;i+) ai=ai-1+ai-2; for(i=0;i20;i+) printf(“%ldt”,ai);5) 按公式计算,求A20的值。 A1=1,A2=1; A3=3*A1+A2;A4=3*A2+A3; #includevoid main() long a20=1,1; int i; for(i=2;i20;i+) ai=ai-1+3*ai-2; printf(“%ld”,a19);实验二 数组的定义及使用II1. i=1 si!=0 sn=02.编程并上机调试运行1) 用冒泡法对10个整数排序。10个整数用scanf函数输入。#includevoid main() int a10; int i,j,t; for(i=0;i10;i+) scanf(“%d”,&ai); for(i=0;in-1;i+) for(j=0;jn-1-i;j+) if(ajaj+1) t=aj;aj=aj+1;aj+1=t; for(i=0;i10;i+) printf(“%5d”,ai); 2) 将两个字符串连接起来,不要用strcat函数。#include#includevoid main() char a100,b50; int i,j,t; gets(a); gets(b); t=strlen(a); for(i=0;bi!=0;i+,t+) at=bi; at=0; puts(a); 3) 输入一行字符串,统计其中的单词个数,单词之间用空格隔开。如:输入I am a boy !其中单词的个数为4个(不考虑大写字母)。#include#includevoid main() char a100; int i,t; gets(a); t=0; for(i=0;ai!=0;i+) if(ai=a&ai=z&ai-1= = |i= =0) t+; printf(“t=%dn”,t); 4) 找出一个二维数组的”鞍点”,即该位置上的元素在该行
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 引导农业领域实现智能升级步骤
- 大单元四 陆地水环境 高三地理第二轮总复习
- 数据治理平台数据流程规范化
- 2026年同等学力申硕考试报名方式详解试卷
- 高中体育课程标准运动康复评估试卷及答案
- 影视角色塑造能力考核试卷及答案
- 2025年病患压疮预防能力评价试卷及答案
- 2025年养老护理员老年人精神健康促进技能评估试题
- 仿古建筑屋面瓦铺装方案
- 公共设施运行维护规范手册
- 智能网联汽车感知技术与应用 课件 项目3 环境感知传感器技术应用
- 2026年春大象版新教材小学科学二年级下册(全册)教学设计(附目录P130)
- 2026年二手车评估与交易流程优化指南
- 2025及未来5年光学及摄像仪器项目投资价值分析报告
- 2026年渭南职业技术学院单招职业技能测试题库必考题
- 2025比亚迪供应商审核自查表
- B细胞淋巴瘤课件
- 谷雨生物2024环境、社会及管治(ESG)报告
- 2025金风变流器2.0MW故障代码手册V4
- 房地产估价试题及答案
- 血管内超声(IVUS)的简介及适应症
评论
0/150
提交评论