藍本第三+四章習題

第三章

程序設計T5

#include<stdio.h>
#include<math.h>
int main() {
    int x1, x2, x3, y1, y2, y3;
    double a, b, c,d,f,s;
    printf("請輸入第一個點的坐標:");
    scanf("%d\t%d", &x1, &y1);
    printf("請輸入第二個點的坐標:");
    scanf("%d\t%d", &x2, &y2);
    printf("請輸入第三個點的坐標:");
    scanf("%d\t%d", &x3, &y3);
    a = sqrt((y2 - y1)*(y2 - y1) + (x2 - x1)*(x2 - x1));
    b = sqrt((y3 - y1)*(y3 - y1) + (x3 - x1)*(x3 - x1));
    c = sqrt((y3 - y2)*(y3 - y2) + (x3 - x2)*(x3 - x2));
    //a=sqrt(pow(y2-y1,2)+pow(x2-x1,x))
    if (a + b > c&&a + c > b&&b + c > a) {
        d = a + b + c;
        s = (a + b + c) / 2;
        f = sqrt(s*(s - a)*(s - b)*(s - c));
    }
    else {
        printf("impossible");
    }
    printf("周長為:%.2lf,面積為:%.2lf", d, f);
    return 0;
}

其中的pow(a,b)意為a的b次方,要加上math.h的庫。

第四章

p72例4-2(平均成績和不及格人數(shù))

統(tǒng)計一批學生的平均成績與不及格人數(shù),從鍵盤輸入一批學生的成績,計算平均成績,并統(tǒng)計不及格學生的人數(shù)。

#include<stdio.h>
#include<math.h>
int main() {
   int a=0, b=0;//a為學生人數(shù),b為不及格人數(shù)
   double sum=0, c,adv;//c為學生成績

   printf("請輸入學生成績:");
   scanf("%lf", &c);
   while (c>0)
   {
       a += 1;
       sum += c;
       if (c < 60) {
           b += 1;
       }
       scanf("%lf", &c);
   }
   adv = sum / a;
   printf("一共%d個學生,平均成績是%.2lf,不及格人數(shù)為%d", a, adv, b);

   return 0;
}

p74例4-3(統(tǒng)計整數(shù)位數(shù))

統(tǒng)計一個整數(shù)的位數(shù)。從鍵盤讀入一個整數(shù),統(tǒng)計該數(shù)的位數(shù)。例如12345輸出5,-99輸出2,0輸出1

#include<stdio.h>
#include<math.h>
int main() {
    //統(tǒng)計一個整數(shù)的位數(shù)。從鍵盤讀入一個整數(shù),統(tǒng)計該數(shù)的位數(shù)。例如12345輸出5,-99輸出2,0輸出1
    int a,b=0;//a為輸入的數(shù),b為位數(shù)
    printf("請輸入一個整數(shù):");
    scanf("%d", &a);

    if (a < 0) {
        a = -a;
    }
    do
    {
        b += 1;
        a = a / 10;
    } while (a!=0);

    printf("%d", b);
    return 0;
}

p76例4-4(逆序輸出)

逆序輸出一個整數(shù)的各位數(shù)字。輸入一個整數(shù),將其逆序輸出,例如輸入12345,輸出54321.

#include<stdio.h>
#include<math.h>
int main() {
    //逆序輸出一個整數(shù)的各位數(shù)字。輸入一個整數(shù),將其逆序輸出,例如輸入12345,輸出54321.
    int a,b;
    printf("請輸入一個整數(shù):");
    scanf("%d", &a);

    while (a != 0) {
        b = a % 10;
        a = a / 10;
        printf("%d", b);
    }
    return 0;
}

p77例4-5(素數(shù)判斷)

判斷一個整數(shù)是否是素數(shù)。輸入一個正整數(shù)m,判斷它是否為素數(shù)。素數(shù)就是只能被1和自身整除的正整數(shù),1不是素數(shù),2是素數(shù)。

