实验三 循环结构程序设计

实验三 循环结构程序设计
一、实验目的
1.熟练掌握三种循环语句的应用。
2. 熟练掌握循环结构的嵌套。
3. 掌握break和continue语句的使用。
4. 练习调试与修改程序。
5. 掌握一组数据求和、求平均值、求最大值最小值的计算方法。
6.掌握循环次数已知、未知的处理方法(精度的控制、结束标志的使用等)
7.掌握简单图形的打印输出处理。
二、实验内容
1.[目的]掌握循环次数已知的循环控制处理方法。
[题目内容]编写一个程序,其功能为:计算并输出1~10的平方值。
[输入]无
[输出]如下形式
1 squared is 1
2 squared is 4
3 squared is 9
4 squared is 16
5 squared is 25
6 squared is 36
7 squared is 49
8 squared is 64
9 squared is 81
10 squared is 100
[提示]使用三种循环语句均可。
#include “stdio.h”
int main( )
{
int i;
for(i=1; i<=10; i++)
{
printf("\n %d squared is %d",i,i*i);
}
printf("\n");
return 0;
}

2.[目的]掌握循环次数已知的循环控制处理方法。
[题目内容]编写一个程序,其功能为:计算并输出 。
[输入]键盘输入x值
[输出]计算结果
[提示]使用三种循环语句均可。
#include “stdio.h”
int main()
{
int n,x,sum=0;
printf(“请输入x:”);
scanf("%d",&x);
for(n=1; n<=100; n++)
{
sum=sum+x*x;
}
printf(“sum=%d\n”,sum);
return 0;
}

如果程序功能为:计算并输出 ,要求从键盘输入n、x值,程序应如何修改?
修改
#include “stdio.h”
int main()
{
int i,n,x,sum=0;
printf(“请输入x:”);
scanf("%d%d",&n,&x);
for(i=1; i<=n; i++)
{
sum=sum+x*x;
}
printf(“sum=%d\n”,sum);
return 0;
}

3.[目的]掌握循环次数已知的循环控制处理方法。
[题目内容]编写一个程序,其功能为:求1-100之间的奇数之和。
[输入]无
[输出]计算结果
[提示]使用三种循环语句均可。(分栏中任选一栏)

#include “stdio.h”
int main()
{
int i=1,sum=0;
for(i=1; i<=100; i=i+2)
{
sum=sum+i;
}
printf(“sum=%d\n”,sum);
return 0;
}

#include “stdio.h”
int main()
{
int i=1,sum=0;
while(i<100)
{
sum+=i;
i+=2;
}
printf(“sum=%d\n”,sum);
return 0;
}

#include “stdio.h”
int main()
{
int i=1,sum=0;
do
{
sum+=i;
i+=2;
} while(i<100)
printf(“sum=%d\n”,sum);
return 0;
}

4.[目的]掌握循环次数已知的循环控制处理方法。
[题目内容]编写一个程序,其功能为:输出100以内能被7整除的数。
[输入]无
[输出]判断结果
[提示]使用三种循环语句均可。
#include “stdio.h”
int main()
{
int i,sum=0;
for(i=1; i<=100; i++)
{
if(i%7==0) printf("%d\t",i);
}
return 0;
}

三、课后作业(写在实验报告中)
1.[目的]掌握循环次数已知的循环控制处理方法。
[题目内容]编写一个程序,其功能为:计算并输出一年12个月的总降雨量和平均降雨量。
[输入]12个月的降雨量
[输出]总降雨量和平均降雨量
[提示]使用for循环语句,和值、平均值变量采用双精度类型,和值初值设为零。
#include “stdio.h”
int main()
{
int i;
double x,sum=0,ave;
for(i=1; i<=12; i++)
{
printf(“请输入%d月的降雨量:”,i);
scanf("%lf",&x);
sum=sum+x;
}
ave=sum/12;
printf(“sum=%lf\tave=%lf\n”,sum,ave);
return 0;
}

2.[目的]掌握循环次数已知的循环控制处理方法。
[题目内容]编写一个程序,其功能为:在0°到90°之间每隔5°输出一行数据,打印一个表。每行中包括5个项目:角度数,以及它所对应的正弦、余弦、正切、余切函数值。
[输入]无
[输出]如下表格

