編程題
/*
練習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;
}