2016年807真題

CANDY_J發表於2020-12-16

題目1

從鍵盤輸入一個整數的百分制成績,用變數score儲存,如果score不在0-100範圍內,則輸出”Error Input!”,並結束程式。否則,將輸入的資料轉換成等級’A’,’B’, ‘C, ‘D’,’E’。 90分以上為’A’,8089分為’B’,7079分為’C’,60~69分為’D’,60分以下為E’,結果賦值給變數grade,並將變數score 和grade的值輸出到螢幕上

解題思路

  1. 輸入score
  2. 判斷是否在範圍內
  3. 在範圍內的話,用switch結構轉換等級。不過這裡case只能用常量表示式,所以,在進行等級轉換之前我們還要先對score進行處理。根據題意以及對整形進行除法運算的特性,在進行等級轉換之前先將score進行除10運算,然後用運算後的結果去劃分等級。
  4. 輸出

流程圖

原始碼

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

void convert(int score);

int main()
{
    int score;
    printf("請輸入score:");
    scanf("%d", &score);
    if(score < 0 || score > 100)
    {
        printf("Error Input!");
    }else
    {
        convert(score);
    }
    return 0;
}

void convert(int score)
{
    char grade;
   switch(score/10)
        {
            case 10:
            case 9:
            grade = 'A';
            break;
            case 8:
            grade = 'B';
            break;
            case 7:
            grade = 'C';
            break;
            case 6:
            grade = 'D';
            break;
            default:
            grade = 'E';
        }
        printf("score is : %d, grade is : %c", score, grade);
    
}

題目2

從鍵盤輸入一個可帶空格的字串,判斷該字串是否是迴文(迴文指正向讀與逆向讀相同的字串,如abcddcba或abcba等)。如果字串是迴文,輸出”Yes”, 否則輸出”No”

解題思路

  1. 從鍵盤讀入字串。因為可以帶空格,所以不能用scanf進行讀取,要用gets進行讀取
  2. 判斷是否是迴文。一個下標從頭往後走,一個下標從尾往前走,逐個判斷兩個字元是否相等。一旦發現兩個字元不等,則直接終止程式。如果直到判斷完半個字串都沒有發現不同的文字,則該字串是迴文,判斷完成結束程式。
  3. 輸出結果

流程圖

原始碼

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int huiwen(char str[]);

int main()
{
    /*****
     * 
     * 從鍵盤輸入一個可帶空格的字串,
     * 判斷該字串是否是迴文(迴文指正向讀與逆向讀相同的字串,如abcddcba或abcba等)。
     * 如果字串是迴文,輸出”Yes”, 否則輸出”No”
     * 
    */
    char str[255];
    int result;
    printf("請輸入一個字串:");
    gets(str);
    result = huiwen(str);
    if(result == 1)
    {
        printf("Yes");
    }
    else
    {
        printf("No");
    }
    return 0;
}

int huiwen(char str[])
{
    int len = strlen(str);
    int result = 1;
    for(int i=0,j=len-1; i<(len/2); i++, j--)
    {
        if(str[i] != str[j])
        {
			result = 0;
            break;
        }
    }
    return result;
}

題目3

從鍵盤上輸入矩陣的階數n(n<5),再輸入矩陣的各個資料元素,計算陣的主對角線元素之和sum。按照下面格式輸出該矩陣和sum的值

例如n=3時,矩陣為:
1 3 6
3 6 9
6 9 12
sum = 19

解題思路

  1. 定義二維陣列,從鍵盤讀入資料放入陣列中
  2. 計算對角線元素之和
  3. 輸出結果

流程圖

原始碼

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

#define N 5

int crossSum(int arr[N][N], int n);
void input(int arr[N][N], int n);
void printArr(int arr[N][N], int n);

int main()
{
    int n, sum;
    int arr[N][N];
   printf("請輸入矩陣的階數:");
   scanf("%d", &n);
   
   input(arr, n);
   printArr(arr, n);
   sum = crossSum(arr, n);
   printf("sum = %d", sum);
   
    return 0;
}

int crossSum(int arr[N][N], int n)
{
    int sum = 0;
    for(int i=0; i<n ; i++)
    {
        sum += arr[i][i];
    }
   
    return sum;
}

void input(int arr[N][N], int n)
{
    printf("請輸入矩陣的元素(以空格分隔):\n");
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<n; j++)
        {
            scanf("%d", &arr[i][j]);
        }
    }
}


void printArr(int arr[N][N], int n)
{
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<n; j++)
        {
            printf("%d\t", arr[i][j]);
        }
        printf("\n");
    }
}

相關文章