当前位置:文档之家› 实验项目四结构化程序设计_循环结构

实验项目四结构化程序设计_循环结构

《程序设计基础I》实验报告实验项目四:结构化程序设计_循环结构一、实验目的及要求(1)熟悉掌握用while语句,do-while语句和for语句实现循环的方法。

(2)掌握在程序设计中用循环的方法实现一些常用算法(如穷举、迭代、递推等)。

(3)掌握多重循环的选择时机和使用方法;(4)掌握使用break和continue语句的方法。

二、实验设备(环境)及要求使用Visual C++ 6.0;windows系列操作系统的环境。

三、实验内容与步骤(要求以“学号_姓名_题号”为名建立项目;例项目名为:2013050201_***_01)1.分别用while、do-while、for语句编程,求数列前20项之和:2/1,3/2,5/3,8/5,13/8······算法提示:1)定义实变量sum、term、a、b、c,整变量i2)初始化:sum=0,分子a=2,分母b=13)初始化:i(计数器)=14)计算第i项term =a/b5)累加sum=sum+term6)计算c=a+b,更新b= a,更新a=c7)计数器加1,i++8)重复4、5、6、7,直到i>209)输出2位精度的结果把每一次迭代结果输出,程序应做怎样的修改?3输入正数n ,要求输出Fibonacci 数列的前n 项。

1,1,2,3,5,8……#include<stdio.h>开始结束term=0 sum=0 i=1i ≤20?i=i+1sum=sum+termterm=term *i输出sum是 否#include<stdio.h> int main(){float term,sum;int i; term=1,i=1,sum=0; while(i<=20) {term=term*i; sum=sum+term;printf("sum=%.1f\n",sum); i++; }printf("sum=%f\n",sum); return 0; }int main(){int a,b,c,n,i; a=1,b=1;scanf("%d",&n);printf("%d,%d,",a,b); for(i=3;i<=n;i++) {c=a+b,a=b,b=c; printf("%d,",c);if(i%10==0) printf("\n"); }return 0; }4下面是计算s = n!的源程序,在这个源程序中存在若干语法和逻辑错误。

要求在计算机上对这个例子源程序进行调试修改,使之能够正确完成指定任务。

例如,8! = 40320。

#include <stdio.h> 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;修改上述计算s = n!的源程序,要求输入改为“整数S ”,输出改为“满足n! >=S 的 最小整数n ”。

例如,输入整数为40310,输出结果为n = 8。

要求:每道题目分别画出程序流程图,书写程序,试运行(如何输入,结果如何)#include <stdio.h>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", n, s); return 0;}5. 分析题(1) 先分析程序运行的结果,然后上机编辑和运行程序,并将运行的结果与分析的结果 进行比较,若分析有误,试找出原因。

答:要想循环,则while 后面不加分号开始结束输入sTerm<s ? 是否输出nTerm=term ×i ; I=i+1Term=1#include<stdio.h> int main() { float S,term=1;inti=1,n; printf("请输入S 的值"); scanf("%f",&S); while(term<S) {term=term*i; i++; } n=--i; printf("n 为 %d\n",n); return 0; }N=n-i(2)若把第5行中的k++改为++k,结果如何答:输出Final k=1 Final k=26.分析题(1)先分析程序运行的结果,然后上机编辑和运行程序,并将运行的结果与分析的结果进行比较,若分析有误,试找出原因。

<><><>#(2)若把第7行中的i%2改为!(i%2),结果如何变化?<><>#(3)若把第7行中的continue改为break,结果如何变化?<>#通过(3)的操作,你对break和continue语句有什么认识?break语句跳出循环,不再重复,continue语句本次循环不输出继续执行循环语句7.分析题(1)先分析程序运行的结果,然后上机编辑和运行程序,并将运行的结果与分析的结果进行比较,若分析有误,试找出原因。

#######*##**#***8.分析题(1)先分析程序运行的结果,然后上机编辑和运行程序,并将运行的结果与分析的结果进行比较,若分析有误,试找出原因。

b=22(2)画出程序的流程图。

9. 编写一个程序,打印10行杨辉三角。

要求:每道题目分别画出程序流程图,书写程序,试运行(如何输入,结果如何)。

开始结束A=1,b=1a<100?是 否是是 否否 b ≥20?B%3=1?B=b+3B=b-5A=a+1#include "stdio.h"main(){int a[11][20],i,j;//初始化for(i=0;i<11;i++)for(j=0;j<20;j++)a[i][j]=0;//给数组附值for(i=0;i<10;i++){for(j=0;j<=i;j++){if(j<1)a[i][j]=1;//开头的第一个数为1else if(i==0)break;elsea[i][j]=a[i-1][j-1]+a[i-1][j];}}//杨辉三角的规律for(i=0;i<10;i++){for(j=0;j<=i;j++)printf("%d ",a[i][j]);printf("\n");}}10.编写程序输出m~n之间的素数(n>m>3),m和n由用户从键盘上输#include<stdio.h>#include<math.h>int main(){int m,n,i,k,a=0;scanf("%d,%d",&n,&m);for(n;n<=m;n++){k=sqrt(n);for(i=2;i<=k;i++)if(n%i==0) break;if(i>=k+1) { printf("%d ",n);a=a+1;}if(a%10==0) printf("\n");}return 0;}11.输入两个正整数m和n,求其最大公约数和最小公倍数。

#include<stdio.h>int main(){int m,n,team,a,b,c;printf("输入m和n:");scanf("%d,%d",&m,&n);if(m<n){team=n;n=m;m=team;}a=m;b=n;while(b){c=a%b;a=b;b=c;}printf("最大公约数为:%d",a);printf("最小公倍数为:%d\n",(m*n)/a);return 0;}12.编程序按下列的级数求cos(x)的值并输出:要求:x的值由键盘输入(代表弧度),运算精度保持到最后一项的绝对值小于10-6为#include<math.h>#include<stdio.h>main(){int n=2,count=1,sign=-1;float x;double sum ,term;printf("input x:");scanf("%f",&x);sum=1;term=1;do{term=-term*x*x/(n*(n-1));sum+=term;n=n+2;count++;}while (fabs(term)>=1e-6);printf("cos(x)=%f\n",sum);}13.编写程序求一个四位数并输出。

已知该整数的个数为2,十位为1,且减去7后该数能被7整除,减去8后能被8整除,减去9后能被9整除。

#include<stdio.h>int main()。

相关主题