# 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); } ```