C语言程序设计实验报告2.docx

上传人:b****6 文档编号:12261216 上传时间:2023-06-05 格式:DOCX 页数:18 大小:223.46KB
下载 相关 举报
C语言程序设计实验报告2.docx_第1页
第1页 / 共18页
C语言程序设计实验报告2.docx_第2页
第2页 / 共18页
C语言程序设计实验报告2.docx_第3页
第3页 / 共18页
C语言程序设计实验报告2.docx_第4页
第4页 / 共18页
C语言程序设计实验报告2.docx_第5页
第5页 / 共18页
C语言程序设计实验报告2.docx_第6页
第6页 / 共18页
C语言程序设计实验报告2.docx_第7页
第7页 / 共18页
C语言程序设计实验报告2.docx_第8页
第8页 / 共18页
C语言程序设计实验报告2.docx_第9页
第9页 / 共18页
C语言程序设计实验报告2.docx_第10页
第10页 / 共18页
C语言程序设计实验报告2.docx_第11页
第11页 / 共18页
C语言程序设计实验报告2.docx_第12页
第12页 / 共18页
C语言程序设计实验报告2.docx_第13页
第13页 / 共18页
C语言程序设计实验报告2.docx_第14页
第14页 / 共18页
C语言程序设计实验报告2.docx_第15页
第15页 / 共18页
C语言程序设计实验报告2.docx_第16页
第16页 / 共18页
C语言程序设计实验报告2.docx_第17页
第17页 / 共18页
C语言程序设计实验报告2.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

C语言程序设计实验报告2.docx

《C语言程序设计实验报告2.docx》由会员分享,可在线阅读,更多相关《C语言程序设计实验报告2.docx(18页珍藏版)》请在冰点文库上搜索。

C语言程序设计实验报告2.docx

C语言程序设计实验报告2

实验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

2intmain()

3{inti,n,s=1;

4printf("Pleaseentern:

");

5scanf("%d",n);

6for(i=1,i<=n,i++)

7s=s*i;

8printf("%d!

=%d",n,s);

9}

10return0;

解答:

(1)错误修改:

1)输入字符格式错误,正确形式为:

scanf(“%d”,&n);

2)return0;与}的相对位置错误,正确形式为:

return0;

}

(2)错误修改后的程序:

#include

intmain()

