C語言刷題訓練營-第五講
技術標籤:C語言程式設計入門之刷題篇
BC41-你是天才嗎?
題目描述
據說智商140以上者稱為天才,KiKi想知道他自己是不是天才,請幫他程式設計判斷。輸入一個整數表示一
個人的智商,如果大於等於140,則表明他是一個天才,輸出“Genius”。
輸入描述:
多組輸入,每行輸入包括一個整數表示的智商。
輸出描述:
針對每行輸入,輸出“Genius”。
示例1
輸入
160
輸出
Genius
參考程式碼:
#include <stdio.h>
int main()
{
int n = 0;
while (scanf("%d", &n) != EOF)
{
if (n >= 140)
printf("Genius");
}
return 0;
}
#include <stdio.h> int main() { int n = 0; //這種寫法是因為scanf讀取失敗返回EOF,EOF是-1,所以按位取反後的結果是0,0為假,可以讓迴圈停止。 while (~scanf("%d", &n)) { if (n >= 140) printf("Genius"); } return 0; }
答案解析:
關於對組輸入的題目,一定要處理好多組資料的輸入問題,然後考慮迴圈如何結束。
方法1和方法2,給出了2種多組輸入的方法。
BC42-完美成績
題目描述
KiKi想知道他的考試成績是否完美,請幫他判斷。從鍵盤輸入一個整數表示的成績,程式設計判斷成績是否在90~100之間,如果是則輸出“Perfect”。
輸入描述:
多組輸入,每行輸入包括一個整數表示的成績(90~100)。
輸出描述:
針對每行輸入,輸出“Perfect”。
示例1
輸入
98
輸出
Perfect
參考程式碼:
#include <stdio.h>
int main()
{
int score = 0;
while (scanf("%d", &score) != EOF)
{
if (score >= 90 && score <= 100)
printf("Perfect");
}
return 0;
}
答案解析:
1. 多組輸入。
2. 數學中的 90<=score<=100 的寫法,在C語言中直接寫是有bug的。
BC43-及格分數
題目描述
KiKi想知道他的考試分數是否通過,請幫他判斷。從鍵盤任意輸入一個整數表示的分數,程式設計判斷該分
數是否在及格範圍內,如果及格,即:分數大於等於60分,是輸出“Pass”,否則,輸出“Fail”。
輸入描述:
多組輸入,每行輸入包括一個整數表示的分數(0~100)。
輸出描述:
針對每行輸入,輸出“Pass”或“Fail”。
示例1
輸入
94
輸出
Pass
示例2
輸入
44
輸出
Fail
參考程式碼:
#include <stdio.h>
int main()
{
int score = 0;
while (scanf("%d", &score) != EOF)
{
if (score >= 60)
printf("Pass\n");
else
printf("Fail\n");
}
return 0;
}
答案解析:
無。
BC44-判斷整數的奇偶性
題目描述
KiKi想知道一個整數的奇偶性,請幫他判斷。從鍵盤任意輸入一個整數(範圍-2^31~2^31-1),程式設計判斷它的奇偶性。
輸入描述:
多組輸入,每行輸入包括一個整數。
輸出描述:
針對每行輸入,輸出該數是奇數(Odd)還是偶數(Even)。
示例1
輸入
4
7
輸出
Even
Odd
參考程式碼:
#include <stdio.h>
int main()
{
int num = 0;
while (scanf("%d", &num) != EOF)
{
if (num % 2 == 1)
printf("Odd\n");
else
printf("Even\n");
}
return 0;
}
答案解析:
無
BC45-最高分數
題目描述
KiKi參加了語文、數學、外語的考試,請幫他判斷三科中的最高分。從鍵盤任意輸入三個整數表示的分數,程式設計判斷其中的最高分。
輸入描述:
多組輸入,每行輸入包括三個整數表示的分數(0~100),用空格分隔。
輸出描述:
針對每行輸入,輸出為一行,即三個分數中的最高分。
示例1
輸入
94 98 99
100 88 60
輸出
99
100
參考程式碼:
#include <stdio.h>
int main()
{
int i = 0;
int score[3] = { 0 };
while (scanf("%d %d %d", &score[0], &score[1], &score[2]) != EOF)
{
int max = 0;//每一組測試,max都恢復到0
int i = 0;
for (i = 0; i < 3; i++)
{
if (score[i] > max)
max = score[i];
}
printf("%d\n", max);
}
return 0;
}
答案解析:
1. 多組輸入
2. 每組輸入接受3個數字,求出最大值,因為成績不能是負數,所以假設max期初是0.
BC46-判斷母音還是子音
題目描述
KiKi開始學習英文字母,BoBo老師告訴他,有五個字母A(a), E(e), I(i), O(o),U(u)稱為母音,其他所有字
母稱為子音,請幫他編寫程式判斷輸入的字母是母音(Vowel)還是子音(Consonant)。
輸入描述:
多組輸入,每行輸入一個字母。
輸出描述:
針對每組輸入,輸出為一行,如果輸入字母是母音(包括大小寫),輸出“Vowel”,如果輸入字母是非母音,
輸出“Consonant”。
示例1
輸入
A
b
輸出
Vowel
Consonant
參考程式碼:
//方法1
#include <stdio.h>
int main()
{
char ch = 0;
char arr[] = "AEIOUaeiou";
while ((ch = getchar()) != EOF)
{
int i = 0;
for (i = 0; i < 10; i++)
{
if (ch == arr[i])
{
printf("Vowel\n");
break;
}
}
if (i == 10)
printf("Consonant\n");
getchar();//去除每個字元後的\n
}
return 0;
}
//方法2
#include <stdio.h>
int main()
{
char ch = 0;
char arr[] = "AEIOUaeiou";
//在%c的前面寫一個空格會消化掉前面所有的空白字元,然後讀取一個字元
while (scanf(" %c", &ch) != EOF)
{
int i = 0;
for (i = 0; i < 10; i++)
{
if (ch == arr[i])
{
printf("Vowel\n");
break;
}
}
if (i == 10)
printf("Consonant\n");
}
return 0;
}
//方法3
#include <stdio.h>
int main()
{
char ch = 0;
char arr[] = "AEIOUaeiou";
//在%c的後邊發給一個'\n',其實在輸入時候就會消化掉這個\n字元
//不會為下次留下空白字元的隱患
while (scanf("%c\n", &ch) != EOF)
{
int i = 0;
for (i = 0; i < 10; i++)
{
if (ch == arr[i])
{
printf("Vowel\n");
break;
}
}
if (i == 10)
printf("Consonant\n");
}
return 0;
}
BC47-判斷是不是字母
題目描述
KiKi想判斷輸入的字元是不是字母,請幫他程式設計實現。
輸入描述:
多組輸入,每一行輸入一個字元。
輸出描述:
針對每組輸入,輸出單獨佔一行,判斷輸入字元是否為字母,輸出內容詳見輸出樣例。
示例1
輸入
A
6
輸出
A is an alphabet.
6 is not an alphabet.
參考程式碼:
#include <stdio.h>
int main()
{
int ch = 0;
while ((ch = getchar()) != EOF)
{
//判斷字母
//if((ch>='A'&& ch<='Z') || (ch>='a' && ch<='z'))
if (isalpha(ch))
printf("%c is an alphabet.\n", ch);
else
printf("%c is not an alphabet.\n", ch);
//清理掉\n
getchar();
}
return 0;
}
答案解析:
本題和BC46是一個道理的,三種方法均可使用。
BC48-字母的大小寫轉換
題目描述
KiKi想完成字母大小寫轉換,有一個字元,判斷它是否為大寫字母,如果是,將它轉換成小寫字母;反之則轉換為大寫字母。
輸入描述:
多組輸入,每一行輸入一個字母。
輸出描述:
針對每組輸入,輸出單獨佔一行,輸出字母的對應形式。
示例1
輸入
a
A
Z
輸出
A
a
z
參考程式碼:
#include <stdio.h>
int main()
{
int ch = 0;
//多組輸入
while ((ch = getchar()) != EOF)
{
if (islower(ch))
printf("%c\n", toupper(ch));
else
printf("%c\n", tolower(ch));
//處理'\n'
getchar();
}
return 0;
}
答案解析:
本地和BC46、BC47題一樣。
BC50-計算單位階躍函式
題目描述
KiKi最近學習了訊號與系統課程,這門課裡有一個非常有趣的函式,單位階躍函式,其中一種定義方式為:
現在試求單位衝激函式在時域t上的值。
輸入描述:
題目有多組輸入資料,每一行輸入一個t(-1000<t<1000)表示函式的時域t。
輸出描述:
輸出函式的值並換行。
示例1
輸入
11
0
-11
輸出
1
0.5
0
參考程式碼:
#include<stdio.h>
int main()
{
int t = 0;
while (scanf("%d", &t) != EOF)
{
if (t > 0)
printf("%d\n", 1);
else if (t == 0)
printf("%.1f\n", 0.5f);
else
printf("%d\n", 0);
}
return 0;
}
答案解析:
無
BC51-三角形判斷
題目描述
KiKi想知道已經給出的三條邊a,b,c能否構成三角形,如果能構成三角形,判斷三角形的型別(等邊三角形、等腰三角形或普通三角形)。
輸入描述:
題目有多組輸入資料,每一行輸入三個a,b,c(0<a,b,c<1000),作為三角形的三個邊,用空格分隔。
輸出描述:
針對每組輸入資料,輸出佔一行,如果能構成三角形,等邊三角形則輸出“Equilateral triangle!”,
等腰三角形則輸出“Isosceles triangle!”,
其餘的三角形則輸出“Ordinary triangle!”,
反之輸出“Not a triangle!”。
示例1
輸入
2 3 2
3 3 3
輸出
Isosceles triangle!
Equilateral triangle!
參考程式碼:
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
int c = 0;
while (scanf("%d %d %d", &a, &b, &c) != EOF)
{
//滿足條件就是三角形
if (a + b > c && b + c > a && c + a > b)
{
if (a == b && b == c)
printf("Equilateral triangle!\n");
else if ((a == b && a != c) || (a == c && a != b) || (b == c && b != a))
printf("Isosceles triangle!\n");
else
printf("Ordinary triangle!\n");
}
else
printf("Not a triangle!\n");
}
return 0;
}
答案解析:
這裡就是搞清楚三角形的判斷規則,並去一一窮舉就行了,因為只有三條邊。