# 101
```
請撰寫一程式,讓使用者輸入一整數,並輸出該整數「加9」後的結果。
輸入說明 一個整數
輸出說明 輸入值加9
範例輸入 0
範例輸出 9
#include <stdio.h>
int main(){
int n;
scanf("%d", &n);
printf("%d", n+9);
}
//int putchar(int char) 列印字元
```
# 103
```
請撰寫一程式,讓使用者輸入三個整數,輸出計算總和的算式與平均值(四捨五入至小數點後第二位)。
輸入說明 三個整數
輸出說明 計算總和及平均值(四捨五入至小數點後第二位)
範例輸入
11
22
33
範例輸出
11+22+33=66
22.00
#include <stdio.h>
#define N 3
int main(){
int x[N], sum=0;
for (int i=0; i<N; ++i){
scanf("%d", &x[i]);
sum += x[i];
}
printf("%d+%d+%d=%d\n", x[0], x[1], x[2], sum);
printf("%.2f", sum/3.0);
}
```
# 105
```
請撰寫一程式,讓使用者輸入兩個正整數,計算兩個正整數的總和後開根號(四捨五入至小數點後第二位)。
提示:可使用sqrt函數進行開根號運算。
輸入說明 兩個正整數
輸出說明 兩個正整數相加後開根號(四捨五入至小數點後第二位)
範例輸入
100
75
範例輸出 result=13.23
#include <stdio.h>
#include <math.h>
int main(){
int a, b;
scanf("%d %d", &a, &b);
printf("result=%.2f", sqrt(a+b));
}
#include <stdio.h>
#include <math.h>
int main(){
int x, sum=0;
for (int i=0; i<2; ++i){
scanf("%d", &x);
sum += x;
}
printf("result=%.2f", sqrt(sum));
}
```
# 107
```
1. 請撰寫一程式,讓使用者輸入六個整數,將每三個整數列印在同一列。
2. 為了輸出美觀,每個整數給予10個欄位寬,並分別輸出靠右與靠左對齊。
輸入說明 六個整數
輸出說明 每三個整數輸出在同一列共分兩列,且每個整數給予10個欄位寬,分別輸出靠右與靠左對齊
範例輸入
10
100
100000
100000
100
10
範例輸出
10 100 100000
100000 100 10
10 100 100000
100000 100 10
程式輸出擷圖
下圖中的 黃色點 為 空格
#include <stdio.h>
#define N 6
int main(){
int x[N];
for (int i=0; i<N; ++i)
scanf("%d", &x[i]);
for (int i=0, j, P=10; i<4; ++i){
j = 3*(i % 2);
(1 - i / 2) ? : (P=-10);
printf("%*d %*d %*d\n", P, x[j], P, x[j+1], P, x[j+2]);
}
}
#include <stdio.h>
#define N 6
int main(){
int x[N];
for (int i=0; i<N; ++i)
scanf("%d", &x[i]);
for (int i=0, j, P; i<4; ++i){
j = 3*(i % 2);
i / 2 ? P=-10 : (P=10); //P=10 不能省略
printf("%*d %*d %*d\n", P, x[j], P, x[j+1], P, x[j+2]);
}
}
#include <stdio.h>
#define N 6
#define P 10
#define Q -10
int main(){
int x[N];
for (int i=0; i<N; ++i)
scanf("%d", &x[i]);
printf("%*d %*d %*d\n", P, x[0], P, x[1], P, x[2]);
printf("%*d %*d %*d\n", P, x[3], P, x[4], P, x[5]);
printf("%*d %*d %*d\n", Q, x[0], Q, x[1], Q, x[2]);
printf("%*d %*d %*d\n", Q, x[3], Q, x[4], Q, x[5]);
}
#include <stdio.h>
#define N 6
int main(){
int x[N];
for (int i=0; i<N; ++i)
scanf("%d", &x[i]);
printf("%10d %10d %10d\n", x[0], x[1], x[2]);
printf("%10d %10d %10d\n", x[3], x[4], x[5]);
printf("%-10d %-10d %-10d\n", x[0], x[1], x[2]);
printf("%-10d %-10d %-10d", x[3], x[4], x[5]);
}
```
# 109
```
請撰寫一程式,讓使用者輸入分數,判斷此分數是否及格(及格分數為60分以上),若及格,則輸出「pass」;若不及格,則輸出「fail」,再判斷此分數為奇數或偶數,若為奇數,則輸出「odd」;若為偶數,則輸出「even」,若輸入的分數不在0~100中,則輸出「error」。
輸入說明 一個整數
輸出說明 該分數pass或fail與該數為odd或even;若分數不在0~100中,輸出error
範例輸入1 90
範例輸出1
pass
even
範例輸入2 59
範例輸出2
fail
odd
範例輸入3 101
範例輸出3 error
#include <stdio.h>
int main(){
int x;
scanf("%d", &x);
if (x>100){
printf("%s", "error");
} else {
puts( x<60 ? "fail" : "pass");
printf("%s", x%2==0 ? "even" : "odd");
}
}
```
# 201 選擇敘述與迴圈
```
請撰寫一程式,讓使用者輸入一個整數,判斷該整數為奇數或偶數,若為奇數,則輸出「odd」;若為偶數,則輸出「even」。
輸入說明 一個整數
輸出說明 該整數為odd或even
範例輸入1 80
範例輸出1 even
範例輸入2 25
範例輸出2 odd
#include <stdio.h>
int main(){
int x;
scanf("%d", &x);
printf("%s", x%2==0 ? "even" : "odd");
}
```
# 203
```
請撰寫一程式,讓使用者輸入一個1~4之間的整數,若輸入1,則輸出「one」;若輸入2,則輸出「two」;若輸入3,則輸出「three」;若輸入4,則輸出「four」,若輸入1~4以外的數字,則輸出「error」。
輸入說明 一個整數
輸出說明 相對應的英文單字
範例輸入1 3
範例輸出1 three
範例輸入2 6
範例輸出2 error
#include <stdio.h>
int main(){
char *x[]={"error","one","two","three","four"};
int num;
scanf("%d", &num);
if (num>=1 && num<=4){
printf("%s", x[num]);
} else
printf("%s", x[0]);
}
```
# 205
```
請撰寫一程式,讓使用者輸入骰子點數,一顆骰子有1~6個點數,擲 10 次骰子,輸出擲骰點數出現的次數,以及不屬於骰子點數的錯誤次數。
輸入說明 十個整數
輸出說明 擲骰點數出現的次數,以及不屬於骰子點數的錯誤次數
範例輸入
1 2 2 5 8
3 1 2 6 7
範例輸出
number1:2
number2:3
number3:1
number4:0
number5:1
number6:1
error:2
#include <stdio.h>
int main(){
int x[7]={0};
int num, j=0;
for (int i=0; i<10; ++i){
scanf("%d", &num);
if (num>=1 && num<=6){
++x[num];
} else
++j;
}
for (int i=1; i<7; ++i)
printf("number%d:%d\n", i, x[i]);
printf("error:%d", j);
}
```
# 207
```
請撰寫一程式,讓使用者輸入大於1的整數,並輸出該數是否為質數。
輸入說明 大於1的整數
輸出說明 該數是否為質數
範例輸入1 2
範例輸出1 2 is a prime number
範例輸入2 6
範例輸出2 6 is not a prime number
#include <stdio.h>
#include <math.h>
//判別N是否為質數
int prime(int N){
if (N == 1)
return 0; //1 非質數
else if (N <= 3)
return 1; //2 和 3 為質數
else {
for (int i=2; i <= sqrt(N); i++)
if (N % i == 0)
return 0;
return 1;
}
}
int main(){
int a;
scanf("%d", &a);
printf("%d is%s a prime number", a, prime(a) ? "" : " not");
}
```
# 209
```
請撰寫一程式,讓使用者輸入整數0或1,若輸入0則以橫排優先的方式輸出五五乘法表;輸入1則以直排優先的方式輸出五五乘法表;否則輸出「error」。
提示1:輸出格式,請在每個乘法結果後方,加上Tab隔開。
提示2:換行方式請參考範例輸出。
輸入說明 0或1
輸出說明 橫排優先/直排優先的五五乘法表,或error
範例輸入1 0
範例輸出1
1 x 1 = 1 1 x 2 = 2 1 x 3 = 3 1 x 4 = 4 1 x 5 = 5
2 x 1 = 2 2 x 2 = 4 2 x 3 = 6 2 x 4 = 8 2 x 5 = 10
3 x 1 = 3 3 x 2 = 6 3 x 3 = 9 3 x 4 = 12 3 x 5 = 15
4 x 1 = 4 4 x 2 = 8 4 x 3 = 12 4 x 4 = 16 4 x 5 = 20
5 x 1 = 5 5 x 2 = 10 5 x 3 = 15 5 x 4 = 20 5 x 5 = 25
範例輸入2 1
範例輸出2
1 x 1 = 1 2 x 1 = 2 3 x 1 = 3 4 x 1 = 4 5 x 1 = 5
1 x 2 = 2 2 x 2 = 4 3 x 2 = 6 4 x 2 = 8 5 x 2 = 10
1 x 3 = 3 2 x 3 = 6 3 x 3 = 9 4 x 3 = 12 5 x 3 = 15
1 x 4 = 4 2 x 4 = 8 3 x 4 = 12 4 x 4 = 16 5 x 4 = 20
1 x 5 = 5 2 x 5 = 10 3 x 5 = 15 4 x 5 = 20 5 x 5 = 25
範例輸入3 2
範例輸出3 error
#include <stdio.h>
#define N 5
int main(){
int a;
scanf("%d", &a);
if (a==0 || a==1){
for (int i=1; i<=N; ++i){
for (int j=1; j<=N; ++j){
printf("%d x %d = %d ", a?j:i, a?i:j, i*j);
}
puts("");
}
} else
printf("%s", "error");
}
#include <stdio.h>
#define N 5
int main(){
int a;
scanf("%d", &a);
if (a==0){
for (int i=1; i<=N; ++i){
for (int j=1; j<=N; ++j){
printf("%d x %d = %d ", i, j, i*j);
}
puts("");
}
} else if (a==1){
for (int i=1; i<=N; ++i){
for (int j=1; j<=N; ++j){
printf("%d x %d = %d ", j, i, i*j);
}
puts("");
}
} else
printf("%s", "error");
}
```
# 301 函式與陣列
```
請撰寫一程式,包含名為compute()的函式,接收主程式傳遞的一個陣列,陣列中有兩個正整數,陣列索引值0代表一列要輸出的星星數;索引值1代表共輸出幾列,compute()輸出星星印出的結果並計算總共有幾顆星星回傳至主程式輸出。
輸入說明 兩個正整數
輸出說明 根據輸入值決定輸出多少星星與星星的總數
範例輸入 10 3
範例輸出
**********
**********
**********
30
#include <stdio.h>
int main(){
int a, b;
scanf("%d %d", &a, &b);
for (int i=1; i<=b; ++i){
for (int j=1; j<=a; ++j){
printf("%c", '*');
}
puts("");
}
printf("%d", a*b);
}
```
# 303
```
請撰寫一程式,包含名為compute()的函式,接收主程式傳遞的一個整數n(n>1),compute()判斷是否為質數,若為質數請回傳「1」,否則回傳「0」至主程式,並輸出該數是否為質數。
輸入說明 大於1的整數
輸出說明 該數是否為質數
範例輸入1 2
範例輸出1 2 is a prime number
範例輸入2 6
範例輸出2 6 is not a prime number
#include <stdio.h>
#include <math.h>
int compute(int N);
int main(){
int a;
scanf("%d", &a);
printf("%d is%s a prime number", a, compute(a) ? "" : " not");
}
//判別N是否為質數
int compute(int N){
if (N == 1) { //1 非質數
return 0;
} else if (N <= 3) { //2 和 3 為質數
return 1;
} else {
for (int i=2; i <= sqrt(N); i++) {
if (N % i == 0)
return 0;
}
return 1;
}
}
```
# 305
```
請撰寫一程式,包含名為compute()的函式,接收主程式傳遞的一個陣列,陣列中有三個整數,陣列中索引值1代表運算符號(+或*),若輸入1則索引值前後數值相加;輸入2則相乘,compute()計算運算結果並回傳至主程式輸出。
輸入說明 三個整數
輸出說明 根據輸入值輸出運算結果
範例輸入1
12
1
15
範例輸出1 27
範例輸入2
7
2
10
範例輸出2 70
#include <stdio.h>
#define N 3
int compute(int* x){
return (x[1] == 1) ? x[0]+x[2] : (x[0]*x[2]);
}
int main(){
int x[N];
for (int i=0; i<N; ++i)
scanf("%d", &x[i]);
printf("%d", compute(x));
}
```
# 307
```
請撰寫一程式,包含名為compute()的函式,接收主程式傳遞的一個陣列,陣列中包含五個整數,compute()判斷陣列的最大值回傳至主程式輸出。
輸入說明 五個整數
輸出說明 陣列的最大值
範例輸入 50 40 10 70 30
範例輸出 70
#include <stdio.h>
#define N 5
int compute(int *a, int n){
int max=*a;
for (int i=1; i<n; ++i)
if (*(a+i) > max)
max = a[i];
return max;
}
int main(){
int x[N];
for (int i=0; i<N; ++i)
scanf("%d", &x[i]);
printf("%d", compute(x, N));
}
#include <stdio.h>
#define N 5
void compute(int *a, int n, int *max){
for (int i=0; i<n; ++i)
if (*(a+i) > *max)
*max = a[i];
}
int main(){
int x[N], max=0;
for (int i=0; i<N; ++i)
scanf("%d", &x[i]);
compute(x, N, &max);
printf("%d", max);
}
#include <stdio.h>
#define N 5
int compute(int*, int, int*);
int main(){
int x[N];
for (int i=0; i<N; ++i)
scanf("%d", &x[i]);
int max=0;
compute(x, N, &max);
printf("%d", max);
}
int compute(int *a, int n, int *max){
int j=0;
for (int i=0; i<n; ++i){
if (*(a+i) > *max){
*max = a[i];
j=i;
}
}
return j;
}
```
# 309
```
請撰寫一程式,包含名為compute()的函式,接收主程式傳遞的一個陣列,陣列中有六個1~10之間的數字,陣列的前三個數字為分子;後三個數字為分母。第一個數字(分子)和第四個數字(分母)組成分數;第二個數字和第五個數字組成分數,以此類推,共三個分數,compute()判斷最小的分數值後回傳至主程式輸出。
輸入說明 六個1~10之間的整數
輸出說明 最小的分數值
範例輸入 1 4 8 5 10 7
範例輸出 0.200
#include <stdio.h>
#define N 6
void compute(float *a, int n, float *min){
for (int i=0; i<n; ++i)
if (*(a+i) / *(a+i+3) < *min)
*min = *(a+i) / *(a+i+3);
}
int main(){
float x[N], min=10;
for (int i=0; i<N; ++i)
scanf("%f", &x[i]);
compute(x, N/2, &min);
printf("%.3f", min);
}
#include <stdio.h>
#define N 6
int compute(float*, int, float*);
int main(){
float x[N];
for (int i=0; i<N; ++i){
scanf("%f", &x[i]);
}
float min=10;
compute(x, N/2, &min);
printf("%.3f", min);
}
int compute(float *a, int n, float *min){
int j=0;
for (int i=0; i<n; ++i){
if (*(a+i) / *(a+i+3) < *min){
*min = *(a+i) / *(a+i+3);
j=i;
}
}
return j;
}
```
# 401 字串與檔案處理
```
請撰寫一程式,讓使用者輸入兩個長度不超過10字元的字串(無空白字元),分別輸出兩字串的長度以及兩字串的連結結果。
輸入說明 兩個長度不超過10字元的字串(無空白字元)
輸出說明 兩字串長度及連結結果
範例輸入 abcd eeeee
範例輸出
4
5
abcdeeeee
#include <stdio.h>
#include <string.h>
int main(){
char x[2][10];
for (int i=0; i<2; ++i){
scanf("%s", x[i]);
printf("%lu\n", strlen(x[i]));
}
printf("%s", strcat(x[0],x[1]));
}
```
# 403
```
請撰寫一程式,讓使用者輸入英文字串(無空白字元),字串長度不超過100字元,將字串中小寫字母轉成大寫字母、大寫字母轉成小寫字母後輸出。
輸入說明 英文字串(無空白字元)
輸出說明 此字串大小寫轉換
範例輸入 ABcdefGH
範例輸出 abCDEFgh
#include <stdio.h>
#include <string.h>
int main(){
char x[100];
scanf("%99s", x);
for (int i=0; i<strlen(x); ++i)
(x[i]>96) ? x[i]-=32 : (x[i]+=32);
printf("%s", x);
}
#include <stdio.h>
#include <string.h>
#define N 100
int main(){
char x[N];
scanf("%99s", x);
for (int i=0; i<strlen(x); ++i){
if (x[i]>96)
x[i]-=32;
else
x[i]+=32;
}
printf("%s", x);
}
```
# 405
```
請撰寫一程式,讓使用者輸入三個0~9的整數,並讀取read.txt檔案內容,read.txt檔案中包含三個英文單字,若第一個輸入值為數字n,則將第一個單字的前n個字元以數字n取代,以此類推,最後輸出修改後的三個單字。
輸入說明 三個0~9的整數,並讀取read.txt檔案內容
輸出說明 修改後的三個單字
範例輸入 5 0 3
範例輸出
55555verance
determination
333istence
#include <stdio.h>
#include <string.h>
#define M 20
int main(){
FILE *fin = fopen("read.txt", "r");
char buf[M];
int x;
for (int i=0; i<3; ++i){
scanf("%d", &x);
fgets(buf, M, fin); //從fin最多取M個字元到buf
//https://www.delftstack.com/zh-tw/howto/c/convert-int-to-char/
memset(buf, x+'0', x); //取代
printf("%s", buf);
}
fclose(fin);
}
#include <stdio.h>
//#include <string.h>
#define N 3
#define M 20
int main(){
FILE *fin = fopen("read.txt", "r");
char buf[M];
int x[N];
for (int i=0; i<N; ++i){
scanf("%d", &x[i]);
fgets(buf, M, fin); //從fin最多取M個字元到buf
//https://www.delftstack.com/zh-tw/howto/c/convert-int-to-char/
for (int j=0; j<x[i]; ++j)
buf[j] = x[i]+'0'; //數字轉成字元
printf("%s", buf);
//memset(buf,0,M);
}
fclose(fin);
}
```