1. 程式人生 > 其它 >C語言刷題訓練營-第五講

C語言刷題訓練營-第五講

技術標籤:C語言程式設計入門之刷題篇

BC41-你是天才嗎?

https://www.nowcoder.com/practice/557cc54704bb4d56b73b62d1a5455331?tpId=107&rp=1&ru=%2Fta%2Fbeginner-programmers&qru=%2Fta%2Fbeginner-programmers%2Fquestion-ranking

題目描述

據說智商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-完美成績

https://www.nowcoder.com/practice/8312e497509a450f968d9a6a2381ce32?tpId=107&rp=1&ru=%2Fta%2Fbeginner-programmers&qru=%2Fta%2Fbeginner-programmers%2Fquestion-ranking

題目描述

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-及格分數

https://www.nowcoder.com/practice/56513524333148b38945e1989bc7df4e?tpId=107&rp=1&ru=%2Fta%2Fbeginner-programmers&qru=%2Fta%2Fbeginner-programmers%2Fquestion-ranking

題目描述

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-判斷整數的奇偶性

https://www.nowcoder.com/practice/a8b018667e274af29b5f76a6673450fc?tpId=107&rp=1&ru=%2Fta%2Fbeginner-programmers&qru=%2Fta%2Fbeginner-programmers%2Fquestion-ranking

題目描述

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-最高分數

https://www.nowcoder.com/practice/52c18a3b49a54fc98107fbdde1415f90?tpId=107&rp=1&ru=%2Fta%2Fbeginner-programmers&qru=%2Fta%2Fbeginner-programmers%2Fquestion-ranking

題目描述

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-判斷母音還是子音

https://www.nowcoder.com/practice/7eb4df4d52c44d309081509cf52ecbc4?tpId=107&rp=1&ru=%2Fta%2Fbeginner-programmers&qru=%2Fta%2Fbeginner-programmers%2Fquestion-ranking

題目描述

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-判斷是不是字母

https://www.nowcoder.com/practice/91a588dd4cd244bfa616f17603ec123c?tpId=107&rp=1&ru=%2Fta%2Fbeginner-programmers&qru=%2Fta%2Fbeginner-programmers%2Fquestion-ranking

題目描述

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-字母的大小寫轉換

https://www.nowcoder.com/practice/850ebd30a2a34cfc87199da3fc15786a?tpId=107&rp=1&ru=%2Fta%2Fbeginner-programmers&qru=%2Fta%2Fbeginner-programmers%2Fquestion-ranking

題目描述

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-計算單位階躍函式

https://www.nowcoder.com/practice/0b23793ae48a4e6cb7dfff042c959a04?tpId=107&rp=1&ru=%2Fta%2Fbeginner-programmers&qru=%2Fta%2Fbeginner-programmers%2Fquestion-ranking

題目描述

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-三角形判斷

https://www.nowcoder.com/practice/689ec1e742394e09b1059556fc167b65?tpId=107&rp=1&ru=%2Fta%2Fbeginner-programmers&qru=%2Fta%2Fbeginner-programmers%2Fquestion-ranking

題目描述

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

答案解析:

這裡就是搞清楚三角形的判斷規則,並去一一窮舉就行了,因為只有三條邊。