C語言c99之習題開發練習

習題三(重復程序設計)

題目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/


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 第1章 第一個C程序第2章 C語言基礎第3章 變量和數據類型第4章 順序結構程序設計第5章 條件結構程序設計第6章...
    小獅子365閱讀 10,733評論 3 71
  • C語言的學習要從基礎開始,這里是100個經典的算法-1C語言的學習要從基礎開始,這里是100個經典的 算法 題目:...
    Poison_19ce閱讀 1,178評論 0 0
  • 計算機二級C語言上機題庫(南開版) 1.m個人的成績存放在score數組中,請編寫函數fun,它的功能是:將低于平...
    MrSunbeam閱讀 6,478評論 1 42
  • 指針是C語言中廣泛使用的一種數據類型。 運用指針編程是C語言最主要的風格之一。利用指針變量可以表示各種數據結構; ...
    朱森閱讀 3,479評論 3 44
  • 數組在程序設計中,為了處理方便, 把具有相同類型的若干變量按有序的形式組織起來。這些按序排列的同類數據元素的集合稱...
    朱森閱讀 4,007評論 2 13