C语言考研复试刷题计划
第一节 顺序表基础
1.有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少
1 |
|
2.输入某年某月某日,判断这一天是这一年的第几天?注意:是否是闰年闰年 可以被4整除同时不可以被100整除 或者可以被400整除
1 |
|
3.有一种特殊的细胞分裂现象。最初有一个细胞,这个细胞在第一个周期和第二个周期不会分裂。
从第三个周期开始,每个周期这个细胞都会分裂出一个新细胞。新产生的细胞同样在前两个周期不分裂,
从第三个周期起每个周期又会分裂出一个新细胞。假设细胞都不会死亡,那么每个周期结束时细胞的总数分别是多少呢?
输出20个周期
周期:1 2 3 4 5 6 7 8 9 10
(斐波那契 例如:1,1,2,3,5,8,13,21,34,55,…)
1 |
|
4.判断101到200之间的素数=质数:只有1和它本身
1 |
|
5.打印出所有的”水仙花数”,所谓”水仙花数”是指一个三位数,其各位数字立方和等于该数本身。
例如:153是一个”水仙花数”,因为153=1的三次方+5的三次方+3的三次方
1 |
|
6.输入两个正整数m和n,求其最大公约数和最小公倍数。
最大公约数:转转相除法(欧几里得算法)
假设求1997和615两个正整数的最大公约数。
1997/615=3(余152)
615/152=4(余7)
152/7=21(余5)
7/5=1(余2)
5/2=1(余1)
2/1=2(余0) 当前除数为最大公约数
最小公倍数:两个数的积/最大公约数
1 |
|
7.输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数
a-z之间对应的ASCII码:97-122
注意getchar是每次接收一个字符
char c;
printf(“请输入一个字符:”);
c=getchar();
while(c != ‘\n’){
printf(“%c”,c);
c=getchar();
}
1 |
|
8.求 s=a+aa+aaa+aaaa+aa…a 的值,其中 a 是一个数字,例如 2+22+222+2222+22222=24690此时共有5个数相加)
几个数相加有键盘控制 1.如何控制 2.如何表示a aa aaa aaaa..每次用一个for循环不太现实,因此用一个控制条件 3.求和
1 |
|
9.一个数如果恰好等于它的因子之和,这个数就称为”完数”,例如 6=1+2+3 ,请编程找出 1000 以内的所有完数。
找到所有能够整除的数=余数为0
1 |
|
10.一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高? 299.60938 0.09766
t=1;h=100;
2 50*2
*3 25 2
1 |
|
11.两个乒乓球队进行比赛,各出三人,甲队为 a、b、c 三人,乙队为 x、y、z 三人。抽签决定比赛名单,
有人向队员打听比赛的名单:a 说他不和 x 比,c 说他不和 x、z 比,请编写代码找出三队赛手的名单(每个人比赛对手不一致)。
1 |
|
12.有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。
问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
1 |
|
13.一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
1 |
|
14.利用递归函数将字符串反转abcd——>dcba
1 | //方法一 |
1 | //方法二 |
第二节 查找和排序
15.攻擂法(找到一组数字中的最大值和最小值)
1 |
|
16.冒泡排序
1 |
|
17.选择排序
1 |
|
18.插入排序
1 |
|
19.顺序查找(跟攻擂法逸一样,知识返回下标)
1 | //顺序查找 |
20.二分查找–需要先排序,排好序后,需要知道首地址和尾地址 相加/2
1 |
|
21.实现一个算法来识别一个字符串 str2是否是另一个字符串 str1 的排列。排列的解释如下:如果将 str1的字符拆分开,
重新排列后再拼接起来,能够得到 str2,那么就说字符串 str2 是字符串 str1 的排列。(不忽略大小写)
方法一:穷举法 直接st1和st2穷举比较
方法二:先排序,再比较,可以借助字符串函数strcmp比较
1 | //方法一: |
22.压缩字符串:输入一行字符串,长度不超过 500. 压缩的格式是将连续相同字符替换为字符 + 数字形式,
例如 “AAABCCDDDD” 变为 “A3BC2D4”。需要判断压缩能不能节省空间,仅在压缩后字符串比原字符串长度更短时进行压缩。eg:AABB A2B2长度一样没必要压缩
1 |
|
23.实现一个算法来识别一个字符串的字符是否是唯一的(忽略字母大小写)。若唯一,则输出 YES ,否则输出 NO。
例如:abd25+ 输出 yes aabcd 输出 NO
1 |
|
24.给定 n 个正整数 a1,a2,……,an,你可以将它们任意排序。现要将这 n 个数字连接成一排,即令相邻数字收尾相接,组成一个数。
1 |
|
第三节 结构体
结构体的内容 一般考试都会给出
#include<stdio.h>
typedef struct human{
char a[100];
int number;
}human;
human arr[];
//例如 arr[0].number arr[0].a[]
25.给定N个职员的信息,包括姓名、基本工资、浮动工资和支出,要求编写程序顺序输出每位职员的姓名
和实发工资(实发工资=基本工资+浮动工资-支出)
输入格式:
输入在一行中给出正整数N。随后N行,每行给出一位职员的信息,格式为“姓名 基本工资 浮动工资 支
出”,中间以空格分隔。其中“姓名”为长度小于10的不包含空白字符的非空字符串,其他输入、输出保证
在单精度范围内。
输出格式:
按照输入顺序,每行输出一位职员的姓名和实发工资,间隔一个空格,工资保留2位小数。
输入样例:
3
zhao 240 400 75
qian 360 120 50
zhou 560 150 80
输出样例:
zhao 565.00
qian 430.00
zhou 630.00
1 |
|
26.每个 PAT 考生在参加考试时都会被分配两个座位号,一个是机试座位,一个是考试座位。正常情况
下,考生在入场时先得到机试座位号码,入座进入机试状态后,系统会显示该考生的考试座位号码,考
试时考生需要换到考试座位就座。但有些考生迟到了,试机已经结束,他们只能拿着领到的机试座位号
码求助于你,从后台查出他们的考试座位号码。
输入格式:
输入第一行给出一个正整数 N(≤1000),随后 N 行,每行给出一个考生的信息:准考证号 机试座位号
考试座位号。其中准考证号由 16 位数字组成,座位从 1 到 N 编号。输入保证每个人的准考证号都不
同,并且任何时候都不会把两个人分配到同一个座位上。考生信息之后,给出一个正整数 M(≤N),随
后一行中给出 M 个待查询的试机座位号码,以空格分隔。
输出格式:
对应每个需要查询的试机座位号码,在一行中输出对应考生的准考证号和考试座位号码,中间用 1 个空
格分隔。
输入样例:
4
3310120150912233 2 4
3310120150912119 4 1
3310120150912126 1 3
3310120150912002 3 2
2
3 4
输出样例:
3310120150912002 2
3310120150912119 1
1 |
|
27.字符串查找
输入样例:
123456123abc123hbc
123
输出:
3
1 |
|
28.字符串删除
输入样例:
1234567890
456
输出:
1237890
1 |
|
29.二进制转换为十进制
例如,二进制数 1011 转换为十进制的过程如下:
1×2^3 + 0×2^2 + 1×2^1 + 1×2^0 = 8+0+2+1=11
因此,1011 的十进制值是 11。
1 |
|
30.十进制转换为二进制
1 | 例如,十进制数 11 转换为二进制的过程如下: |
1 |
|
31.将奇数数组与偶数数组合并为一个数组 随后按照从大到小排列
1 |
|
32.给定一个字符串 S,请你求出 S 的最长回文子串。
输入:
aa1ABA1b
输出:
5
1 |
|
33.两个长度不同的字串按照其每个字符的大小 从小到大拼接起来
1 |
34.字符串匹配
1 |
35.字符串中大小写转换 (2024真题)
遍历数组,大写字母和小写字母中间差32个asc码
再尝试一下八进制转换
1 |
第四节 链表
1.头插法
1 |
2.尾插法
1 |
3.中间插入
1 |
4.删除链表中所有匹配的值
1 |
5.两个有序链表合并(升序排列)
1 |
6.链表反转
1 |
7.判断链表是否包含环(快慢指针)
1 |
8.反转链表的指定部分(我们可以先找到需要反转的起始节点的前一个节点和结束节点的后一个节点,然后对需要反转的部分进行反转操作,最后将反转后的部分重新连接回原链表)8.反转链表的指定部分(我们可以先找到需要反转的起始节点的前一个节点和结束节点的后一个节点,然后对需要反转的部分进行反转操作,最后将反转后的部分重新连接回原链表)
1 |
9.链表的奇偶重排(奇数在前 偶数在后)
1 |
10.输入k个有序链表合并成一个链表
1 |
第五节 综合

1 |
2.现在有 n 个人,第 i 个人的名字是 Si,现在想选择三个人,以满足以下条件:每个被选中的人的名字都以 M、A、R、C 或 H 开头。在不考虑被选人名字顺序的情况下,问:最多可以有多少这样的方式去选择三个人。
1 | 输入: |
1 |
3.一个整数如果按从低位到高位的顺序,奇数位 (个位、百位、万位 ⋯⋯ ) 上的数字是奇数,偶数位 (十
位、千位、十万位 ⋯⋯ ) 上的数字是偶数,我们就称之为 “好数”。
问:给定一个正整数 N,请计算从 1 到 N 一共有多少个好数。
1 |
4.给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
1 | 输入: |
1 |
5.给定一个字符串 s ,请你找出其中不含有重复字符的最长子的长度。
1 |
6.构建有n个值的链表,输入一个整数k或者正数第k个和倒数第个元素 返回两个元素的合。
1 |
7.建立有p个节点的链表,然后输出两个正整数m和n判断 从倒第m个节点到倒数第n的节点所构成的链表是否是回文链表。
1 |
8.求一个3*3矩阵对角线元素之和
1 |

1 | 输入: |
1 |