1. 程式人生 > >C Primer Plus 第6版 第8章 程式設計練習

C Primer Plus 第6版 第8章 程式設計練習

-- 這章的練習要使用重定向,如果不能使用,可以用特殊字元代替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;
}