C++实验四循环结构的程序设计资料
实验四 循环结构程序设计
实验四循环结构程序设计一、实验目的1.掌握3种循环结构:while ,do—while ,for 的区别与联系,以及它们之间相互转换的方法,并能正确使用它们。
2.掌握与循环语句相关的break 语句和continue 语句的使用方法二. 实验内容1.输入正整数n,计算n的阶乘。
【分析】由于n!=1*2*3*……*n,因此,要计算n的阶乘可以从1开始,由1的阶乘乘以2得到2的阶乘,再乘以3得到3的阶乘.......以此类推。
【程序】【要求】(1)分别输入数据 -2, 1 ,5, 10, 20 调试运行程序,并记录程序结果。
(2)删除程序中//A 处的赋值语句 return 1; 重新以上述数据调试运行程序,结果是否正确,如果不正确,该如何修改?答:结果正确。
(3) 删除程序中//B处的语句 result=1;重新以上述数据调试运行程序,结果是否正确,如果不正确,该如何修改?答;不正确。
应该为int result 。
(4) 将程序中语句 double result=0; 改为 int result=0; 重新以上述数据调试运行程序,结果如何?为什么?答:结果变为整数,而非科学技术。
因为double是双精度型,而int是整数型。
2.范例:编程计算求π的近似值。
【程序】【要求】(1)输入程序编译后使用Debug跟踪,单步执行程序,记录以下变量值的变化。
回答以下问题:a)从跟踪结果分析,term和sum的值有什么错误?b)循环结束后,i的值是多少?用什么简单的办法可以看到?答:在倒数第二行加上:cout<<"i="<<i<<endl;以后就可以看到,i的值是46341. c)对程序作何修改可以使其得到正确的结果?3.将输入的小写字母转换成大写字母。
【分析】由ASCII码表可以看出,大写英文字母的ASCII码值在65至90之间,小写英文字母的ASCII 码值在97至122 之间,每一个英文字母的大写和小写的ASCII码相差32。
实验四 循环结构程序设计
#include "stdio.h"
void main( )
{
}
2.从整数1开始向上找,直至m和n中较小的数,每找到一个能同时被m和n整除的整数,将其存入一个变量中,当循环结束时,变量中存放的即为最大公约数。设n为m和n中较小的数,则如下程序段可实现:
for(k=1; k<=n; k++) if(m%k==0 && n%k==0) x=k;
}
2.字符常量’0’与数值常量0是不同的。
(六)下面程序的功能是:计算1到100之间的奇数之和及偶数之和,并输出。请在程序中的横线上填入适当的内容,将程序补充完整并运行。
/* c4-6.c */
/* 计算1到100之间的奇数之和及偶数之和 */
#include "stdio.h"
void main( )
六、思考题
(一)求两个正整数x和y的最大公约数,请填空。
/* 求最大公约数程序 */
#include "stdio.h"
void main( )
{ int x,y,t,i;
printf("请输入两个数:");
scanf("%d,%d",&x,&y); /*注意scanf语句中间用“,”隔开*/
if(x > y){t = x; x = y; y = t;}
程序的基本结构如下:
/* c4-9.c */
/* 按条件求数列和 */
#include "stdio.h"
void main( )
{定义变量;
变量赋初值;
C语言实验报告 实验四 参考答案
实验四循环结构程序设计2(参考答案)(1)编写程序sy4-1.c,输入n,计算并输出如下多项式的值:S n=1+1/2!+1/3!+1/4!+…+1/n!。
例如输入n为15时,输出1.718282。
算法分析:第一项可以看成1/1!,用循环控制累加n个分式,分式的分母是i!,分子固定为1。
参考答案:# include <stdio.h>void main(){double s=0,p=1;int i,n;scanf("%d",&n);for(i=1;i<=n;i++){p = p * i ; //计算分母i!s = s + 1 / p ; //累加}printf("s=%lf\n",s);}运行结果:(2)编写程序sy4-2.c,输入n,根据以下公式计算s:,例如当n=11时,结果为1.833333。
算法分析:该多项式的分母是累加。
参考答案:# include <stdio.h>void main(){double sn=0,s=0;int i,n;scanf("%d",&n);for(i=1;i<=n;i++){s = s + i ; //计算分母1~i的累加和sn = sn + 1 / s ;}printf("sn=%lf\n",sn);}运行结果:(3)编写程序sy4-3.c,计算3~n之间所有素数的平方根之和,要求:输入n,输出结果。
例如,输入n 的值是100,则输出结果是148.874270。
注意n应在2~100之间。
算法分析:穷举3~n之间的数找素数,若是素数则累加她的平方根。
参考答案:# include <stdio.h># include <math.h>void main(){int i,j,n,flag;double s=0;scanf("%d",&n);for(i=3;i<n;i++) //穷举3~n之间找素数{flag=1; //假设当前的i是素数,标志变量设为1for(j=2;j<i;j++) //穷举要判断是否是素数的i的除数,范围2~i-1if(i%j==0) //若i能被j整除,则不是素数{ flag=0; break; } //标志变量改为0,并终止循环if( flag == 1 )s = s + sqrt( i ); //若i是素数,则累加sqrt(i)}printf("s=%f\n",s);}运行结果:(4)编写程序sy4-4.c,根据以下公式求p的值,(m与n为两个正整数且m>n)。
实验四 循环结构程序设计
实验四循环结构程序设计一、实验目的1.掌握3种循环结构:while ,do—while ,for 的区别与联系,以及它们之间相互转换的方法,并能正确使用它们。
2.掌握与循环语句相关的break 语句和continue 语句的使用方法二. 实验内容1.输入正整数n,计算n的阶乘。
【分析】由于n!=1*2*3*……*n,因此,要计算n的阶乘可以从1开始,由1的阶乘乘以2得到2的阶乘,再乘以3得到3的阶乘.......以此类推。
【程序】【要求】(1)分别输入数据 -2, 1 ,5, 10, 20 调试运行程序,并记录程序结果。
(2)删除程序中//A 处的赋值语句 return 1; 重新以上述数据调试运行程序,结果是否正确,如果不正确,该如何修改?结果正确(3) 删除程序中//B处的语句 result=1;重新以上述数据调试运行程序,结果是否正确,如果不正确,该如何修改?结果错误将double result=0 改为double result=1(4) 将程序中语句 double result=0; 改为 int result=0; 重新以上述数据调试运行程序,结果如何?为什么?结果为:因为只有实型常量才会表示为科学记数法短整型数字不用科学记数法表示;并且当n太大时,数据溢出结果不正确。
2.范例:编程计算求π的近似值。
【程序】【要求】(1)输入程序编译后使用Debug跟踪,单步执行程序,记录以下变量值的变化。
回答以下问题:a)从跟踪结果分析,term和sum的值有什么错误?term 值加一不等于sumb)循环结束后,i的值是多少?用什么简单的办法可以看到?i=46341 在输出pi值前输入语句cout<<"i="<<i<<endl;c)对程序作何修改可以使其得到正确的结果?3.将输入的小写字母转换成大写字母。
【分析】由ASCII码表可以看出,大写英文字母的ASCII码值在65至90之间,小写英文字母的ASCII 码值在97至122 之间,每一个英文字母的大写和小写的ASCII码相差32。
C语言循环结构程序设计实验报告
while语句:
main()
{ float n=1,s=0,t=1;
while(n<=25)
{ t=t*n;
s=s+t;
n++;
}
printf(“1!+2!+3!+…+25!=%e\n”,s);
}
do-while语句:
main()
{ float n=1,s=0,t=1;
(3)计算并输出Σ(2n+1)超过1000的第一个n值。
n=1
main()
{ int n=1,sum=0;
for(; ; n++) sum=sum+(2*n+1);
if(sum>2000) break;
printf(“n=%d,sum=%d\n”,n,sum);
}
if(sum>1000)break;for中的表达式2不能省去
while语句do-while语句
#include<stdio.h>#include<stdio.h>
void main() void main()
{{
int i=1,sum=0; int i=1,sum=0;
while(i<=100) do
{ {
sum=sum+i; sum=sum+i;
i++;i++;
5.某班有学生n人,从终端读入n及n个人学生的成绩,试编程实现以下功能:
①印出前3个最好成绩及取得每个最好成绩的人数;
C语言程序设计循环结构程序设计资料
while语句
表达式? N
Y
… continue;
…
do-while语句
… continue;
…
表达式? N
Y
for语句 计算表达式1
表达式2? N
Y… continue;
…
计算表达式3
后续语句
后续语句
后续语句
6/24/2019
例如:
⑴ int x,n=0,s=0; while (n<10) { scanf("%d",&x); if (x<0) continue; s+=x; n++; };
}
无循环体
} 循环体
6/24/2019
5.5 循环结构中的跳转语句
25
有如下三种语句实现跳转: – continue语句 – break语句 – goto语句 功能:在循环语句的循环体中使用,可 以进行循环的流程控制
6/24/2019
5.5.1 continue语句及应用
26
功能:
– 中断循环体的本次执行(即跳过循环体中尚未 执行的语句),立即开始执行下一次循环。
6
当型循环
条?件 N
Y 循环体
条件 循环 次数
Y Y
3
执行 执行
Y 次 执行
1 2 3
N
结束
在循环入口处判断 当条件为真时执行循环
6/24/2019
5.1循环的基本概念(完)
7
直到型循环
循环体 Y 条件
N
条件 循环 次数
执行 1
Y
Y Y
3 次
执行
执行 执行
42
2014《C语言实验指导书》
《C语言》实验指导书编(全校理工类本科用)2014年2月目录实验一简单C语言程序设计 (1)实验二顺序结构程序设计 (3)实验三选择结构程序设计 (5)实验四循环结构程序设计 (7)实验五数组程序设计 (10)实验六函数程序设计 (13)实验七指针程序设计 (16)实验八结构体程序设计 (17)附录1 C语言上机步骤 (18)实验一简单C语言程序设计实验类型:验证性实验课时: 4 指导教师:时间:2014 年月日课次:第节教学周次:第周实验分室:实验台号:实验员:一、实验目的1.掌握所用的C语言环境的基本操作方法。
2.掌握编辑、编译、连接和运行C程序。
3.掌握C程序的数据类型、运算符,表达式。
二、实验内容和要求1.打开C语言环境,编辑如下程序,写出运行结果。
#include <stdio.h>void main(){printf(“Hello World!\n”);}2. 在屏幕上显示下列图形:* * * ** * ** **3.完成习题集中习题一的内容4. 已知三角形的三边长为3,4,5,求三角形周长5 .完成习题集中习题二内容实验二顺序结构程序设计实验类型:验证性实验课时: 2 指导教师:时间:2014 年月日课次:第节教学周次:第周实验分室:实验台号:实验员:一、实验目的1.掌握基本输入输出函数、库函数的使用。
2.能够编程实现简单的结构化程序。
二、实验内容和要求1.执行程序,写出运行结果。
#include <stdio.h>void main(){float a = 9.1234567891234567890;double b = 9.1234567891234567890;printf("%f, %lf\n",a,b);printf("%.15f,%.15\n",a,b);};2.运行程序,写出结果。
#include <stdio.h>void main(){float x1;double y1 ;scanf("%f %lf ",&x1,&y1) ;printf("x1=%f,y1=%lf ",x1,y1) ;}程序运行时输入x的值123456789,输入y的值123456789。
C语言-循环结构程序设计
while循环
01
示例代码
02
```c
int i = 0;
03
while循环
while(i < 10) {
printf("%dn", i);
while循环
• i;
while循环
} ```
do-while循环
总结词
do-while循环是一种先执行循环体再检查条件的循环结构, 至少会执行一次循环体。
循环结构程序设计的重要性
提高代码复用性
通过使用循环结构,可以将重复 执行的代码块抽象出来,减少代
码冗余,提高代码复用性。
简化复杂问题
对于一些复杂的问题,使用循环 结构可以简化问题的解决过程, 提高代码的可读性和可维护性。
提高程序效率
循环结构可以减少重复计算和 操作,提高程序的执行效率。
实现迭代算法
03
避免在循环条件中直接使用赋值语句,以免造成无 限循环或死循环。
05
循环结构与其他结构的结合使用
循环结构与条件结构的结合
循环结构与if条件结构的结合
在循环体内使用if条件语句,根据条件判断是否执行某段代码。
while循环与if条件结构的结合
在while循环中嵌套if条件语句,根据条件判断是否继续循环。
发生。
循环变量的初始化与更新
确保循环变量在使用之前已经初始化,以避免 未定义的行为。
在循环体内更新循环变量的值,以确保循环能 够正常结束。
使用合适的类型和范围来声明循环变量,以避 免溢出或越界的问题。
循环条件的设定与修改
01
根据实际需求合理设定循环条件,确保循环能够正 确执行。
02
在循环体内适时修改循环条件,以控制循环的次数 和流程。
循环结构程序设计-C语言程序实验报告
安徽工程大学高级语言程序设计实验报告班级姓名同组者/ 成绩日期2019.10.17 指导教师张义实验名称循环结构程序设计一、实验目的1.熟悉使用while语句、do-while语句和for语句实现循环的方法。
2.熟悉在程序设计中用循环的方法实现各种算法。
3.理解程序中循环结构语句的执行过程。
二、实验内容1.程序填空。
分别用for、while和do-while语句编写一个C程序,计算并输出数列1,3,5.…,2n-1,…的前n项之和,其中,n由键盘输入。
2.编程并上机调试运行。
(1)求1!+2!+3!+…+n!(n从键盘输入)。
(2)打印以下图案(用循环实现):** * ** * * * ** * * * * * ** * * * ** * **(3)猴子吃桃,猴子第一天摘若干桃子,当即吃了一半,又多一个,又多一个,第二天吃了剩下桃子一半又多一个。
以后每天早上都吃前一天剩下的一半多一个,这样到了第十天,只剩下一个桃子。
问第一天共摘了多少个桃子?(4)打印九九乘法表。
(5)有算式s=1+12+123+1234+12345+…,从键盘输入n,根据已知算式求前n项之和。
如n=3,则s=1+12+123;n=5,则s=1+12+123+1234+12345。
(6)从键盘输入一串数字字符,将其转换成对应的整数。
如输入字符串“368”,则输出整数368。
*思考题3.在实验内容1的程序(1)输入时,若在“for(i=1;i<=k;____)”语句后多输入一个分号,即“for(i=1;i<=k;____);”,分析程序,写出预期结果。
4.在实验内容1的程序(2)输入时,若while语句后的{}省略,即while(____)s+=i;______;分析程序,写出预期结果。
5.简述while语句和do-while语句的区别。
三、算法流程图或实验步骤(可根据需要增删、修改)1.(1)for语句实现:算法流程图:#include<stdio.h>void main ( ){long s, n, k , i;scanf ("%ld",&n);k=2*n-1;s=0;for(i=1;i<=k;i=i+2)s+=i;printf("1+3+…+%ld=%ld\n",k,s);}实验步骤:Files→New→Files→C++source File→文件名:program4011.c→位置:E:\123\→确定→完善源程序→Buid→是→确认0error(s) 0warning(s)后→BuidExecute→查看运行结果(2)while语句实现:算法流程图:#include<stdio.h>void main ( ){long s=0,n,i=1;scanf("%ld",&n);while(i<=2*n-1){s+=i;i=i+2;}printf("1+3+…+%ld=%ld\n",2*n-1,s);}实验步骤:Files→Close Workspace→Files→New→Files→C++source File→文件名:program4012.c→位置:E:\123\→确定→输入代码→Buid→是→确认0error(s) 0warning(s)后→BuidExecute→查看并验证运行结果(3)do-while语句实现:算法流程图:#include<stdio.h>void main ( ){long s=0,n,i=1;scanf("%ld",&n);do{s+=i;i=i+2;}while(i<=2*n-1);printf("1+3+…+%ld=%ld\n",2*n-1,s);}实验步骤:Files→Close Workspace→Files→New→Files→C++source File→文件名:program4013.c→位置:E:\123\→确定→输入代码→Buid→是→确认0error(s) 0warning(s)后→BuidExecute→查看并验证运行结果2.(1)算法流程图:#include<stdio.h>void main(){int n,s=0,i,j,t;scanf("%d",&n);for(i=1;i<=n;i++){t=1;for(j=1;j<=i;j++)t=t*j;s=s+t;}printf("%d\n",s);return 0;}实验步骤:Files→Close Workspace→Files→New→Files→C++source File→文件名:program4021.c→位置:E:\123\→确定→输入代码→Buid→是→确认0error(s) 0warning(s)后→BuidExecute→查看并验证运行结果(2)算法流程图:#include<stdio.h>void main(){int i,j,k;for(i=1;i<=4;i++){for(j=1;j<=4-i;j++)printf(" ");for(k=1;k<=2*i-1;k++)printf("*");printf("\n");}for(i=1;i<=3;i++){for(j=1;j<=i;j++)printf(" ");for(k=1;k<=7-2*i;k++)printf("*");printf("\n");}}实验步骤:Files→Close Workspace→Files→New→Files→C++source File→文件名:program4022.c→位置:E:\123\→确定→输入代码→Buid→是→确认0error(s) 0warning(s)后→BuidExecute→查看并验证运行结果(3)算法流程图:#include <stdio.h>int main(){int day,x1,x2;day=9;x2=1;while(day>0){x1=(x2+1)*2; /*第1天的桃子数是第2天桃子数加1后的2倍.*/x2=x1;day--;}printf("total=%d\n",x1);return 0;}实验步骤:Files→Close Workspace→Files→New→Files→C++source File→文件名:program4023.c→位置:E:\123\→确定→输入代码→Buid→是→确认0error(s) 0warning(s)后→BuidExecute→查看并验证运行结果(4)算法流程图:#include <stdio.h>int main() {int i,j;for(i=1;i<=9;i++) {for(j=1;j<=9;j++)printf("%d*%d=%2d\t", i, j, i*j);printf("\n");}return 0;}实验步骤:Files→Close Workspace→Files→New→Files→C++source File→文件名:program4024.c→位置:E:\123\→确定→输入代码→Buid→是→确认0error(s) 0warning(s)后→BuidExecute→查看并验证运行结果(5)算法流程图:#include<stdio.h>void main(){int n=0,i=1,m=0,sun=0;printf("请输入一个数");scanf("%d",&n);while(i<=n){m=m*10+i;sun+=m;i++;}printf("%d",sun);}实验步骤:Files→Close Workspace→Files→New→Files→C++source File→文件名:program4025.c→位置:E:\123\→确定→输入代码→Buid→是→确认0error(s) 0warning(s)后→BuidExecute→查看并验证运行结果(6)算法流程图:#include <stdio.h>void main(){char str[20];scanf("%s",str);printf("%d\n",atoi(str));}实验步骤:Files→Close Workspace→Files→New→Files→C++source File→文件名:program4026.c→位置:E:\123\→确定→输入代码→Buid→是→确认0error(s) 0warning(s)后→BuidExecute→查看并验证运行结果3.(1)算法流程图:#include<stdio.h>void main ( ){long s, n, k , i;scanf ("%ld",&n);k=2*n-1;s=0;for(i=1;i<=k;i=i+2);s+=i;printf("1+3+…+%ld=%ld\n",k,s);}(2)实验步骤:Files→Close Workspace→Files→New→Files→C++source File→文件名:program4031.c→位置:E:\123\→确定→输入修改后的代码→Buid→是→查看编译结果4.(1)算法流程图:#include<stdio.h>void main ( ){long s=0,n,i=1;scanf("%ld",&n);while(i<=2*n-1)s+=i;i=i+2;printf("1+3+…+%ld=%ld\n",2*n-1,s);}(2)实验步骤:Files→Close Workspace→Files→New→Files→C++source File→文件名:program4031.c→位置:E:\123\→确定→输入修改后的代码→Buid→是→查看编译结果→确认0error(s) 0warning(s)后→BuidExecute→查看并验证运行结果四、实验结果及分析1.详情见第三项算法流程图2.详情见第三项算法流程图3.预期结果:编译时产生错误4.预期结果:程序虽然编译没有错误,但程序无效,并不能起到原题所需要的功能。
C++实验四 循环结构的程序设计
printf("\n");
}
4.求1!+2!+3!+…+n源自的值,n由键盘输入。解题思路:
首先,认真解读题目,该题首先是要用到两个for循环结构,分别控制n!的输出和n个阶乘相加,输入n,由n控制运算到几的阶乘为止,先用for语句实现循环,控制循环次数,i由1变到n,共循环n次,再在for循环中再嵌套一个for循环,控制第i次循环时输出的数,把第i次循环时输出的数加到sum上,再执行i++,使i的值加1,循环n次,最后输出sum。
关键代码:
for(i=1;i<=n;i++)
{
s=1;
for(j=1;j<=i;j++)
{
s=s*j;
}
sum=sum+s;
}
printf("%d\n",sum);
B.do while,while循环结构
1.输入两个正整数m和n,求其最大公约数和最小公倍数。
解题思路:首先,认真解读题目,该题首先是要用到if语句和while循环结构,输入m和n两个正整数,先用if语句使n<m时,m和n两个正整数所赋的值互换,确保n>m,再p=n*m,再用while循环结构,在m不等于0时,用辗转相除法,算出他们的最大公约数,最后输出最大公约数为n,最小公倍数为p/n。
关键代码:
float a,x0,x1;
scanf("%f",&a);
x0=a/2;
x1=(x0+a/x0)/2;
do
{
x0=x1;
x1=(x0+a/x0)/2;
循环结构程序设计实验报告
一、实验目的1. 掌握循环结构程序设计的基本方法和应用;2. 熟悉C语言、Java语言等编程语言中的循环结构;3. 提高编程能力,学会运用循环结构解决实际问题。
二、实验环境1. 操作系统:Windows 102. 编程语言:C语言、Java语言3. 编译器:Visual Studio、NetBeans三、实验内容1. C语言循环结构程序设计(1)编写一个C语言程序,实现输出1-100的累加和。
```c#include <stdio.h>int main() {int sum = 0;int i;for (i = 1; i <= 100; i++) {sum += i;}printf("1-100的累加和为:%d\n", sum);return 0;}```(2)编写一个C语言程序,实现输出16行杨辉三角。
```c#include <stdio.h>int main() {int arr[16][16];int i, j;for (i = 0; i < 16; i++) {for (j = 0; j <= i; j++) {if (j == 0 || i == j) {arr[i][j] = 1;} else {arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j]; }printf("%d ", arr[i][j]);}printf("\n");}return 0;}```2. Java语言循环结构程序设计(1)编写一个Java程序,实现输出1-100的累加和。
```javapublic class Sum {public static void main(String[] args) {int sum = 0;int i;for (i = 1; i <= 100; i++) {sum += i;}System.out.println("1-100的累加和为:" + sum);}}```(2)编写一个Java程序,实现输出16行杨辉三角。
c语言-4 循环结构
怎样获得[1,100]区间的随机数? 调用rand()函数:rand()%n返回一个[0,n)之间的随机 的非负整数。 x=min+rand()%(max-min+1)
怎样限定最多猜7次?
设已猜次数变量cs=0,当cs<7时执行循环,每循环一次猜一个数, cs++,若猜中,则跳出循环,否则显示与被猜数的大小关系。
flag=- flag;
i=i+2; } printf("π=%.4lf!\n", 4*s ); return 0; }
经典循环结构的三要素
循环变量初始化
假
循环条件P
真 …… 循环变量值修正 [……]
循环变量初始化 循环条件P
…… 循环变量值修正
……
循环体
循环变量初始化 循环条件判断 循环变量值修正
}
printf("s=%lf\n", s);
}
定义s=0,n,i,flag 输入n
i=1,flag=1; i <= 2*n-1
s=s+flag / i
flag = - flag
i =i+2 输出s
课堂练习:2-15(P38)
程序
#include <stdio.h> int main() { int n, i;
问题:统计一个整数的位数值
要求:输入一个整数,求该数的位数 。
分析:
定义zs,ws=0;
输入zs
真
zs<0
假
zs=-zs ws++
zs=zs/10
zs>0 输出ws
程序:
#include <stdio.h> void main( ) { int zs, ws=0;
实验四 循环结构程序设计(2)
实验四循环结构程序设计(2)一、实验目的1.加深对循环语句的认识。
2.掌握在程序设计中用循环的方法实现各种算法(如枚举法、迭代法、递推法)二、实验内容1.阅读、调试、运行程序,比较阅读的结果和运行的结果。
(1)#include <stdio.h>void main(){ int i=0,a=0;while(i<20){ for(;;){ if((i%10)==0) break;else i--;}i+=11; a+=i;}printf("%d\n",a);}(2)#include <stdio.h>void main(){ int a,y;a=10;y=0;do{ a+=2;y+=a;printf("a=%d y=%d\n",a,y);if (y>20) break;}while (a=14);}(3)输入为“321”时,输出是什么?#include <stdio.h>void main( ){ char c;while ((c=getchar( ))!='\n')switch(c-'1'){ case 0:case 1:putchar(c+2);case 2:putchar(c+3); break;case 3:putchar(c+4);default:putchar(c+1);break;}printf("\n");}(4)#include <stdio.h>void main(){ int i,x,y;i=x=y=0;do{ ++i;if(i%2!=0){x=x+i;i++;}y=y+i++;}while(i<=7);printf("x=%d,y=%d\n",x,y);}2. 完善程序,并调试运行(1)在main函数中输入字符串,计算并输出其长度。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验名称:实验四循环结构的程序设计
班级学号姓名
实验地点完成日期成绩
(一)实验目的与要求
1.练习并掌握实现循环结构的三种方法;
2.掌握在设计条件型循环结构时,如何正确地设定循环条件,以及如何控制循环次数;
3.掌握如何正确地控制计数型循环结构的循环次数;
4.练习并掌握选择结构与循环结构的嵌套;
5.练习调试与修改程序。
(二)实验内容
A. for循环结构
1. 输入一个正整数n,求n以内(包括n)的偶数和减奇数和。
2. 求S n=a+aa+aaa+…+aa…a的值,其中a是一个数字,n表示a的位数,例如:
2+22+222+2222+22222 (此时n=5)pow(10,2) math.h
n由键盘输入。
3.输入边长n(n≤20),用‘*’号打印边长为n的菱形。
例如,n=5时,图形如下:
4. (选做)求1!+2!+3!+…+n!的值,n由键盘输入。
B.do while,while循环结构
1. 输入两个正整数m和n,求其最大公约数和最小公倍数。
2. 用迭代法求x=√a。
求平方根的迭代公式为
X n+1=1
2
(X n+
n
a
x
)
要求前后两次求出的x的差的绝对值小于10-5。
(三)实验具体步骤
A. for循环结构
1. 输入一个正整数n,求n以内(包括n)的偶数和减奇数和。
解题思路:
首先,认真解读题目,该题首先是要用到for循环结构,因为是要对n以内(包括n)的所有数字进行运算,所以要循环很多次,具体步骤,再输一个n时,由n控制运算到哪一个数为止,再用for语句实现循环,控制循环次数,i由1变到n,共循环n次,接下来用if 语句判断i是偶数还是奇数,若是偶数就加上i,反之就减去i,再执行i++,使i的值加1,循环n次,最后输出sum。
关键代码:
for(i=1;i<=n;i++)
{
if((i%2)==0)
{
sum=sum+i;
}
else
{
sum=sum-i;
}
}
printf("%d\n",sum);
2. 求S n=a+aa+aaa+…+aa…a的值,其中a是一个数字,n表示a的位数,例如:
2+22+222+2222+22222 (此时n=5)pow(10,2) math.h
n由键盘输入。
解题思路:
首先,认真解读题目,该题首先是要用到for循环结构和pow函数,先输入a和n,n 控制加到几位数为止,再用for语句实现循环,控制循环次数,i由1变到n,共循环n次,接下来用pow函数,得出第i次时的i位数k,再把k加到sum上,再执行i++,使i的值加1,循环n次,最后输出sum。
关键代码:
for(i=1;i<=n;i++)
{
k=(pow(10,i)-1)/9*a;
sum=sum+k;
}
printf("%d\n",sum);
3.输入边长n(n≤20),用‘*’号打印边长为n的菱形。
例如,n=5时,图形如下:
解题思路:
首先,认真解读题目,该题首先是要用到多个for循环结构,输入n,由n控制输出的菱形的边长,先用for语句实现循环,控制循环次数,i由1变到n,共循环n次,控制上半部分的输出,再在for循环中用for语句来控制什么时候输出空格,什么时候输出‘*’号,再执行i++,使i的值加1,循环n次,接下来用同样的办法输出下半部分,循环n次后,输出菱形。
关键代码:
for(i=1;i<=n;i++)
{
for(j=1;j<=n-i;j++)
printf(" ");
for(k=1;k<=2*i-1;k++)
printf("*");
printf("\n");
}
for(i=1;i<=n;i++)
{
for(j=1;j<=i;j++)
printf(" ");
for(k=1;k<=2*(n-i)-1;k++)
printf("*");
printf("\n");
}
4. 求1!+2!+3!+…+n!的值,n由键盘输入。
解题思路:
首先,认真解读题目,该题首先是要用到两个for循环结构,分别控制n!的输出和n个阶乘相加,输入n,由n控制运算到几的阶乘为止,先用for语句实现循环,控制循环次数,i由1变到n,共循环n次,再在for循环中再嵌套一个for循环,控制第i次循环时输出的数,把第i次循环时输出的数加到sum上,再执行i++,使i的值加1,循环n次,最后输出sum。
关键代码:
for(i=1;i<=n;i++)
{
s=1;
for(j=1;j<=i;j++)
{
s=s*j;
}
sum=sum+s;
}
printf("%d\n",sum);
B.do while,while循环结构
1. 输入两个正整数m和n,求其最大公约数和最小公倍数。
解题思路:首先,认真解读题目,该题首先是要用到if语句和while循环结构,输入m 和n两个正整数,先用if语句使n<m时,m和n两个正整数所赋的值互换,确保n>m,再p=n*m,再用while循环结构,在m不等于0时,用辗转相除法,算出他们的最大公约数,最后输出最大公约数为n,最小公倍数为p/n。
关键代码:
if(n<m)
{
t=n;
n=m;
m=t;
}
p=n*m;
while(m!=0)
{
r=n%m;
n=m;
m=r;
}
printf("他们的最大公约数为:%d\n",n);
printf("他们的最小公倍数为:%d\n",p/n);
2. 用迭代法求x=√a。
求平方根的迭代公式为
X n+1=1
2
(X n+
n
a
x
)
要求前后两次求出的x的差的绝对值小于10-5。
解题思路:首先,认真解读题目,该题首先是要用到do while循环结构和X n+1=1
2
(X n+
n
a
x
),
因为要求小数点后有5位小数,所以将a定义为float型,定义a,x0,x1,输入a,使x0等于a 的一半,再x1等于x0+a/x0的一半,再用do while函数,当前后两次求出的x的差的绝对值小于10-5 时,进行x0=x1和x1=(x0+a/x0)/2循环,否则,跳出循环,最后输出x1就是x 的平方根。
关键代码:
float a,x0,x1;
scanf("%f",&a);
x0=a/2;
x1=(x0+a/x0)/2;
do
{
x0=x1;
x1=(x0+a/x0)/2;
}
while(fabs(x0-x1)>1.0e-5);
printf("%.5f",x1);
(四)实验结果
A. for循环结构
1. 输入一个正整数n,求n以内(包括n)的偶数和减奇数和。
没有碰到困难,输入5,输出-3,顺利完成。
2. 求S n=a+aa+aaa+…+aa…a的值,其中a是一个数字,n表示a的位数,例如:
2+22+222+2222+22222 (此时n=5)pow(10,2) math.h
n由键盘输入。
用pow函数时,遇到了困难,刚开始不知道怎么用,后来看了老师的做法后,受到了启发,后来自己完成了,输入2,5,输出2+22+222+2222+22222=24690。
3.输入边长n(n≤20),用‘*’号打印边长为n的菱形。
例如,n=5时,图形如下:
输入5,输出一个边长为5的菱形
4. (选做)求1!+2!+3!+…+n!的值,n由键盘输入。
输入5,输出1!+2!+3!+4!+5!=153
B .do while ,while 循环结构
1. 输入两个正整数m 和n ,求其最大公约数和最小公倍数。
输入4和6,输出最大公约数为2,最小公倍数为12。
2. 用迭代法求x=√a 。
求平方根的迭代公式为
X n+1=12(X n +n
a x ) 要求前后两次求出的x 的差的绝对值小于10-5。
输入9,输出9的平方根
3
(五)收获与体会
学了for循环和do while循环结构的程序设计之后,我对C语言有了更深层次的理解,在做这次作业的过程中,我发现了一些我经常会犯的一些小错误,例如“{}”没加,每句话最后的“;”没加,输入时的“%d,%d”中没加逗号,不能灵活运用学到的知识来解决问题,像A3题,书上有一题类似的题目,可是我不能举一反三,还是和同学讨论之后才做出来了,还有B2题,我不会做,还是去网上搜了一下之后才做出来,根据这些,我总结了一些建议给自己:
(1)要把重点放在解题思路上,通过大量的例题来学习怎样设计算法,构造程序。
(2)掌握基本要求,注意打好基础。
(3)重视实践环节。
(4)要举一反三,题目不是一成不变的。