好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

实验三循环结构程序设计.doc

9页
  • 卖家[上传人]:re****.1
  • 文档编号:436003694
  • 上传时间:2023-08-11
  • 文档格式:DOC
  • 文档大小:70KB
  • / 9 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 实验三循环结构程序设计一、 实验学时4学时二、 实验目的1 .熟练掌握用 while、do-while以及for语句实现循环程序设计的方法2•理解循环条件和循环体的含义理解循环结构中语句的执行过程3.熟练掌握break和continue语句的功能及应用4•掌握应用嵌套循环结构进行程序设计的方法5. 掌握应用循环结构及穷举算法解决有关问题6. 掌握运行到光标位置、使用断点等程序调试方法三、 实验内容1. 程序调试【例1】改正下列程序中的错误,求 S=1!+2!+3!+…+n!的值,n的值通过键盘输入(n< 10 )输入样例:请通过键盘输入具体数据给变量 n赋值:5/输出样例:1!+2!+3!+ …+5!=153程序:#in clude void mai n(){int n,i;long int s,sum;printf(" 请通过键盘输入具体数据给变量 n赋值:");scan f("%d", &n);for(i=1;i<=n ;i++){s=s*isum+=s;}prin tf("1!+2!+3!+...+%d!=%ld\n", n, sum);}(1) 按照前面章节实验中介绍的步骤,保存源程序代码。

      2) 单击编译按钮穆(Compile ),出现第一条编译错误信息是: missing ';' beforeiden tifier 'sum' ,改正后,重新编译和连接,都正确3) 开始调试程序,鼠标单击第11行,光标在第11行闪烁,这就是当前光标的位置, 单击' },程序运行到光标位置在变量窗口中,第一次循环时 i的值为1 , n的值为5 ,正确;而s的值为-858993460,不正确请分析错误原因: s示未赋初值,long int s,sum;改为long int s=1,sum;,改正后,重新编译和连接,继续进行上述操作,这时 s的值为1正确运行到光标位置在变量窗口中,第一次循环时 i的值为1 ,s的值为1 ,正确;而sum的值为-858993460 ,不正确请分析错误原因: sum示未赋初值,long int s,sum;改为longint s=1,sum=0;,改正后,重新编译和连接,继续进行上述操作,这时 sum的值为0正确5) 把光标定位到倒数第 3行,单击 门(Run to Cursor )按钮,程序运行到光标位置在变量窗口中,s的值为1 ,sum的值为1 ,显示信息正确。

      6) 单击 E (Stop Debugging )按钮,程序调试结束在程序调试的过程中,应用了“运行到光标位置”的程序调试方法:即单击 ’门按钮,程序运行到光标位置,观察变量窗口中所显示的变量信息内容, 分析此时变量的值是否正确同时,结合断点的使用,断点的使用就是让程序运行到断点处暂停, 让用户可以观察当前变量或表达式的值 设置断点时,先将光标定位到要设置断点的位置, 然后单击编译微型工具条的按钮门,断点设置完毕如果要取消已经设置的断点,只需要将光标移到要取消的断 点处,再次单击按钮■',该断点取消在循环结构的程序设计中, 这种程序调试的方法经常使用, 在具体进行程序调试时, 设 置程序运行断点处位置, 注意变量窗口中显示变量的具体值信息 (如果变量较多时, 可以输入变量名查看),这些变量的值是否与循环第一次运行时一致2. 编程练习(1) 读入一个正整数 n,计算并输出前n项之和s的值(保留6位小数)S=1+1/4+1/7+1/10+1/13+1/16+ …程序运行结果输入/输出示例:输入样例:请输入n的值:3/输出样例:S=1.392857 参考程序如下:#i nclude "stdio.h"void mai n(){int i, k, n;double sum;printf(” 请输入n的值:”);scan f("%d", &n);sum = 0;k = 1;for(i = 1; i <= n; ++i){sum += 1/(double)k; k += 3;}prin tf("S=%lf\n", sum);}思考题1:读入一个正实数n,计算并s的值(保留6位小数),要求精确到最后一项的 绝对值小于n (保留6位小数)。

      S=1-1/4+1/7-1/10+1/13-1/16+ …输入样例:请输入n的值:1E-4 /输出样例:S=0.835699参考程序如下:#i nclude "stdio.h"#i nclude "math.h"void mai n(){int i, k, t;double n;double sum;printf(” 请输入n的值:”);scan f("%lf", &n);sum = 0;t = 1;k = 1;while(fabs(t/(double)k)> n){sum += t /(double)k;k += 3;t *= -1;}prin tf("S=%lf\n", sum);}思考题2:读入一个正整数 n,计算并输出前n项之和s的值(保留6位小数)S=1-1/2+3/7-2/5+5/13-3/8+ …输入样例: 请输入n的值:18/输出样例:S=0.551 分析1:对于S,可以对n进行分析,当n为偶数时,正项个数与负项的个数相等;当 n为偶数,正项个数比负项的个数多一项,可以将正项与负项分别进行计算参考程序:#i nclude "stdio.h"void mai n(){int i, k, n;double sum;printf(” 请输入n的值:”);scan f("%d", &n);sum = 0;计算正数项的和:1+3/7+5/13+…k = 1;for(i = 1; i <= (n+1)/2; ++i) //{sum += (2*i-1)/(double)k; k += 6;}//正数项和分别与各个负数项求和if(n %2==0) //{(1+3/7+5/13+ …-1/2-2/5-3/8-区分n为偶数时,负数项的个数为n的一半k=2;for(i = 1; i <= n/2; ++i){sum -= i/(double)k; k += 3;}else{k=2;for(i = 1; i <= (n-1)/2; ++i) {sum -= i/(double)k; k += 3;}}prin tf("S=%.3lf\n", sum);}分析2://区分n为奇数时,负数项的个数为n-1的一半,比正数项少一个S=1」3—2 丄-—2 7 5 13 8 1 4 7 10 13 16即对S中负数项的分子与分母分别乘以 2,会发现相邻的两项的分子部分为相邻的整数,而相邻两项的分母间为前项的分母 +3=后项的分母。

      参考程序:#in elude void mai n(){ int n ,i,k,sig n; float s=0;sig n=1;k=1;scan f("%d", &n); for(i=1;i<=n ;i++){s=s+sig n*(float)i/k;k=k+3;sig n=sig n*(_1);}prin tf("S=%.3f\n",s);}(2) 输入一个正整数 data,请编写程序,实现下列功能:① 求它的位数;② 求各位数字之和;③ 从高位开始逐位分割并输出它的各位数字输入样例:请输入一个整数:12345/输出样例:12345是一个5位整数,各位数字之和为 15各位数字分别为:1 2 3 4 5参考程序如下:#in clude #in clude void mai n(){int coun t, i n, sum, temp,t;prin tf(" 请输入一个正整数:”);scan f("%d", &in);temp=i n;coun t=sum=0;while(temp!=O) // 求正整数的位数,及各位数之和{sum=sum+temp%10;coun t++;temp=temp/10;}printf("%d 是一个%d位整数,各位数字之和为 %d\n", in, count, sum);temp=i n;printf(" 各位数字分别为:");while(temp!=0){t=temp/pow(10,co un t-1);prin tf("%d ",t); temp=temp-t*pow(10,co un t-1);coun t--;}(3) 输入2个正整数m和n ( m> 1, n< 500),输出m和n之间的所有素数,每行输出 6个。

      输入样例:请输入两个整数:m=1, n=35/输出样例:2 3 5 7 11 1317 19 23 29 31参考程序如下:#in elude #in clude void mai n(){int i,j,p,m,n,count;cou nt=0; II 统计素数的个数 printf(" 请输入两个整数:”); scan f("m=%d, n=%d",&m,&n);for(i=m;i<=n ;i++){ for(j=2;j<=( in t)sqrt(i);j++)if(i%j==0)break;if(j>(int)sqrt(i) && i!=1){prin tf("%d ",i);coun t++;}if(cou nt%6==0)prin tf("\n");}}3. 程序改错输入2个正整数m和n,求这两个正整数的最大公约数和最小公倍数 输入样例(改正后程序的运行结果) :请输入两个整数: m=6 ,n=9/输出样例:6,9的最大公约数是:36,9的最小公倍数是:18 程序(有错误的程序,红色的部分即为改正的部分) :#in clude #include void main(){int m,n,max,min,data1,data2,r;printf(" 请输入两个正整数 :");scanf("m=%d,n=%d",&m,&n);data1=m; data2=n;if(m

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.