C語言經典例題(1-25)

C語言經典例題(1-25)

寫在前面

你好,我是禪墨!

拖欠了很久很久的東西,如果不是有人私聊我,估計就徹底沒了。

正文開始

1.有1、2、3、4個數字,能組成多少個互不相同且無重複數字的三位數?都是多少?

#include<stdio.h>
 
int main()
{
    int i,j,k;
    printf("\n");
    for(i=1;i<5;i++) { // 以下爲三重循環
        for(j=1;j<5;j++) {
            for (k=1;k<5;k++) { // 確保i、j、k三位互不相同
                if (i!=k&&i!=j&&j!=k) { 
                    printf("%d,%d,%d\n",i,j,k);
                }
            }
        }
    }
}

#輸出
1,2,3 1,2,4 1,3,2 1,3,4 1,4,2 1,4,3 
2,1,3 2,1,4 2,3,1 2,3,4 2,4,1 2,4,3 
3,1,2 3,1,4 3,2,1 3,2,4 3,4,1 3,4,2 
4,1,2 4,1,3 4,2,1 4,2,3 4,3,1 4,3,2

2.企業發放的獎金根據利潤提成。

  • 利潤(I)低於或等於10萬元時,獎金可提10%;
  • 利潤高於10萬元,低於20萬元時,低於10萬元的部分按10%提成,高於10萬元的部分,可提成7.5%;
  • 20萬到40萬之間時,高於20萬元的部分,可提成5%;
  • 40萬到60萬之間時高於40萬元的部分,可提成3%;
  • 60萬到100萬之間時,高於60萬元的部分,可提成1.5%;
  • 高於100萬元時,超過100萬元的部分按1%提成。

從鍵盤輸入當月利潤I,求應發放獎金總數?

#include<stdio.h>
int main()
{
    double i;
    double bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
    printf("你的淨利潤是:\n");
    scanf("%lf",&i);
    bonus1=100000*0.1;
    bonus2=bonus1+100000*0.075;
    bonus4=bonus2+200000*0.05;
    bonus6=bonus4+200000*0.03;
    bonus10=bonus6+400000*0.015;
    if(i<=100000) {
        bonus=i*0.1;
    } else if(i<=200000) {
        bonus=bonus1+(i-100000)*0.075;
    } else if(i<=400000) {
        bonus=bonus2+(i-200000)*0.05;
    } else if(i<=600000) {
        bonus=bonus4+(i-400000)*0.03;
    } else if(i<=1000000) {
        bonus=bonus6+(i-600000)*0.015;
    } else if(i>1000000) {
        bonus=bonus10+(i-1000000)*0.01;
    }
    printf("提成爲:bonus=%lf",bonus);
 
    printf("\n");
}

#輸出
你的淨利潤是:
120000
提成爲:bonus=11500.000000

3.一個整數,它加上100後是一個完全平方數,再加上168又是一個完全平方數,請問該數是多少?

#include <stdio.h>
 
int main (void)
{
    int  i, j, m, n, x;
    for (i = 1; i < 168 / 2 + 1; i++)
    {
        if (168 % i == 0)
        {
            j = 168 / i;
            if ( i > j && (i + j) % 2 == 0 && (i - j) % 2 == 0)
            {
                m = (i + j) / 2;
                n = (i - j) / 2;
                x = n * n - 100;
                printf ("%d + 100 = %d * %d\n", x, n, n);
                printf ("%d + 268 = %d * %d\n", x, m, m);
            }
        }
    }
    return 0;
}

#輸出
-99 + 100 = 1 * 1
-99 + 268 = 13 * 13
21 + 100 = 11 * 11
21 + 268 = 17 * 17
261 + 100 = 19 * 19
261 + 268 = 23 * 23
1581 + 100 = 41 * 41
1581 + 268 = 43 * 43

4.輸入某年某月某日,判斷這一天是這一年的第幾天?

