第八週程式設計總結
第八週程式設計總結
題目1:8-1 混合型別資料格式化輸入 (5 分)
本題要求編寫程式,順序讀入浮點數1、整數、字元、浮點數2,再按照字元、整數、浮點數1、浮點數2的順序輸出。
1).實驗程式碼
#include<stdio.h>
int main()
{
int n;
float number1,number2;
char op;
scanf("%f %d %c %f",&number1,&n,&op,&number2);
printf("%c %d %.2f %.2f",op,n,number1,number2);
return 0;
}
2).設計思路
第一步 輸入並定義變數
第二步 輸出並定義變數
3)本題除錯中遇到的問題及解決方案
沒有遇到問題
4).執行結果截圖
題目2:8-2 計算符號函式的值 (10 分)
對於任一整數n,符號函式sign(n)的定義如下:
請編寫程式計算該函式對任一輸入整數的值。
1).實驗程式碼
#include<stdio.h>
int main()
{
int n,result;
scanf("%d",&n);
if(n == 0){
result = 0;
}
else if(n<0){
result = -1;
}
else{
result = 1;
}
printf("sign(%d) = %d",n,result);
return 0;
}
2).設計思路
第一步 整形輸入變數n
第二步 使用if-else語句進行判斷
第三步 輸出結果
3)本題除錯中遇到的問題及解決方案
If語句中的等號出現錯誤,==為等號,=為賦值語句
4).執行結果截圖
題目3:8-3 計算個人所得稅 (10 分)
假設個人所得稅為:稅率×(工資−1600)。請編寫程式計算應繳的所得稅,其中稅率定義為:
- 當工資不超過1600時,稅率為0;
- 當工資在區間(1600, 2500]時,稅率為5%;
- 當工資在區間(2500, 3500]時,稅率為10%;
- 當工資在區間(3500, 4500]時,稅率為15%;
- 當工資超過4500時,稅率為20%。
1).實驗程式碼
#include<stdio.h>
int main()
{
double wage,rate;
scanf("%lf",&wage);
if(wage>=0){
if(wage<=1600){
rate = 0.00;
}
else if(wage>1600&&wage<=2500){
rate = 0.05*(wage-1600);
}
else if(wage>2500&&wage<=3500){
rate = 0.10*(wage-1600);
}
else if(wage>3500&&wage<=4500){
rate = 0.15*(wage-1600);
}
else if(wage>4500){
rate = 0.20*(wage-1600);
}
}
printf("%.2lf",rate);
return 0;
}
2).設計思路
第一步 使用雙精度浮點型進行定義
第二步使用if-else語句進行對不同工資的判斷
第三步進行個人稅的輸出
3)本題除錯中遇到的問題及解決方案
無問題
4).執行結果截圖
題目4:8-4 比較大小 (10 分)
本題要求將輸入的任意3個整數從小到大輸出。
1).實驗程式碼
#include<stdio.h>
int main()
{
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
int e = 0;
if(a>b){
e = a;
a = b;
b = e;
}
if(a>c){
e = a;
a = c;
c = e;
}
if(b>c){
e = b;
b = c;
c = e;
}
printf("%d->%d->%d",a,b,c);
return 0;
}
2).設計思路
第一步 使用4個盒子,其中一個空盒子用來儲存2者之間較大的
第二步使用if-else語句進行大小的比較,
第三步按順序輸出
3)本題除錯中遇到的問題及解決方案
無
4).執行結果截圖
題目5:8-5 到底是不是太胖了 (10 分)
據說一個人的標準體重應該是其身高(單位:釐米)減去100、再乘以0.9所得到的公斤數。真實體重與標準體重誤差在10%以內都是完美身材(即 | 真實體重 − 標準體重 | < 標準體重×10%)。已知市斤是公斤的兩倍。現給定一群人的身高和實際體重,請你告訴他們是否太胖或太瘦了。
1).實驗程式碼
#include<stdio.h>
int main()
{
int n;
double s,x,a,b;
scanf("%d",&n);
while(n--)
{
scanf("%lf%lf",&a,&b);
s=(a-100.0)*0.9;
x=b/2.0;
if(x>(s-s*0.1)&&x<(s+s*0.1))
printf("You are wan mei!\n");
if(x>=(s+s*0.1))
printf("You are tai pang le!\n");
if(x<=(s-s*0.1))
printf("You are tai shou le!\n");
}
}
2).設計思路
第一步 進行輸入並定義變數
第二步有3種情況使用if-else語句進行不同的輸出。
3)本題除錯中遇到的問題及解決方案
If條件語句使用數學函式進行判斷,導致部分正確
4).執行結果截圖
題目6:8-6 高速公路超速處罰 (15 分)
按照規定,在高速公路上行使的機動車,達到或超出本車道限速的10%則處200元罰款;若達到或超出50%,就要吊銷駕駛證。請編寫程式根據車速和限速自動判別對該機動車的處理。
1).實驗程式碼
#include <stdio.h>
int main()
{
int speed,limit;
double a;
scanf("%d %d",&speed,&limit);
a=(double)(speed-limit)*100/(double)limit;
if(a<10||speed<limit)
printf("OK");
else if(a<50)
printf("Exceed %.0f%%. Ticket 200",a);
else
printf("Exceed %.0f%%. License Revoked",a);
return 0;
}
2).設計思路
第一步 輸入並定義速度和限制速度
第二步求出罰款200元的條件
第三步使用if-else語句進行判斷是否需要罰款
第四步 格式化輸出
3)本題除錯中遇到的問題及解決方案
滿足一個速度小於10%是僅僅不夠的,速度必須小於限制速度才是沒有超速
4).執行結果截圖
題目7:8-7 統計字元 (15 分)
本題要求編寫程式,輸入10個字元,統計其中英文字母、空格或回車、數字字元和其他字元的個數。
1).實驗程式碼
#include<stdio.h>
int main()
{
int letter=0,digit=0,blank=0,other=0;
int i;
char ch;
for(i=0;i<=9;i++){
scanf("%c",&ch);
if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
letter++;
else if(ch>='0'&&ch<='9')
digit++;
else if(ch==' '||ch=='\n')
blank++;
else
other++;
}
scanf("%c",&ch);
printf("letter = %d, blank = %d, digit = %d, other = %d",letter,blank,digit,other);
return 0;
}
2).設計思路
第一步 進行格式化輸入並定義儲存變數的字元
第二步判斷是否為字元,數字等,如果是並進行累加
第三步格式化輸出
3)本題除錯中遇到的問題及解決方案
空格和回車的判斷不熟悉,查閱書籍可知
4).執行結果截圖
題目8:8-8 統計學生平均成績與及格人數 (15 分)
本題要求編寫程式,計算學生們的平均成績,並統計及格(成績不低於60分)的人數。題目保證輸入與輸出均在整型範圍內。
1).實驗程式碼
#include<stdio.h>
#include<math.h>
int main(void)
{
int n,grade;
int count;
double sum,ave;
scanf("%d",&n);
count=0;
sum=0.0;
for(int i=0;i<n;i++){
scanf("%d",&grade);
sum+=grade;
if(grade>=60) count+=1;
}
ave = n!=0? sum/n : 0;
printf("average = %.1lf\n",ave);
printf("count = %d",count);
return 0;
}
2).設計思路
第一步 呼叫數學函式使用標頭檔案
第二步 輸入並定義變數
第三步使用if-else語句進行判斷是否及格,是,則進行累加
第四步 求出平均數,並進行格式化輸出
3)本題除錯中遇到的問題及解決方案
需注意當n=0時不能進行平均值的運算
4).執行結果截圖
題目:8-9 輸出閏年 (15 分)
輸出21世紀中截止某個年份以來的所有閏年年份。注意:閏年的判別條件是該年年份能被4整除但不能被100整除、或者能被400整除。
程式碼:
#include<stdio.h>
int main()
{
int year, i, count=0;
scanf("%d", &year);
if(year<=2000||year>2100)
printf("Invalid year!\n");
else{
for(i=2001; i<=year; i++){
if(i%4 == 0&&i%100!=0||i%400 == 0){
printf("%d\n", i);
count++;
}
}
if(count == 0)
printf("None\n");
}
return 0;
}
2).設計思路
第一步 格式化輸入年份
第二步 判斷是否滿足閏年的條件,使用if-elae語句
第三步 格式化輸出變數
3)本題除錯中遇到的問題及解決方案
If條件句的邏輯關係不明確,邏輯或和邏輯與的符號混淆
查詢書籍
4).執行結果截圖