C语言程序设计实验报告2.docx_第1页
C语言程序设计实验报告2.docx_第2页
C语言程序设计实验报告2.docx_第3页
C语言程序设计实验报告2.docx_第4页
C语言程序设计实验报告2.docx_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

实验2 流程控制实验2.1 实验目的(1)掌握复合语句、if语句、switch语句的使用,熟练掌握for、while、do-while三种基本的循环控制语句的使用,掌握重复循环技术,了解转移语句与标号语句。(2)熟练运用for、while、do-while语句来编写程序。(3)练习转移语句和标号语句的使用。(4)使用集成开发环境中的调试功能:单步执行、设置断点、观察变量值。2.2 实验内容及要求2.2.1源程序改错下面是计算s=n! 的源程序,在这个源程序中存在若干语法和逻辑错误。要求在计算机上对这个例子程序进行调试修改,使之能够正确完成指定任务。例如,8!=40320。1 #include 2 int main()3 int i,n,s=1;4 printf(Please enter n:);5 scanf(%d,n);6 for(i=1,i=n,i+)7 s=s*i;8 printf(%d! = %d,n,s);9 10 return 0;解答:(1) 错误修改:1) 输入字符格式错误,正确形式为:scanf(“%d”,&n);2) return 0;与的相对位置错误,正确形式为:return0;(2) 错误修改后的程序: #include int main() int i,n,s=1;printf(Please enter n:); scanf(%d,n); for(i=1,i=n,i+) s=s*i; printf(%d! = %d,n,s); return 0; (3) 运行结果: 图1 2.2.1源程序改错测试图2.2.2源程序修改替换(1)修改第1题,分别用while和do-while语句替换for语句。替换为While语句1)在判断while语句前,要先定义i=1,再执行while语句。替换后的程序如下所示:#include int main() int i,n,s=1; printf(please enter n:); scanf(%d,&n); i=1; while (i=n) s=s*i; i+; printf(%d!=%d,n,s); return 0;2)运行截图及说明 图2 2.2.2(1)while语句测试图替换为do-while语句1) 要先定义i=1,再执行while语句。替换后的程序如下所示:#include int main() int i,n,s=1; printf(please enter n:); scanf(%d,&n); i=1; do s=s*i; i+; while(i=n); printf(%d!=%d,n,s); return 0;2) 运行截图及说明图3 2.2.2(2)do-while语句测试图(2)修改第1题,输入改为“整数S”,输出改为“满足n!S的最小整数n”。例如输入整数40310,输出结果为n=8。1)解题思路:先定义S,x=1,i=1,输入S,判断x=S,如果为真,则有x=x*i,i=i+1,再返回判断x=s,直至值为假,输出i-1的值。源程序为:#include int main()int S;int x=1,i=1;printf(请输入整数S:); scanf(%d,&S);while(x=S的最小整数n是%d,i-1);return 0; 2)运行截图及说明 图4 2.2.2(3)程序测试图2.2.3程序设计(1) 假设工资税金按以下方法计算:x 1000元,不收取税金;1000 x 2000,收取5%的税金;2000 x 3000,收取10%的税金;3000 x 4000,收取15%的税金;4000 x 5000,收取20%的税金;x5000,收取25%的税金。输入工资金额,输出应收取税金额度,要求分别用if语句和switch语句来实现。解答:if语句:1) 解题思路:1. 定义浮点数工资金额x,应收取税金额为y。2. 输入工资金额x,判断x属于哪一个收入范围。3. 如果x=1000且x=2000且x=3000且x=4000且x=5000,y=5%*1000+10%*1000+15%*1000+20%*1000+25%*(x-5000)=0.25x-750。9. 输出y,结束。2) 程序清单#include int main()float x,y;printf(请输入工资金额x:); scanf(%f,&x); if(x=1000&x=2000&x=3000&x=4000&x5000) y=0.20*x-500;else y=0.25*x-750;printf(应收取税金额度为%f元,s);3) 测试测试用例输入的工资金额x理论输出结果用例15000 用例2150025用例32500100用例43500225用例54500400用例65500625图5 2.2.3(1)用例1测试图图6 2.2.3(1)用例2测试图图7 2.2.3(1)用例3测试图图8 2.2.3(1)用例3测试图图9 2.2.3(1)用例4测试图 图10 2.2.3(1)用例5测试图Switch语句:1)解题思路;1. 定义浮点数工资金额x,应收取税金额为y。2. 输入工资金额x。3计算x/1000,强制转化数的类型为int。4. 当结果为0时,输出y=0。5. 当结果为1时,输出y=0.05*x-50。6. 当结果为2时,输出y=0.10*x-150。7. 当结果为3时,输出y=0.15*x-300。8. 当结果为4时,输出y=0.20*x-500。9. 当结果为其他值时,输出y=0.25*x-750。10.结束。 2)程序清单 #include int main() float x,y; printf(请输入工资金额x:); scanf(%f,&x); switch(int) (x/1000) case 0:y=0;printf(应收取税金额度为 %f,y);break; case 1:y=0.05*x-50;printf(应收取税金额度为 %f,y);break; case 2:y=0.10*x-150;printf(应收取税金额度为 %f,y);break; case 3:y=0.15*x-300;printf(应收取税金额度为 %f,y);break; case 4:y=0.20*x-500;printf(应收取税金额度为 %f,y);break; default:y=0.25*x-750;printf(应收取税金额度为 %f,y);break; return 0;3)测试测试用例输入的工资金额x理论输出结果用例12000 用例2120010用例3220070用例43200180用例54200340用例65200550图11 2.2.3(1)用例1测试图图12 2.2.3(1)用例2测试图图13 2.2.3(1)用例3测试图图14 2.2.3(1)用例4测试图图15 2.2.3(1)用例5测试图图16 2.2.3(1)用例6测试图(2)将输入的一行字符复制到输出,复制过程中将一个以上的空格字符用一个空格代替。 1)解题思路:1.输入一行字符。2.判断字符是否为空格。3.如果字符是空格,判断上一位是否输出过空格。4.如果输出过,不输出空格。否则,输出空格。5.如果字符不是空格,输出字符。6.结束。 2)程序清单 #include int main() int flag=1; char c; printf(请输入一行字符:n); while(c=getchar()!=0) switch(c) case :if(flag)putchar(c);flag=0; break; default:putchar(c);flag=1; if(c=getchar()=0) printf(%c,c); return 0; 3)测试 图17 2.2.3(2)测试图 (3)打印如下杨辉三角形。 1 /*第0行 */ 1 1 /*第1行 */ 1 2 1 /*第2行 */ 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1每个数据值可以由组合计算(表示第i行第j列位置的值),而的计算如下: (i=0,1,2,)(j=0,1,2,3,i)本程序中为了打印出金字塔效果,要注意空格的数目。一位数之间是3个空格,两位数之间有2个空格,3位数之间只有一个空格,程序编制过程中要注意区分。1) 解题思路:1. 定义杨辉三角行数为10。2. 输出每行最一个和最后一个数字为1。3. 每行除掉第一个和最后一个数字,在该行第j位的数字为它的上一行的j-1位与j为之和。4. 结束。 2)程序清单 #include#define N 10 int main() printf(杨辉三角行图形如下:nn); int a1010,i,j; for(i=0;i=i;j-) printf( ); for(j=0;j=i;j+) if(i=j|j=0) aij=1; else aij=ai-1j+ai-1j-1; printf(%3d ,aij); printf(n); return 0;3)测试 图18 2.2.3(3)程序测试图(4)编写一个程序,将用户输入的任意正整数逆转,例如,输入1234,输出4321。 1)解题思路: 1.输入正整数x。 2.x除以10取余,取出个位数字。 3.去掉个位数字,再除以10取余,取出十位数字。 4.再去掉个位数字,再除以10取余,取出百位数字。 5.直到取出最高位时x/10=0。 6.结束 2)程序清单 #include int main(void)int x;printf(请输入正整数x:n);scanf(%d,&x);do putchar(x%10+0);while(x/=10)!=0);return 0;3)测试 图19 2.2.3(4)程序测试图2.2.4. 选做题 编写一个程序,用牛顿迭代法求方程满足精度e=10-6的一个近似根,并在屏幕上输出所求近似根。牛顿迭代法:求方程近似根的迭代公式为,其中是函数f(x)的导函数。牛顿迭代法首先任意设定的一个实数来作为近似根的迭代初值x0,然后用迭代公式计算下一个近似根x1。如此继续迭代计算x2, x3, , xn, 直到,此时值xn即为所求的近似根。1) 解题思路:1. 输入迭代初值x。2. 计算增量d=-(3*x-4)*x)-5)*x+13)/(9*x-8)*x-5)。3. 计算下一个x,x=x+d。4. 判断d,如果|d|e,继续第二步。5. 如果|d|e,输出x,结束。2) 程序清单#include#include#define EPS 1e-6Int main() double x,d; printf(“请输入迭代初值x:”); scanf(“%lf”,&x); dod=-(3*x-4)*x)-5)*x+13)/(9*x-8)*x-5);x=x+d; while(fabs(d)EPS); printf(“所求近似跟为%lf”,x); return 0; 3)测试

温馨提示

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

评论

0/150

提交评论