实验三循环结构程序设计
- 格式:doc
- 大小:48.50 KB
- 文档页数:7
实验三循环结构程序设计实验三的主题是循环结构程序设计。
循环结构是程序设计中的重要概念,它使程序能够重复执行一段代码,直到满足一些条件后停止。
在本实验中,我们将学习循环结构的基本用法,并通过一些示例程序来掌握循环结构的运用。
一、循环结构的基本概念循环结构是程序设计中的一种重要结构,它允许程序重复执行一段代码。
循环结构包括两种基本类型:条件循环和计数循环。
条件循环是指只要满足一些条件就一直执行循环体中的代码,直到条件不满足时停止循环。
条件循环结构一般使用while语句或do-while语句来实现。
例如,在一些游戏中,只要玩家的生命值不为0,就可以一直进行游戏。
计数循环是指循环体中的代码按照事先确定的次数执行,即通过计数器来控制循环的执行次数。
计数循环结构一般使用for语句来实现。
例如,在一些音乐播放器中,可以设置循环播放歌曲的次数。
二、循环结构的语法在编程语言中,循环结构的语法一般如下:1. while循环语句的语法:while(条件表达式)循环体2. do-while循环语句的语法:do循环体} while(条件表达式);3. for循环语句的语法:for(初始化表达式; 条件表达式; 更新表达式)循环体三、示例程序1. 使用while循环计算1到100的和:```c++#include <iostream>using namespace std;int maiint sum = 0;int i = 1;while (i <= 100)sum += i;i++;}cout << "1到100的和为:" << sum << endl;return 0;```2. 使用do-while循环计算用户输入数字的累加和,直到用户输入0为止:```c++#include <iostream>using namespace std;int maiint sum = 0;int num;docout << "请输入一个整数(输入0停止):" << endl;cin >> num;sum += num;} while (num != 0);cout << "累加和为:" << sum << endl;return 0;```3. 使用for循环计算1到10的乘积:```c++#include <iostream>using namespace std;int maiint product = 1;for (int i = 1; i <= 10; i++)product *= i;}cout << "1到10的乘积为:" << product << endl;return 0;```以上示例程序演示了使用循环结构来解决问题的方法。
循环结构程序设计实验报告在计算机程序设计中,循环结构是一种非常重要的控制结构,它能够让程序在满足一定条件下重复执行某段代码,从而实现对重复性任务的高效处理。
本次实验旨在通过实际编写程序,掌握循环结构的使用方法及其在程序设计中的应用。
一、实验目的。
本次实验的主要目的是:1. 掌握循环结构的基本概念和语法;2. 熟练掌握for循环、while循环和do-while循环的使用方法;3. 能够运用循环结构解决实际问题。
二、实验内容。
1. 编写一个程序,利用for循环计算1-100的累加和,并输出结果。
2. 编写一个程序,利用while循环计算1-100的累加和,并输出结果。
3. 编写一个程序,利用do-while循环计算1-100的累加和,并输出结果。
4. 编写一个程序,利用循环结构求解实际问题,如计算阶乘、斐波那契数列等。
三、实验步骤。
1. 编写for循环程序。
```c。
#include <stdio.h>。
int main() {。
int sum = 0;for (int i = 1; i <= 100; i++) {。
sum += i;}。
printf("1-100的累加和为,%d\n", sum); return 0;}。
```。
2. 编写while循环程序。
```c。
#include <stdio.h>。
int main() {。
int sum = 0;int i = 1;while (i <= 100) {。
sum += i;i++;}。
printf("1-100的累加和为,%d\n", sum); return 0;}。
```。
3. 编写do-while循环程序。
```c。
#include <stdio.h>。
int main() {。
int sum = 0;int i = 1;do {。
sum += i;i++;} while (i <= 100);printf("1-100的累加和为,%d\n", sum); return 0;}。
实验3. 循环程序设计一、实验目的⒈掌握移位指令的使用方法。
⒉学会循环结构程序的编程方法。
⒊利用DEBUG调试程序查看循环程序循环过程中CS和IP的变化情况。
二、实验要求⒈编写程序并上机调试,记录运行结果。
⒉用DEBUG调试程序调试所编程序,查看并记录每条指令内存单元地址及执行结果(包括F标志寄存各位值。
)⒊注意观察并记录每条指令执行后CS和IP寄存器值变化情况,以加深对循环程序的概念的理解。
三、实验内容⒉编写统计15个学生数学学习成绩程序。
要求:分别统计出低于60分,60-69分,70-79分,80-89分,90-100分的人数,并存放到S5,S6,S7,S8,S9,S10对应内存单元中。
源程序代码;DATA SEGMENTDATA1 DB 55,60,65,88,67,70,75,80,77,85,90,66,95,53,100DATA2 DB 5 DUP(?)DATA ENDS;CODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV CX,15LEA SI,DATA1LEA DI,DATA2AGAIN:MOV AL,[SI]CMP AL,90JB NEXT1INC BYTE PTR[DI]JMP NEXT0NEXT1:CMP AL,80JB NEXT2INC BYTE PTR[DI+1]JMP NEXT0NEXT2:CMP AL,70JB NEXT3INC BYTE PTR[DI+2]JMP NEXT0NEXT3:CMP AL,60JB NEXT4INC BYTE PTR[DI+3]JMP NEXT0NEXT4:INC BYTE PTR[DI+4]NEXT0:INC SILOOP AGAINMOV AH,4CHINT 21HCODE ENDSEND START程序运行结果截图:四、实验总结本次实验掌握移位指令的使用方法。
实验三循环结构程序设计(参考答案)1、设计程序sy3-1.c,要求打印小学九九乘法表。
算法分析:根据九九乘法表可知,该表共有9行,第i行有i个表达式,而且表达式中的操作数和行、列数相关,因此可以用嵌套的双重循环来实现,外循环控制行数(循环变量从1到9),内循环控制每行的表达式个数(循环变量从1变到i)。
参考答案:# include <stdio.h>void main(){int i,j;for(i=1;i<=9;i++){for(j=1;j<=i;j++)printf("%d*%d=%-5d",j,i,i*j);printf("\n");}}运行结果:2、设计程序sy3-2.c,要求编程计算x n,其中x和n均由键盘输入2。
算法分析:要计算x的n次方,即是n次x相乘,其中x可以是整型或实型,而n必须是整型;另外要考虑结果的类型,若x和n比较大,一般的int型容易产生溢出。
参考答案:# include <stdio.h>void main(){int i,n;float x,p=1; /*累乘器要赋初值1*/printf("Input x,n: ");scanf("%f,%d",&x,&n); /*以逗号分隔输入的已知数据x和n的值*/for(i=1;i<=n;i++)p=p*x;printf("%g^%d=%g\n",x,n,p);}运行结果:3、设计程序sy3-3.c,已知祖父年龄70岁,长孙20岁,次孙15岁,幼孙5岁,问要过多少年,三个孙子的年龄之和同祖父的年龄相等,试用单重循环结构编程实现。
算法分析:这个程序可以用穷举法来实现,1年、2年、3年……,每加一年都判断三个孙子的年龄之和是否同祖父的年龄相等,若相等则不加了,这个时候所加的年数为我们需要的结果。
实验结论循环结构程序设计一、引言二、实验目的三、实验原理1.循环结构的概念2.循环结构的分类3.循环结构程序设计的基本原则四、实验步骤1.确定循环次数和循环条件2.选择合适的循环结构语句3.编写循环体语句五、实验结果分析六、结论与讨论引言:编程是计算机科学中非常重要的一部分,而程序设计中常用到的循环结构也是非常重要的一种控制流程方式。
本文将介绍如何进行循环结构程序设计,并给出相应实验结果及分析。
实验目的:通过本次实验,我们将学会如何使用不同类型的循环结构来控制程序流程,并能够编写简单而有效的程序。
实验原理:1. 循环结构的概念:在程序运行过程中,为了重复执行某些操作或者根据特定条件反复执行某些操作,需要使用到循环结构。
2. 循环结构的分类:常见的有while循环、do-while循环和for循环。
3. 循环结构程序设计基本原则:确定好需要重复执行多少次或在什么情况下需要重复执行,选择合适的循环结构语句,编写循环体语句。
实验步骤:1. 确定循环次数和循环条件:在程序设计之前,需要明确需要重复执行多少次或在什么情况下需要重复执行。
2. 选择合适的循环结构语句:根据确定好的循环次数和循环条件,选择while、do-while或for等不同类型的循环结构语句。
3. 编写循环体语句:在循环结构中,需要编写具体的操作语句来实现所需功能。
实验结果分析:通过本次实验,我们可以发现,在程序设计中使用不同类型的循环结构可以有效地控制程序流程,并且能够编写出简单而有效的程序。
同时,在实际应用中也需要根据具体需求来选择合适的循环结构类型以及确定好相应的循环次数和条件。
结论与讨论:通过本次实验,我们深入了解了循环结构程序设计,并掌握了相应技能。
在今后的学习和工作中,我们将继续深入研究相关知识,并且不断提高自己在编程方面的能力。
实验三循环结构程序设计(参考答案)1、设计程序sy3-1.c,计算并输出n(包括n)以内所有能被5或9整除的自然数的倒数之和。
例如输入n 的值为20时,输出0.583333。
算法分析:穷举1~n(含n)之间的每一个整数,能否被5或者9整除。
如果能,则把它的倒数累加到累加器里去。
因为能被5整除的自然数,应该至少从5才可能,所以循环控制变量i可以5开始。
参考答案:#include<stdio.h>void main(){int n,i;double s=0; //累加器要赋初值为0,结果为小数,所以定义为实数类型printf("请输入n的值:");scanf("%d",&n);for(i=5;i<=n;i++) //穷举小于等于n的自然数if(i%5==0||i%9==0)s=s+1.0/i;// 因为i是整数类型,所以1/i的值为0printf("s=%f\n",s);}运行结果:2、设计程序sy3-2.c,计算并输出给定整数n的所有因子(不包括1与自身)之和。
例如,输入n的值是856时,应输出763。
算法分析:因子,就是能整除n的值。
所以从2到n-1穷举每个数是不是它的因子,是就累加到s中。
参考答案:#include<stdio.h>void main(){int s=0,n,i;printf("请输入n:");scanf("%d",&n);for(i=2;i<n;i++) //穷举所有可能为因子的整数if(n%i==0) //因子即是能整除n的数s=s+i;printf("%d的所有因子之和是:%d\n",n,s);}运行结果:3、设计程序sy3-3.c,输入一个整数,要求将该整数上各位数字是偶数的数取出,并按原来从高位到低位的顺序组成一个新数。
汇编语言程序设计上机实验报告(实验三)一、实验题目、内容及要求:一、实验题目、内容及要求:题目:循环程序设计内容:编写一程序,要求从键盘接收一个4位十六进制数,在终端上显示与它等值的二进制数。
二进制数。
要求:实验前要作好充分准备,包括程序清单、调试步骤、调试方法,对程序结果的分析等。
本实验要求在EDIT 下编写完整的汇编语言程并生成可执行文件运行。
下编写完整的汇编语言程并生成可执行文件运行。
二、实验时间及地点二、实验时间及地点日期:日期: 2011/11/21 节次:节次: 7.8 地点:地点:电子实验楼二楼电子机房电子实验楼二楼电子机房 三、实验目的三、实验目的通过本实验掌握DOS 系统功能调用功能,掌握循环程序设计的方法;学会编写循环结构程序。
构程序。
简述在实验过程中遇到的问题和解决的方法:简述在实验过程中遇到的问题和解决的方法:1、问题:遇到死循环解决方法:程序显示disp 中发现执行int int 21h 21h 会修改al 的值,避免这种情况的方法就是使用堆栈段。
2、问题:调试中出现no data segment 解决方法:start 开始时没有将数据段的IP 地址赋给dx 。
data segment 3、问题:可执行,结果为乱码解决方法:数据划分比较的粗,没有系统的将数据系统划分。
系统划分:<30h other 30h-39h num 39h-41h other 41h-46h big zi mu 46h-61h other 61h-67h small zi mu >67h other 运行结果:(要求用“抓图软件”抓程序的运行结果)(要求用“抓图软件”抓程序的运行结果)结果分析及实验体会:结果分析及实验体会:1、结果0001001000110100是十六进制数1234转化而来。
十六进制数通过ASCII码对照转换为二进制数。
A~F----- -57hA~ f----- -57h0~9 ------ -37h2、学习应用了循环指令并了解了其特点:A、循环指令不影响标志位B、其功能为使寄存器CX的值减1,如果结果不等于0,则循环至标号,否则顺序执行。
实验三循环结构程序设计实验课程名:C语言程序设计专业班级:学号::实验时间:实验地点:指导教师:(3)运行结果分析:运行成功。
2、有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13,…。
求出这个数列的前20项之和。
解答:(1)源代码:#include<stdio.h>int main(){float a=1,b=2,c,sum=0;int i;printf("2/1,3/2,5/3,8/5,13/8,21/13,…前二十项的和为");for(i=1;i<21;i++){sum=sum+b/a;c=a+b;a=b;b=c;}printf("%.2f\n",sum);return 0;}(2)运行结果:(3)运行结果分析:运行成功return 0;}(2)运行结果:(3)运行结果分析:运行成功。
4、编程序按下列公式计算e 的值(精度为1e-6):e=1+1/1!+1/2!+1/3!+…+1/n! 解答:(1)源代码:#include<stdio.h>int main(){(3)运行结果分析:运行成功5、输入一行字符,分别统计出其中的英文字母、空格、数字和其他字符的个数。
解答:(1)源代码:#include<stdio.h>int main(){char s;int a=0,b=0,c=0,d=0;printf("请输入一行字符");while((s=getchar())!='\n')(3)运行结果分析:运行成功6、编程求1000以内所有的水仙花数。
谓水仙花数,是指一个3位数,其各位数字立方和等于该数字本身。
例,153是水仙花数,因为153=13+53+33。
解答:(1)源代码:#include<stdio.h>int main(){int a,b,c,d,i;printf("1000以内的水仙花数为");for(i=100;i<1000;i++){a=i%10;b=i/10%10;c=i/100;d=a*a*a+b*b*b+c*c*c;if(i==d)printf("%d ",i);}printf("\n");return 0;}(2)运行结果:if(x==0)printf("该数不是素数\n");if(x==1)printf("该数是素数\n");}return 0;}(2)运行结果:(3)运行结果分析:运行成功8、编写程序输入某班C语言考试的考试分数,该班人数未知,用-1作为结束标志,若输入大于100分,则提示重新输入,然后计算全班的最高分、最低分与平均分。
实验教案}三、实验内容(按要求设计以下程序,并调试分析运行结果,此部分完成在实验报告上)1、设计程序sy3-1.c,要求打印小学九九乘法表。
算法分析:根据九九乘法表可知,该表共有9行,第i行有i个表达式,而且表达式中的操作数和行、列数相关,因此可以用嵌套的双重循环来实现,外循环控制行数(循环变量从1到9),内循环控制每行的表达式个数(循环变量从1变到i)。
参考答案:# include <stdio.h>void main(){int i,j;for(i=1;i<=9;i++){for(j=1;j<=i;j++)printf("%d*%d=%-5d",j,i,i*j);printf("\n");}}运行结果:2、设计程序sy3-2.c,要求编程计算x n,其中x和n均由键盘输入2。
算法分析:要计算x的n次方,即是n次x相乘,其中x可以是整型或实型,而n必须是整型;另外要考虑结果的类型,若x和n比较大,一般的int型容易产生溢出。
参考答案:# include <stdio.h>void main(){int i,n;float x,p=1; /*累乘器要赋初值1*/printf("Input x,n: ");scanf("%f,%d",&x,&n); /*以逗号分隔输入的已知数据x和n的值*/for(i=1;i<=n;i++)p=p*x;printf("%g^%d=%g\n",x,n,p);}运行结果:3、设计程序sy3-3.c,已知祖父年龄70岁,长孙20岁,次孙15岁,幼孙5岁,问要过多少年,三个孙子的年龄之和同祖父的年龄相等,试用单重循环结构编程实现。
4、设计程序sy3-4.c,有一数列:2/1,3/2,5/3,8/5,…求出这个数列的前10项之和。
实验三:循环结构程序设计一、实验目的:1. 熟练使用for()、while()和do-while()三种语句实现循环程序设计;2. 理解循环条件和循环体,以及体会for()、while()和do-while()语句的相同及不同之处;3.掌握break和continue语句的使用。
二、实验要求:1. 参照《附件一:确定循环次数的程序设计》,完成相应的题目要求(共5题);2. 水仙花数是指各位数字的立方和等于该数本身的三位数。
例如,153是水仙花数,因为153=13+33+53。
请编程计算并输出所有的水仙花数,每个数占一行。
输出样例:153370371407#include<stdio.h>int main(){int s,d,z,i;for(i=100;i<=999;i++){s=i/100;d=i/10%10;z=i%10;if(i==s*s*s+d*d*d+z*z*z)printf("%d\n",i);}return 0;}3. 编写程序,输入一批正整数(以零或负数为结束标志),求其中的偶数和。
要求:使用while()语句实现此程序。
输入样例:1 2 3 4 5 0输出样例:6输入样例:-1输出样例:0#include<stdio.h>int main(){int n ,sum=0;while(scanf("%d",&n),n>0){if(n%2==0)sum+=n;}printf("%d",sum);return 0;}4.古代《张丘建算经》中有一道百鸡问题:鸡翁一,值钱五;母鸡一,值钱三;鸡雏三,值钱一。
百钱买百鸡,问鸡翁、母、雏各几何?其意为:公鸡每只5元,母鸡每只3元,小鸡3只1元。
请用穷举法编程计算,若用100元买100只鸡,则公鸡、母鸡和小鸡各能买多少只。
输出样例:0 25 754 18 788 11 8112 4 845.一球从100米高度自由落下,每次落地后反弹回原高度的一半,然后再落下再反弹。
第1篇实验名称:程序循环结构实验实验日期:2023年4月10日实验地点:计算机实验室实验目的:1. 理解循环结构在程序设计中的作用。
2. 掌握不同循环结构(如for循环、while循环、do-while循环)的语法和应用。
3. 能够根据实际问题选择合适的循环结构进行编程实现。
4. 提高编程实践能力。
实验环境:1. 操作系统:Windows 102. 编程语言:Python3.83. 开发工具:PyCharm实验内容:一、实验一:for循环结构1. 实验目的了解for循环的语法和使用方法,掌握其基本操作。
2. 实验步骤(1)编写一个程序,使用for循环打印1到10的整数。
(2)编写一个程序,使用for循环计算1到100的整数之和。
3. 实验代码```python打印1到10的整数for i in range(1, 11):print(i)计算1到100的整数之和sum = 0for i in range(1, 101):sum += iprint("1到100的整数之和为:", sum)```4. 实验结果程序成功运行,打印出1到10的整数和1到100的整数之和。
二、实验二:while循环结构1. 实验目的了解while循环的语法和使用方法,掌握其基本操作。
2. 实验步骤(1)编写一个程序,使用while循环计算1到10的整数之和。
(2)编写一个程序,使用while循环判断一个数是否为素数。
3. 实验代码```python计算1到10的整数之和sum = 0i = 1while i <= 10:sum += ii += 1print("1到10的整数之和为:", sum)判断一个数是否为素数num = 29is_prime = Truei = 2while i i <= num:if num % i == 0:is_prime = Falsebreaki += 1if is_prime:print(num, "是素数")else:print(num, "不是素数")```4. 实验结果程序成功运行,打印出1到10的整数之和以及29是否为素数。
微机原理与汇编语言实验实验三循环程序设计实验一实验目的1、掌握循环程序的设计方法。
2、掌握比较指令、转移指令和循环指令的使用方法。
3、进一步掌握调试工具的使用方法。
二实验预习要求1、复习比较指令、条件转移指令和循环指令。
2、复习循环程序的结构、循环控制方法等知识。
3、读懂“三实验内容”中给出的将十进制数转换为二进制数以及将二进制数转换为十进制数的程序。
4、根据“三实验内容”中给出的流程图和程序框架编写源程序,以便上机调试。
5、从“四实验习题”中任选一道题目,编写源程序,以便上机调试。
三实验内容计算1+2+……n=?,其中n通过键盘输入。
要求在屏幕上提供如下信息:Please input a number(1 627): ;出现此信息后通过键盘输入一个小于628的无符号整数1+2+…..n=sum;其中n为用户输入的数,sum为所求的累加和程序运行情况如下图所示(说明:图中所运行程序允许累加和不大于一个32位二进制数所能表示的范围)。
1、编程指导(1)键盘输入的十进制数如368在计算机中是以33H,36H,38H形式存放的,如何将它们转换为一个二进制数101110000B,以便对累加循环的循环次数进行控制是本程序首先要解决的问题。
将键盘输入的十进制数转换为二进制数的程序清单如下:.model small.stack.dataINF1 DB "Please input a number (0-65535):$"IBUF DB 6,0,6 DUP(?).codeSTART: MOV AX, @dataMOV DS, AXMOV DX, OFFSET INF1MOV AH, 09HINT 21HMOV DX, OFFSET IBUF ;键入一个十进制数(<65535)MOV AH, 0AHINT 21HMOV CL, IBUF+1 ;十进制数的位数送CXMOV CH, 0MOV SI, OFFSET IBUF+2 ;指向输入的第一个字符(最高位)MOV AX, 0 ;开始将十进制数转换为二进制数AGAIN: M OV DX, 10 ;((0⨯10+a4) ⨯10+…) ⨯10+a0MUL DXAND BYTE PTR [SI], 0FHADD AL, [SI]A DC AH, 0I NC SILOOP AGAINMOV AH, 4CHINT 21HEND START本程序功能:从键盘接收一个无符号十进制整数(小于65535),将其转换为二进制数,转换结果存在AX寄存器中。
实验三循环结构程序设计一、实验学时4学时。
二、实验目的1.熟练掌握用while、do-while以及for语句实现循环程序设计的方法。
2.理解循环条件和循环体的含义。
理解循环结构中语句的执行过程。
3.熟练掌握break和continue语句的功能及应用。
4.掌握应用嵌套循环结构进行程序设计的方法。
5.掌握应用循环结构及穷举算法解决有关问题。
6.掌握运行到光标位置、使用断点等程序调试方法。
三、实验内容1.程序调试【例1】改正下列程序中的错误,求S=1!+2!+3!+…+n!的值,n的值通过键盘输入(n ≤10)。
程序:#include <stdio.h>void main(){int n,i;long int s,sum;printf("请通过键盘输入具体数据给变量n赋值:");scanf("%d",&n);for(i=1;i<=n;i++){s=s*isum+=s;}printf("1!+2!+3!+...+%d!=%ld\n",n,sum);}(1)按照前面章节实验中介绍的步骤,保存源程序代码。
(2)单击编译按钮(Compile),出现第一条编译错误信息是:missing ';' beforeidentifier 'sum',改正后,重新编译和连接,都正确。
(3)开始调试程序,鼠标单击第11行,光标在第11行闪烁,这就是当前光标的位置,单击,程序运行到光标位置。
在变量窗口中,第一次循环时i的值为 1 ,n的值为 5 ,正确;而s的值为-858993460,不正确。
请分析错误原因:s示未赋初值,long int s,sum;改为long int s=1,sum;,改正后,重新编译和连接,继续进行上述操作,这时s的值为1正确。
(4)鼠标单击第12行,光标在第12行闪烁,这就是当前光标的位置,单击,程序运行到光标位置。
在变量窗口中,第一次循环时i的值为 1 ,s的值为 1 ,正确;而sum 的值为-858993460,不正确。
请分析错误原因:sum示未赋初值,long int s,sum;改为long int s=1,sum=0;,改正后,重新编译和连接,继续进行上述操作,这时sum的值为0正确。
(5)把光标定位到倒数第3行,单击(Run to Cursor)按钮,程序运行到光标位置。
在变量窗口中,s的值为 1 ,sum的值为 1 ,显示信息正确。
(6)单击(Stop Debugging)按钮,程序调试结束。
在程序调试的过程中,应用了“运行到光标位置”的程序调试方法:即单击按钮,程序运行到光标位置,观察变量窗口中所显示的变量信息内容,分析此时变量的值是否正确。
同时,结合断点的使用,断点的使用就是让程序运行到断点处暂停,让用户可以观察当前变量或表达式的值。
设置断点时,先将光标定位到要设置断点的位置,然后单击编译微型工具条的按钮,断点设置完毕。
如果要取消已经设置的断点,只需要将光标移到要取消的断点处,再次单击按钮,该断点取消。
在循环结构的程序设计中,这种程序调试的方法经常使用,在具体进行程序调试时,设置程序运行断点处位置,注意变量窗口中显示变量的具体值信息(如果变量较多时,可以输入变量名查看),这些变量的值是否与循环第一次运行时一致。
2.编程练习(1)读入一个正整数n,计算并输出前n项之和s的值(保留6位小数)。
S=1+1/4+1/7+1/10+1/13+1/16+…程序运行结果输入/输出示例:参考程序如下:#include "stdio.h"void main(){int i, k, n;double sum;printf("请输入n的值:");scanf("%d", &n);sum = 0;k = 1;for(i = 1; i <= n; ++i){sum += 1/(double)k;k += 3;}printf("S=%lf\n", sum);}思考题1:读入一个正实数n,计算并s的值(保留6位小数),要求精确到最后一项的绝对值小于n(保留6位小数)。
S=1-1/4+1/7-1/10+1/13-1/16+…参考程序如下:#include "stdio.h"#include "math.h"void main(){int i, k, t;double n;double sum;printf("请输入n的值:");scanf("%lf", &n);sum = 0;t = 1;k = 1;while(fabs(t/(double)k)>n){sum += t /(double)k;k += 3;t *= -1;}printf("S=%lf\n", sum);}思考题2:读入一个正整数n,计算并输出前n项之和s的值(保留6位小数)。
n为偶数时,正项个数与负项的个数相等;当n为偶数,正项个数比负项的个数多一项,可以将正项与负项分别进行计算。
参考程序:#include "stdio.h"void main(){int i, k, n;double sum;printf("请输入n 的值:");scanf("%d", &n);sum = 0;k = 1;for(i = 1; i <= (n+1)/2; ++i) //计算正数项的和:1+3/7+5/13+…{sum += (2*i-1)/(double)k;k += 6;}//正数项和分别与各个负数项求和(1+3/7+5/13+…-1/2-2/5-3/8-…if(n%2==0) //区分n 为偶数时,负数项的个数为n 的一半{k=2;for(i = 1; i <= n/2; ++i){sum -= i/(double)k;k += 3;}}else //区分n 为奇数时,负数项的个数为n-1的一半,比正数项少一个 {k=2;for(i = 1; i <= (n-1)/2; ++i){sum -= i/(double)k;k += 3;}}printf("S=%.3lf\n", sum);}分析2:132531234561275138147101316S =-+-+-+=-+-+-+L L 即对S 中负数项的分子与分母分别乘以2,会发现相邻的两项的分子部分为相邻的整数,而相邻两项的分母间为前项的分母+3=后项的分母。
参考程序:#include <stdio.h>void main(){ int n,i,k,sign;float s=0;sign=1;k=1;scanf("%d",&n);for(i=1;i<=n;i++){s=s+sign*(float)i/k;k=k+3;sign=sign*(-1);}printf("S=%.3f\n",s);}(2)输入一个正整数data,请编写程序,实现下列功能:①求它的位数;②求各位数字之和;③从高位开始逐位分割并输出它的各位数字。
参考程序如下:#include <stdio.h>#include <math.h>void main( ){int count, in, sum, temp,t;printf("请输入一个正整数:");scanf("%d", &in);temp=in;count=sum=0;while(temp!=0) //求正整数的位数,及各位数之和{sum=sum+temp%10;count++;temp=temp/10;}printf("%d是一个%d位整数,各位数字之和为%d\n", in, count, sum);temp=in;printf("各位数字分别为:");while(temp!=0){t=temp/pow(10,count-1);printf("%d ",t);temp=temp-t*pow(10,count-1);count--;}}(3)输入2个正整数m和n(m≥1,n≤500),输出m和n之间的所有素数,每行输出6参考程序如下:#include <stdio.h>#include <math.h>void main(){int i,j,p,m,n,count;count=0; //统计素数的个数printf("请输入两个整数:");scanf("m=%d,n=%d",&m,&n);for(i=m;i<=n;i++){for(j=2;j<=(int)sqrt(i);j++)if(i%j==0)break;if(j>(int)sqrt(i) && i!=1){printf("%d ",i);count++;}if(count%6==0)printf("\n");}}3.程序改错输入2个正整数m和n,求这两个正整数的最大公约数和最小公倍数。
#include <stdio.h>#include <math.h>void main(){int m,n,max,min,data1,data2,r;printf("请输入两个正整数:");scanf("m=%d,n=%d",&m,&n);data1=m; data2=n;if(m<n){ r=m; m=n; n=r; }r=m%n;while(r!=0) //辗转相除法,求最大公约数{ m=n; n=r; r=m%n; }max=n; //循环结束后,最大公约数即为nmin=data1*data2/max; //两个原数相乘,再除以最大公约数,即为最小公倍数printf("%d,%d的最大公约数:%d\n",data1,data2,max);printf("%d,%d的最小公倍数:%d\n",data1,data2,min);}思考题3:求两个正整数的最大公约数和最小公倍数,采用辗转相乘法是求解问题的方法之一,也可以采用for循环结构,结合break语句进行求解,不需要判断两个正整数的大小,请读者根据这种算法思想,编程求解两个正整数的最大公约数和最小公倍数。