浙大版《C語言程序設計(第3版)》題目集與解答---編程題(不斷更新中)


編程題
/*
練習2-1 Programming in C is fun! (5 分)
本題要求編寫程序,輸出一個短句“Programming in C is fun!”。

輸入格式:
本題目沒有輸入。

輸出格式:
在一行中輸出短句“Programming in C is fun!”。
*/

#include <stdio.h>
int main()
{
    printf("Programming in C is fun!");
    
    return 0;
}


/*
練習2-3 輸出倒三角圖案 (5 分)
本題要求編寫程序,輸出指定的由“*”組成的倒三角圖案。

輸入格式:
本題目沒有輸入。

輸出格式:
按照下列格式輸出由“*”組成的倒三角圖案。

* * * *
 * * *
  * *
   *
*/

#include <stdio.h>

int main()
    
{
    printf("* * * *\n");
    printf(" * * *\n");
    printf("  * *\n");
    printf("   *\n");
    
   return 0;
}


/*
練習2-4 溫度轉換 (5 分)
本題要求編寫程序,計算華氏溫度150°F對應的攝氏溫度。計算公式:C=5×(F−32)/9,式中:C表示攝氏溫度,F表示華氏溫度,輸出數據要求為整型。

輸入格式:
本題目沒有輸入。

輸出格式:
按照下列格式輸出

fahr = 150, celsius = 計算所得攝氏溫度的整數值
*/

#include <stdio.h>
int main()
{
    int fahr;
    int celsius;
    fahr = 150;
    celsius = 5 * (fahr - 32)/ 9;
        printf("fahr = %d, celsius = %d",fahr,celsius);
    return 0;
}


/*練習2-6 計算物體自由下落的距離 (5 分)
一個物體從100米的高空自由落下。編寫程序,求它在前3秒內下落的垂直距離。設重力加速度為10米/s2

輸入格式:
本題目沒有輸入。

輸出格式:
按照下列格式輸出

height = 垂直距離值
結果保留2位小數。
*/

#include <stdio.h>
#include <math.h>
int main()
{
    int g = 10;
    int t = 3;
    double height;
    height = 0.5*g*pow(t,2);
    
    printf("height = %.2f",height);
    
    return 0;
}


/*練習2-8 計算攝氏溫度 (10 分)
給定一個華氏溫度F,本題要求編寫程序,計算對應的攝氏溫度C。計算公式:C=5×(F−32)/9。題目保證輸入與輸出均在整型范圍內。

輸入格式:
輸入在一行中給出一個華氏溫度。

輸出格式:
在一行中按照格式“Celsius = C”輸出對應的攝氏溫度C的整數值。

輸入樣例:
150
輸出樣例:
Celsius = 65
*/

#include <stdio.h>
int main()
{
    int C,F;
    scanf("%d",&F);
    C=5*(F-32)/9;
    printf("Celsius = %d",C);
    return 0;
}


/*練習2-9 整數四則運算 (10 分)
本題要求編寫程序,計算2個正整數的和、差、積、商並輸出。題目保證輸入和輸出全部在整型范圍內。

輸入格式:
輸入在一行中給出2個正整數A和B。

輸出格式:
在4行中按照格式“A 運算符 B = 結果”順序輸出和、差、積、商。

輸入樣例:
3 2
輸出樣例:
3 + 2 = 5
3 - 2 = 1
3 * 2 = 6
3 / 2 = 1
*/

#include <stdio.h>
int main()
{
    int A,B;
    scanf("%d %d",&A,&B);
    printf("%d + %d = %d\n",A,B,A+B);
    printf("%d - %d = %d\n",A,B,A-B);
    printf("%d * %d = %d\n",A,B,A*B);
    printf("%d / %d = %d\n",A,B,A/B);
    
    return 0;
}


/*練習2-10 計算分段函數[1] (10 分)
本題目要求計算下列分段函數f(x)的值:

公式

輸入格式:
輸入在一行中給出實數x。

輸出格式:
在一行中按“f(x) = result”的格式輸出,其中x與result都保留一位小數。

輸入樣例1:
10
輸出樣例1:
f(10.0) = 0.1
輸入樣例2:
0
輸出樣例2:
f(0.0) = 0.0
*/

