本人是21届考生,复试复习期间,深感C语言笔试复习的困难。资料混乱,没什么章法,特此进行整理工作,方便自己复习,也为后来者提供帮助。
1
本题着实简单,估计是早年题或者是送分用的。
#include<stdio.h>
int func(int x)
{
int y;
if(x < 0 && x > 100)
y = -1;
else if(x == 0)
y = 0;
else
y = 1;
return y;
}
2
题目:输入 a,b, c三个数,按照由大到小的顺序输出
#include<stdio.h>
int main() {
int a,b,c,temp;
puts("please enter the value of a,b,c");
scanf("%d%d%d",&a,&b,&c);
if(a < b)
{
temp = a;
a = b;
b = temp;
}
if(a < c)
{
temp = a;
a = c;
c = temp;
}
if(b < c)
{
temp = b;
b = c;
c = temp;
}
printf("%4d%4d%4d",a,b,c);
}
分析
本题这种解法在输出时a,b,c标识符中存储的值是按照从大到小的。如果不满足顺序需要利用中间变量temp一一交换。
这道题还可以用于输出四个值中的最大值和最小值。
3
题目:输入成绩,要求输出成绩等级 A、B、C、D、E 或 error。90 分以上为‘A’,80~89 分为‘B’,70 ~79 分为‘C’,60 ~69 分为‘D’,0 ~60 分为‘E’。若输入成绩低于 0 分和高于 100 分则输出 error。
#include <stdio.h>
#include <stdlib.h>
int main()
{
float score;
char ch;
puts("please input the score");
scanf("%f",&score);
if(score >= 90 && score <= 100)
ch = 'A';
else if(score >= 80)
ch = 'B';
else if (score >= 70)
ch = 'C';
else if (score >= 60)
ch = 'D';
else if(score >= 0)
ch = 'E';
else {
printf("Error!\n");
exit(1);
}
printf("%c\n",ch);
return 0;
}
5
题目:求 Fibonacci 数列的前 20 个数,并将其分 5 行输出
分析
本题做法有很多,第一种容易想的思路利用递归函数算出每个Fibonacci值,然后外层用个for循环。问题是,Fibonacci本身是个递归数列,而这样做相当于每一项都被割裂开了,Fib(19)和Fib(20)完全是分开算的。此外,使用递归算法本身就有很多性能消耗,所以个人认为这种做法在考场上应该是得不到满分的。代码如下:
#include<stdio.h>
int Fibonacci(int n)
{
if(n <= 2)return 1;
return Fibonacci( n - 1) + Fibonacci(n - 2);
}
int main()
{
int fb;
for(int i = 1;i <= 20;i++)
{
fb = Fibonacci(i);
printf("%5d",fb);
if(i % 5 == 0)
putchar('\n');
}
}
第二种方法是利用一个数组记录下每项的取值,这样在第一次计算Fibonacci(20)时,前十九项也已经计算好,依次打印即可。
#include<stdio.h>
#define N 20
int main()
{
int Fb[20]; //记录fb每一项的数组
Fb[0] = Fb[1] = 1;
printf("%5d%5d",1,1);
for(int i = 2;i < N;i++)
{
Fb[i] = Fb[i - 1] + Fb[i - 2];
printf("%5d",Fb[i]);
if((i - 1) % 5 == 0)
putchar('\n');
}
}