[提示]使用for循环语句和if语句,注意0°、90°时的正切和余切的处理。
#include “stdio.h”
#include “math.h”
#define PI 3.1415926
int main()
{
int i;
double ih;
printf(“角度数 正弦 余弦 正切 余切\n”);
for(i=0; i<=90; i=i+5)
{
ih=i*PI/180;
if(i0)
{
printf("%d\t%lf\t%lf\t%lf\t%c\n",i,sin(ih),cos(ih),sin(ih)/cos(ih),’-’);
}
else if(i
90)
{
printf("%d\t%lf\t%lf\t%c \t%lf\n",i,sin(ih),cos(ih),’-’,cos(ih)/sin(ih));
}
else
{
printf("%d\t%lf\t%lf\t%lf\t%lf\t\n",i,sin(ih),cos(ih), sin(ih)/cos(ih),cos(ih)/sin(ih));
}
}
return 0;
}

3.[目的]掌握循环次数已知的循环控制处理方法。
[题目内容]编写一个程序,其功能为:输入10个字符,输出各个字符的ASCII编码。
[输入] 10个字符
[输出] 各个字符的ASCII编码
[提示]使用for循环语句,字符的输入不需要分隔符,可以连续输入10个字符。
#include “stdio.h”
int main()
{
int i;
char ch;
for(i=1; i<=10; i++)
{
printf(“请输入一个字符:”);
scanf("%c",&ch);
printf("\n%c %d\n",ch,ch);
}
return 0;
}

需要注意的是如果输入一个字符回车,则计算机认为你输入了两个字符,其中一个为回车符。

4.[目的]掌握循环次数未知的循环控制处理方法。
[题目内容]编写一个程序,其功能为:计算一批货物的总值,输入货物单价和数量。事先不知道需要统计的货物有多少种。
[输入] 货物单价和数量
[输出] 货物的总值
[提示]使用while循环语句或do…while语句,设计一个特殊值作为循环结束的标志,例如,单价值为零。
#include “stdio.h”
int main()
{
double price,num,sum=0;
printf(“请输入货物单价和数量:”);
scanf("%lf%lf",&price,&num);
while(price!=0)
{
sum=sum+price*num;
printf(“请输入货物单价和数量:”);
scanf("%lf%lf",&price,&num);
}
printf(“sum=%lf\n”,sum);
return 0;
}

5.[目的]掌握递推法的处理方法。
[题目内容]编写一个程序,其功能为:输出fibnocci数列的前20项,每行输出5个。说明:fibnocci数列的前两项均为1,以后各项等于其前两项之和。
[输入] 无
[输出] fibnocci数列的前20项
[提示]使用for循环语句以及递推算法,fibnocci数列的前两项均为1,以后各项等于其前两项之和。
#include “stdio.h”
int main( )
{
int i,f1,f2,f3,n;
f1=1;
f2=1;
printf("\n%8d%8d",f1,f2);
n=2;
for(i=1; i<=18; i++)
{
if(n%5==0)
{
printf("\n");
}
f3=f1+f2;
printf("%8d",f3);
n++;
f1=f2;
f2=f3;
}
printf("\n");
return 0;
}

6.[目的]掌握递推法的处理方法。
[题目内容]编写一个程序,利用递推法计算下列公式:

要求精确到10-6。
[输入] 无
[输出] 计算结果
[提示]使用do…while循环语句以及递推算法,当计算到n项时, ,当计算到n+1项时, 。
计算到yn+1-yn= ≤10-6为止。
#include “stdio.h”
int main( )
{
int n=1,m;
double y1,y=1;
do
{
m=n*(n+1);
y1=1.0/m;
y=y+y1;
n++;
}
while(y1>=10e-6);
printf(“y=%lf\n”,y);
return 0;
}

7.[目的]掌握递推法的处理方法。
[题目内容]求和值Sn=a+aa+aaa+……+aaaa…aa(n位)。如n=5,a=3,则是求S5=3+33+333+3333+33333。编写程序对于任意输入的a和n,求Sn。
[输入] a和n
[输出] Sn
[提示]使用for循环语句以及递推算法。可设定一个变量m,m的初值为a,将m的值加到初值为0的变量S中;下一个要加的值可如下计算:m=m10+a,共加n次。
#include
int main()
{
int a,n,i;
long term,sum;
printf(“请输入a,n:”);
scanf("%d,%d",&a,&n);
term=a;
sum=a;
for(i=2; i<=n; i=i+1)
{
term=term
10+a;
sum=sum+term;
}
printf(“sum=%ld\n”,sum);
return 0;
}

8.[目的]掌握递推法的处理方法。
[题目内容]编写一个程序,求1+2!+3!+…+20!的和。
[输入] 无
[输出] 1+2!+3!+…+20!的和
[提示]使用for循环语句以及递推算法。关键语句long term=1,sum=0;term=term*i ; sum=sum+term;

#include
int main()
{
long long term=1,sum=0,i;
for(i=1; i<=20; i++)
{
term=term*i;
sum=sum+term;
}
printf("%lld\n",sum);
return 0;
}

