2016年807真题

题目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");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值