一·实验内容
5-1输入两个正整数m,n要求m<=n,求m!+(m+1)!+(m+2)!+...+n!
#include<stdio.h>
int main()
{
int m,n,i;
float sum,p;
printf("请输入两个正整数m,n:\n");
scanf("%d",&m);
scanf("%d",&n);
sum=0;
if(m<=n&&m>=0&&n>=0)
{
for(i=m;i<=n;i++)
{
p=1;
for(i=m;i<=n;i++)
{
p=p*i;
sum=sum+p;
}
}
}
else
{
printf("error\n");
}
printf("sum=%.0f\n",sum);
return 0;
}
5-2输出1000以内的所有完数。完数是指这个数恰好等于出它本身外的所有因子的和,例:6的因子为1,2,3,6,所以6=1+2+3,所以6为完数。
int main()
{
int i,j,s;
for(i=1;i<=1000;i++)
{
s=0;
for(j=1;j<=i-1;j++)
{
if(i%j==0)
{
s+=j;
}
}
if(s==i)
{
printf("%d\n",i);
}
}
return 0;
}
5-3奇偶归一猜想,对于每一个正整数如果它是奇数,则对它乘3再加1,如果它是偶数,则对它除以2,如此循环最终都能够得到1。
#include<stdio.h>
int main()
{
int x,a=0,b=0,sum=0;
printf("请输入一位正整数x:\n");
scanf("%d",&x);
do
{
if(x>0&&x!=1)
{
if(x%2==0)
{
x=x/2;
a++;
}
else if(x%2!=0)
{
x=x*3+1;
b++;
}
}
}while(x!=1);
sum=a+b;
printf("数字x一共经过了%d次运算",sum);
return 0;
}
二·实验总结
1.第一个程序编程时遇到的问题是循环嵌套大括号加的不对,导致执行出来假如输入1和3,输出的是6,而正确答案是9.这是一个应该注意的问题,之外这道题的思路大致归结为:先声明变量,输入的和和累加累乘的变量为浮点型;赋予sum为0初始值,然后判断,分别考虑符合和不符合的情况;套用两个循环结构,外循环判断累加,内循环判断累乘,注意大括号的位置,考虑程序到底执行到哪;最后输出保留两位小数,格式为%.2f。
2.第二个程序编程时画了一个程序框架,有点理不清,输入的变量没弄清各自代表的含义,程序编的也有问题,大括号又用错,导致语句执行的不对。之外这道题的思路大致归结为:先声明变量,输入的i表示输入的完数,j表示输入的因子,s表示输入的因子的和;使用for循环,要确定范围,给因子的和赋予一个初始值,然后for循环嵌套,判断因子,依次累加,前提明白因子比完数小;再判断j是不是i的因子,大括号语句的执行强调;最后若完数与因子的和相等,证明这个数的确是完数。输出
3.第三个程序编程的时候遇到的问题是,画程序框图时没错,编的时候do...while,for...else if语句中的步骤语句存在问题。之外这道题的思路大致归结为输入一个数,赋予a,b,sum,初始值,a代表偶数的次数,b代表奇数的次数,用do...while先循环,再做判断,强调不能等于1的原因是最终都能够得到1,如果输入1就直接输出了没意义。注意执行的步骤