习题三(重复程序设计)
题目1.有一个数列:1,22,333,4444.......。请用重复结构计算其前七项之和。
毕竟是初学者,我一看到这数列便想到求其通项公式(An={(10^n -1)/9}*n)再求和,但并不是重复结构,也可以说是毫无编程思想吧。。。。。。。
利用重复结构的话,可以发现4444等于4,4*10+4,然后44*10+4,再重复444*10+4
如此便可以知道如何写算法啦
#include<stdio.h>
int main(){
int a,b,i,s,n=0;
printf("请输入需要计算前 项的和|n");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(a=0,b=0;a<i;a++)
b=b*10+i;
s+=b;}
printf("前%d项和为%d|n",n,s);
}
运行结果如下:
题目二:用重复结构打印如图的菱形。
*
***
*****
*******
*****
***
*
第一行打印3空*,第二行打印2空***,第三行打印1空*****,第四行打印*******.......
由此可见关键在于用重复结构控制每一行对应的空格与星号个数。
#include<stdio.h>
void main(){
int i,j,n;
printf("请输入数字:|n");
scanf("%d",&n);
for(i=1;i<=n;i++)//打印上三角
{
for(j=0;j<(n+i-1)-(2*i-1);j++)//第i行的空格数为 i行符号总数(n+i-1) 减 i行星号总数(2*i-1)
printf(" ");
for(j=0;j<2*i-1;j++)//第i行星号数为 2*i-1
printf("*");
printf("|n");//换行
}
for(i=n-1;i>+=1;i--)//打印下三角 用i--而不是i++ 可使倒数第i行与第i行一样处理
//例如倒数第三行相当于第三行
{
for(j=0;j<(n+i-1)-(2*i-1);j++)
printf(" ");
for(j=0;j<2*i-1;j++)
printf("*");
printf("|n");
}
}
方法二(两个for循环):
#include<stdio.h>
int main()
{
int i,j,n;
printf("Please input a number:");
scanf("%d",&n);
for(i=1;i<=2*n-1;i++)//打印行
{
for(j=1;j<=2*n-1;j++)//打印列
if(i<n)
{
if(j>n-i&&j<n+i)
printf("*");
else
printf(" ");
}
else
{
if(j>n-(2*n-i)&&j<n+(2*n-i))
printf("*");
else
printf(" ");
}
printf("\n");//打完一列 换行
}
}
题目三:输入任意一个整数,求其各位数之和及位数。
关键是怎么把几个位数单独取出来,然后赋给一个变量,让他求和。由于并未告诉我们要求的是几位数,因而需要用重复结构,在每次重复的时候验证。可以想到:
一个n位数便可以被10整除n次后到0,因此只需每次验证整除后的数是不是大于0,若是,继续重复;否则结束。
#include<stdio.h>
int main()
{
int t=0,s,n,m=0; //t为各位数之和,s是位数
printf("请输入一个整数:");
scanf("%d",&n);
do{
m=n%10;
n=n/10;
s+=1;
t+=m;
}whlie(n>0);
}
题目四:有一种三位数很有意思,它等于其各位的立方和。例如:153=1^3+5^3+3^3。这种数被称为水仙花数。用程序求出所有的三位数。
首先,明确下这种水仙花数是三位数,因而我们需要在100-999内计算,利用计算机的强大计算能力进行计算即可。。
#include<stdio.h>
int main()
{
int i,n,a,b,c;
printf("所有的水仙花数为:\n");
for(i=100;i<+999;i++)
{
a=i%10;
b=i/10%10;
c=i/100%10;
n=a*a*a+b*b*b+c*c*c;
if(i==n)
printf("%d\n",i);
}
}
题目五:输入任意一个整数n,求出满足关系式:1!+2!+......+m!<n的m。
一看到题目便想用do-whlie语句,来试试;
#include<stdio.h>
int main()
{
int i=1,j=1,n,link=1;
printf("Please inpur a number:\n");
scanf("%d",&n);
do{
for(j=i-1;j>0;j--)//用for循环实现1!+2!+....+m!
j=j*i;
i++;
link+=j;
}while(link<n);
printf("The value of m is %d",i-1);
}
但是不知道为什么n的读取不了,我又换了for循环试试,却又是可以的。。。真是奇怪,还没找到原因 /摸摸头.jpg/