#include <stdio.h>
int main()
{
    int day,month,year,sum,leap;
    printf("\n請輸入年、月、日,格式爲:年,月,日(2015,12,10)\n");
    scanf("%d,%d,%d",&year,&month,&day);  // 格式爲:2015,12,10
    switch(month) // 先計算某月以前月份的總天數
    {
        case 1:sum=0;break;
        case 2:sum=31;break;
        case 3:sum=59;break;
        case 4:sum=90;break;
        case 5:sum=120;break;
        case 6:sum=151;break;
        case 7:sum=181;break;
        case 8:sum=212;break;
        case 9:sum=243;break;
        case 10:sum=273;break;
        case 11:sum=304;break;
        case 12:sum=334;break;
        default:printf("data error");break;
    }
    sum=sum+day; // 再加上某天的天數
    if(year%400==0||(year%4==0&&year%100!=0)) {// 判斷是不是閏年
        leap=1;
    } else {
       leap=0;
    }
    if(leap==1&&month>2) { // *如果是閏年且月份大於2,總天數應該加一天
        sum++;
    }
    printf("這是這一年的第 %d 天。",sum);
    printf("\n");
}

#輸出
請輸入年、月、日,格式爲:年,,日(2015,12,102015,10,1
這是這一年的第 274 天。

5.輸入三個整數x,y,z,請把這三個數由小到大輸出。

 #include <stdio.h>
 
int main()
{
    int x,y,z,t;
    printf("\n請輸入三個數字:\n");
    scanf("%d%d%d",&x,&y,&z);
    if (x>y) { /*交換x,y的值*/
        t=x;x=y;y=t;
    }
    if(x>z) { /*交換x,z的值*/
        t=z;z=x;x=t;
    }
    if(y>z) { /*交換z,y的值*/
        t=y;y=z;z=t;
    }
    printf("從小到大排序: %d %d %d\n",x,y,z);
}

#輸出
請輸入三個數字:
1
3
2
從小到大排序: 1 2 3

6.用*號輸出字母C的圖案。

#include "stdio.h"
int main()
{
    printf("用 * 號輸出字母 C!\n");
    printf(" ****\n");
    printf(" *\n");
    printf(" * \n");
    printf(" ****\n");
}

#輸出
用 * 號輸出字母 C!
 ****
 *
 * 
 ****

7.輸出特殊圖案X,請在c環境中運行,看一看,Very Beautiful!

#include<stdio.h>
int main()
{
    char a=176,b=219;
    printf("%c%c%c%c%c\n",b,a,a,a,b);
    printf("%c%c%c%c%c\n",a,b,a,b,a);
    printf("%c%c%c%c%c\n",a,a,b,a,a);
    printf("%c%c%c%c%c\n",a,b,a,b,a);
    printf("%c%c%c%c%c\n",b,a,a,a,b);
    return 0;
}

8.輸出9*9口訣。

#include<stdio.h>
int main()
{
    int i,j,result;
    printf("\n");
    for (i=1;i<10;i++)
    {
        for(j=1;j<=i;j++)
        {
            result=i*j;
            printf("%d*%d=%-3d",i,j,result); /*-3d表示左對齊,佔3位*/
        }
    printf("\n"); /*每一行後換行*/
    }
}

9.要求輸出國際象棋棋盤。

#include<stdio.h>
 
int main()
{
    int i,j;
    for(i=0;i<8;i++)
    {
        for(j=0;j<8;j++)
            if((i+j)%2==0)
                printf("%c%c",219,219);
            else printf("  ");
        printf("\n");
    }
    return 0;
}

10.打印樓梯,同時在樓梯上方打印兩個笑臉。

#include<stdio.h>
 
int main()
{
    int i,j;
    printf("\1\1\n"); /*輸出兩個笑臉*/
    for(i=1;i<11;i++)
    {
        for(j=1;j<=i;j++)
            printf("%c%c",219,219);
        printf("\n");
    }
    return 0;
}

11.古典問題(兔子生崽):有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數爲多少?(輸出前40個月即可)

#include<stdio.h>
 
int main()
{
    int f1=1,f2=1,i;
    for(i=1;i<=20;i++)
    {
        printf("%12d%12d",f1,f2);
        if(i%2==0) printf("\n");
        f1=f1+f2;
        f2=f1+f2;
    }
    
    return 0;
}

12.判斷101到200之間的素數。

#include <stdio.h>
 
int main()
{
    int i,j;
    int count=0;
    
    for (i=101; i<=200; i++) 
    {
        for (j=2; j<i; j++) 
        {
        // 如果j能被i整除在跳出循環
            if (i%j==0) 
                break;
        }
    // 判斷循環是否提前跳出,如果j<i說明在2~j之間,i有可整除的數
        if (j>=i) 
        {
            count++;
            printf("%d ",i);
        // 換行,用count計數,每五個數換行
            if (count % 5 == 0) 
            printf("\n");
        }
    }    
    return 0;
}

13.打印出所有的"水仙花數",所謂"水仙花數"是指一個三位數,其各位數字立方和等於該數 本身。例如:153是一個"水仙花數",因爲153=1的三次方+5的三次方+3的三次方。

#include<stdio.h>
 
int main()
{
    int i,x,y,z;
    for(i=100;i<1000;i++)
    {
        x=i%10;
        y=i/10%10;
        z=i/100%10;
        
        if(i==(x*x*x+y*y*y+z*z*z))
        printf("%d\n",i);
        
    }
    return 0;
}

14.利用條件運算符的嵌套來完成此題:學習成績>=90分的同學用A表示,60-89分之間的用B表示,60分以下的用C表示。

#include<stdio.h>
int main()
{
    int score;
    char grade;
    printf("請輸入分數: ");
    scanf("%d",&score);
    grade=(score>=90)?'A':((score>=60)?'B':'C');
    printf("%c\n",grade);
    return 0;
}

15.輸入兩個正整數m和n,求其最大公約數和最小公倍數。

#include<stdio.h>
int main()
{
    int a,b,t,r,n;
    printf("請輸入兩個數字:\n");
    scanf("%d %d",&a,&b);
    if(a<b)
    {t=b;b=a;a=t;}
    r=a%b;
    n=a*b;
    while(r!=0)
    {
        a=b;
        b=r;
        r=a%b;
    }
    printf("這兩個數的最大公約數是%d,最小公倍數是%d\n",b,n/b);
    
    return 0;
}

16.將一個正整數分解質因數。例如:輸入90,打印出90=233*5。

#include<stdio.h>
int main()
{
    int n,i;
    printf("請輸入整數:");
    scanf("%d",&n);
    printf("%d=",n);
    for(i=2;i<=n;i++)
    {
        while(n%i==0)
        {
            printf("%d",i);
            n/=i;
            if(n!=1) printf("*");
        }
    }
    
    printf("\n");
    return 0;
}

17.輸入一行字符,分別統計出其中英文字母、空格、數字和其它字符的個數。

#include<stdio.h>
int main()
{
    char c;
    int letters=0,spaces=0,digits=0,others=0;
    printf("請輸入一些字母:\n");
    while((c=getchar())!='\n')
    {
        if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
            letters++;
        else if(c>='0'&&c<='9')
            digits++;
        else if(c==' ')
            spaces++;
        else
            others++;
    }
    printf("字母=%d,數字=%d,空格=%d,其他=%d\n",letters,digits,spaces,others);
    return 0;
}

18.求s=a+aa+aaa+aaaa+aa…a的值,其中a是一個數字。例如2+22+222+2222+22222(此時共有5個數相加),幾個數相加有鍵盤控制。

#include<stdio.h>
int main()
{
    int s=0,a,n,t;
    printf("請輸入 a 和 n:\n");
    scanf("%d%d",&a,&n);
    t=a;
    while(n>0)
    {
        s+=t;
        a=a*10;
        t+=a;
        n--;
    }
    printf("a+aa+...=%d\n",s);
    return 0;
}

19.一個數如果恰好等於它的因子之和,這個數就稱爲"完數"。例如6=1+2+3.編程找出1000以內的所有完數。

#include<stdio.h>
#define N 1000
int main()
{
    int i,j,k,n,sum;
    int a[256];
    for(i=2;i<=N;i++)
    {
        sum=a[0]=1;
        k=0;
        for(j=2;j<=(i/2);j++)
        {
            if(i%j==0)
            {
                sum+=j;
                a[++k]=j;
            }
            
        }
        if(i==sum)
        {
            printf("%d=%d",i,a[0]);
            for(n=1;n<=k;n++)
                printf("+%d",a[n]);
            printf("\n");
        }
        
    }
    return 0;
}

20.一球從100米高度自由落下,每次落地後反跳回原高度的一半;再落下,求它在第10次落地時,共經過多少米?第10次反彈多高?

#include<stdio.h>
int main()
{
    float h,s;
    h=s=100;
    h=h/2; //第一次反彈高度
    for(int i=2;i<=10;i++)
    {
        s=s+2*h;
        h=h/2;
    }
    printf("第10次落地時,共經過%f米,第10次反彈高%f米\n",s,h);
    return 0;
}

21.猴子吃桃問題:猴子第一天摘下若干個桃子,當即吃了一半,還不癮,又多吃了一個
第二天早上又將剩下的桃子吃掉一半,又多吃了一個。以後每天早上都吃了前一天剩下
的一半零一個。到第10天早上想再吃時,見只剩下一個桃子了。求第一天共摘了多少。

#include <stdio.h>
#include <stdlib.h>
int main(){
    int day, x1 = 0, x2;
    day=9;
    x2=1;
    while(day>0) {
        x1=(x2+1)*2;  // 第一天的桃子數是第2天桃子數加1後的2倍
        x2=x1;
        day--;
    }
    printf("總數爲 %d\n",x1);
    
    return 0;
}

22.兩個乒乓球隊進行比賽,各出三人。甲隊爲a,b,c三人,乙隊爲x,y,z三人。已抽籤決定比賽名單。有人向隊員打聽比賽的名單。a說他不和x比,c說他不和x,z比,請編程序找出三隊賽手的名單。

#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    char i,j,k;
    for(i='x';i<='z';i++) {
        for(j='x';j<='z';j++) {
            if(i!=j) {
                for(k='x';k<='z';k++) {
                    if(i!=k&&j!=k) {
                        if(i!='x'&&k!='x'&&k!='z') {
                            printf("順序爲:a--%c\tb--%c\tc--%c\n",i,j,k);
                        }
                    }
                }
            }
        }
    }
}

