第1章 第一個C程序
第2章 C語言基礎(chǔ)
第3章 變量和數(shù)據(jù)類型
第4章 順序結(jié)構(gòu)程序設(shè)計
第5章 條件結(jié)構(gòu)程序設(shè)計
第6章 循環(huán)結(jié)構(gòu)程序設(shè)計
第7章 數(shù)組
第8章 指針
第9章 函數(shù)
第10章 結(jié)構(gòu)型铲觉、共用型、枚舉型及用戶自定義型數(shù)據(jù)
第12章 文件
第14章 預(yù)處理宏命令
第1章 第一個C程序
習(xí)題答案
一、選擇題
- C
二、填空題
- 補全下面的程序,讓其完整。
#include<stdio.h> void main() { int a=1; printf("%d\n", a); }
三索昂、編程題
- 參照例題建车,編寫一個程序輸出如下所示的一個倒三角形。
********************* ***************** ************* ********* ***** *
#include<stdio.h> void main() { printf("*********************\n"); printf(" ***************** \n"); printf(" ************* \n"); printf(" ********* \n"); printf(" ***** \n"); printf(" * \n"); }
- 從鍵盤輸入一個數(shù)椒惨,輸出該數(shù)的相反數(shù)缤至。
#include<stdio.h> void main() { int x = 0; scanf("%d", &x); if (x < 0) { x = -x; } printf("%d\n", x); }
- 編寫一個程序,實現(xiàn)兩個數(shù)相加并將結(jié)果輸出至屏幕康谆。
#include<stdio.h> void main() { int x, y, z; scanf("%d%d", &x, &y); z = x + y; printf("%d\n", z); }
- 從鍵盤輸入一個數(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"); } }
- 從鍵盤輸入一個數(shù),通過 printf() 函數(shù)輸出該數(shù)的 2 倍數(shù)孽锥。
#include<stdio.h> void main() { int x = 0; scanf("%d", &x); printf("%d\n", 2 * x); }
- 從鍵盤輸入兩個數(shù)嚼黔,求這兩個數(shù)的乘積并輸出至屏幕。
#include<stdio.h> void main() { int x, y, z; scanf("%d%d", &x, &y); z = x * y; printf("%d\n", z); }
- 編寫一個程序惜辑,判斷一個數(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語言基礎(chǔ)
C語言特點
- 簡單、方便靈活
- 9中控制語句
- 32個關(guān)鍵字
- 運算符種類豐富
- 34種運算符
- 數(shù)據(jù)結(jié)構(gòu)類型豐富
- 7種類型
- 繪圖功能強大
- 結(jié)構(gòu)式語言
- 對語法限制不嚴(yán)格
- 生成代碼質(zhì)量高盛撑、執(zhí)行效率高
- 可移植性好
C程序編譯執(zhí)行過程
- 編輯
- 編譯
- 詞法分析
- 語法分析
- 語義分析
- 中間代碼生成
- 中間代碼優(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); }
- 從鍵盤輸入兩個數(shù)狮荔,求出這兩個數(shù)中的小者并將結(jié)果輸出,要求比較操作單獨編寫一個函數(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); }
- 從鍵盤輸入兩個數(shù)轴合,將這兩個數(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); }
- 從鍵盤輸入一個數(shù)碗短,編寫程序輸出該數(shù)的絕對值至屏幕。
#include<stdio.h> #include<math.h> void main() { int x; scanf("%d", &x); printf("%d\n", (int)fabs(x)); }
- 編寫程序铐望,從鍵盤輸入兩個數(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 中的素數(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); } } }
- 編寫程序邀窃,從鍵盤輸入一個數(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語言的基本數(shù)據(jù)類型
- 基本類型
- 整型
- 短整型(short)
- 整型(int)
- 長整型(long)
- 浮點型
- 單精度浮點(float)
- 雙精度浮點(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
- 備注:一定要用正確的格式控制符輸出對應(yīng)的數(shù)據(jù)類型粱挡,否則會輸出一個垃圾值,這是一個悲傷的故事俄精。询筏。。
- 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 個數(shù)嫌套,判斷其是否能構(gòu)成直角三角形逆屡,若能則輸出該直角三角形的面積,否則輸出不能構(gòu)成三角形的提示信息踱讨。
#include<stdio.h> void main() { double a, b, c; // 三角形的三條邊 double area = 0; // 三角形的面積 printf("請輸入三角形的三邊的邊長:"); 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"); } }
- 編寫一個程序魏蔗,輸入一個華氏溫度,按照公式 C=5/9*(F-32) 輸出攝氏溫度痹筛。
#include<stdio.h> void main() { double f = 0; double c = 0; printf("請輸入華氏溫度值:"); scanf("%lf", &f); c = (double)5 / 9 * (f - 32); printf("對應(yīng)的攝氏溫度是:%lf\n", c); }
- 輸入一個年份莺治,判斷該年是否為閏年,若為閏年則輸出“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"); } }
- 從鍵盤輸入一個學(xué)生的5門科目成績,計算其平均值并輸出滋早。
#include<stdio.h> void main() { int score1 = 0; int score2 = 0; int score3 = 0; int score4 = 0; int score5 = 0; double average = 0; printf("請輸入5門課程的成績:"); scanf("%d%d%d%d%d", &score1, &score2, &score3, &score4, &score5); average = (double)(score1 + score2 + score3 + score4 + score5) / 5; printf("平均成績是:%.2lf\n", average); }
- 從鍵盤輸入3個數(shù)榄审,輸出其中的最大者。
#include<stdio.h> void main() { int a = 0, b = 0, c = 0; int max = 0; printf("請輸入3個整數(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個數(shù)杆麸,將其從小到大排序后輸出搁进。
#include<stdio.h> #define ARR_LEN 3 void main() { int arr[ARR_LEN] = { 0 }; int temp = 0; // 讀入三個數(shù) for (int i = 0; i < ARR_LEN; i++) { printf("請輸入第%d個數(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); } // 十個數(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); }
- 編寫一個程序减细,輸入半徑匆瓜,求圓的面積和體積。
#include<stdio.h> #define PI 3.14 void main() { double r = 0; printf("請輸入圓的半徑:"); scanf("%lf", &r); printf("圓的周長:%.2lf\n", 2 * PI * r); printf("圓的面積:%.2lf\n", PI * r * r); }
- 從鍵盤輸入兩個數(shù)未蝌,對其進(jìn)行加減乘除操作并將結(jié)果輸出至屏幕驮吱。
#include<stdio.h> void main() { int a = 0; int b = 0; printf("請輸入兩個整數(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è)計
常用輸入輸出函數(shù)
- scanf()
- printf()
- getchar():用戶輸入的數(shù)據(jù)會被放入鍵盤緩沖區(qū),當(dāng)按下回車鍵時萧吠,系統(tǒng)就會從緩沖區(qū)中每次讀入一個字符左冬。
- putchar()
習(xí)題答案
一、選擇題
- A
- C
- C
- B
- B
- D
- A
- A
- B
- C 注意:printf()函數(shù)中的表達(dá)式時按照從右往左的順序進(jìn)行計算的纸型。
二拇砰、填空題
- 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
三、編程題
- 計算一元二次方程的 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); }
- 已知三角形的三邊,計算三角形的面積琼腔,結(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("請輸入三角形的三邊:"); 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); }
- 已知一個圓的周長,編寫一個程序求其面積。要求從鍵盤輸入圓的周長光坝,將計算得出的面積輸出至屏幕尸诽。
#include<stdio.h> #include<math.h> void main() { double length = 0.0; double r = 0.0; double area = 0.0; printf("請輸入圓的周長:"); scanf("%lf", &length); r = length / 2 / 3.14; area = 3.14 * r * r; printf("面積位:%lf\n", area); }
- 編寫一個程序,從鍵盤輸入一個字符盯另,實現(xiàn)輸出臨近該字符的5個字符(包括該字符性含,并以該字符為中心)。
#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); }
- 編寫一個程序鸳惯,從鍵盤輸入一個梯形的上底商蕴、下底和高,求其面積并將結(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("請輸入梯形的上底下底和高:"); scanf("%lf%lf%lf", &top_len, &bottom_len, &height); area = (double)1 / 2 * (top_len + bottom_len) * height; printf("面積為:%.2lf\n", area); }
- 從鍵盤輸入一串字符究恤,從該字符串中統(tǒng)計字符a的個數(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個數(shù)后德,編寫一個程序計算其總和及平均值。
#include<stdio.h> void main() { int a = 0; int b = 0; int c = 0; int sum = 0; float average = 0.0f; printf("請輸入三個整數(shù):"); scanf("%d%d%d", &a, &b, &c); sum = a + b + c; average = (float)sum / 3; printf("總和是:%d, 平均值是:%.2f\n", sum , average); }
- 編寫程序?qū)r間轉(zhuǎn)化為秒后輸出抄腔,例如8時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("請輸入時分秒:"); scanf("%d%d%d", &hour, &minute, &second); result = hour * 3600 + minute * 60 + second; printf("等價于%d秒\n", result); }
- 從鍵盤輸入兩個數(shù),交換兩個數(shù)的值赫蛇,再輸出至屏幕绵患。
#include<stdio.h> void main() { int a = 0; int b = 0; int temp = 0; printf("請輸入兩個整數(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,從鍵盤輸入一個數(shù)悟耘,輸出對應(yīng)的 y 值落蝙。
#include<stdio.h> void main() { int x = 0; int y = 0; printf("請輸入x的值:"); scanf("%d", &x); y = 5 * x + 3; printf("y的值是:%d\n", y); }
- 從鍵盤輸入一個小寫字母,要求將其轉(zhuǎn)換為大寫字母后輸出暂幼。
#include<stdio.h> void main() { char c = '\0'; c = getchar(); if ('a' <= c && c <= 'z') { c -= 32; printf("對應(yīng)的大寫字母為:%c\n", c); } else { printf("輸入不合法\n"); } }
第5章 條件結(jié)構(gòu)程序設(shè)計
分類
- 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
三旺嬉、編程題
- 輸入三個數(shù)管行,輸出其中的最大數(shù)和最小數(shù)。
#include<stdio.h> void main() { int a = 0; int b = 0; int c = 0; int max = 0; int min = 0; printf("請輸入三個整數(shù):"); scanf("%d%d%d", &a, &b, &c); // 計算最大數(shù) max = a; if (max < b) { max = b; } if (max < c) { max = c; } // 計算最小數(shù) min = a; if (min > b) { min = b; } if (min > c) { min = c; } // 輸出最大數(shù)和最小數(shù) printf("最大數(shù)是:%d\n最小數(shù)是:%d\n", max, min); }
- 用*號輸出字母C的團(tuán)邪媳。
#include<stdio.h> void main() { printf("*****\n"); printf("*\n"); printf("*\n"); printf("*\n"); printf("*****\n"); }
- 某班進(jìn)行學(xué)習(xí)成績評估捐顷,若學(xué)習(xí)成績大于或等于90分的同學(xué)用A表示,60~89分之間的同學(xué)用B表示雨效,60分以下的同學(xué)用C表示迅涮。利用條件運算符的嵌套來完成此題。
#include<stdio.h> void main() { int score = 0; printf("請輸入成績:"); scanf("%d", &score); if (score >= 90) { printf("A"); } else if (score >= 60) { printf("B"); } else { printf("C"); } }
- 輸入一個年份徽龟,判斷該年是否為閏年叮姑。
#include<stdio.h> void main() { int year = 0; printf("請輸入年份:"); 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("請輸入年月日:"); 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("對應(yīng)的天數(shù)是:%d\n", sum); }
- 輸入一個數(shù)戏溺,判斷其為奇數(shù)還是偶數(shù)渣蜗。
#include<stdio.h> int main() { int a = 0; printf("請輸入一個整數(shù):"); scanf("%d", &a); // 判斷是否是偶數(shù) if (a % 2 == 0) { printf("%d 是偶數(shù)\n", a); } else { printf("%d 是奇數(shù)\n", a); } return 0; }
- 從鍵盤輸入兩個數(shù),調(diào)換這兩個數(shù)的值旷祸。
#include<stdio.h> int main() { int a = 0; int b = 0; int temp = 0; // 從鍵盤輸入兩個整數(shù) printf("請輸入兩個整數(shù):"); scanf("%d%d", &a, &b); // 輸出交換前的值 printf("交換前:a=%d, b=%d\n", a, b); // 交換這兩個數(shù) temp = a; a = b; b = temp; // 輸出交換后的結(jié)果 printf("交換后:a=%d, b=%d\n", a, b); return 0; }
- 輸入一個不超過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)變量 // 輸入一個不超過5位的數(shù)字 printf("請輸入一個不超過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); // 分別輸出各個位的數(shù)字 printf("\n該數(shù)的各個位的數(shù)字是:\n"); i = count; temp = a; while (i) { printf("%d 位數(shù)字是:%d\n", i, temp % 10); temp /= 10; i--; } // 各個位的數(shù)字加1后輸出 printf("\n該數(shù)的各個位的數(shù)字加1是:\n"); i = count; temp = a; while (i) { printf("%d 位數(shù)字是:%d\n", i, temp % 10 + 1); temp /= 10; i--; } return 0; }
- 編寫一個程序輸入一個學(xué)生三次的成績,并判斷該學(xué)生三次是否都及格闰围。若不及格則輸出“有不及格科目”赃绊,若都及格則輸出三次的平均成績。
#include<stdio.h> int main() { int a = 0; int b = 0; int c = 0; float average = 0.0f; // 輸入三門成績 printf("請輸入三門課程的成績:"); 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)境中運行看看碧查,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è)計
分類
- 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
- 運行結(jié)果是:
***** **** *** ** *
- ***27
- 1
- 6
- 1,2
- 4
- 18
- 1.283333
- 27
- 運行結(jié)果為:
# ## ###
- 24
三、編程題
- 編寫一個程序迄沫,求出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; }
- 從鍵盤輸入一個數(shù)n宁昭,求其階乘n!。
#include<stdio.h> int main() { int num = 0; int sum = 1; printf("請輸入一個整數(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ù)游戲:游戲中隨機產(chǎn)生一個1~100之間的數(shù)隆圆,請用戶猜數(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("哎呀旨涝,猜錯了,再猜一次吧!\n"); } } if (flag) { printf("恭喜您猜對啦\n"); } else { printf("您已經(jīng)猜了10次侣背,都沒有猜對哦\n"); } return 0; }
- 求出100~400中滿足條件的所有數(shù)白华,要求三個數(shù)字之積為24,三個數(shù)字之和為12贩耐。
#include<stdio.h> int main() { for (int i = 100; i <= 400; i++) { // 計算各個位數(shù)字之和 int sum = i % 10 + i % 100 / 10 + i / 100; // 計算各個位數(shù)字之積 int temp = (i % 10) * (i % 100 / 10) * (i / 100); // 判斷是否是要找的數(shù)字 if (temp == 24 && sum == 12) { printf("%d\n", i); } } return 0; }
- 從鍵盤輸入20個數(shù)弧腥,求出其中正數(shù)的個數(shù)及其平均值。
#include<stdio.h> int main() { int num = 0; // 每次輸入的數(shù)字 int count = 0; // 正數(shù)的個數(shù) int sum = 0; // 所有正數(shù)的和 // 輸入20個數(shù)字 for (int i = 0; i < 20; i++) { printf("請輸入第 %d 個數(shù)字:", i+1); scanf("%d", &num); if (num > 0) { count++; sum += num; } } // 求平均數(shù)并輸出 printf("正數(shù)的個數(shù)是 %d 個潮太,其平均值是 %.2f\n", count, (float)sum / count); return 0; }
- 編寫一個程序管搪,打印出所有的水仙花數(shù)。
#include<stdio.h> int main() { int a = 0; // 保存?zhèn)€位數(shù) int b = 0; // 保存十位數(shù) int c = 0; // 保存百位數(shù) int d = 0; // 保存各個位的平方之和 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)計其中的字母抛蚤、空格、數(shù)字及其他字符的個數(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("請輸入一個字符串:\n"); gets_s(str, STR_LEN); // 計算每種類型的字符的個數(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)計的結(jié)果 printf("字母有 %d 個\n空格有 %d 個\n數(shù)字有 %d 個\n其他有 %d 個\n", alpha, blank, digit, other); return 0; }
- 編寫程序,從鍵盤輸入一個數(shù)朋沮,判斷是否為素數(shù)并輸出相應(yīng)的信息至屏幕蛇券。
#include<stdio.h> #include<stdbool.h> int main() { int num = 0; bool flag = true; printf("請輸入一個整數(shù):"); scanf("%d", &num); for (int i = 2; i < num / 2; i++) { if (num % i == 0) { flag = false; } } if (flag) { printf("%d是素數(shù)\n", num); } else { printf("%d不是素數(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])
- 運行結(jié)果如下:
1234 5678 9000
- 6
- aceg
- 1471013
- 02345078
- 1-11-11
- Hello world!
- 80
- 運行結(jié)果如下:
第1個元素為1 第2個元素為2 第3個元素為3 第4個元素為4 第5個元素為5 第6個元素為6 第7個元素為7 第8個元素為8 第9個元素為9 第10個元素為10
三筋夏、編程題
- 設(shè)有以下10個數(shù)(4蒂胞,2,7条篷,8骗随,9,10赴叹,11鸿染,24,5乞巧,6)涨椒,編寫程序用選擇排序法使這10個數(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個整數(shù)蚕冬,統(tǒng)計并輸出這些數(shù)字中正數(shù)的個數(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ù)的個數(shù)是%d\n", count); return 0; }
- 從鍵盤輸入一個字符串,編寫一個程序?qū)崿F(xiàn)從鍵盤輸入一個數(shù)囤热,可刪除字符串該位置上的字符并輸出改變后的字符串猎提。
#include<stdio.h> #define STR_LEN 100 int main() { char str[STR_LEN] = { '\0 ' }; int position = 0; printf("請輸入一個字符串:\n"); gets(str, STR_LEN); printf("請輸入一個整數(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; }
- 編寫一個程序,實現(xiàn)從鍵盤輸入10個整數(shù)赢乓,將其逆序輸出忧侧。
#include<stdio.h> #define ARR_LEN 10 int main() { int num[ARR_LEN] = { 0 }; // 從鍵盤輸入ARR_LEN個數(shù)字 for (int i = 0; i < ARR_LEN; i++) { printf("請輸入第%d個數(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)有一個長度為4X5的二維數(shù)組,要求將該數(shù)組的行和列元素互換牌芋,保存至另外一個數(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 }; // 行列元素互換保存到另一個數(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; }
- 編寫一個程序躺屁,實現(xiàn)兩個字符串的合并肯夏。
#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; }
- 編寫一個程序,將字符串倒序并輸出至屏幕犀暑。
#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個數(shù)據(jù)驯击,利用冒泡排序法對其從小到大排序后輸出至屏幕。
#include<stdio.h> int main() { int num[10] = { 0 }; int temp = 0; // 從鍵盤輸入10個整數(shù) for (int i = 0; i < 10; i++) { printf("請輸入第%d個整數(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)計其中字符的個數(shù)。
#include<stdio.h> int main() { char str[100] = ""; int count = 0; // 從鍵盤輸入一個字符串 printf("請輸入一個字符串:\n"); gets(str, 100); // 統(tǒng)計#前面的字符的個數(shù) for (int i = 0; str[i] != '#' && str[i] != '\0'; i++) { count++; } // 輸出結(jié)果 printf("字符個數(shù)為:%d\n", count); return 0; }
- 現(xiàn)有一個字符串广辰,刪除特定位置上的字符串暇矫,輸出至屏幕。
#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
三、編程題
- 編寫一個函數(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個字符串,對這5個字符串從小到大排列并輸出排列結(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個字符串 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; }
- 編寫一個函數(shù)囱持,通過指針實現(xiàn)兩個數(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; }
- 從鍵盤輸入一個字符串焕济,分別統(tǒng)計字符串中字母洪唐、數(shù)字及其他字符的個數(shù)并輸出。
#include<stdio.h> int main() { char str[100] = { '\0' }; char *p = str; int alpha = 0; int digit = 0; int other = 0; // 從鍵盤上輸入一個字符串 gets(p, 100); // 統(tǒng)計字符個數(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)計結(jié)果 printf("字母有%d個吼蚁,數(shù)字有%d個凭需,其他有%d個\n", alpha, digit, other); return 0; }
- 從鍵盤輸入一個字符串和一個數(shù)字n问欠,要求從字符串第n個字符開始至字符串的末尾重新組成一個字符串輸出可帽。
#include<stdio.h> int main() { char str[100] = { '\0' }; char str2[100] = { '\0' }; char *p = NULL; char *p2 = NULL; int n = 0; // 從鍵盤上輸入一個字符串 gets(str, 100); scanf("%d", &n); p = str; p += n - 1; p2 = str2; while (*p2++ = *p++) { ; } // 輸出結(jié)果 puts(str2); return 0; }
- 編寫一個程序垮斯,要求利用指針求任意數(shù)據(jù)的絕對值。
#include<stdio.h> int main() { int num = 0; int *p = NULL; // 從鍵盤輸入一個整數(shù) printf("請輸入一個整數(shù):"); scanf("%d", &num); // 求num的絕對值 p = # if (*p < 0) { *p = -*p; } // 輸出num的絕對值 printf("%d\n", *p); return 0; }
- 從鍵盤輸入10個數(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個數(shù)字 for (int i = 0; i < ARR_LEN; i++) { printf("請輸入第 %2d 個數(shù):", i + 1); scanf("%d", &num[i]); } // 逆序存入另一個數(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; }
- 從鍵盤輸入一個字符串注整,將其逆序輸出。
#include<stdio.h> #include<string.h> #define ARR_LEN 100 int main() { char str[ARR_LEN] = { '\0' }; char *p = NULL; // 從鍵盤輸入一個字符串 gets(str, ARR_LEN); // 逆序輸出 p = str; p += strlen(str) - 1; for (int i = 0; i < strlen(str); i++) { putchar(*p); p--; } return 0; }
- 從鍵盤輸入兩個字符串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; // 從鍵盤輸入連個字符串 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; }
- 從鍵盤輸入兩個字符串,編寫一個程序拍段兩個字符串是否相等蕊程。
#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; // 從鍵盤輸入兩個字符串 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
- 運行結(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
三藻茂、編程題
- 編寫一個函數(shù)驹暑,從鍵盤輸入一個字符串,將其反序輸出辨赐。
#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("請輸入一個字符串:\n"); gets(str, 100); reverse(str); return 0; }
- 從鍵盤輸入一個數(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("請輸入一個整數(shù):");
scanf("%d", &n);
printf("值為:%d\n", iterate(n));
return 0;
}
- 從鍵盤輸入一個字符串帆焕,要求從該字符串的第n個位置開始至末位組成一個新的字符串并將結(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; }
- 從鍵盤輸入一個字符串不恭,統(tǒng)計其中字母的個數(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; }
- 編寫一個函數(shù),判斷一個數(shù)是否為素數(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("請輸入一個整數(shù):"); scanf("%d", &n); printf("%d %s是素數(shù)\n", n, sushu(n) ? "" : "不"); return 0; }
- 從鍵盤輸入多個字符串,編寫一個函數(shù)對這些字符串從大到小排序佑力,并輸出排序結(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; }
- 編寫一個程序,求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; }
- 編寫一個函數(shù)暴拄,判斷一個字母是否為小寫字母,若為小寫字母則轉(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; }
- 編寫一個函數(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; }
- 編寫一個函數(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)識名;
習(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
- 運行結(jié)果如下:
5,89.5 8,91.7
- 20,Marry10,Marry
三、編程題
- 編寫一個程序讼溺,用來記錄一個學(xué)生的信息楣号。
#include <stdio.h> int main() { struct student { char name[10]; // 姓名 int num; // 學(xué)號 int age; // 年齡 char sex; // 性別 int score; // 成績 }; struct student stu; printf("請輸入學(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é)號炫狱、姓名、性別剔猿、成績等信息视译,再將其輸出。
#include <stdio.h> int main() { struct student { char name[10]; // 姓名 int num; // 學(xué)號 int age; // 年齡 char sex; // 性別 int score; // 成績 }; struct student stu[5]; printf("請輸入學(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)體輸入若干個學(xué)生的信息憎亚,將其寫至文件中。
#include <stdio.h> int main() { struct student { char name[10]; // 姓名 int num; // 學(xué)號 int age; // 年齡 char sex; // 性別 int score; // 成績 }; struct student stu[5]; FILE *fp = NULL; printf("請輸入學(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)建一個鏈表弄慰,輸入若干個學(xué)生的信息第美,其中包括學(xué)號、姓名陆爽、成績什往,將結(jié)果輸出至屏幕。
#include <stdio.h> #include <stdlib.h> struct student { int num; // 學(xué)號 char name[20]; // 姓名 int score; // 成績 struct student *next; }; int main() { int n = 0; // 學(xué)生的數(shù)量 struct student *head = NULL; struct student *tail = NULL; struct student *temp = NULL; printf("請輸入學(xué)生的數(shù)量:"); scanf("%d", &n); for (int i = 0; i < n; i++) { temp = malloc(sizeof(struct student)); printf("請輸入第 %d 個學(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; }
- 編寫一個函數(shù)慌闭,在鏈表的任意位置上插入一個結(jié)點别威。
/* 在第4題基礎(chǔ)上增加了插入功能 */ #include <stdio.h> #include <stdlib.h> struct student { int num; // 學(xué)號 char name[20]; // 姓名 int score; // 成績 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é)點(編號從1開始) int i = 0; // 計數(shù)器 struct student *head = NULL; struct student *tail = NULL; struct student *temp = NULL; struct student *temp2 = NULL; printf("請輸入學(xué)生的數(shù)量:"); scanf("%d", &n); for (int i = 0; i < n; i++) { temp = malloc(sizeof(struct student)); printf("請輸入第 %d 個學(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個位置之后插入節(jié)點 printf("\n請輸入位置:"); scanf("%d", &p); i = 1; temp = head; while (temp) { if (i == p) { temp2 = malloc(sizeof(struct student)); printf("請輸入學(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; }
- 編寫一個程序,打印出5名學(xué)生的信息至屏幕驴剔,要求輸出單獨編寫成一個函數(shù)省古。
#include <stdio.h> struct student { char name[10]; // 姓名 int num; // 學(xué)號 int age; // 年齡 char sex; // 性別 int score; // 成績 }; 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("請輸入學(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();
- 出錯檢查函數(shù)
ferror(); clearerr();
習(xí)題答案
一、選擇題
- C
- C
- D
- A
- D
- C
- C
- B
二丧失、填空題
- ajig
- abcd
- abcdef
- Hello 15
- Beijing shanghai tianjin
- 0123456789
- 7
- 運行結(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; }
- 編寫一個程序琳拭,由鍵盤輸入5個學(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個學(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; }
- 編寫一個程序白嘁,實現(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; }
- 編寫程序膘流,實現(xiàn)兩個文件的合并絮缅,即將兩個文件中的內(nèi)容復(fù)制到其中一個文件中鲁沥。
#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; }
- 編寫程序,從文件中隔一個字符進(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)識符 字符串 #undef 用戶標(biāo)識符
- 帶參數(shù)的宏
#define 宏名 字符串
- 帶參數(shù)的宏和函數(shù)的關(guān)系
- 函數(shù)調(diào)用參數(shù)傳遞的過程中會產(chǎn)生一個中間值屎开,而帶參數(shù)的宏只是進(jìn)行字符串的替換阐枣,不會產(chǎn)生中間值。
- 函數(shù)中實參要與形參的類型一致奄抽,而宏定義不要求一致蔼两。
- 函數(shù)只能返回一個值,而宏定義可以返回多個值逞度。
文件包含
#define <文件名稱>
或
#include "文件名稱"
條件編譯
#ifdef 標(biāo)識符
程序1
#else
程序2
#endif
不同存儲類型的變量
- 自動類型變量
[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中的素數(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ù)的宏,從三個數(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; }
- 從鍵盤輸入一個數(shù)抑胎,利用宏求出其平方值及其平方根。
#include <stdio.h> #include <math.h> #define H(x) (x)*(x) #define S(x) sqrt(x) int main() { double num = 0; printf("請輸入一個整數(shù):"); scanf("%lf", &num); printf("%lf, %lf\n", H(num), S(num)); return 0; }
- 從鍵盤輸入一個圓錐的半徑和高度渐北,通過宏定義求出圓錐體積阿逃。
#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("請輸入圓錐的半徑和高度:"); scanf("%lf%lf", &r, &h); printf("圓錐的表面積是:%lf\n", S(r, h)); return 0; }