题目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的值输出到屏幕上
解题思路
- 输入score
- 判断是否在范围内
- 在范围内的话,用switch结构转换等级。不过这里case只能用常量表达式,所以,在进行等级转换之前我们还要先对score进行处理。根据题意以及对整形进行除法运算的特性,在进行等级转换之前先将score进行除10运算,然后用运算后的结果去划分等级。
- 输出
流程图
源代码
#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”
解题思路
- 从键盘读入字符串。因为可以带空格,所以不能用scanf进行读取,要用gets进行读取
- 判断是否是回文。一个下标从头往后走,一个下标从尾往前走,逐个判断两个字符是否相等。一旦发现两个字符不等,则直接终止程序。如果直到判断完半个字符串都没有发现不同的文字,则该字符串是回文,判断完成结束程序。
- 输出结果
流程图
源代码
#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
解题思路
- 定义二维数组,从键盘读入数据放入数组中
- 计算对角线元素之和
- 输出结果
流程图
源代码
#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");
}
}