習(xí)題三(重復(fù)程序設(shè)計(jì))
題目1.有一個(gè)數(shù)列:1舵揭,22,333,4444.......。請用重復(fù)結(jié)構(gòu)計(jì)算其前七項(xiàng)之和躁锡。
畢竟是初學(xué)者午绳,我一看到這數(shù)列便想到求其通項(xiàng)公式(An={(10^n ?-1)/9}*n)再求和,但并不是重復(fù)結(jié)構(gòu)映之,也可以說是毫無編程思想吧拦焚。。惕医。耕漱。算色。抬伺。。
利用重復(fù)結(jié)構(gòu)的話灾梦,可以發(fā)現(xiàn)4444等于4峡钓,4*10+4妓笙,然后44*10+4,再重復(fù)444*10+4
如此便可以知道如何寫算法啦
#include<stdio.h>
int main(){
int a,b,i,s,n=0;
printf("請輸入需要計(jì)算前 ? 項(xiàng)的和|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項(xiàng)和為%d|n",n,s);
}
運(yùn)行結(jié)果如下:
題目二:用重復(fù)結(jié)構(gòu)打印如圖的菱形。 ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ?*
? ? ? ***
? ? ?*****
? ? *******
? ? ?*****
? ? ? ***
? ? ? ?*
第一行打印3空*能岩,第二行打印2空***寞宫,第三行打印1空*****,第四行打印*******.......
由此可見關(guān)鍵在于用重復(fù)結(jié)構(gòu)控制每一行對應(yīng)的空格與星號(hào)個(gè)數(shù)拉鹃。
#include<stdio.h>
void main(){
int i,j,n;
printf("請輸入數(shù)字:|n");
scanf("%d",&n);
for(i=1;i<=n;i++)//打印上三角
? ? ?{
? ? ? for(j=0;j<(n+i-1)-(2*i-1);j++)//第i行的空格數(shù)為 i行符號(hào)總數(shù)(n+i-1) 減 i行星號(hào)總數(shù)(2*i-1)
? ? ? ? ? ? printf(" ");
? ? ? for(j=0;j<2*i-1;j++)//第i行星號(hào)數(shù)為 2*i-1
? ? ? ? ? ?printf("*");
? ? ? printf("|n");//換行
? ? ?}
for(i=n-1;i>+=1;i--)//打印下三角 ?用i--而不是i++ 可使倒數(shù)第i行與第i行一樣處理
? ? ? ? ? ? ? ? ? ? ? ? ? ?//例如倒數(shù)第三行相當(dāng)于第三行
? ? ?{
? ? ? for(j=0;j<(n+i-1)-(2*i-1);j++)
? ? ? ? ? ? printf(" ");
? ? ? for(j=0;j<2*i-1;j++)
? ? ? ? ? ? printf("*");
? ? ? printf("|n");
? ? ? }
}
方法二(兩個(gè)for循環(huán)):
#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");//打完一列 換行
? ? ?}
}
題目三:輸入任意一個(gè)整數(shù)辈赋,求其各位數(shù)之和及位數(shù)。
關(guān)鍵是怎么把幾個(gè)位數(shù)單獨(dú)取出來膏燕,然后賦給一個(gè)變量钥屈,讓他求和。由于并未告訴我們要求的是幾位數(shù)坝辫,因而需要用重復(fù)結(jié)構(gòu)篷就,在每次重復(fù)的時(shí)候驗(yàn)證〗Γ可以想到:
一個(gè)n位數(shù)便可以被10整除n次后到0竭业,因此只需每次驗(yàn)證整除后的數(shù)是不是大于0,若是及舍,繼續(xù)重復(fù)未辆;否則結(jié)束。
#include<stdio.h>
int main()
{
int t=0,s,n,m=0; ? //t為各位數(shù)之和锯玛,s是位數(shù)
printf("請輸入一個(gè)整數(shù):");
scanf("%d",&n);
do{
? ? ? m=n%10;
? ? ? n=n/10;
? ? ? s+=1;
? ? ? t+=m;
? ?}whlie(n>0);
}
題目四:有一種三位數(shù)很有意思鼎姐,它等于其各位的立方和。例如:153=1^3+5^3+3^3更振。這種數(shù)被稱為水仙花數(shù)炕桨。用程序求出所有的三位數(shù)。
首先肯腕,明確下這種水仙花數(shù)是三位數(shù)献宫,因而我們需要在100-999內(nèi)計(jì)算,利用計(jì)算機(jī)的強(qiáng)大計(jì)算能力進(jìn)行計(jì)算即可实撒。姊途。
#include<stdio.h>
int main()
{
int i,n,a,b,c;
printf("所有的水仙花數(shù)為:\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);
? ? ? }
}
題目五:輸入任意一個(gè)整數(shù)n,求出滿足關(guā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循環(huán)實(shí)現(xiàn)1!+2!+....+m!
? ? ? ? ? ?j=j*i;
? ? i++;
? ? link+=j;
? ? }while(link<n);
printf("The value of m is %d",i-1);
}
但是不知道為什么n的讀取不了顶考,我又換了for循環(huán)試試赁还,卻又是可以的。驹沿。艘策。真是奇怪,還沒找到原因 /摸摸頭.jpg/