第1章 第一個(gè)C程序
第2章 C語(yǔ)言基礎(chǔ)
第3章 變量和數(shù)據(jù)類型
第4章 順序結(jié)構(gòu)程序設(shè)計(jì)
第5章 條件結(jié)構(gòu)程序設(shè)計(jì)
第6章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)
第7章 數(shù)組
第8章 指針
第9章 函數(shù)
第10章 結(jié)構(gòu)型、共用型、枚舉型及用戶自定義型數(shù)據(jù)
第12章 文件
第14章 預(yù)處理宏命令
第1章 第一個(gè)C程序
習(xí)題答案
一、選擇題
- C
二、填空題
- 補(bǔ)全下面的程序,讓其完整。
#include<stdio.h> void main() { int a=1; printf("%d\n", a); }
三、編程題
- 參照例題,編寫一個(gè)程序輸出如下所示的一個(gè)倒三角形。
********************* ***************** ************* ********* ***** *#include<stdio.h> void main() { printf("*********************\n"); printf(" ***************** \n"); printf(" ************* \n"); printf(" ********* \n"); printf(" ***** \n"); printf(" * \n"); } - 從鍵盤輸入一個(gè)數(shù),輸出該數(shù)的相反數(shù)。
#include<stdio.h> void main() { int x = 0; scanf("%d", &x); if (x < 0) { x = -x; } printf("%d\n", x); } - 編寫一個(gè)程序,實(shí)現(xiàn)兩個(gè)數(shù)相加并將結(jié)果輸出至屏幕。
#include<stdio.h> void main() { int x, y, z; scanf("%d%d", &x, &y); z = x + y; printf("%d\n", z); } - 從鍵盤輸入一個(gè)數(shù),判斷其是否能被 3 和 5 整除,若能整除則輸出“yes”,否則輸出“no”。
#include<stdio.h> void main() { int x = 0; scanf("%d", &x); if (x % 3 == 0 && x % 5 == 0) { printf("yes\n"); } else { printf("no\n"); } } - 從鍵盤輸入一個(gè)數(shù),通過 printf() 函數(shù)輸出該數(shù)的 2 倍數(shù)。
#include<stdio.h> void main() { int x = 0; scanf("%d", &x); printf("%d\n", 2 * x); } - 從鍵盤輸入兩個(gè)數(shù),求這兩個(gè)數(shù)的乘積并輸出至屏幕。
#include<stdio.h> void main() { int x, y, z; scanf("%d%d", &x, &y); z = x * y; printf("%d\n", z); } - 編寫一個(gè)程序,判斷一個(gè)數(shù)是否為偶數(shù)。
#include<stdio.h> void main() { int x = 0; scanf("%d", &x); if (x % 2 == 0) { printf("該數(shù)是偶數(shù)\n"); } else { printf("該數(shù)是奇數(shù)\n"); } }
第2章 C語(yǔ)言基礎(chǔ)
C語(yǔ)言特點(diǎn)
- 簡(jiǎn)單、方便靈活
- 9中控制語(yǔ)句
- 32個(gè)關(guān)鍵字
- 運(yùn)算符種類豐富
- 34種運(yùn)算符
- 數(shù)據(jù)結(jié)構(gòu)類型豐富
- 7種類型
- 繪圖功能強(qiáng)大
- 結(jié)構(gòu)式語(yǔ)言
- 對(duì)語(yǔ)法限制不嚴(yán)格
- 生成代碼質(zhì)量高、執(zhí)行效率高
- 可移植性好
C程序編譯執(zhí)行過程
- 編輯
- 編譯
- 詞法分析
- 語(yǔ)法分析
- 語(yǔ)義分析
- 中間代碼生成
- 中間代碼優(yōu)化
- 目標(biāo)代碼生成
- 鏈接
- 執(zhí)行
習(xí)題答案
一、填空題
- 5,6
- 4,4
- 4,3
- 9
二、編程題
- 求1~100的和。
#include<stdio.h> void main() { int sum = 0; sum = (float)(1 + 100) / 2 * 100; printf("%d\n", sum); } - 從鍵盤輸入兩個(gè)數(shù),求出這兩個(gè)數(shù)中的小者并將結(jié)果輸出,要求比較操作單獨(dú)編寫一個(gè)函數(shù)。
#include<stdio.h> int min(int x, int y) { int z; if (x > y) { z = y; } else { z = x; } return z; } void main() { int x, y; int z = 0; scanf("%d%d", &x, &y); z = min(x, y); printf("%d\n", z); } - 從鍵盤輸入兩個(gè)數(shù),將這兩個(gè)數(shù)交換后輸出。
#include<stdio.h> void main() { int x, y; int z = 0; scanf("%d%d", &x, &y); z = x; x = y; y = z; printf("%d %d\n", x, y); } - 從鍵盤輸入一個(gè)數(shù),編寫程序輸出該數(shù)的絕對(duì)值至屏幕。
#include<stdio.h> #include<math.h> void main() { int x; scanf("%d", &x); printf("%d\n", (int)fabs(x)); } - 編寫程序,從鍵盤輸入兩個(gè)數(shù),求出其中的大者。
#include<stdio.h> void main() { int x, y; int max; scanf("%d%d", &x, &y); if (x > y) { max = x; } else { max = y; } printf("%d\n", max); } - 編寫程序,求 1~100 中的素?cái)?shù)。
#include<stdio.h> void main() { for (int i = 1; i < 100; i++) { int count = 0; for (int j = 1; j <= i; j++) { if (i % j == 0) { count++; } } if (count < 3) { printf("%d\n", i); } } } - 編寫程序,從鍵盤輸入一個(gè)數(shù)并求其階乘值。
#include<stdio.h> void main() { int x = 0; int y = 1; scanf("%d", &x); for (; x >= 1; x--) { y *= x; } printf("%d\n", y); } - 編寫程序,求 1~100 中所有奇數(shù)的和。
#include<stdio.h> void main() { int x = 0; for (int i = 1; i <= 100; i++) { if (i % 2 != 0) { x += i; } } printf("%d\n", x); } - 編寫程序,要求從鍵盤鍵入n, 求 1/3+2/4+3/5+...+n-2/n的值。
#include<stdio.h> void main() { int n = 0; double sum = 0; scanf("%d", &n); for (int i = 3; i <= n; i++) { sum += (double)(i - 2) / i; } printf("%lf\n", sum); }
第3章 變量和數(shù)據(jù)類型
C語(yǔ)言的基本數(shù)據(jù)類型
- 基本類型
- 整型
- 短整型(short)
- 整型(int)
- 長(zhǎng)整型(long)
- 浮點(diǎn)型
- 單精度浮點(diǎn)(float)
- 雙精度浮點(diǎn)(double)
- 字符型(char)
- 整型
- 構(gòu)造類型
- 數(shù)組
- 結(jié)構(gòu)體(struct)
- 共用體(union)
- 枚舉類型(enum)
- 指針類型
- 空類型(void)
習(xí)題答案
一、選擇題
- B
- B
- B
二、填空題
- (1)10 (2)10 (3)20 (4)0 (5)100
- z=0,t=1074087854
- 備注:一定要用正確的格式控制符輸出對(duì)應(yīng)的數(shù)據(jù)類型,否則會(huì)輸出一個(gè)垃圾值,這是一個(gè)悲傷的故事。。。
- 34,40,30,39
- 97,98
- 7,7
- 32,45
- 5,14
- 6,6
- 4,5,5,5
- 11,8
- 57,9
- 2,1,c,g
三、編程題
- 從鍵盤輸入 3 個(gè)數(shù),判斷其是否能構(gòu)成直角三角形,若能則輸出該直角三角形的面積,否則輸出不能構(gòu)成三角形的提示信息。
#include<stdio.h> void main() { double a, b, c; // 三角形的三條邊 double area = 0; // 三角形的面積 printf("請(qǐng)輸入三角形的三邊的邊長(zhǎng):"); scanf("%lf%lf%lf", &a, &b, &c); // 判斷是否能構(gòu)成直角三角形 if (a * a + b * b == c * c) { area = 1.0 / 2 * a * b; printf("直角三角形的面積是:%lf\n", area); } else if (a * a + c * c == b * b) { area = 1.0 / 2 * a * c; printf("直角三角形的面積是:%lf\n", area); } else if (b * b + c * c == a * a) { area = 1.0 / 2 * b * c; printf("直角三角形的面積是:%lf\n", area); } else { printf("不能構(gòu)成直角三角形\n"); } } - 編寫一個(gè)程序,輸入一個(gè)華氏溫度,按照公式 C=5/9*(F-32) 輸出攝氏溫度。
#include<stdio.h> void main() { double f = 0; double c = 0; printf("請(qǐng)輸入華氏溫度值:"); scanf("%lf", &f); c = (double)5 / 9 * (f - 32); printf("對(duì)應(yīng)的攝氏溫度是:%lf\n", c); } - 輸入一個(gè)年份,判斷該年是否為閏年,若為閏年則輸出“yes”,否則輸出“no”。
#include<stdio.h> void main() { int year = 0; scanf("%d", &year); if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) { printf("yes\n"); } else { printf("no\n"); } } - 從鍵盤輸入一個(gè)學(xué)生的5門科目成績(jī),計(jì)算其平均值并輸出。
#include<stdio.h> void main() { int score1 = 0; int score2 = 0; int score3 = 0; int score4 = 0; int score5 = 0; double average = 0; printf("請(qǐng)輸入5門課程的成績(jī):"); scanf("%d%d%d%d%d", &score1, &score2, &score3, &score4, &score5); average = (double)(score1 + score2 + score3 + score4 + score5) / 5; printf("平均成績(jī)是:%.2lf\n", average); } - 從鍵盤輸入3個(gè)數(shù),輸出其中的最大者。
#include<stdio.h> void main() { int a = 0, b = 0, c = 0; int max = 0; printf("請(qǐng)輸入3個(gè)整數(shù):"); scanf("%d%d%d", &a, &b, &c); max = a; if (max < b) { max = b; } if (max < c) { max = c; } printf("最大者是:%d\n", max); } - 從鍵盤輸入3個(gè)數(shù),將其從小到大排序后輸出。
#include<stdio.h> #define ARR_LEN 3 void main() { int arr[ARR_LEN] = { 0 }; int temp = 0; // 讀入三個(gè)數(shù) for (int i = 0; i < ARR_LEN; i++) { printf("請(qǐng)輸入第%d個(gè)數(shù)的值:", i + 1); scanf("%d", &arr[i]); } // 排序 for (int i = 0; i < ARR_LEN - 1; i++) { for (int j = 0; j < ARR_LEN - 1 - i; j++) { if (arr[j] > arr[j + 1]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } // 輸出結(jié)果 for (int i = 0; i < ARR_LEN; i++) { printf("arr[%d] = %d\n", i, arr[i]); } } - 編寫程序,輸出1~1000之間的偶數(shù)。
#include<stdio.h> #define ARR_LEN 3 void main() { for (int i = 1; i <= 1000; i++) { if (i % 2 == 0) { printf("%4d ", i); } // 十個(gè)數(shù)字一行 if (i % 20 == 0) { printf("\n"); } } } - 從鍵盤輸入一串字符,輸出至屏幕。
#include<stdio.h> #define ARR_LEN 3 void main() { char arr[100] = "\0"; scanf("%s", arr); printf("%s\n", arr); } - 編寫一個(gè)程序,輸入半徑,求圓的面積和體積。
#include<stdio.h> #define PI 3.14 void main() { double r = 0; printf("請(qǐng)輸入圓的半徑:"); scanf("%lf", &r); printf("圓的周長(zhǎng):%.2lf\n", 2 * PI * r); printf("圓的面積:%.2lf\n", PI * r * r); } - 從鍵盤輸入兩個(gè)數(shù),對(duì)其進(jìn)行加減乘除操作并將結(jié)果輸出至屏幕。
#include<stdio.h> void main() { int a = 0; int b = 0; printf("請(qǐng)輸入兩個(gè)整數(shù):"); 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); }
第4章 順序結(jié)構(gòu)程序設(shè)計(jì)
常用輸入輸出函數(shù)
- scanf()
- printf()
- getchar():用戶輸入的數(shù)據(jù)會(huì)被放入鍵盤緩沖區(qū),當(dāng)按下回車鍵時(shí),系統(tǒng)就會(huì)從緩沖區(qū)中每次讀入一個(gè)字符。
- putchar()
習(xí)題答案
一、選擇題
- A
- C
- C
- B
- B
- D
- A
- A
- B
- C 注意:printf()函數(shù)中的表達(dá)式時(shí)按照從右往左的順序進(jìn)行計(jì)算的。
二、填空題
- 0,3
- 10
- 0
- 如下:
x=35,y=32 x=#,y= c=104,d=115 m=0,n=0 - 5,1
- a
- 456,78
- 80
- h,104
- a,g
- 12,7
- a=5,b=5
- a,,
- e
- a,g
三、編程題
- 計(jì)算一元二次方程的 x2+4x+1=0 的根,結(jié)果保留兩位小數(shù)。
#include<stdio.h> #include<math.h> void main() { double x1, x2; x1 = (-4 - sqrt(4 * 4 - 4 * 1 * 1)) / (2 * 1); x2 = (-4 + sqrt(4 * 4 - 4 * 1 * 1)) / (2 * 1); printf("x1 = %.2lf, x2 = %.2lf\n", x1, x2); } - 已知三角形的三邊,計(jì)算三角形的面積,結(jié)果保留3位小數(shù)。
#include<stdio.h> #include<math.h> void main() { float a = 0.0f; float b = 0.0f; float c = 0.0f; float s = 0.0f; float area = 0.0f; printf("請(qǐng)輸入三角形的三邊:"); scanf("%f%f%f", &a, &b, &c); s = (float)1 / 2 * (a + b + c); area = (float)sqrt(s * (s-a) * (s - b) * (s - c)); printf("面積位:%.2f\n", area); } - 已知一個(gè)圓的周長(zhǎng),編寫一個(gè)程序求其面積。要求從鍵盤輸入圓的周長(zhǎng),將計(jì)算得出的面積輸出至屏幕。
#include<stdio.h> #include<math.h> void main() { double length = 0.0; double r = 0.0; double area = 0.0; printf("請(qǐng)輸入圓的周長(zhǎng):"); scanf("%lf", &length); r = length / 2 / 3.14; area = 3.14 * r * r; printf("面積位:%lf\n", area); } - 編寫一個(gè)程序,從鍵盤輸入一個(gè)字符,實(shí)現(xiàn)輸出臨近該字符的5個(gè)字符(包括該字符,并以該字符為中心)。
#include<stdio.h> void main() { char c = '\0'; c = getchar(); printf("%c%c%c%c%c\n", c -2, c - 1, c, c + 1, c + 2); } - 編寫一個(gè)程序,從鍵盤輸入一個(gè)梯形的上底、下底和高,求其面積并將結(jié)果輸出至屏幕。
#include<stdio.h> void main() { double top_len = 0.0; double bottom_len = 0.0; double height = 0.0; double area = 0.0; printf("請(qǐng)輸入梯形的上底下底和高:"); scanf("%lf%lf%lf", &top_len, &bottom_len, &height); area = (double)1 / 2 * (top_len + bottom_len) * height; printf("面積為:%.2lf\n", area); } - 從鍵盤輸入一串字符,從該字符串中統(tǒng)計(jì)字符a的個(gè)數(shù)。
#include<stdio.h> void main() { int count = 0; char c = '\0'; while ((c = getchar()) != '\n') { if (c == 'a') { count++; } } printf("字母a出現(xiàn)的次數(shù)為:%d\n", count); } - 從鍵盤輸入3個(gè)數(shù),編寫一個(gè)程序計(jì)算其總和及平均值。
#include<stdio.h> void main() { int a = 0; int b = 0; int c = 0; int sum = 0; float average = 0.0f; printf("請(qǐng)輸入三個(gè)整數(shù):"); scanf("%d%d%d", &a, &b, &c); sum = a + b + c; average = (float)sum / 3; printf("總和是:%d, 平均值是:%.2f\n", sum , average); } - 編寫程序?qū)r(shí)間轉(zhuǎn)化為秒后輸出,例如8時(shí)20分45秒轉(zhuǎn)化過程為83600+2060+45。
#include<stdio.h> void main() { int hour = 0; int minute = 0; int second = 0; int result = 0; printf("請(qǐng)輸入時(shí)分秒:"); scanf("%d%d%d", &hour, &minute, &second); result = hour * 3600 + minute * 60 + second; printf("等價(jià)于%d秒\n", result); } - 從鍵盤輸入兩個(gè)數(shù),交換兩個(gè)數(shù)的值,再輸出至屏幕。
#include<stdio.h> void main() { int a = 0; int b = 0; int temp = 0; printf("請(qǐng)輸入兩個(gè)整數(shù):"); scanf("%d%d", &a, &b); printf("交換之前的值是:a=%d, b=%d\n", a, b); temp = a; a = b; b = temp; printf("交換后的值是:a=%d, b=%d\n", a, b); } - 現(xiàn)有函數(shù) y=5x+3,從鍵盤輸入一個(gè)數(shù),輸出對(duì)應(yīng)的 y 值。
#include<stdio.h> void main() { int x = 0; int y = 0; printf("請(qǐng)輸入x的值:"); scanf("%d", &x); y = 5 * x + 3; printf("y的值是:%d\n", y); } - 從鍵盤輸入一個(gè)小寫字母,要求將其轉(zhuǎn)換為大寫字母后輸出。
#include<stdio.h> void main() { char c = '\0'; c = getchar(); if ('a' <= c && c <= 'z') { c -= 32; printf("對(duì)應(yīng)的大寫字母為:%c\n", c); } else { printf("輸入不合法\n"); } }
第5章 條件結(jié)構(gòu)程序設(shè)計(jì)
分類
- if-else
- switch-case
習(xí)題答案
一、選擇題
- D
- C
- C
- D
- C
- D
- D
- B
- B
- B
- A
- B
- B
- A
- C
二、填空題
- second
- 2,3,2
- 1,2
- 2
- 0,1,1
-
&x,x > 0,%d,y -
a,1 <= a && a <= 7,case 5,else - 20,30
- zerofive
- 0
- 9或3
- 1,1,1
- 5
- 5
- 11
- 5
- 1
- 7
- $$16
三、編程題
- 輸入三個(gè)數(shù),輸出其中的最大數(shù)和最小數(shù)。
#include<stdio.h> void main() { int a = 0; int b = 0; int c = 0; int max = 0; int min = 0; printf("請(qǐng)輸入三個(gè)整數(shù):"); scanf("%d%d%d", &a, &b, &c); // 計(jì)算最大數(shù) max = a; if (max < b) { max = b; } if (max < c) { max = c; } // 計(jì)算最小數(shù) min = a; if (min > b) { min = b; } if (min > c) { min = c; } // 輸出最大數(shù)和最小數(shù) printf("最大數(shù)是:%d\n最小數(shù)是:%d\n", max, min); } - 用*號(hào)輸出字母C的團(tuán)。
#include<stdio.h> void main() { printf("*****\n"); printf("*\n"); printf("*\n"); printf("*\n"); printf("*****\n"); } - 某班進(jìn)行學(xué)習(xí)成績(jī)?cè)u(píng)估,若學(xué)習(xí)成績(jī)大于或等于90分的同學(xué)用A表示,60~89分之間的同學(xué)用B表示,60分以下的同學(xué)用C表示。利用條件運(yùn)算符的嵌套來完成此題。
#include<stdio.h> void main() { int score = 0; printf("請(qǐng)輸入成績(jī):"); scanf("%d", &score); if (score >= 90) { printf("A"); } else if (score >= 60) { printf("B"); } else { printf("C"); } } - 輸入一個(gè)年份,判斷該年是否為閏年。
#include<stdio.h> void main() { int year = 0; printf("請(qǐng)輸入年份:"); scanf("%d", &year); if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0)) { printf("%d年是閏年\n", year); } else { printf("%d年不是閏年\n", year); } } - 輸入某年某月某日,判斷并輸出這一天是這一年的第幾天。
#include<stdio.h> #include<stdbool.h> void main() { int year = 0; int month = 0; int day = 0; int sum = 0; bool flag = false; printf("請(qǐng)輸入年月日:"); scanf("%d%d%d", &year, &month, &day); switch (month) { case 1: sum = 0; break; case 2: sum = 31; break; case 3: sum = 50; break; case 4: sum = 90; break; case 5: sum = 120; break; case 6: sum = 151; break; case 7: sum = 181; break; case 8: sum = 212; break; case 9: sum = 243; break; case 10: sum = 273; break; case 11: sum = 304; break; case 12: sum = 334; break; default: break; } sum += day; if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0)) { flag = true; } if (flag && month > 2) { sum += 1; } printf("對(duì)應(yīng)的天數(shù)是:%d\n", sum); } - 輸入一個(gè)數(shù),判斷其為奇數(shù)還是偶數(shù)。
#include<stdio.h> int main() { int a = 0; printf("請(qǐng)輸入一個(gè)整數(shù):"); scanf("%d", &a); // 判斷是否是偶數(shù) if (a % 2 == 0) { printf("%d 是偶數(shù)\n", a); } else { printf("%d 是奇數(shù)\n", a); } return 0; } - 從鍵盤輸入兩個(gè)數(shù),調(diào)換這兩個(gè)數(shù)的值。
#include<stdio.h> int main() { int a = 0; int b = 0; int temp = 0; // 從鍵盤輸入兩個(gè)整數(shù) printf("請(qǐng)輸入兩個(gè)整數(shù):"); scanf("%d%d", &a, &b); // 輸出交換前的值 printf("交換前:a=%d, b=%d\n", a, b); // 交換這兩個(gè)數(shù) temp = a; a = b; b = temp; // 輸出交換后的結(jié)果 printf("交換后:a=%d, b=%d\n", a, b); return 0; } - 輸入一個(gè)不超過5位的數(shù)字,求:(1)求其是幾位數(shù);(2)分別輸出這幾位數(shù)字;(3)把這幾位數(shù)分別加1再輸出。
#include<stdio.h> int main() { long a = 0; // 輸入的數(shù)字 int count = 0; // 數(shù)字的位數(shù) long temp = 0; // 用于保存輸入的數(shù)字的副本 int i = 0; // 循環(huán)變量 // 輸入一個(gè)不超過5位的數(shù)字 printf("請(qǐng)輸入一個(gè)不超過5位的整數(shù):"); scanf("%ld", &a); // 求該數(shù)是幾位數(shù)并輸出至屏幕 if (a > 9999) { count = 5; } else if (a > 999) { count = 4; } else if (a > 99) { count = 3; } else if (a > 9) { count = 2; } else { count = 1; } printf("該數(shù)是%d位數(shù)\n", count); // 分別輸出各個(gè)位的數(shù)字 printf("\n該數(shù)的各個(gè)位的數(shù)字是:\n"); i = count; temp = a; while (i) { printf("%d 位數(shù)字是:%d\n", i, temp % 10); temp /= 10; i--; } // 各個(gè)位的數(shù)字加1后輸出 printf("\n該數(shù)的各個(gè)位的數(shù)字加1是:\n"); i = count; temp = a; while (i) { printf("%d 位數(shù)字是:%d\n", i, temp % 10 + 1); temp /= 10; i--; } return 0; } - 編寫一個(gè)程序輸入一個(gè)學(xué)生三次的成績(jī),并判斷該學(xué)生三次是否都及格。若不及格則輸出“有不及格科目”,若都及格則輸出三次的平均成績(jī)。
#include<stdio.h> int main() { int a = 0; int b = 0; int c = 0; float average = 0.0f; // 輸入三門成績(jī) printf("請(qǐng)輸入三門課程的成績(jī):"); scanf("%d%d%d", &a, &b, &c); // 判斷是否存在不及格的科目 if (a >= 60 && b >= 60 && c >= 60) { average = (float)(a + b + c) / 3; printf("三門課程的平均分是:%.2f\n", average); } else { printf("存在不及格的科目\n"); } return 0; } - 輸出特殊圖案,把下面代碼在C環(huán)境中運(yùn)行看看,Very Beautiful!
#include<stdio.h> int main() { char a = 176, b = 219; printf("%c%c%c%c%c\n", b, a, a, a, b); printf("%c%c%c%c%c\n", a, b, a, b, a); printf("%c%c%c%c%c\n", a, a, b, a, a); printf("%c%c%c%c%c\n", a, b, a, b, a); printf("%c%c%c%c%c\n", b, a, a, a, b); return 0; }
第6章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)
分類
- for
- while
- do-while
習(xí)題答案
一、選擇題
- B
- B
- D
- B
- B
- B
- A
- B
- B
- A
二、填空題
- 12
-
main,int,%d - 4,8
- 0,3
-
x >= 0,max < x,%d,%d - 7
- 3
- 運(yùn)行結(jié)果是:
***** **** *** ** * - ***27
- 1
- 6
- 1,2
- 4
- 18
- 1.283333
- 27
- 運(yùn)行結(jié)果為:
# ## ### - 24
三、編程題
- 編寫一個(gè)程序,求出1000以內(nèi)的完全數(shù)。
#include<stdio.h> int main() { int sum = 0; // 存放因子之和 for (int i = 1; i < 1000; i++) { sum = 0; for (int j = 1; j < i; j++) { if (i % j == 0) { sum += j; } } if (sum == i) { printf("%3d\n", i); } } return 0; } - 百馬百擔(dān)問題:現(xiàn)有100匹馬,100擔(dān)貨,大馬駝3擔(dān),中馬駝2擔(dān),兩匹小馬駝1擔(dān),問大馬、中馬、小馬各應(yīng)需多少匹。
#include<stdio.h> int main() { for (int i = 0; i <= 33; i++) { for (int j = 0; j <= 50; j++) { for (int k = 0; k <= 200; k += 2) { if ((i + j + k == 100) && (3 * i + 2 * j + k / 2 == 100)) { printf("需大馬%d匹、中馬%d匹、小馬%d匹\n", i, j, k); } } } } return 0; } - 編寫程序求出0~200中能被4整除余3的數(shù)。
#include<stdio.h> int main() { for (int i = 0; i <= 200; i++) { if (i % 4 == 3) { printf("%d\n", i); } } return 0; } - 從鍵盤輸入一個(gè)數(shù)n,求其階乘n!。
#include<stdio.h> int main() { int num = 0; int sum = 1; printf("請(qǐng)輸入一個(gè)整數(shù):"); scanf("%d", &num); for (int i = num; i > 1; i--) { sum *= i; } printf("%d! = %d\n", num, sum); return 0; } - 現(xiàn)有100元,用來買7元、8元、9元的商品,問將100元花完總共有多少種方式。
#include<stdio.h> int main() { int count = 0; for (int i = 0; i <= 14; i++) { for (int j = 0; j < 12; j++) { for (int k = 0; k < 11; k++) { if (7 * i + 8 * j + 9 * k == 100) { printf("7元商品%d件、8元商品%d件、9元商品%d件\n", i, j, k); count++; } } } } printf("總共有%d種花法\n", count); return 0; } - 猜數(shù)游戲:游戲中隨機(jī)產(chǎn)生一個(gè)1~100之間的數(shù),請(qǐng)用戶猜數(shù)。若10次之內(nèi)猜中則提示成功,若10次之內(nèi)沒有猜中則提示失敗。
#include<stdio.h> #include<stdlib.h> #include<time.h> #include<stdbool.h> int main() { int guess = 0; bool flag = false; int num = 0; // 用戶輸入的數(shù)字 srand((unsigned)time(NULL)); guess = rand() % 101; for (int i = 0; i < 10; i++) { printf("猜第 %d 次:", i + 1); scanf("%d", &num); if (num == guess) { flag = true; break; } else { printf("哎呀,猜錯(cuò)了,再猜一次吧!\n"); } } if (flag) { printf("恭喜您猜對(duì)啦\n"); } else { printf("您已經(jīng)猜了10次,都沒有猜對(duì)哦\n"); } return 0; } - 求出100~400中滿足條件的所有數(shù),要求三個(gè)數(shù)字之積為24,三個(gè)數(shù)字之和為12。
#include<stdio.h> int main() { for (int i = 100; i <= 400; i++) { // 計(jì)算各個(gè)位數(shù)字之和 int sum = i % 10 + i % 100 / 10 + i / 100; // 計(jì)算各個(gè)位數(shù)字之積 int temp = (i % 10) * (i % 100 / 10) * (i / 100); // 判斷是否是要找的數(shù)字 if (temp == 24 && sum == 12) { printf("%d\n", i); } } return 0; } - 從鍵盤輸入20個(gè)數(shù),求出其中正數(shù)的個(gè)數(shù)及其平均值。
#include<stdio.h> int main() { int num = 0; // 每次輸入的數(shù)字 int count = 0; // 正數(shù)的個(gè)數(shù) int sum = 0; // 所有正數(shù)的和 // 輸入20個(gè)數(shù)字 for (int i = 0; i < 20; i++) { printf("請(qǐng)輸入第 %d 個(gè)數(shù)字:", i+1); scanf("%d", &num); if (num > 0) { count++; sum += num; } } // 求平均數(shù)并輸出 printf("正數(shù)的個(gè)數(shù)是 %d 個(gè),其平均值是 %.2f\n", count, (float)sum / count); return 0; } - 編寫一個(gè)程序,打印出所有的水仙花數(shù)。
#include<stdio.h> int main() { int a = 0; // 保存?zhèn)€位數(shù) int b = 0; // 保存十位數(shù) int c = 0; // 保存百位數(shù) int d = 0; // 保存各個(gè)位的平方之和 for (int i = 100; i < 1000; i++) { a = i % 10; b = i % 100 / 10; c = i / 100; d = a * a * a + b * b * b + c * c * c; if (d == i) { printf("%d\n", i); } } return 0; } - 輸入一串字符,統(tǒng)計(jì)其中的字母、空格、數(shù)字及其他字符的個(gè)數(shù)。
#include<stdio.h> #define STR_LEN 100 int main() { char str[STR_LEN] = { '\0' }; int alpha = 0; int blank = 0; int digit = 0; int other = 0; // 輸入一串字符 printf("請(qǐng)輸入一個(gè)字符串:\n"); gets_s(str, STR_LEN); // 計(jì)算每種類型的字符的個(gè)數(shù) for (int i = 0; i < STR_LEN && str[i] != '\0'; i++) { if (('a' <= str[i] && str[i] <= 'z') || ('A' <= str[i] && str[i] <= 'Z')) { alpha++; } else if ('0' <= str[i] && str[i] <= '9') { digit++; } else if (str[i] == ' ') { blank++; } else { other++; } } // 輸出統(tǒng)計(jì)的結(jié)果 printf("字母有 %d 個(gè)\n空格有 %d 個(gè)\n數(shù)字有 %d 個(gè)\n其他有 %d 個(gè)\n", alpha, blank, digit, other); return 0; } - 編寫程序,從鍵盤輸入一個(gè)數(shù),判斷是否為素?cái)?shù)并輸出相應(yīng)的信息至屏幕。
#include<stdio.h> #include<stdbool.h> int main() { int num = 0; bool flag = true; printf("請(qǐng)輸入一個(gè)整數(shù):"); scanf("%d", &num); for (int i = 2; i < num / 2; i++) { if (num % i == 0) { flag = false; } } if (flag) { printf("%d是素?cái)?shù)\n", num); } else { printf("%d不是素?cái)?shù)\n", num); } return 0; } - 編寫程序,打印九九乘法表。
#include<stdio.h> int main() { for (int i = 1; i <= 9; i++) { for (int j = 1; j <= i; j++) { printf("%d*%d=%-2d\t", i, j, i * j); } printf("\n"); } return 0; }
第7章 數(shù)組
習(xí)題答案
一、選擇題
- A
- B
- C
- A
- A
- B
- B
- C
- A
二、填空題
- abcdef
- 10101010101010101010
-
min > a[i],k = i,a[k] -
gets(s[i]),strcpy(c, s[i]) - 運(yùn)行結(jié)果如下:
1234 5678 9000 - 6
- aceg
- 1471013
- 02345078
- 1-11-11
- Hello world!
- 80
- 運(yùn)行結(jié)果如下:
第1個(gè)元素為1 第2個(gè)元素為2 第3個(gè)元素為3 第4個(gè)元素為4 第5個(gè)元素為5 第6個(gè)元素為6 第7個(gè)元素為7 第8個(gè)元素為8 第9個(gè)元素為9 第10個(gè)元素為10
三、編程題
- 設(shè)有以下10個(gè)數(shù)(4,2,7,8,9,10,11,24,5,6),編寫程序用選擇排序法使這10個(gè)數(shù)按升序排序,并輸出排序后的結(jié)果。
#include<stdio.h> int main() { int num[10] = { 4, 2, 7, 8, 9, 10, 11, 24, 5, 6 }; int k = 0; int temp = 0; for (int i = 0; i < 9; i++) { k = i; for (int j = i + 1; j < 10; j++) { if (num[i] > num[j]) { k = j; } } if (k != i) { temp = num[i]; num[i] = num[k]; num[k] = temp; } } for (int i = 0; i < 10; i++) { printf("%3d", num[i]); } printf("\n"); return 0; } - 從鍵盤輸入30個(gè)整數(shù),統(tǒng)計(jì)并輸出這些數(shù)字中正數(shù)的個(gè)數(shù)。
#include<stdio.h> #define STR_LEN 30 int main() { int num[STR_LEN] = { 0 }; int count = 0; // 從鍵盤輸入數(shù)據(jù) for (int i = 0; i < STR_LEN; i++) { scanf("%d", &num[i]); } for (int i = 0; i < STR_LEN; i++) { if (num[i] > 0) { count++; } } printf("正數(shù)的個(gè)數(shù)是%d\n", count); return 0; } - 從鍵盤輸入一個(gè)字符串,編寫一個(gè)程序?qū)崿F(xiàn)從鍵盤輸入一個(gè)數(shù),可刪除字符串該位置上的字符并輸出改變后的字符串。
#include<stdio.h> #define STR_LEN 100 int main() { char str[STR_LEN] = { '\0 ' }; int position = 0; printf("請(qǐng)輸入一個(gè)字符串:\n"); gets(str, STR_LEN); printf("請(qǐng)輸入一個(gè)整數(shù):\n"); scanf("%d", &position); // 刪除制定位置的字符 for (int i = position - 1; i < STR_LEN - 1; i++) { str[i] = str[i + 1]; } // 輸出結(jié)果 puts(str); return 0; } - 編寫一個(gè)程序,實(shí)現(xiàn)從鍵盤輸入10個(gè)整數(shù),將其逆序輸出。
#include<stdio.h> #define ARR_LEN 10 int main() { int num[ARR_LEN] = { 0 }; // 從鍵盤輸入ARR_LEN個(gè)數(shù)字 for (int i = 0; i < ARR_LEN; i++) { printf("請(qǐng)輸入第%d個(gè)數(shù)字:", i + 1); scanf("%d", &num[i]); } // 逆序輸出 for (int i = ARR_LEN - 1; i >= 0; i--) { printf("%d ", num[i]); } printf("\n"); return 0; } - 現(xiàn)有一個(gè)長(zhǎng)度為4X5的二維數(shù)組,要求將該數(shù)組的行和列元素互換,保存至另外一個(gè)數(shù)組中,并輸出交換后的結(jié)果。
#include<stdio.h> int main() { int num[4][5] = { {1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}, {11, 12, 13, 14, 15}, {16, 17, 18, 19, 20} }; int result[5][4] = { 0 }; // 行列元素互換保存到另一個(gè)數(shù)組里 for (int i = 0; i < 4; i++) { for (int j = 0; j < 5; j++) { result[j][i] = num[i][j]; } } // 輸出結(jié)果 for (int i = 0; i < 5; i++) { for (int j = 0; j < 4; j++) { printf("%4d", result[i][j]); } printf("\n"); } printf("\n"); return 0; } - 編寫一個(gè)程序,實(shí)現(xiàn)兩個(gè)字符串的合并。
#include<stdio.h> int main() { char str1[50] = "hello world!"; char str2[50] = " hello code!"; char result[100] = ""; int i = 0; for (int j = 0; str1[j] != '\0'; i++, j++) { result[i] = str1[j]; } for (int j = 0; str2[j] != '\0'; i++, j++) { result[i] = str2[j]; } result[i] = '\0'; puts(result); return 0; } - 編寫一個(gè)程序,將字符串倒序并輸出至屏幕。
#include<stdio.h> #include<string.h> int main() { char str[100] = ""; // 從鍵盤輸入字符串 gets(str, 100); // 倒序輸出 for (int i = strlen(str) - 1; i >= 0; i--) { putchar(str[i]); } putchar('\n'); return 0; } - 從鍵盤輸入10個(gè)數(shù)據(jù),利用冒泡排序法對(duì)其從小到大排序后輸出至屏幕。
#include<stdio.h> int main() { int num[10] = { 0 }; int temp = 0; // 從鍵盤輸入10個(gè)整數(shù) for (int i = 0; i < 10; i++) { printf("請(qǐng)輸入第%d個(gè)整數(shù):", i + 1); scanf("%d", &num[i]); } // 冒泡排序(從小到大) for (int i = 0; i < 10; i++) { for (int j = 0; j < 9 - i; j++) { if (num[j] > num[j + 1]) { temp = num[j]; num[j] = num[j + 1]; num[j + 1] = temp; } } } // 輸出至屏幕 for (int i = 0; i < 10; i++) { printf("%d ", num[i]); } printf("\n"); return 0; } - 從鍵盤輸入一串字符,以#為結(jié)束標(biāo)志,統(tǒng)計(jì)其中字符的個(gè)數(shù)。
#include<stdio.h> int main() { char str[100] = ""; int count = 0; // 從鍵盤輸入一個(gè)字符串 printf("請(qǐng)輸入一個(gè)字符串:\n"); gets(str, 100); // 統(tǒng)計(jì)#前面的字符的個(gè)數(shù) for (int i = 0; str[i] != '#' && str[i] != '\0'; i++) { count++; } // 輸出結(jié)果 printf("字符個(gè)數(shù)為:%d\n", count); return 0; } - 現(xiàn)有一個(gè)字符串,刪除特定位置上的字符串,輸出至屏幕。
#include<stdio.h> #include<string.h> int main() { char str[100] = "Hello World! Hello Beijing!"; int position = 3; char *p = NULL; p = str; strcpy((p + 2), (p + 3)); printf("%s\n", str); return 0; }
第8章 指針
習(xí)題答案
一、選擇題
- C
- D
- B
- D
- C
- B
- B
- B
- B
- B
- B
- C
- B
- B
- A
二、填空題
- 3
- a,b
- Hello, happy
- abcdshkg
-
s,%s,*p++ - 1 2 3 4 5 6
- 4
- He
- 1 4 7 10 13 16 19 22
- 7
- 6,8,9
- 45
- C LanguageP
- 5,6
三、編程題
- 編寫一個(gè)函數(shù),實(shí)現(xiàn)字符串的復(fù)制功能。
#include<stdio.h> #define ARR_LEN 100 int main() { char str1[ARR_LEN] = "hello world!"; char str2[ARR_LEN] = "hello c program."; char *p1 = NULL; char *p2 = NULL; p1 = str1; p2 = str2; while (*p2) { *p1 = *p2; p1++; p2++; } *p1 = '\0'; printf("str1 = %s\n", str1); return 0; } - 從鍵盤輸入5個(gè)字符串,對(duì)這5個(gè)字符串從小到大排列并輸出排列結(jié)果。
#include<stdio.h> #include<string.h> #define STR_LEN 100 int main() { char s[5][STR_LEN] = { '\0' }; char *str[5] = { NULL }; char *p = NULL; // 從鍵盤輸入5個(gè)字符串 for (int i = 0; i < 5; i++) { gets(s[i], STR_LEN); str[i] = s[i]; } // 排序 for (int i = 0; i < 4; i++) { for (int j = i + 1; j < 5; j++) { if (strcmp(str[i], str[j]) > 0) { p = str[i]; str[i] = str[j]; str[j] = p; } } } // 輸出排序后的結(jié)果 for (int i = 0; i < 5; i++) { puts(str[i]); } return 0; } - 編寫一個(gè)函數(shù),通過指針實(shí)現(xiàn)兩個(gè)數(shù)的交換。
#include<stdio.h> void swap(int *pa, int *pb) { int temp = 0; temp = *pa; *pa = *pb; *pb = temp; } int main() { int a = 3; int b = 5; int *pa = &a; int *pb = &b; void(*pswap)() = swap; // 交換之前 printf("交換之前 a=%d, b=%d\n", a, b); // 交換 pswap(pa, pb); // 交換之后 printf("交換之后 a=%d, b=%d\n", a, b); return 0; } - 從鍵盤輸入一個(gè)字符串,分別統(tǒng)計(jì)字符串中字母、數(shù)字及其他字符的個(gè)數(shù)并輸出。
#include<stdio.h> int main() { char str[100] = { '\0' }; char *p = str; int alpha = 0; int digit = 0; int other = 0; // 從鍵盤上輸入一個(gè)字符串 gets(p, 100); // 統(tǒng)計(jì)字符個(gè)數(shù) while (*p) { if ('0' <= *p && *p <= '9') { digit++; } else if (('a' <= *p && *p <= 'z') || ('A' <= *p && *p <= 'Z')) { alpha++; } else { other++; } p++; } // 輸出統(tǒng)計(jì)結(jié)果 printf("字母有%d個(gè),數(shù)字有%d個(gè),其他有%d個(gè)\n", alpha, digit, other); return 0; } - 從鍵盤輸入一個(gè)字符串和一個(gè)數(shù)字n,要求從字符串第n個(gè)字符開始至字符串的末尾重新組成一個(gè)字符串輸出。
#include<stdio.h> int main() { char str[100] = { '\0' }; char str2[100] = { '\0' }; char *p = NULL; char *p2 = NULL; int n = 0; // 從鍵盤上輸入一個(gè)字符串 gets(str, 100); scanf("%d", &n); p = str; p += n - 1; p2 = str2; while (*p2++ = *p++) { ; } // 輸出結(jié)果 puts(str2); return 0; } - 編寫一個(gè)程序,要求利用指針求任意數(shù)據(jù)的絕對(duì)值。
#include<stdio.h> int main() { int num = 0; int *p = NULL; // 從鍵盤輸入一個(gè)整數(shù) printf("請(qǐng)輸入一個(gè)整數(shù):"); scanf("%d", &num); // 求num的絕對(duì)值 p = # if (*p < 0) { *p = -*p; } // 輸出num的絕對(duì)值 printf("%d\n", *p); return 0; } - 從鍵盤輸入10個(gè)數(shù)至數(shù)組中,然后將其中的元素進(jìn)行逆序存放后輸出。
#include<stdio.h> #define ARR_LEN 10 int main() { int num[ARR_LEN] = { 0 }; int num_other[ARR_LEN] = { 0 }; int *p1 = NULL; int *p2 = NULL; // 從鍵盤輸入ARR_LEN個(gè)數(shù)字 for (int i = 0; i < ARR_LEN; i++) { printf("請(qǐng)輸入第 %2d 個(gè)數(shù):", i + 1); scanf("%d", &num[i]); } // 逆序存入另一個(gè)數(shù)組 p1 = num; p2 = num_other; for (int i = 0; i < ARR_LEN; i++) { *(p2 + ARR_LEN - 1 - i) = *(p1 + i); } // 輸出逆序后的數(shù)組 for (int i = 0; i < ARR_LEN; i++) { printf("%d ", *(p2 + i)); } return 0; } - 從鍵盤輸入一個(gè)字符串,將其逆序輸出。
#include<stdio.h> #include<string.h> #define ARR_LEN 100 int main() { char str[ARR_LEN] = { '\0' }; char *p = NULL; // 從鍵盤輸入一個(gè)字符串 gets(str, ARR_LEN); // 逆序輸出 p = str; p += strlen(str) - 1; for (int i = 0; i < strlen(str); i++) { putchar(*p); p--; } return 0; } - 從鍵盤輸入兩個(gè)字符串s1和s2,將s2連接至s1后輸出。
#include<stdio.h> #include<string.h> #define ARR_LEN 100 int main() { char s1[ARR_LEN] = { '\0' }; char s2[ARR_LEN] = { '\0' }; char *p1 = NULL; char *p2 = NULL; // 從鍵盤輸入連個(gè)字符串 gets(s1, ARR_LEN); gets(s2, ARR_LEN); // 連接字符串 p1 = s1; p2 = s2; while (*p1) { p1++; } while (*p1 = *p2) { p1++; p2++; } *p1 = '\0'; // 輸出連接后的字符串 puts(s1); return 0; } - 從鍵盤輸入兩個(gè)字符串,編寫一個(gè)程序拍段兩個(gè)字符串是否相等。
#include<stdio.h> #include<stdbool.h> #define ARR_LEN 100 int main() { char s1[ARR_LEN] = { '\0' }; char s2[ARR_LEN] = { '\0' }; char *p1 = NULL; char *p2 = NULL; // 從鍵盤輸入兩個(gè)字符串 gets(s1, ARR_LEN); gets(s2, ARR_LEN); // 比較字符串 p1 = s1; p2 = s2; while (true) { if (*p1 > *p2) { printf("s1 > s2\n"); break; } else if (*p1 < *p2) { printf("s1 < s2\n"); } else { p1++; p2++; continue; } } return 0; }
第9章 函數(shù)
習(xí)題答案
一、選擇題
- B
- B
- D
- A
- D
- B
- A
二、填空題
- 10
- 10,20
- 運(yùn)行結(jié)果如下:
1, 2, 3, 4, 6, 7, 8, 9, 6, 7, 8, 9, - 246
- 1,2
- 1346869105
- 10,20,30,40
- 6,1
- -5,5
- 7,3,11
- 8
- 3,9
- 5,5
- 23456
- gggggggh
三、編程題
- 編寫一個(gè)函數(shù),從鍵盤輸入一個(gè)字符串,將其反序輸出。
#include <stdio.h> #include<string.h> int reverse(char str[]) { int len = strlen(str); for (int i = len - 1; i >= 0; i--) { printf("%c", str[i]); } printf("\n"); } int main() { char str[100] = ""; printf("請(qǐng)輸入一個(gè)字符串:\n"); gets(str, 100); reverse(str); return 0; } - 從鍵盤輸入一個(gè)數(shù)n,求1+2+3+...+n的值,要求用遞歸的方式求解。
#include<stdio.h>
int iterate(int n)
{
if (n == 1)
{
return 1;
}
else
{
return n + iterate(n - 1);
}
}
int main()
{
int n = 0;
printf("請(qǐng)輸入一個(gè)整數(shù):");
scanf("%d", &n);
printf("值為:%d\n", iterate(n));
return 0;
}
- 從鍵盤輸入一個(gè)字符串,要求從該字符串的第n個(gè)位置開始至末位組成一個(gè)新的字符串并將結(jié)果輸出至屏幕。
#include<stdio.h> int main() { char str[100] = ""; int n = 0; char *p = NULL; scanf("%s", str); scanf("%d", &n); p = str; p += n - 1; printf("%s\n", p); return 0; } - 從鍵盤輸入一個(gè)字符串,統(tǒng)計(jì)其中字母的個(gè)數(shù)。
#include<stdio.h> int count(char *p) { int n = 0; while (*p) { if (('a' <= *p && *p <= 'z') || ('A' <= *p && *p <= 'Z')) { n++; } p++; } return n; } int main() { char str[100] = ""; gets(str); printf("%d\n", count(str)); return 0; } - 編寫一個(gè)函數(shù),判斷一個(gè)數(shù)是否為素?cái)?shù)。
#include<stdio.h> #include<stdbool.h> bool sushu(char num) { bool flag = true; for (int i = 2; i <= num / 2; i++) { if (num % 2 == 0) { flag = false; } } return flag; } int main() { int n = 0; printf("請(qǐng)輸入一個(gè)整數(shù):"); scanf("%d", &n); printf("%d %s是素?cái)?shù)\n", n, sushu(n) ? "" : "不"); return 0; } - 從鍵盤輸入多個(gè)字符串,編寫一個(gè)函數(shù)對(duì)這些字符串從大到小排序,并輸出排序結(jié)果。
#include<stdio.h> #include<string.h> void sort(char *p[]) { char *temp = NULL; for (int i = 0; i < 4; i++) { for (int j = i + 1; j < 5; j++) { if (strcmp(p[i], p[j]) < 0) { temp = p[i]; p[i] = p[j]; p[j] = temp; } } } for (int i = 0; i < 5; i++) { printf("%s\n", p[i]); } } int main() { char str[5][100] = { "" }; char *p[5] = { NULL }; for (int i = 0; i < 5; i++) { gets(str[i]); p[i] = str[i]; } sort(p); return 0; } - 編寫一個(gè)程序,求1!+2!+3!+4!的值。
#include<stdio.h> int sum(int n) { int a = 1; int sum = 0; for (int i = 1; i <= n; i++) { a *= i; sum += a; } return sum; } int main() { int n = 4; printf("%d\n", sum(n)); return 0; } - 編寫一個(gè)函數(shù),判斷一個(gè)字母是否為小寫字母,若為小寫字母則轉(zhuǎn)化成大寫字母后輸出。
#include<stdio.h> char touppercase(char c) { if ('a' <= c && c <= 'z') { c -= 32; } return c; } int main() { char c = 'a'; printf("%c\n", touppercase(c)); return 0; } - 編寫一個(gè)函數(shù),將字符串逆序輸出至屏幕。
#include<stdio.h> #include<string.h> void fun(char *p) { for (int i = (int)strlen(p) - 1; i >= 0; i--) { printf("%c", *(p + i)); } printf("\n"); } int main() { char str[100] = "Hello World!"; fun(str); return 0; } - 編寫一個(gè)函數(shù),實(shí)現(xiàn)字符串的連接功能。
#include<stdio.h> #include<string.h> void fun(char *str1, char *str2) { char *temp = NULL; temp = str1; while (*str1) { str1++; } while ((*str1 = *str2)) { str1++; str2++; } *str1 = '\0'; printf("%s\n", temp); } int main() { char str1[100] = "Hello World!"; char str2[100] = " Hello C!"; fun(str1, str2); return 0; }
第10章 結(jié)構(gòu)型、共用型、枚舉型及用戶自定義型數(shù)據(jù)
結(jié)構(gòu)體類型
- 定義
struct 結(jié)構(gòu)體名 { 結(jié)構(gòu)體成員 }; - 引用
結(jié)構(gòu)體變量名.成員名;
結(jié)構(gòu)指針
- 定義
struct 結(jié)構(gòu)體類型 *指針名; - 引用
(*指針名).成員名; 指針名->成員名;
共用體
- 定義
union 共用體名 { 成員表 };
枚舉型
- 定義
enum 枚舉類型名 {枚舉元素表};
用戶自定義類型
- 定義
typedef 類型名 標(biāo)識(shí)名;
習(xí)題答案
一、填空題
- D
- C
- D
- A
- A
- B
- A
- B
- B
- 262
二、填空題
- 9
- 8
- abcdef
- 3,8
- 17
- 16
- W
- 5,6,0
- 1,3,5,7,9,11,13,15,17,19,
- 8
- 0,1,2,3
- 4
- yangwu,90
- 運(yùn)行結(jié)果如下:
5,89.5 8,91.7 - 20,Marry10,Marry
三、編程題
- 編寫一個(gè)程序,用來記錄一個(gè)學(xué)生的信息。
#include <stdio.h> int main() { struct student { char name[10]; // 姓名 int num; // 學(xué)號(hào) int age; // 年齡 char sex; // 性別 int score; // 成績(jī) }; struct student stu; printf("請(qǐng)輸入學(xué)生的信息:"); scanf("%s %d %d %c %d", stu.name, &stu.num, &stu.age, &stu.sex, &stu.score); printf("%s, %d, %d, %c, %d\n", stu.name, stu.num, stu.age, stu.sex, stu.score); return 0; } - 現(xiàn)有5名學(xué)生,要求編寫程序從鍵盤輸入這5名學(xué)生的信息,其中包括學(xué)號(hào)、姓名、性別、成績(jī)等信息,再將其輸出。
#include <stdio.h> int main() { struct student { char name[10]; // 姓名 int num; // 學(xué)號(hào) int age; // 年齡 char sex; // 性別 int score; // 成績(jī) }; struct student stu[5]; printf("請(qǐng)輸入學(xué)生的信息:\n"); for (int i = 0; i < 5; i++) { printf("str[%d] -> ", i); scanf("%s %d %d %c %d", stu[i].name, &stu[i].num, &stu[i].age, &stu[i].sex, &stu[i].score); } for (int i = 0; i < 5; i++) { printf("str[%d] -> ", i); printf("%s, %d, %d, %c, %d\n", stu[i].name, stu[i].num, stu[i].age, stu[i].sex, stu[i].score); } return 0; } - 編寫程序,利用結(jié)構(gòu)體輸入若干個(gè)學(xué)生的信息,將其寫至文件中。
#include <stdio.h> int main() { struct student { char name[10]; // 姓名 int num; // 學(xué)號(hào) int age; // 年齡 char sex; // 性別 int score; // 成績(jī) }; struct student stu[5]; FILE *fp = NULL; printf("請(qǐng)輸入學(xué)生的信息:\n"); for (int i = 0; i < 5; i++) { printf("str[%d] -> ", i); scanf("%s %d %d %c %d", stu[i].name, &stu[i].num, &stu[i].age, &stu[i].sex, &stu[i].score); } fp = fopen("students.txt", "w"); fwrite(stu, sizeof(struct student), 5, fp); fclose(fp); return 0; } - 創(chuàng)建一個(gè)鏈表,輸入若干個(gè)學(xué)生的信息,其中包括學(xué)號(hào)、姓名、成績(jī),將結(jié)果輸出至屏幕。
#include <stdio.h> #include <stdlib.h> struct student { int num; // 學(xué)號(hào) char name[20]; // 姓名 int score; // 成績(jī) struct student *next; }; int main() { int n = 0; // 學(xué)生的數(shù)量 struct student *head = NULL; struct student *tail = NULL; struct student *temp = NULL; printf("請(qǐng)輸入學(xué)生的數(shù)量:"); scanf("%d", &n); for (int i = 0; i < n; i++) { temp = malloc(sizeof(struct student)); printf("請(qǐng)輸入第 %d 個(gè)學(xué)生的信息:\n", i + 1); scanf("%d%s%d", &temp->num, temp->name, &temp->score); if (i == 0) { head = temp; tail = temp; tail->next = NULL; } else { temp->next = NULL; tail->next = temp; tail = temp; } } temp = head; while (temp) { printf("%d, %s, %d\n", temp->num, temp->name, temp->score); temp = temp->next; } return 0; } - 編寫一個(gè)函數(shù),在鏈表的任意位置上插入一個(gè)結(jié)點(diǎn)。
/* 在第4題基礎(chǔ)上增加了插入功能 */ #include <stdio.h> #include <stdlib.h> struct student { int num; // 學(xué)號(hào) char name[20]; // 姓名 int score; // 成績(jī) struct student *next; }; void print_stu(struct student *stu) { struct student *temp = NULL; temp = stu; while (temp) { printf("%d, %s, %d\n", temp->num, temp->name, temp->score); temp = temp->next; } } int main() { int n = 0; // 學(xué)生的數(shù)量 int p = 1; // 在某一位置之后插入節(jié)點(diǎn)(編號(hào)從1開始) int i = 0; // 計(jì)數(shù)器 struct student *head = NULL; struct student *tail = NULL; struct student *temp = NULL; struct student *temp2 = NULL; printf("請(qǐng)輸入學(xué)生的數(shù)量:"); scanf("%d", &n); for (int i = 0; i < n; i++) { temp = malloc(sizeof(struct student)); printf("請(qǐng)輸入第 %d 個(gè)學(xué)生的信息:\n", i + 1); scanf("%d%s%d", &temp->num, temp->name, &temp->score); if (i == 0) { head = temp; tail = temp; tail->next = NULL; } else { temp->next = NULL; tail->next = temp; tail = temp; } } print_stu(head); // 在第p個(gè)位置之后插入節(jié)點(diǎn) printf("\n請(qǐng)輸入位置:"); scanf("%d", &p); i = 1; temp = head; while (temp) { if (i == p) { temp2 = malloc(sizeof(struct student)); printf("請(qǐng)輸入學(xué)生的信息:\n"); scanf("%d%s%d", &temp2->num, temp2->name, &temp2->score); temp2->next = temp->next; temp->next = temp2; break; } temp = temp->next; i++; } print_stu(head); return 0; } - 編寫一個(gè)程序,打印出5名學(xué)生的信息至屏幕,要求輸出單獨(dú)編寫成一個(gè)函數(shù)。
#include <stdio.h> struct student { char name[10]; // 姓名 int num; // 學(xué)號(hào) int age; // 年齡 char sex; // 性別 int score; // 成績(jī) }; void print_stu(struct student stu) { printf("%s, %d, %d, %c, %d\n", stu.name, stu.num, stu.age, stu.sex, stu.score); } int main() { struct student stu[5]; printf("請(qǐng)輸入學(xué)生的信息:\n"); for (int i = 0; i < 5; i++) { printf("str[%d] -> ", i); scanf("%s %d %d %c %d", stu[i].name, &stu[i].num, &stu[i].age, &stu[i].sex, &stu[i].score); } for (int i = 0; i < 5; i++) { printf("str[%d] -> ", i); print_stu(stu[i]); } return 0; }
第12章 文件
文件
- 文件指針
FILE *指針名; - 打開文件
fopen(文件名, 打開方式); - 關(guān)閉文件
fclose(文件指針名); - 文件讀寫函數(shù)
fputc(); fgetc(); fread(); fwrite(); fprintf(); fscanf(); - 文件定位函數(shù)
feof(); rewind(); fseek(); ftell(); - 出錯(cuò)檢查函數(shù)
ferror(); clearerr();
習(xí)題答案
一、選擇題
- C
- C
- D
- A
- D
- C
- C
- B
二、填空題
- ajig
- abcd
- abcdef
- Hello 15
- Beijing shanghai tianjin
- 0123456789
- 7
- 運(yùn)行結(jié)果如下:
Lili,89 Wangming,90 Yanghua,78 Zhangxiao,88 - abcsade
- aajkcnal
三、編程題
- 編寫程序,將磁盤文件中的內(nèi)容顯示在屏幕上。
#include <stdio.h> int main() { FILE *fp = NULL; fp = fopen("test.txt", "r"); if (fp == NULL) { printf("打開文件失敗\n"); return 1; } while (!feof(fp)) { putchar(fgetc(fp)); } printf("\n"); fclose(fp); return 0; } - 編寫一個(gè)程序,由鍵盤輸入5個(gè)學(xué)生的信息,并將數(shù)據(jù)保存在名為student.txt的文本文件中。
#include <stdio.h> struct student { char name[20]; int score; }; int main() { struct student stu[5]; FILE *fp = NULL; fp = fopen("student.txt", "w"); if (fp == NULL) { printf("打開文件失敗\n"); return 1; } // 從鍵盤上輸入5個(gè)學(xué)生的信息 for (int i = 0; i < 5; i++) { scanf("%s%d", &stu[i].name, &stu[i].score); } // 將信息寫入文件中 for (int i = 0; i < 5; i++) { fwrite(&stu[i], sizeof (struct student), 1, fp); } fclose(fp); return 0; } - 編寫一個(gè)程序,實(shí)現(xiàn)文件的復(fù)制功能。
#include <stdio.h> int main() { FILE *fp1 = NULL; FILE *fp2 = NULL; fp1 = fopen("student.txt", "r"); fp2 = fopen("studentcopy.txt", "w"); if (fp1 == NULL) { printf("打開 student.txt 失敗\n"); return 1; } if (fp2 == NULL) { printf("打開 studentcopy.txt 失敗\n"); return 1; } while (!feof(fp1)) { fputc(fgetc(fp1), fp2); } fclose(fp1); fclose(fp2); return 0; } - 編寫程序,實(shí)現(xiàn)兩個(gè)文件的合并,即將兩個(gè)文件中的內(nèi)容復(fù)制到其中一個(gè)文件中。
#include <stdio.h> int main() { FILE *fp1 = NULL; FILE *fp2 = NULL; fp1 = fopen("student.txt", "r"); fp2 = fopen("studentcopy.txt", "a"); if (fp1 == NULL) { printf("打開 student.txt 失敗\n"); return 1; } if (fp2 == NULL) { printf("打開 studentcopy.txt 失敗\n"); return 1; } while (!feof(fp1)) { fputc(fgetc(fp1), fp2); } fclose(fp1); fclose(fp2); return 0; } - 編寫程序,從文件中隔一個(gè)字符進(jìn)行讀取,例如文件中內(nèi)容為“jajasiddeb”,則輸出jjsdc至屏幕上。
#include <stdio.h> int main() { FILE *fp1 = NULL; fp1 = fopen("test.txt", "r"); if (fp1 == NULL) { printf("打開 test.txt 失敗\n"); return 1; } while (!feof(fp1)) { putchar(fgetc(fp1)); fgetc(fp1); } putchar('\n'); fclose(fp1); return 0; }
第14章 預(yù)處理宏命令
宏
- 不帶參數(shù)的宏
#define 用戶標(biāo)識(shí)符 字符串 #undef 用戶標(biāo)識(shí)符 - 帶參數(shù)的宏
#define 宏名 字符串 - 帶參數(shù)的宏和函數(shù)的關(guān)系
- 函數(shù)調(diào)用參數(shù)傳遞的過程中會(huì)產(chǎn)生一個(gè)中間值,而帶參數(shù)的宏只是進(jìn)行字符串的替換,不會(huì)產(chǎn)生中間值。
- 函數(shù)中實(shí)參要與形參的類型一致,而宏定義不要求一致。
- 函數(shù)只能返回一個(gè)值,而宏定義可以返回多個(gè)值。
文件包含
#define <文件名稱>
或
#include "文件名稱"
條件編譯
#ifdef 標(biāo)識(shí)符
程序1
#else
程序2
#endif
不同存儲(chǔ)類型的變量
- 自動(dòng)類型變量
[auto] 類型 變量名; - 靜態(tài)變量
static 類型 變量名; - 寄存變量
rigister 類型 變量名; - 外部變量
extern 類型 變量名;
習(xí)題答案
一、選擇題
- B
- B
- A
- A
- A
- A
- C
- B
- C
- B
- A
- B
二、填空題
- 28
- 4
- 4,17
- 52
- 29
- 4
- 5,0
- 95 24
- 20,-16
- 4
- 5,49
- 3,3,5
- acjaahnldne
三、編程題
- 編寫函數(shù)求出1~100中的素?cái)?shù)。
#include <stdio.h> #include <stdbool.h> int main() { bool flag = true; for (int i = 1; i <= 100; i++) { flag = true; for (int j = 2; j <= i / 2; j++) { if (i % j == 0) { flag = false; } } if (flag) { printf("%d\n", i); } } return 0; } - 利用帶參數(shù)的宏,從三個(gè)數(shù)中找出最大值。
#include <stdio.h> #define MIN(x, y, z) x < y ? (x < z ? x : z) : (y < z ? y : z) #define MAX(x, y, z) x > y ? (x > z ? x : z) : (y > z ? y : z) int main() { int a = 34; int b = 23; int c = 54; printf("min = %d, max = %d\n", MIN(a, b, c), MAX(a, b, c)); return 0; } - 從鍵盤輸入一個(gè)數(shù),利用宏求出其平方值及其平方根。
#include <stdio.h> #include <math.h> #define H(x) (x)*(x) #define S(x) sqrt(x) int main() { double num = 0; printf("請(qǐng)輸入一個(gè)整數(shù):"); scanf("%lf", &num); printf("%lf, %lf\n", H(num), S(num)); return 0; } - 從鍵盤輸入一個(gè)圓錐的半徑和高度,通過宏定義求出圓錐體積。
#include <stdio.h> #define PI 3.14 #define S(r, h) PI*(r)*(r)*(h)/3.0 int main() { double r = 0.0; double h = 0.0; printf("請(qǐng)輸入圓錐的半徑和高度:"); scanf("%lf%lf", &r, &h); printf("圓錐的表面積是:%lf\n", S(r, h)); return 0; }