选择题
- 被调用函数可以不用return语句
- 被调用函数中,可以出现多个return语句
- 被调用函数中, 如果自带返回值, 就一定要有return语句
- 一个return只能返回一个值
- 已知P是指针变量, 则不能初始化P的值是 1
- 函数声明格式为 类型 函数名 (数据类型 变量名)其中,变量名可以省略
- 能作为输入文件名格式为 “C:\user\test.txt”
- 两个有序线性表分别有n个元素和m个元素, 且n小于等于m, 先将其归并为一个有序表, 其中最少的比较次数是n次, 是因为n小于m
- 非空的循环单链表的尾结点(由P指向)满足P->next==head
- 以{3,7,11,8,9,12} 为叶子节点的权重, 构造一棵哈夫曼二叉树,构造树的高度为4
- 对一个线性表{3,12,24,46,10,20}进行了散列存储时,选用H(k)=k%9作为散列函数,则散列地址为1的元素的个数为 2
- 适用于折半查找的表的存储方式及元素排列要求为顺序方式存储,元素有序
- 若字符串 s=“shiftdel”,其子串的数目为37,子串计算公式为 (n(n+1)/2 )+1
- 与数据存储无关的是 队列
- 对新设计的算法做性能分析的主要目的是分析算法的效率以便改进
- 数据结构在计算机内存中的表示是指数据的存储结构
- 十进制的630的二进制表示为1001110110
- 在一个单链表中,如果a所指向的结点是b所指向的节点的前驱结点,要在a与b之间,插入c所指向的节点,则执行a->link = c; c->link = b;
- 递归算法实现一般要利用栈
判断题
- 一个C语言程序中有一个main函数
- 字符串“a”在内存中占据两个字符 ‘a’跟‘\0’
- 指针变量可以为函数的参数
- 定义函数时,可以有1个或多个形参,或没有形参
- 全局变量不一定要定义在文件的开头部分
- 二叉树的每个叶子节点不一定都有2个叶子
- 冒泡排列的时间复杂度是O(n²)
- 快速排列是不稳定的排序方式
- 队列只有在队首进行删除操作,只在队尾进行插入操作
- 从顶点对的角度看,无向图和有向图的区别在于定点对是无序的还是有序的
排列算法 | 时间复杂度 | 空间复杂度 | 稳定性 | 原地排序 |
冒泡排序 | O(n²) | o(1) | 稳定 | 是 |
插入排序 | O(n²) | o(1) | 稳定 | 是 |
选择排序 | O(n²) | o(1) | 不稳定 | 是 |
快速排序 | O(n logn) | o(1) | 不稳定 | 是 |
填空题
- 符合结构化原则的三种基本程序控制结构是: 顺序结构、选择结构、循环结构
- 语句 double a=28; int b; 当执行表达式 b=(int)(a%9)%4之后,b的结果为:1
- C语言使用fopen()函数来打开文件
- 一颗高度为h的树,h大于等于0,至少有h个结点
- 一个栈匀速的入栈顺序为6,7,8,9,10,出栈的顺序为10,9,8,7,6
简答题
什么是数据结构?什么是数据类型
(1)数据结构: 计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合,通常情况下,精心选择的数据结构可以带来更高的运行或存储效率
(2)数据类型: 在数据结构中的定义是一个值的集合以及定义在这个值集上的一组操作
算法有哪些特点?算法和程序的主要区别是什么?
(1)一个算法应该具有以下五个主要特点
1. 有穷性:算法必须在执行有限个步骤后结束
2. 确切性:算法的每一步骤都必须有确切的定义
3. 输入项:一个算法有0个或多个输入,以刻画运算对象的初始情况
4. 输出项: 有一个或多个输出,以反映对输入数据加工后的结果, 没有输出的算法是毫无意义的
5. 可行性:一个算法的任何计算步骤都是可以被分解为基本可执行的操作,每个操作都能够在有限时间内完成
(2) 算法和程序的区别是什么?
1. 算法是解决问题的步骤,算法的代码实现需要靠程序来完成
2. 程序是结果,算法是手段
3. 算法 + 数据结构 = 应用程序
什么是指针,什么是指针变量?它们有什么关系
指针直接指向地址值, 而指针变量只是一个存放地址的变量
什么是二叉树?请简述二叉树的五种基本形态
(1) 二叉树是每个结点最多有两个子树的有序树
(2) 五种基本形态
1. 空二叉树
2.只有一个根结点的树
3. 只有左子树
4. 只有右子树
5. 完整二叉树
程序分析题
以下程序,如输入123则?
此程序共循环几次? 3次
结果是什么? 打印321
#include <stdio.h>
void main() {
int data;
scanf("%d", &data);
int sum = 0;
while (data) {
printf("%d", data % 10);
data = data / 10;
sum++;
}
printf("最后循环执行了%d次", sum);
}
以下程序,
当k=1时,程序运行结果是什么? 打印 11
当k=3时,程序运行结果是什么? 打印 11 7 7 7
#include <stdio.h>
void main() {
int k, j, a[] = {1, 3, 5, 7, 9, 11, 13, 15}, *p = a + 5;
printf("请输入k的值");
scanf("%d", &k);
for (j = k; j > 0; j--) {
switch (j) {
case 1:
;
case 2:
printf("%d\n", *p);
break;
case 3:
printf("%d\n", *(--p));
break;
case 4:
printf("%d\n", *(p--));
break;
}
}
}
画出图一所表示无向图的临接矩阵
V0 | V1 | V2 | V3 | V4 | |
V0 | 0 | 1 | 1 | 0 | 0 |
V1 | 1 | 0 | 0 | 1 | 1 |
V2 | 1 | 0 | 0 | 0 | 1 |
V3 | 0 | 1 | 0 | 0 | 1 |
v4 | 0 | 1 | 1 | 1 | 0 |
应用题
甲学院获得奖励数量为a项, 乙学院获得的奖励数量为b项, 试从键盘输入a,b具体数量值, 并输出较大值, 请完成
(1) 写出上述编程思路, 并画出N-S图
(2) 根据(1)思路编写程序
(1)
#include <stdio.h>
void main() {
int a, b;
printf("请输入甲学院的获奖数:");
scanf("%d", &a);
printf("请输入乙学院的获奖数:");
scanf("%d", &b);
if (a > b) {
printf("奖项比较多的是甲学院, 一共获得了%d项奖", a);
} else if (a == b) {
printf("奖项居然一样多呢");
} else {
printf("奖项比较多的是乙学院, 一共获得了%d项奖", b);
}
}
现需要输入一个字符串, 将该字符串中所有非数字字符全部去掉, 并将去掉后的字符串打印输出,(如输入a12*pkj3sh; 会输出123)
(1) 写出上述编程思路, 并画出流程图
(2) 根据(1)思路编写程序
(1)
(2)
#include <stdio.h>
int main() {
char a[80];
gets(a);
int i, j = 0;
for (i = 0; a[i]; i++)
// if ((a[i] >= 'a' && a[i] <= 'z') || (a[i] >= 'A' && a[i] <= 'Z')) {
// a[j] = a[i];
// j++;
// }
if (a[i] >= '0' && a[i] <= '9') {
a[j] = a[i];
j++;
}
a[j] = '\0';
puts(a);
return 0;
}