注意:本程序在VC6下编译不了,用codeblocks编译。

9.[目的]掌握穷举法的处理方法。
[题目内容]编写一个程序,判断一个整数是否素数。
[输入] 无
[输出] 是否素数的信息
[提示]使用for循环语句以及穷举算法。利用素数的定义。
#include “stdio.h”
int main( )
{
int x,i;
printf(“请输入一个整数:”);
scanf("%d",&x);
for(i=2; i {
if(x%i==0)
{
printf("\n%d不是素数。\n",x);
break;
}
}
if(i>=x)
{
printf("\n%d是素数。\n",x);
}
return 0;
}

10.[目的]掌握穷举法的处理方法。
[题目内容]编写一个程序,输出99乘法口诀表。
[输入] 无
[输出] 9
9乘法口诀表。
[提示]使用for循环语句以及穷举算法。算法提示:分行与列考虑,共9行9列,外循环控制行,内循环控制列。
方阵
#include
int main()
{
int i,j;
for(i=1; i<=9; i++)
{
for(j=1; j<=9; j++)
{
printf("%2d*%2d=%2d “,i,j,i*j);
}
printf(”\n");
}
return 0;
}

斜三角
#include
int main()
{
int i,j;
for(i=1; i<=9; i++)
{
for(j=1; j<=i; j++)
{
printf("%2d*%2d=%2d “,i,j,i*j);
}
printf(”\n");
}
return 0;
}

11.[目的]掌握穷举法的处理方法。
[题目内容]编写一个程序,打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数。
[输入] 无
[输出] 所有的“水仙花数”
[提示]使用for循环语句以及穷举算法。算法提示:
①利用单层for循环控制对100—999之间的数,每个数分解出个位,十位,百位。
②使用3重for循环,循环变量分别取值为1-9,0-9,0-9。
#include
int main()
{
int i,a,b,c;
for (i=100; i<=999; i++)
{
a=i/100;
b=i%100/10;
c=i%10;
if(aaa+bbb+ccc==i)
{
printf("%d\n",i);
}
}
return 0;
}

#include
int main()
{
int i,j,k;
for (i=1; i<=9; i++)
{
for(j=0; j<=9; j++)
{
for(k=0; k<=9; k++)
{
if(i100+j10+k==iii+jjj+kkk)
{
printf("%d\n",i100+j10+k);
}
}
}
}
return 0;
}

12.[目的]掌握图形输出的处理方法。
[题目内容]一个电子器件的可靠性由下面等式给定:可靠性(r)=e-t,其中,为器件每小时的失效率,t为运行时间(以小时为单位)。编写一个程序,画出一个图形,用来确定在0到3000小时内不同运行时间的可靠性。失效率为0.001。
[输入] n=3000,lamda=0.001
[输出] 图形
[提示]使用for循环语句,算法提示:t的值由for语句按步长为150生成 for(t=0;t<=3000;t=t+150),语句R=(int)(50r+0.5)中的整数50是一个放大因子,用来把r转换为一个较大的数值,该数值用于描述曲线(r的值总是小于)。
#include
#include
int main()
{
double r,lamda;
int i,t,n,R;
printf(“请输入器件的每小时失效率:”);
scanf("%lf",&lamda);
printf(“请输入最大时间:”);
scanf("%d",&n);
for(i=0; i<=27; i++)
{
printf("–");
}
printf("\n");
for(t=0; t<=n; t=t+150)
{
r=exp(-lamda
t);
R=(int)(50r+0.5);
printf("|");
for(i=1; i<=R; i++)
{
printf("
");
}
printf("\n");
}
for(i=1; i<3; i++)
{
printf("|\n");
}
return 0;
}

13.[目的]运用已学知识解决实际问题。
[题目内容]某物品的现值(通常称为帐面价格)由以下等式给出
P=c(1-d)n
其中: c=原始价值,d=年折旧率 ,n=已使用年限 P=经过y年后的现值。如果把P看作是该物品经使用年限后的报废价值,编写一个程序,给定原始价值、折旧率、报废价值,计算出可使用的年限。
[输入] 原始价值、折旧率、报废价值
[输出] 可使用的年限
[提示]使用for循环语句、break语句。
#include
#include
int main()
{
double c,d,p,p1;
int n;
printf(“请输入原始价值、折旧率、报废价值:”);
scanf("%lf%lf%lf",&c,&d,&p);
p1=c;
for(n=0; n<=100000; n++)
{
p1=p1*(1-d);
if(p>p1) break;
}
printf(“可使用年限是:%d\n”,n-1);
return 0;
}

你可能感兴趣的:(学习)