23.打印出如下圖案(菱形)。

#include <stdio.h>
int main()
{
    int i,j,k;
    for(i=0;i<=3;i++) {
        for(j=0;j<=2-i;j++) {
            printf(" ");
        }
        for(k=0;k<=2*i;k++) {
            printf("*");
        }
        printf("\n");
    }
    for(i=0;i<=2;i++) {
        for(j=0;j<=i;j++) {
            printf(" ");
        }
        for(k=0;k<=4-2*i;k++) {
            printf("*");
        }
        printf("\n");
    }
  
}

24.有一分數序列:2/1,3/2,5/3,8/5,13/8,21/13…求出這個數列的前20項之和。

#include <stdio.h>
 
int main()
{
    int i,t;
    float sum=0;
    float a=2,b=1;
    for(i=1;i<=20;i++)
    {
        sum=sum+a/b;
        t=a;
        a=a+b;
        b=t;
    }
    printf("%9.6f\n",sum);  
}

25.求1+2!+3!+…+20!的和。

#include <stdio.h>
 
int main()
{
    int i;
    long double sum,mix;
    sum=0,mix=1;
    for(i=1;i<=20;i++)
    {
        mix=mix*i;
        sum=sum+mix;
    }  
    printf("%Lf\n",sum);  
}

寫在後面

哈哈哈,今天沒有過多文案!

printf("\n");
}

}


24.有一分數序列:2/1,3/2,5/3,8/5,13/8,21/13...求出這個數列的前20項之和。

```c
#include <stdio.h>
 
int main()
{
    int i,t;
    float sum=0;
    float a=2,b=1;
    for(i=1;i<=20;i++)
    {
        sum=sum+a/b;
        t=a;
        a=a+b;
        b=t;
    }
    printf("%9.6f\n",sum);  
}

25.求1+2!+3!+…+20!的和。

#include <stdio.h>
 
int main()
{
    int i;
    long double sum,mix;
    sum=0,mix=1;
    for(i=1;i<=20;i++)
    {
        mix=mix*i;
        sum=sum+mix;
    }  
    printf("%Lf\n",sum);  
}

寫在後面

哈哈哈,今天沒有過多文案!

歡迎關注禪墨雲!歡迎評論交流!
undefined

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章