C Primer Plus(第五版)學習(五)

第7章《C控制語句:分支和跳轉》是我覺得用來開發具有智能行爲的基礎,所以這一章我也用了好長時間去研讀。關鍵字:continue,break,goto(爲了避免程序胡亂跳,最好不用),if else,while,switch。還有如何判斷素數,如何讓用戶不斷輸入等等這些都是讓我思考的問題。

我做的課後編程習題如下(如有不對的地方請指出來其一探討,謝謝):

1.編寫以個程序。該程序讀取輸入直到遇到#字符,然後報告讀取的空格數目、讀取的換行符數目以及讀取的所有其他字符數目。

#include <stdio.h>
#define STOP '#'//以#號作爲結尾
#include <ctype.h>
int main(void)
{
	char c;//讀入的字符
	int n_space=0;//空格數目
	int n_line=0;//換行符數目
	int n_words=0;//其他字符數目
	printf("請輸入一段內容(以#結尾):");
	while((c=getchar())!=STOP)
	{
		if(c=='\n')
			n_line++;//統計行
		if(isspace(c))
			n_space++;//統計空格
		n_words++;//統計其他字符
	}
	printf("空格數目=%d, 換行符數目=%d, 其他字符數目=%d\n",n_space,n_line,n_words);
	return 0;
}

2.編寫一個程序。該程序讀取輸入直到遇到#字符。是程序打印每個輸入的字符以及它的十進制ASCII碼。每行打印8個字符/編碼對。建議:利用字符計數和模運算符(%)在每8個循環週期時打印一個換行符。

#include <stdio.h>
#define STOP '#'
int main(void)
{
	char c;//用戶讀取字符
	int n=0;//用來計數字符數
	printf("輸入的字符以及對應的ASCII碼如下.\n");
	printf("用戶輸入一段內容(以#號結束):");
	while ((c=getchar())!=STOP)
	{
		n++;
		printf("%2c/%2d",c,c);
		if(0==n%8)
			printf("\n");
	}
	printf("\n");
	return 0;
}

3.編寫一個程序。該程序讀取整數,直到輸入0.輸入終止後,程序應該報告輸入的偶數(不包括0)總個數、偶數的平均值,輸入的奇數總個數以及奇數的平均值。

#include <stdio.h>
#define STOP '0'
int main(void)
{
	int nu;
	int sum_a=0;
	int cout_a=0;//偶數個數
	int sum_b=0;
	int cout_b=0;//奇數個數
	printf("請輸入整數(以0結束):\n");

	while((nu=getchar())!=STOP)
	{
		if('\n'==nu)//以回車符作爲輸入整數的間隔符
			continue;
		 nu=nu-48;//用自己的數值進行計算,不用ASCII碼
		if(nu%2==0)//如果是偶數
		{
			cout_a++;
			sum_a+=nu;
		}
		else//如果是奇數
		{
			cout_b++;
			sum_b+=nu;
		}
	}
	printf("偶數的個數 %d,偶數的平均數%d.\n",cout_a,sum_a/cout_a);
	printf("奇數個數 %d, 奇數的平均數%d.\n",cout_b,sum_b/cout_b);
	return 0;
}

4.利用switch重做第3題。

#include <stdio.h>
#define STOP '0'
int main(void)
{
	int nu;
	int sum_a=0;
	int cout_a=0;//偶數個數
	int sum_b=0;
	int cout_b=0;//奇數個數
	printf("請輸入整數(以0結束):\n");
	while((nu=getchar())!=STOP)
	{
		if('\n'==nu)//以回車符作爲輸入整數的間隔符
			continue;
		nu=nu-48;//用自己的數值進行計算,不用ASCII碼
		switch(nu%2)
		{
			case 0://偶數情況
				cout_a++;
				sum_a+=nu;
				break;
			case 1://奇數情況
				cout_b++;
				sum_b+=nu;
				break;
			default:
				break;
		}
			
	}
	printf("偶數的個數 %d,偶數的平均數%d.\n",cout_a,sum_a/cout_a);
	printf("奇數個數 %d, 奇數的平均數%d.\n",cout_b,sum_b/cout_b);
	return 0;
}


5.編寫程序,要求輸入一週中的工作小時數,然後打印工資總額、稅金以及淨工資。作如下假設:

  a.基本工資等級=10.00美元/小時

  b.加班(超過40小時)=1.5倍的時間

  c.稅率  前300美元爲15%;下一個150美元爲20%;餘下的爲%25.

用#define定義常量。

#include <stdio.h>
#define FOUD 10//基本工資10美元/小時
#define RAT_1 0.15//稅率前300美元爲15%
#define RAT_2 0.20//下一個150美元爲20%
#define RAT_3 0.25//餘下的爲25%
#define B_T 40//加班時間分界點
#define BREAK_1 300//分界點300美元
#define BREAK_2 450//分界點450美元
#define BASE_1 (FOUD*B_T)//工作40小時總工資

double tax(double fg);//用來計算稅金

int main(void)
{
	double total=0,taxes=0,netpay=0;//總額,稅金,淨工資
	int time;//一週工作時間
	printf("請輸入您一週工作時間:");
	scanf("%d",&time);
	if (time<=B_T)
	{
		total=FOUD*time;
		taxes=tax(total);
		netpay=total-taxes;
	}
	else
	{
		total=BASE_1+FOUD*(time-B_T)*1.5;
		taxes=tax(total);
		netpay=total-taxes;
	}
	printf("您的工資總額 %.1f,稅金 %.1f,淨工資 %.1f.\n",total,taxes,netpay);
	return 0;
}

double tax(double fg)
{
	if (fg<=BREAK_1)
		return (fg*RAT_1);
	else if(fg<=BREAK_2)//總額在300美元到450美元之間
		return ((fg-BREAK_1)*RAT_2+BREAK_1*RAT_1);
	else//總額超過450美元的時候 
		return (BREAK_1*RAT_1+(BREAK_2-BREAK_1)*RAT_2+(fg-BREAK_2)*RAT_3);
}




發佈了35 篇原創文章 · 獲贊 6 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章