{inti,n,s=1;

printf("Pleaseentern:

");

scanf("%d",n);

for(i=1,i<=n,i++)

s=s*i;

printf("%d!

=%d",n,s);

return0;

}

(3)运行结果:

图12.2.1源程序改错测试图

2.2.2.源程序修改替换

(1)修改第1题,分别用while和do-while语句替换for语句。

替换为While语句

1)在判断while语句前,要先定义i=1,再执行while语句。

替换后的程序如下所示:

#include

intmain()

{

inti,n,s=1;

printf("pleaseentern:

");

scanf("%d",&n);

i=1;

while(i<=n)

{

s=s*i;

i++;

}

printf("%d!

=%d",n,s);

return0;

}

2)运行截图及说明

图22.2.2

(1)while语句测试图

替换为do-while语句

1)要先定义i=1,再执行while语句。

替换后的程序如下所示:

#include

intmain()

{

inti,n,s=1;

printf("pleaseentern:

");

scanf("%d",&n);

i=1;

do{

s=s*i;

i++;

}while(i<=n);

printf("%d!

=%d",n,s);

return0;

}

2)运行截图及说明

图32.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

intmain()

{

intS;

intx=1,i=1;

printf("请输入整数S:

");

scanf("%d",&S);

while(x<=S)

{

x=x*i;

i=i+1;

}

printf("满足n!

>=S的最小整数n是%d",i-1);

return0;

}

2)运行截图及说明

图42.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

intmain()

{

floatx,y;

printf("请输入工资金额x:

");

scanf("%f",&x);

if(x<1000)y=0;

elseif(x>=1000&&x<2000)y=0.05*x-50;

elseif(x>=2000&&x<3000)y=0.10*x-150;

elseif(x>=3000&&x<4000)y=0.15*x-300;

elseif(x>=4000&&x<5000)y=0.20*x-500;

elsey=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

图52.2.3

(1)用例1测试图

图62.2.3

(1)用例2测试图

图72.2.3

(1)用例3测试图

图82.2.3

(1)用例3测试图

图92.2.3

(1)用例4测试图

图102.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

intmain()

{

floatx,y;

printf("请输入工资金额x:

");

scanf("%f",&x);

switch((int)(x/1000))

{

case0:

y=0;printf("应收取税金额度为%f",y);break;

case1:

y=0.05*x-50;printf("应收取税金额度为%f",y);break;

case2:

y=0.10*x-150;printf("应收取税金额度为%f",y);break;

case3:

y=0.15*x-300;printf("应收取税金额度为%f",y);break;

case4:

y=0.20*x-500;printf("应收取税金额度为%f",y);break;

default:

y=0.25*x-750;printf("应收取税金额度为%f",y);break;

}

return0;

}

3)测试

测试用例

输入的工资金额x

理论输出结果

用例1

200

0

用例2

1200

10

用例3

2200

70

用例4

3200

180

用例5

4200

340

用例6

5200

550

图112.2.3

(1)用例1测试图

图122.2.3

(1)用例2测试图

图132.2.3

(1)用例3测试图

图142.2.3

(1)用例4测试图

图152.2.3

(1)用例5测试图

图162.2.3

(1)用例6测试图

(2)将输入的一行字符复制到输出,复制过程中将一个以上的空格字符用一个空格代替。

1)解题思路:

1.输入一行字符。

2.判断字符是否为空格。

3.如果字符是空格,判断上一位是否输出过空格。

4.如果输出过,不输出空格。

否则,输出空格。

5.如果字符不是空格,输出字符。

6.结束。

2)程序清单

#include

intmain()

{

intflag=1;

charc;

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);

}

return0;

}

3)测试

图172.2.3

(2)测试图

(3)打印如下杨辉三角形。

1/*第0行*/

11/*第1行*/

121/*第2行*/

1331

14641

15101051

1615201561

172135352171

18285670562881

193684126126843691

每个数据值可以由组合

计算(表示第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

#defineN10

intmain()

{

printf("杨辉三角行图形如下:

\n\n");

inta[10][10],i,j;

for(i=0;i

{

for(j=N;j>=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");

}

return0;

}

3)测试

图182.2.3(3)程序测试图

(4)编写一个程序,将用户输入的任意正整数逆转,例如,输入1234,输出4321。

1)解题思路:

1.输入正整数x。

2.x除以10取余,取出个位数字。

3.去掉个位数字,再除以10取余,取出十位数字。

4.再去掉个位数字,再除以10取余,取出百位数字。

5.直到取出最高位时x/10=0。

6.结束

2)程序清单

#include

intmain(void)

{

intx;

printf("请输入正整数x:

\n");

scanf("%d",&x);

do

putchar(x%10+'0');

while((x/=10)!

=0);

return0;

}

3)测试

图192.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|

2)程序清单

#include

#include

#defineEPS1e-6

Intmain()

{

doublex,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);

return0;

}

3)测试

图202.2.4程序测试图

3.3实验小结

在实验中最重要的是如何设计算法去解决问题,看到题目,根本不知道如何去解决问题,更不要说设计算法了。

学习时不仔细,函数调用的形式不熟练,需要查书,浪费时间。

而且当程序设计好了,绝不是已经完成任务了,要仔细检查审核,看看程序是否有错误,如果有错误,就要仔细地分析。

错误初步解决后,还要经过多次调试,要验证多种输入值下,输出的结果是否都是正确的。

通过实验,我找到了自己的不足,同样也增加了对书本的理解。

在今后的学习中我要改正自己在学习中的不足之处。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2