#include <stdio.h>
int main()
{
    double x,result;
    scanf("%lf",&x);
    if(x == 0)
    {
        result = 0;
        printf("f(%.1f) = %.1f",x,result);
    } else {
        result = 1/x;
        printf("f(%.1f) = %.1f",x,result);
    }
    return 0;
}


/*練習2-11 計算分段函數[2] (10 分)
本題目要求計算下列分段函數f(x)的值:

f2-11

注:可在頭文件中包含math.h,並調用sqrt函數求平方根,調用pow函數求冪。

輸入格式:
輸入在一行中給出實數x。

輸出格式:
在一行中按“f(x) = result”的格式輸出,其中x與result都保留兩位小數。

輸入樣例1:
10
輸出樣例1:
f(10.00) = 3.16
輸入樣例2:
-0.5
輸出樣例2:
f(-0.50) = -2.75
*/

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

int main()
{
    double x,result;
    scanf("%lf",&x);
    if (x < 0)
    {
        result = pow(x+1,2) + 2*x + 1/x;
        printf("f(%.2f) = %.2f",x,result);
    } else {
        result = sqrt(x);
        printf("f(%.2f) = %.2f",x,result);
    }
    return 0;
}


/*練習2-12 輸出華氏-攝氏溫度轉換表 (15 分)
輸入2個正整數lower和upper(lower≤upper≤100),請輸出一張取值范圍為[lower,upper]、且每次增加2華氏度的華氏-攝氏溫度轉換表。

溫度轉換的計算公式:C=5×(F−32)/9,其中:C表示攝氏溫度,F表示華氏溫度。

輸入格式:
在一行中輸入2個整數,分別表示lower和upper的值,中間用空格分開。

輸出格式:
第一行輸出:"fahr celsius"

接着每行輸出一個華氏溫度fahr(整型)與一個攝氏溫度celsius(占據6個字符寬度,靠右對齊,保留1位小數)。

若輸入的范圍不合法,則輸出"Invalid."。

輸入樣例1:
32 35
輸出樣例1:
fahr celsius
32   0.0
34   1.1
輸入樣例2:
40 30
輸出樣例2:
Invalid.
*/

#include <stdio.h>

int main() {
    int lower, upper;
    double F;
    double C;
    scanf("%d %d", &lower, &upper);
    if (lower <= upper && upper <= 100 && lower > 0) {
        printf("fahr celsius\n");
        for (lower; lower <= upper; lower = lower+2) {
            F = lower;
            C = 5.0*(F-32)/9;
            printf("%d%6.1f\n", (int)F, C);
        }
    } else {
        printf("Invalid.");
    }

    return 0;
}


/*練習2-13 求N分之一序列前N項和 (15 分)
本題要求編寫程序,計算序列 1 + 1/2 + 1/3 + ... 的前N項之和。

輸入格式:
輸入在一行中給出一個正整數N。

輸出格式:
在一行中按照“sum = S”的格式輸出部分和的值S,精確到小數點后6位。題目保證計算結果不超過雙精度范圍。

輸入樣例:
6
輸出樣例:
sum = 2.450000
*/

#include <stdio.h>
int main()
{
    int N,i;
    double S;
    
    scanf("%d",&N);
    for(i=1;i<=N;i++)
    {
        S = S + 1.0/i;
    }
    printf("sum = %lf",S);
    
    return 0;
}


/*
練習2-14 求奇數分之一序列前N項和 (15 分)
本題要求編寫程序,計算序列 1 + 1/3 + 1/5 + ... 的前N項之和。

輸入格式:
輸入在一行中給出一個正整數N。

輸出格式:
在一行中按照“sum = S”的格式輸出部分和的值S,精確到小數點后6位。題目保證計算結果不超過雙精度范圍。

輸入樣例:
23
輸出樣例:
sum = 2.549541
*/

#include <stdio.h>
int main()
{
    int N,i;
    double sum = 0;
    scanf("%d",&N);
    for (i=1;i<=N;i++)
    {
        sum = sum + 1.0/(2*i-1);
    
    }
    printf("SUM = %lf",sum);
    return 0;
}


/*
練習2-15 求簡單交錯序列前N項和 (15 分)
本題要求編寫程序,計算序列 1 - 1/4 + 1/7 - 1/10 + ... 的前N項之和。

輸入格式:
輸入在一行中給出一個正整數N。

輸出格式:
在一行中按照"sum = S"的格式輸出部分和的值S,精確到小數點后三位。題目保證計算結果不超過雙精度范圍。

輸入樣例:
10
輸出樣例:
sum = 0.819
*/

