电科计算机专业考研复试C语言编程题整理(一)

本人是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');
    }
}
  • 9
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值