C Primer Plus 第6版 第8章 程式設計練習
阿新 • • 發佈:2018-12-18
-- 這章的練習要使用重定向,如果不能使用,可以用特殊字元代替EOF
1.統計讀到檔案結尾之前讀取的字元數。
#include<stdio.h>
int main(void)
{
char ch;
int char_num = 0;
while ((ch = getchar()) != EOF)
char_num++;
printf("char_num = %d", char_num);
return 0;
}
2.略
3.讀到EOF,報告大寫字母和小寫字母的字數。
#include<stdio.h> int main(void) { char ch; int Big = 0; int Small = 0; while ((ch = getchar()) != EOF) { if ('a' <= ch && ch <= 'z') Small++; else if ('A' <= ch && ch <= 'Z') Big++; } printf("小寫有 %d個, 大寫有 %d 個",Small,Big); return 0; }
4.報告讀取單詞的平均字母數。(簡化版)
#include<stdio.h> #include<ctype.h> int main(void) { char ch; int num_words = 0; //單詞數量 int num_a = 0; //字母數量 while ((ch = getchar()) != EOF) { if (ch == ' ') num_words++; // 每個單詞後面有1個空格 else if(isalpha(ch) ) num_a++; } num_words++; // 最後一個單詞後面沒有空格,所以在這裡+1 printf("一共%d個單詞,%d個字母,平均每個單詞有%f個字母", num_words, num_a, 1.0*num_a / num_words); getchar(); getchar(); return 0; }
5.二分查詢猜數. 比如猜數0~100,先猜50,如果使用者說大了, 就猜 0~50的中間值 25.
這道題剛開始犯了個錯誤,就是字串直接用 == 比較了,然後一直出錯。後來想起來要用strcmp比較字串。
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> int main(void) { int max; int min; bool bingo = false; char condtion[20]; int answer; printf("輸入數字的範圍:\n最小值:"); scanf_s("%d", &min); printf("最大值:"); scanf_s("%d", &max); printf("想好一個數字,不要說出來,我要開始猜了\n"); while (!bingo) { printf("我猜是%d\n", (max + min)/2); printf("大了?小了?對了?(請輸入這3個之一)"); scanf("%s", condtion); if (strcmp(condtion, "大了") == 0) max = (max + min) / 2; else if (strcmp(condtion, "小了") == 0) min = (max + min) / 2; else if (strcmp(condtion, "對了") == 0) { bingo = true; answer = (max + min) / 2; } } printf("答案是%d,再見",answer); getchar(); getchar(); return 0; }