C語言程序設計-筆記2-分支結構
例3-1 簡單的猜數游戲。輸入你所猜的整數(假定1-100),與計算機產生的被猜數比較,若相等,顯示猜中;若不等,顯示與被猜數的大小關系。
/*簡單的猜數游戲*/
#include<stdio.h>
int main(void)
{
int mynumber=38; //計算機指定被猜的數
int yournumber;
printf("Input your number:");
scanf("%d",&yournumber);
if(yournumber==mynumber)
{
printf("Good Guess!\n");
}
else if(yournumber>mynumber)
{
printf("Too big!\n");
}
else
{
printf("Too small!\n");
}
return 0;
}
例3-2 奇偶分家。輸入一個正整數n,再輸入n個非負整數,統計奇數和偶數各有多少個?
#include<stdio.h>
int main(void)
{
int count_odd=0,count_even=0;
int i,n,number;
printf("Enter n:");
scanf("%d",&n);
printf("Enter %d numbers:",n);
for(i=1;i<=n;i++)
{
scanf("%d",&number);
if(number%2==0)
{
count_even++;
}
else
{
count_odd++;
}
}
printf("odd:%d,even:%d\n",count_odd,count_even);
return 0;
}
例3-3 統計指定數量學生的平均成績與不及格人數。輸入一個非負整數n,再輸入n個學生的成績,計算平均分,並統計不及格成績的學生人數。
#include<stdio.h>
int main(void)
{
int count,i,n;
double score,total;
printf("Enter n:");
scanf("%d",&n);
total=0;
count=0;
for(i=1;i<=n;i++)
{
printf("Enter score #%d:",i);
scanf("%lf",&score);
total=total+score;
if(score<60)
{
count++;
}
}
if(n!=0)
{
printf("Average=%.2f\n",total/n);
}
else
{
printf("Average=%.2f\n",0.0);
}
printf("Number of failures=%d\n",count);
return 0;
}
例3-4 分段計算居民水費。繼續討論例2-4中提出的分段計算水費的問題,雖然實際生活中不會出現月用水量x小於0的情況,但程序運行時如果不慎輸入一個負數,水費計算將會出錯。為了完善分段計算水費的程序,現將居民應交水費y(元)與月用水量x(噸)的函數關系式修正如下,並編程實現。
y=f(x)=
#include<stdio.h>
int main(void)
{
double x,y; //x--shuiliang y--shuifei
printf("Enter x:");
scanf("%lf",&x);
if(x<0)
{
y=0;
}
else if(x<=15)
{
y=4*x/3;
}
else
{
y=2.5*x-10.5;
}
printf("f(%.2f)=%.2f\n",x,y);
return 0;
}
例3-5 求解簡單的四則運算表達式。輸入一個形如“操作數 運算符 操作數“的四則運算表達式,輸出運算結果,要求對除數為0的情況作特別處理。
/*求解簡單的四則運算表達式*/
#include<stdio.h>
int main(void)
{
double value1,value2;
char op;
printf("Type in an expression:");
scanf("%lf%c%lf",&value1,&op,&value2);
if(op=='+')
{
printf("%.2f\n",value1+value2);
}
else if(op=='-')
{
printf("%.2f\n",value1-value2);
}
else if(op=='*')
{
printf("%.2f\n",value1*value2);
}
else if(op=='/')
{
if(value2!=0)
{
printf("%.2f\n",value1/value2);
}
else
{
printf("Divisor can not be 0!\n");
}
}
else
{
printf("Unknown operator!\n");
}
return 0;
}
例3-char 輸入8個字符,然后將這些字符輸出,輸出時在字符之間加一個減號,首尾沒有。
#include<stdio.h>
int main(void)
{
char ch;
int first=1,k;
printf("Enter 8 characters:");
for(k=1;k<=8;k++)
{
ch=getchar();
if(first==1)
{
putchar(ch);
first=0;
}
else
{
putchar('-');
putchar(ch);
}
}
return 0;
}
例3-6 寫出滿足下列條件的C語言表達式。
1) Ch是空格或者回車。
2) year是閏年,即year能被4整除但不能被100整除,或year能被400整除。
解答:
1) ch==’ ‘ || ch==’\n’;
2) year%4==0 && year%100!=0 || year%400==0;
例3-7 統計英文字母和數字字符。輸入一個正整數n,再輸入n個字符,統計其中英文字母、數字字符和其他字符的個數。
#include<stdio.h>
int main(void)
{
int digit,letter,other,i,n;
char ch;
digit=letter=other=0;
printf("Enter n:");
scanf("%d",&n);
getchar();
printf("Enter %d characters:",n);
for(i=1;i<=n;i++)
{
ch=getchar();
if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
{
letter++;
}
else if(ch>='0'&&ch<='9')
{
digit++;
}
else
{
other++;
}
}
printf("letter=%d,digit=%d,other=%d\n",letter,digit,other);
return 0;
}
例3-8 查詢自動售貨機中商品的價格。假設自動售貨機出售4種商品:薯片(crisps)、爆米花(popcorn)、巧克力(chocolate)和可樂(cola),售價分別是每份3.0、2.5、4.0和3.5元。在屏幕上顯示以下菜單(編號和選項),用戶可以連續查詢商品的價格,當查詢次數超過5次時,自動退出查詢;不到5次時,用戶可以選擇退出。當用戶輸入編號1-4,顯示相應商品的價格(保留1位小數);輸入0,退出查詢;輸入其他編號,顯示價格為0。
[1] Select crisps
[2] Select popcorn
[3] Select chocolate
[4] Select cola
[5] Exit
#include<stdio.h>
int main(void)
{
int choice,i;
double price;
printf("[1] Select crisps\n");
printf("[2] Select popcorn\n");
printf("[3] Select chocolate\n");
printf("[4] Select cola\n");
printf("[0] exit\n");
for(i=1;i<=5;i++)
{
printf("Enter choice:");
scanf("%d",&choice);
if(choice==0)
{
break;
}
switch(choice)
{
case 1:price=3.0;break;
case 2:price=2.5;break;
case 3:price=4.0;break;
case 4:price=3.5;break;
default:price=0.0;break;
}
printf("price=%0.1f\n",price);
}
printf("Thanks\n");
return 0;
}
例3-9 兩個數的簡單計算器。編寫一個簡單計算器程序,可根據輸入的運算符,對兩個整數進行加、減、乘、除和求余運算,請對除數為0的情況作特別處理。要求使用switch語句編寫。
#include<stdio.h>
int main(void)
{
int value1,value2;
char op;
printf("Type in an expression:");
scanf("%d%c%d",&value1,&op,&value2);
switch(op)
{
case '+':
printf("=%d\n",value1+value2);
break;
case '-':
printf("=%d\n",value1-value2);
break;
case '*':
printf("=%d\n",value1*value2);
break;
case '/':
if(value2!=0)
{
printf("=%d\n",value1/value2);
}
else
{
printf("Divisor can not be 0!\n");
}
break;
case '%':
if(value2!=0)
{
printf("=%d\n",value1%value2);
}
else
{
printf("Divisor can not be 0!\n");
}
break;
default:
printf("Unknown operator\n");
break;
}
return 0;
}
例3-10 輸入一個正整數n,再輸入n個字符,分別統計出其中空格或回車、數字字符和其他字符的個數。要求使用switch語句編寫。
#include<stdio.h>
int main(void)
{
int blank,digit,i,n,other;
char ch;
blank=digit=other=0;
printf("Enter n:");
scanf("%d",&n);
getchar();
printf("Enter %d characters:",n);
for(i=1;i<=n;i++)
{
ch=getchar();
switch(ch)
{
case ' ':
case '\n':
blank++;
break;
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
digit++;
break;
default:
other++;
break;
}
}
printf("blank=%d,digit=%d,other=%d\n",blank,digit,other);
return 0;
}
例3-11 改寫下列if語句,使else和第一個if配對。
if(x<2)
if(x<1) y=x+1;
else y=x+2;
解:
1) 使用大括號
if(x<2){
if(x<1) y=x+1;}
else y=x+2;
2) 加else
if(x<2)
if(x<1) y=x+1;
else;
else y=x+2;
參考資料
C語言程序設計/何欽銘,顏暉主編.---4版.---北京:高等教育出版社,2020.9