<PAT>浙大版《C語言程式設計(第3版)》題目集 (練習2-1到練習2-18)
浙大版《C語言程式設計(第3版)》題目集
練習2-1 Programming in C is fun!
本題要求編寫程式,輸出一個短句“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 輸出倒三角圖案 **
本題要求編寫程式,輸出指定的由“*”組成的倒三角圖案。
本題目沒有輸入。
輸出格式:
按照下列格式輸出由“*”組成的倒三角圖案。
* * * * * * * * * *
#include <stdio.h>
int main()
{
printf("* * * *\n");
printf(" * * *\n");
printf(" * *\n");
printf(" *\n");
return 0;
}
練習2-4 溫度轉換
本題要求編寫程式,計算華氏溫度150°F對應的攝氏溫度。計算公式:C=5×(F−32)/9,式中:C表示攝氏溫度,F表示華氏溫度,輸出資料要求為整型。
本題目沒有輸入。
輸出格式:
按照下列格式輸出
fahr = 150, celsius = 計算所得攝氏溫度的整數值
#include <stdio.h>
int main()
{
int fahr=150;
int celsius;
celsius = 5 * (fahr - 32)/9;
printf("fahr = 150, celsius = %d",celsius);
return 0;
}
練習2-6 計算物體自由下落的距離
一個物體從100米的高空自由落下。編寫程式,求它在前3秒內下落的垂直距離。設重力加速度為10米/秒2。
本題目沒有輸入。
輸出格式:
按照下列格式輸出
height = 垂直距離值
結果保留2位小數。
#include <stdio.h>
int main()
{
float height;
int t = 3;
height = 5 * t * t;
printf("height = %.2f",height);
return 0;
}
練習2-8 計算攝氏溫度
給定一個華氏溫度F,本題要求編寫程式,計算對應的攝氏溫度C。計算公式:C=5×(F−32)/9。題目保證輸入與輸出均在整型範圍內。
輸入格式:
輸入在一行中給出一個華氏溫度。
輸出格式:
在一行中按照格式“Celsius = C”輸出對應的攝氏溫度C的整數值。
輸入樣例:
150
輸出樣例:
Celsius = 65
#include <stdio.h>
int main()
{
int F,C;
scanf("%d",&F);
C = 5*(F-32)/9;
printf("Celsius = %d",C);
return 0;
}
練習2-9 整數四則運算
本題要求編寫程式,計算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]
本題目要求計算下列分段函式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()
{
float x;
scanf("%f",&x);
float result;
if (x != 0)
{
result = 1/x;
}
else
{
result = 0;
}
printf("f(%.1f) = %.1f",x,result);
return 0;
}
練習2-11 計算分段函式[2]
本題目要求計算下列分段函式f(x)的值:
注:可在標頭檔案中包含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 = sqrt(x);
}
else if(x<= 0)
{
result = pow(x+1,2) + 2 *x+ 1/x;
}
printf("f(%.2f) = %.2f",x,result);
return 0;
}
pow函式在C語言中的應用:
1.標頭檔案有#include <math.h>
2.pow(x,y),其中x,y為double型別。
3.x為底數,y為指數。
**練習2-12 輸出華氏-攝氏溫度轉換表 **
輸入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;
scanf("%d %d",&lower,&upper);
int fahr;
double celsius;
if (lower > upper)
{
printf("Invalid.");
}
else
{
printf("fahr celsius\n");
for(lower;lower<=upper;lower+=2)
{
fahr = lower;
celsius = 5 * (1.0*fahr-32)/9; //int 變double 記得變精度,前面乘1.0
printf("%d%6.1f\n",fahr,celsius);
}
}
return 0;
}
練習2-13 求N分之一序列前N項和
本題要求編寫程式,計算序列 1 + 1/2 + 1/3 + … 的前N項之和。
輸入格式:
輸入在一行中給出一個正整數N。
輸出格式:
在一行中按照“sum = S”的格式輸出部分和的值S,精確到小數點後6位。題目保證計算結果不超過雙精度範圍。
輸入樣例:
6
輸出樣例:
sum = 2.450000
#include <stdio.h>
int main()
{
double sum=0;
int n;
scanf("%d",&n);
for (int i=1;i<=n;i++)
{
sum += 1.0/i;
}
printf("sum = %.6f",sum);
return 0;
}
練習2-14 求奇數分之一序列前N項和
本題要求編寫程式,計算序列 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 += 1.0/(2*i-1);
}
printf("sum = %.6f",sum);
return 0;
}
練習2-15 求簡單交錯序列前N項和
本題要求編寫程式,計算序列 1 - 1/4 + 1/7 - 1/10 + … 的前N項之和。
輸入格式:
輸入在一行中給出一個正整數N。
輸出格式:
在一行中按照“sum = S”的格式輸出部分和的值S,精確到小數點後三位。題目保證計算結果不超過雙精度範圍。
輸入樣例:
10
輸出樣例:
sum = 0.819
#include <stdio.h>
int main(void)
{
//-2n與2n+1分開
int n,space=1;//第二個是間隔
double sum=0;
double result;//存放每一個項
int sign = 1;//標記正負號用的
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
result = 1.0*sign / space;
sum += result;
sign = -sign;
space += 3;
}
printf("sum = %.3f",sum);
return 0;
}
**練習2-17 生成3的乘方表 **
輸入一個非負整數n,生成一張3的乘方表,輸出30~3n的值。可呼叫冪函式計算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()
{
double n;
int result;
scanf("%lf",&n);
for(double i=0;i<=n;i++)
{
result = pow(3,i);
printf("pow(3,%.f) = %d\n",i,result);
}
return 0;
}
練習2-18 求組合數
本題要求編寫程式,根據公式Cnm=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>
//用一個fact函式作階乘
double fact(int n)
{
double temp = 1;//0!=1
for(int i=n;i>0;i--)
{
temp = temp *i;
}
return temp;
}
int main()
{
int m,n;
double result=0;
scanf("%d %d",&m,&n);
result = fact(n)/(fact(m)*fact(n-m));
printf("result = %.0f\n",result);
return 0;
}