習題三(重復程序設計)
題目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/