第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);
}