#include<stdio.h>
#include<math.h>
int main() {
    //判斷一個整數(shù)是否是素數(shù)。輸入一個正整數(shù)m,判斷它是否為素數(shù)。素數(shù)就是只能被1和自身整除的正整數(shù),1不是素數(shù),2是素數(shù)。
    int a,i;
    printf("請輸入一個正整數(shù):");
    scanf("%d", &a);

    if (a <= 1) {
        printf("不是素數(shù)!");
    }
    else if (a == 2) {
        printf("這是個素數(shù)!");
    }
    else {
        for (i = 2; i <= a - 1; i++) {
            if (a%i == 0) {
                break;
            }
        }
        if (i >= a) {
            printf("這是個素數(shù)!");
        }
        else {
            printf("不是素數(shù)!");
        }
    }
    return 0;
}

p81例4-7(1!+2!+3!+...+n!)

#include<stdio.h>
#include<math.h>
int main() {
    //1!+2!+3!+...+n!

    int a,sum=0,b;
    printf("輸入整數(shù)n:");
    scanf("%d", &a);

    for (int i = 1; i <= a; i++) {
        b = 1;
        for (int j = 1; j <=i; j++) {
            b = b * j;
        }
        sum = sum + b;
    }
    printf("%d", sum);
    return 0;
}

p85例4-8(最值問題,求最高分)

從輸入的n個成績中選出最高分,用for語句實現(xiàn)

#include<stdio.h>
#include<math.h>
int main() {
    //從輸入的n個成績中選出最高分,用for語句實現(xiàn)
     
    int a,max,b;//a是學生個數(shù),b是學生成績
    printf("學生的個數(shù)是:");
    scanf("%d", &a);
    printf("請輸入%d個學生的成績:",a);
    scanf("%d", &b);
    max = b;
    for (int i = 1; i <a; i++) {
        scanf("%d",&b);
        if (b > max) {
            max = b;
        }
    }
    printf("最大值為%d", max);
    return 0;
}

程序設計題

1.求奇數(shù)和,輸入一批正整數(shù)(以0或負數(shù)作為結束標志),求其中的奇數(shù)和

#include<stdio.h>
#include<math.h>
int main() {
    //求奇數(shù)和,輸入一批正整數(shù)(以0或負數(shù)作為結束標志),求其中的奇數(shù)和

    int a,sum=0;
    printf("請輸入正整數(shù):");
    scanf("%d", &a);
    while (a > 0) {
        if (a % 2 != 0) {
            sum = sum + a;
        }
        scanf("%d", &a);
    }
    printf("%d", sum);
    
    return 0;
}

2.展開式求和。輸入一個實數(shù) x,計算并輸出下式的和,直到最后一項的絕對值小于 0.000 01 ,計算結果保留 4 位小數(shù)。要求定義和調用函數(shù) fact(n) 計算 n 的階乘,可以調用 pow() 函數(shù)求冪。試編寫相應程序。
s=1+x+x2/2!+x三次方/3!+...

#include<stdio.h>
#include<math.h>

double fact(int n) {
    double sum=1;
    for (int i = 1; i <= n; i++) {
        sum = sum * i;
    }
    return sum;
}
int main() {
    //展開式求和。輸入一個實數(shù) x,計算并輸出下式的和,直到最后一項的絕對值小于 0.000 01 ,計算結果保留 4 位小數(shù)。
    //要求定義和調用函數(shù) fact(n) 計算 n 的階乘,可以調用 pow() 函數(shù)求冪。試編寫相應程序。
    //s = 1 + x + x2 / 2! + x三次方 / 3! + ...
    
    int i=1;
    double s = 0,b,a;
    double e = 0.00001;
    printf("Enter x:");
    scanf("%lf", &a);
    b = 1;
    while (fabs(b)>e)
    {
        s += b;
        b = pow(a, i) / fact(i);
        i += 1;
    }
    s += b;
    printf("%.4lf", s);
    return 0;
}

3.求序列和。輸入一個正整數(shù) n,輸出 2/1+3/2+5/3+8/5+... 的前 n 項之和,保留 2 位小數(shù)。該序列從第 2 項起,每項的分子是前一項分子與分母的和,分母是前項的分子。試編寫相應程序。