#include <stdio.h>
int main()
{
    int N,i;
    double sum = 0;
    scanf("%d",&N);
    for(i=1;i<=N;i++)
    {
        if (i%2!=0)
        {
            sum = sum + 1.0/(3*i-2);
        } else {
            sum = sum - 1.0/(3*i-2);
        }
            
    }
    printf("sum = %.3f",sum);
    return 0;
}


/*
練習2-17 生成3的乘方表 (15 分)
輸入一個非負整數n,生成一張3的乘方表,輸出3
​0
​​ ~3
​n
​​ 的值。可調用冪函數計算3的乘方。

輸入格式:
輸入在一行中給出一個非負整數n。

輸出格式:
按照冪的遞增順序輸出n+1行,每行格式為“pow(3,i) = 3的i次冪的值”。題目保證輸出數據不超過長整型整數的范圍。

輸入樣例:
3
輸出樣例:
pow(3,0) = 1
pow(3,1) = 3
pow(3,2) = 9
pow(3,3) = 27
*/

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

int main()
{
    int i,n,sum;
    scanf("%d",&n);
    for (i=0;i<=n;i++)
    {
        sum = pow(3,i);
        printf("pow(3,%d) = %d\n",i,sum);
    }
    return 0;
}


/*
練習2.18  求組合數
本題要求編寫程序,根據公式C
​n
​m
​​ =
​m!(n−m)!
​
​n!
​​ 算出從n個不同元素中取出m個元素(m≤n)的組合數。

建議定義和調用函數fact(n)計算n!,其中n的類型是int,函數類型是double。

輸入格式:
輸入在一行中給出兩個正整數m和n(m≤n),以空格分隔。

輸出格式:
按照格式“result = 組合數計算結果”輸出。題目保證結果在double類型范圍內。

輸入樣例:
2 7
輸出樣例:
result = 21
*/

#include <stdio.h>
double fact(int n);
int main()
{
    int m,n;
    double result;
    scanf("%d %d",&m,&n);
    if (m<=n)
    {
    result = fact(n)/(fact(m)*fact(n-m))*1.0;
    printf("result = %.0f",result);
    return 0;
    }else{
        ;
    }
}

double fact(int n)
{
    int i;
    double num = 1;
    for(i=1;i<=n;i++)
    {
        num = num * i;
    }
    return num;
}

/*
習題2-1 求整數均值 (10 分)
本題要求編寫程序,計算4個整數的和與平均值。題目保證輸入與輸出均在整型范圍內。

輸入格式:
輸入在一行中給出4個整數,其間以空格分隔。

輸出格式:
在一行中按照格式“Sum = 和; Average = 平均值”順序輸出和與平均值,其中平均值精確到小數點后一位。

輸入樣例:
1 2 3 4
輸出樣例:
Sum = 10; Average = 2.5
*/
#include <stdio.h>
int main()
{
   int a,b,c,d;
   int sum;
   double avg;
    scanf("%d %d %d %d",&a,&b,&c,&d);
    sum = a+b+c+d;
    avg = sum/4.0;
    printf("Sum = %d; Average = %.1f",sum,avg);
    return 0;
}

/*習題2-2 階梯電價 (15 分)
為了提倡居民節約用電,某省電力公司執行“階梯電價”,安裝一戶一表的居民用戶電價分為兩個“階梯”:月用電量50千瓦時(含50千瓦時)以內的,電價為0.53元/千瓦時;超過50千瓦時的,超出部分的用電量,電價上調0.05元/千瓦時。請編寫程序計算電費。

輸入格式:
輸入在一行中給出某用戶的月用電量(單位:千瓦時)。

輸出格式:
在一行中輸出該用戶應支付的電費(元),結果保留兩位小數,格式如:“cost = 應付電費值”;若用電量小於0,則輸出"Invalid Value!"。

輸入樣例1:
10
輸出樣例1:
cost = 5.30
輸入樣例2:
100
輸出樣例2:
cost = 55.50
*/

#include <stdio.h>
int main()
{
    int n;
    double sum;
    scanf("%d",&n);
    if(n>50)
    {
        sum = 0.58*n-2.5;
        printf("cost = %.2f",sum);
    } else if(n<=50 && n>0)
    {
        sum = 0.53*n;
        printf("cost = %.2f",sum);
    } else if(n<0)
    {
        printf("Invalid Value!");
    }
    return 0;
}

