C语言程序设计实验报告2.docx
下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
2.下载的文档,不会出现我们的网址水印。
3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
文档包含非法信息?点此举报后获取现金奖励!
下载文档到电脑,查找使用更方便
14.9
积分
还剩页未读,继续阅读
关键词:C语言程序设计
C语言程序设计实验报告
程序设计实验报告
设计实验报告
2.docx
C语言程序设计实验
资源描述:
实验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)
{
x=x*i;
i=i+1;
}
printf("满足n!>=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%的税金;x>5000,收取25%的税金。输入工资金额,输出应收取税金额度,要求分别用if语句和switch语句来实现。
解答:
if语句:
1) 解题思路:
1. 定义浮点数工资金额x,应收取税金额为y。
2. 输入工资金额x,判断x属于哪一个收入范围。
3. 如果x<1000,则y=0。
4. 如果x>=1000且x<2000,则y=5%*(x-1000)=0.05*x-50。
5. 如果x>=2000且x<3000,则y=5%*1000+10%*(x-2000)=0.1x-150。
6. 如果x>=3000且x<4000,则y=5%*1000+10%*1000+15%*(x-3000)=0.15x-300。
7. 如果x>=4000且x<5000,则y=5%*1000+10%*1000+15%*1000+20%*(x-4000)=0.2x-500。
8. 如果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) y=0;
else if(x>=1000&&x<2000) y=0.05*x-50;
else if(x>=2000&&x<3000) y=0.10*x-150;
else if(x>=3000&&x<4000) y=0.15*x-300;
else if(x>=4000&&x<5000) y=0.20*x-500;
else y=0.25*x-750;
printf("应收取税金额度为%f元",s);
}
3) 测试
测试用例
输入的工资金额x
理论输出结果
用例1
500
0
用例2
1500
25
用例3
2500
100
用例4
3500
225
用例5
4500
400
用例6
5500
625
图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
理论输出结果
用例1
200
0
用例2
1200
10
用例3
2200
70
用例4
3200
180
用例5
4200
340
用例6
5200
550
图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("杨辉三角行图形如下:\n\n");
int a[10][10],i,j;
for(i=0;i=i;j--)
printf(" ");
for(j=0;j<=i;j++)
{
if(i==j||j==0)
a[i][j]=1;
else
a[i][j]=a[i-1][j]+a[i-1][j-1];
printf("%3d ",a[i][j]);
}
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|#include#define EPS 1e-6
Int main()
{
double x,d;
printf(“请输入迭代初值x:”);
scanf(“%lf”,&x);
do
d=-((((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)测试
图20 2.2.4程序测试图
3.3 实验小结
在实验中最重要的是如何设计算法去解决问题,看到题目,根本不知道如何去解决问题,更不要说设计算法了。学习时不仔细,函数调用的形式不熟练,需要查书,浪费时间。而且当程序设计好了,绝不是已经完成任务了,要仔细检查审核,看看程序是否有错误,如果有错误,就要仔细地分析。错误初步解决后,还要经过多次调试,要验证多种输入值下,输出的结果是否都是正确的。通过实验,我找到了自己的不足,同样也增加了对书本的理解。在今后的学习中我要改正自己在学习中的不足之处。
展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:C语言程序设计实验报告2.docx
链接地址:/p-17914196.html