int main() {
    //求序列和。輸入一個正整數(shù) n,輸出 2/1+3/2+5/3+8/5+... 的前 n 項之和,
    //保留 2 位小數(shù)。該序列從第 2 項起,每項的分子是前一項分子與分母的和,分母是前項的分子。試編寫相應程序。
    
    int i, n;
    double x, x1, x2, sum = 0;
    x1 = 2;//分子
    x2 = 1;//分母
    printf("input n:");
    scanf("%d", &n);
    for (i = 1; i <= n; i++) {
        sum += x1 / x2;
        x = x1 + x2; // 臨時存儲:分子+分母,就是下一次的分子
        x2 = x1; // 下一次的分母,就是上次的分子
        x1 = x; // 下一次的分子
    }
    printf("sum = %.2lf\n", sum);
    return 0;
}

4.求序列和。輸入兩個正整數(shù) a 和 n,求 a+aa+aaa+aa...a ( n 個 a ) 之和。例如,輸入 2 和 3 ,輸出246 ( 2+22+222 )。試編寫相應程序。

int main() {
    //求序列和。輸入兩個正整數(shù) a 和 n,求 a+aa+aaa+aa...a ( n 個 a ) 之和。例如,輸入 2 和 3 ,輸出246 ( 2+22+222 )。試編寫相應程序。
    
    int a, n,sum=0,i=1,t=0;
    printf("enter a and n:");
    scanf("%d\t%d", &a, &n);
    while (i <= n) {
        t = t * 10 + a;
        sum += t;
        i++;
    }
    printf("%d", sum);
    return 0;
}

5.換硬幣。將一筆零錢(大于 8 分,小于 1 元,精確到分 ) 換成 5 分,2 分和 1 分的硬幣,每種硬幣至少有一枚。輸入金額,問有幾種換法? 針對每種換法, 輸出各種面額硬幣的數(shù)量和硬幣的總數(shù)量。試編寫相應程序

int main() {
    //換硬幣。將一筆零錢(大于 8 分,小于 1 元,精確到分 ) 換成 5 分,2 分和 1 分的硬幣,每種硬幣至少有一枚。輸入金額,問有幾種換法? 
    //針對每種換法, 輸出各種面額硬幣的數(shù)量和硬幣的總數(shù)量。試編寫相應程序.
    int count,a=0;
    int x, y, z;
    printf("enter count:");
    scanf("%d", &count);
    if (count <= 8 || count >= 100) {
        printf("error!");
    }
    else {
        for (x = 1; x <= count; x++) {
            for (y = 1; y <= count; y++) {
                for (z = 1; z <= count; z++) {
                    if (x*5 + y*2 + z == count) {
                        a++;
                        printf("5分:%d個,2分:%d個,1分:%d個,有%d個硬幣\n", x, y, z,x+y+z);
                    }
                }
            }
        }
        printf("共有%d種", a);
    }
    return 0;
}

6.輸出水仙花數(shù)。輸入一個正整數(shù) n ( 3≤n≤7 ), 輸出所有的 n 位水仙花數(shù)。水仙花數(shù)是指一個 n 位正整數(shù),它的各位數(shù)字的 n 次幕之和等于它本身。 例如 153 的各位數(shù)字的立方和是13+53+3^3 =153。試編寫相應程序。

int main() {
    //輸出水仙花數(shù)。輸入一個正整數(shù) n ( 3≤n≤7 ), 輸出所有的 n 位水仙花數(shù)。水仙花數(shù)是指一個 n 位正整數(shù),它的各位數(shù)字的 n 次幕之和等于它本身。 
    //例如 153 的各位數(shù)字的立方和是1^3+5^3+3^3 =153。試編寫相應程序。

    int n;
    do
    {
        printf("input n (3≤n≤7):");
        scanf("%d", &n);
    } while (n > 7 || n < 3);
    printf("水仙花數(shù)有:\n");
    int i = pow(10, n) - 1;    //上限
    int limit = pow(10, n - 1); //下限
    int digit, sum, s, m;
    while (i >= limit)
    {
        sum = 0;
        s = i;   
        m = n;
        //循環(huán)獲取每個位上的數(shù)字
        while (s != 0)
        {
            digit = s / (int)(pow(10, m - 1));
            s %= (int)(pow(10, m - 1));
            sum += pow(digit, n); // 每個位上的數(shù)字的n次方和
            m--;
        }
        if (sum == i)
        {
            printf("%d\t", i);
        }
        i--;
    }
    printf("\n");
    return 0;
}
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容