/*習題2-3 求平方與倒數序列的部分和 (15 分)
本題要求對兩個正整數m和n(m≤n)編寫程序,計算序列和m
​2
​​ +1/m+(m+1)
​2
​​ +1/(m+1)+⋯+n
​2
​​ +1/n。

輸入格式:
輸入在一行中給出兩個正整數m和n(m≤n),其間以空格分開。

輸出格式:
在一行中按照“sum = S”的格式輸出部分和的值S,精確到小數點后六位。題目保證計算結果不超過雙精度范圍。

輸入樣例:
5 10
輸出樣例:
sum = 355.845635
*/

#include <stdio.h>
#include <math.h>
double boom(int m);
int main()
{
    int m,n,i;
    double sum=0;
    scanf("%d %d",&m,&n);
    for(i=m;i<=n;i++)
    {
        boom(i);
        sum = sum + boom(i);
    }
    printf("sum = %lf",sum);
    return 0;
}

double boom(int m)
{
    double num;
    num = pow(m,2)+1.0/m;
    return num;
}


/*
習題2-4 求交錯序列前N項和 (15 分)
本題要求編寫程序,計算交錯序列 1-2/3+3/5-4/7+5/9-6/11+... 的前N項之和。

輸入格式:
輸入在一行中給出一個正整數N。

輸出格式:
在一行中輸出部分和的值,結果保留三位小數。

輸入樣例:
5
輸出樣例:
0.917
*/

#include <stdio.h>
int main()
{
    int N,i;
    double sum = 0;
    scanf("%d",&N);
    for(i=1;i<=N;i++)
    {
        if(i%2!=0)
        {
            sum = sum + i/(2.0*i-1);
        }else{
            sum = sum - i/(2.0*i-1);
        }
    }
    printf("%.3f",sum);
}


/*
習題2-5 求平方根序列前N項和 (15 分)
本題要求編寫程序,計算平方根序列√
​1
​
​​ +√
​2
​
​​ +√
​3
​
​​ +⋯的前N項之和。可包含頭文件math.h,並調用sqrt函數求平方根。

輸入格式:
輸入在一行中給出一個正整數N。

輸出格式:
在一行中按照“sum = S”的格式輸出部分和的值S,精確到小數點后兩位。題目保證計算結果不超過雙精度范圍。

輸入樣例:
10
輸出樣例:
sum = 22.47
*/

#include <stdio.h>
#include <math.h>
int main()
{
    int n,i;
    double sum = 0;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        sum = sum + sqrt(i);
    }
    printf("sum = %.2f",sum);
    return 0;
}


/*
習題2-6 求階乘序列前N項和 (15 分)
本題要求編寫程序,計算序列 1!+2!+3!+⋯ 的前N項之和。

輸入格式:
輸入在一行中給出一個不超過12的正整數N。

輸出格式:
在一行中輸出整數結果。

輸入樣例:
5
輸出樣例:
153
*/

#include <stdio.h>
int jc(int n);
int main()
{
    int n,i,j;
    int alpha = 0;
    scanf("%d",&n);
    for(j=1;j<=n;j++)
    {
        alpha = alpha + jc(j);
    }
    printf("%d",alpha);
    return 0;
}

int jc(int n)
{
    int sum = 1;
    int i;
    for (i=1;i<=n;i++)
    {
        sum = sum * i;
    }
    return sum;
}


/*
練習3-2 計算符號函數的值 (10 分)
對於任一整數n,符號函數sign(n)的定義如下:



請編寫程序計算該函數對任一輸入整數的值。

輸入格式:
輸入在一行中給出整數n。

輸出格式:
在一行中按照格式“sign(n) = 函數值”輸出該整數n對應的函數值。

輸入樣例1:
10
輸出樣例1:
sign(10) = 1
輸入樣例2:
0
輸出樣例2:
sign(0) = 0
輸入樣例3:
-98
輸出樣例3:
sign(-98) = -1
*/

#include <stdio.h>
int main()
{
    int n;
    int num;
    scanf("%d",&n);
    if(n>0)
    {
        num = 1;
    }else if(n<0)
    {
        num = -1;
    }else{
        num =0;
    }
    printf("sign(%d) = %d",n,num);
    return 0;
}



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM