第六章 函数
【考点1】函数的定义
在C中,函数定义的一般形式如下:
int func(int arg1, int arg2) {
// Code
}
这里函数名为func
,返回类型为int
,并接受两个int
类型参数。
【考点2】库函数
例如,调用C语言的数学库函数需要引入 <math.h>
头文件。如:
#include<math.h>
double squareRoot = sqrt(4.0);
此代码段会计算4.0的平方根。
【考点3】函数的返回值
函数可以通过 return 语句返回一个值。例如:
int add(int a, int b) {
return a+b;
}
这个函数返回两个整数的和。
【考点4】函数的声明
函数的声明形如:
int multiply(int a, int b);
【考点5】函数的调用
调用函数时,你需要传递参数并预处理返回值:
int result = multiply(5, 2);
此代码调用之前声明的multiply
函数,并将返回值存储在result
中。
【考点6】函数的参数及值传递
在C语言中,函数参数默认是值传递。也就是说,你传递的是值的副本,对其的更改不会影响原始变量。
#include <stdio.h>
void changeValue(int x) {
x = 20;
}
int main() {
int x = 10;
changeValue(x);
printf("%d", x);
return 0;
}
即使在changeValue
函数中修改了x
的值,但main
函数中的x
值并未改变。
【考点7】函数的递归调用
函数可以递归地调用自己,例如计算阶乘:
int factorial(int n) {
if (n == 0)
return 1;
else
return n * factorial(n - 1);
}
在这个函数中,factorial
函数调用了自己。
【考点8】要求掌握的库函数
以下是C语言中最常用的数学库函数以及调用示例:
- sqrt():计算平方根
double result = sqrt(16.0); // Outputs 4.0
- pow():计算幂函数
double result = pow(2.0, 3.0); // Outputs 8.0
第七章 指针
【考点1】【考点2】【考点3】指针变量、指针变量的定义和初始化
指针变量用于存储地址。以int
类型指针为例,定义和初始化指针:
int num = 10;
int *p = #
在此代码中,num
是一个int
类型变量,p
是一个指针变量,存储变量num
的地址。
【考点4】指针变量的引用
指针的引用要使用*
运算符:
int num = 10;
int *p = #
printf("%d\n", *p); // Outputs 10
这段代码获取了指针p
指向的值。
【考点5】指针的运算
指针的运算应用于数组,你可以通过加(或减)一个整数,来移动指针指向的位置:
int array[4] = {1, 2, 3, 4};
int *p = array;
*p = p + 1; // Now p points to the second element
printf("%d\n", *p) // Outputs 2
在此代码中,p
首先指向数组的第一个元素,通过p = p + 1
,p
的位置移动到了数组的第二个元素。
第八章 数组
【考点1】数组的定义:
//创建一个包含5个整数的数组
int numbers[5];
注解: 数组 numbers
包含5个整数,它们默认被初始化为0。
【考点2】数组的初始化:
int numbers[] = {1, 2, 3, 4, 5};
注解: 初始化了一个数组 numbers
,它包含5个数值,分别为1, 2, 3, 4, 5。
【考点3】元素的引用:
int numbers[5] = {1, 2, 3, 4, 5};
int a = numbers[4];
注解:将数组 numbers
的第五个元素(索引4)赋值给变量 a
。
【考点4】二维数组:
int matrix[2][3] = {{1, 2, 3}, {4, 5, 6}};
int a = *(matrix[0] + 1);
注解: matrix
是一个2行3列的二维数组,其元素值为a[0][1]
即2。
【考点5】行指针:
int array[2][2] = {{1, 2}, {3, 4}};
int (*p)[2] = array;
注解: p
是一个指向包含两个整数的数组的指针。
【考点6】数组名
int numbers[5] = {1, 2, 3, 4, 5};
// numbers++; // 非法操作,因为numbers是地址常量
注解: numbers
是数组的首地址,它是一个常量不能被修改。
【考点7】元素形式的转换
int numbers[5] = {1, 2, 3, 4, 5};
assert(numbers[2] == *(numbers + 2));
注解:数组元素 numbers[2]
可以转换为 *(numbers + 2)
,它们是等价的。
第九章 字符串
【考点1】字符串常量及表示:
char str[] = "Hello";
注解: 对字符串常量"Hello"进行了存储。在尾部自动添加了 '\0'。
【考点2】字符数组:
char str[6] = "Hello";
注解: 'str' 是一个字符数组,它具有6个位置,其中最后一个位置用于存储空字符 '\0'。
【考点3】字符串赋值:
char str1[] = "Hello";
char str2[10];
strncpy(str2, str1, sizeof(str2));
注解:不能直接把数组赋值给另一个数组,但可以使用 strncpy
函数进行复制。
【考点4】字符串的输入与输出:
char str[10];
printf("Enter a word: ");
scanf("%s", str);
printf("You entered: %s\n", str);
注解: 使用 scanf
和 printf
函数进行字符串的输入和输出。
【考点5】字符串函数:
#include <string.h>
char str1[] = "Hello";
char str2[] = "World";
char str3[11];
strcpy(str3, str1); // 复制字符串
strcat(str3, str2); // 连接字符串
printf("Length: %ld\n", strlen(str3)); // 计算长度
printf("Comparison: %d\n", strcmp(str1, str2)); // 比较字符串
注解: 这个例子演示了 strcpy
, strcat
, strlen
, 和 strcmp
使用这些函数进行字符串的复制、连接、长度计算和比较。
附:高考真题
第1题
下列有关栈论述正确的是( )
A. 栈顶元素最先能被删除
B. 栈顶元素最后才被删除
C. 栈底元素永远不能被删除
D. 以上三种说法都不对
正确答案:A
分析:栈是一种后进先出(Last In First Out, LIFO)的数据结构,因此栈顶元素最先被删除。选项B,C,D都不正确。
第2题
下列论述中正确的是( )
A. 有一种以上根结点的数据构造不一定是非线性构造
B. 只有一种根结点的数据构造不一定是线性构造
C. 循环链表是非线性构造
D. 双向链表是非线性构造
正确答案:B
分析:只有一种根节点的数据结构,比如二叉树和堆,都是非线性的。然而,只有一个根节点的数据结构,如链表,可以是线性的。因此选项B正确。
第3题
某二叉树共有7个结点,其中叶子结点只有1个,则该二叉树的深度为(假设根结点在第1层)( )
A. 3
B. 4
C. 6
D. 7
正确答案:D
分析:对于一个有n个节点的二叉树,其深度至少为 log2 (n+1),所以此处一个节点的深度最小应为3,但题目中提到只有一个叶子节点,所以该二叉树为满二叉树,深度应为节点数量,即7。
第4题
在软件开发中,需求分析阶段产生的重要文档是( )
A. 软件集成测试筹划
B. 软件具体设计阐明书
C. 顾客手册
D. 软件需求规格阐明书
正确答案:D
分析:需求分析阶段的主要任务是明确项目需要的具体功能和性能要求,其结果通常是一个软件需求规格说明书。
第5题
构造化程序所规定的基本构造不涉及( )
A. 顺序构造
B. GOTO跳转
C. 选择(分支)构造
D. 反复(循环)构造
正确答案:B
分析:构造化程序强调顺序,选择和循环这三种基本结构。它特别强调避免使用未结构化的跳转(比如 GOTO 语句)。
第6题
下面描述中错误的是( )
A. 系统总体构造图支持软件系统的具体设计
B. 软件设计是将软件需求转换为软件表达的过程
C. 数据构造与数据库设计是软件设计的任务之一
D. PAD图是软件具体设计的表达工具
正确答案:A
分析:系统总体结构图是在系统设计阶段生成的,它支持软件系统的总体设计,而不是具体设计。
第7题
负责数据库中查询操作的数据库语言是( )
A. 数据定义语言
B. 数据管理语言
C. 数据操纵语言
D. 数据控制语言
正确答案:C
分析:数据操纵语言(DML)是用于访问和操纵数据库中数据的语言,包括数据的查询、插入、更新和删除等操作。
第8题
一种教师可讲授多门课程,一门课程可由多种教师讲授,则实体教师和课程间的联系是( )
A. 1:1联系
B. 1:m联系
C. m:1联系
D. m:n联系
正确答案:D
分析:这是一种多对多(m:n)联系,一个教师可以教授多门课程,一个课程也可以由多个教师教授。
第9题
有三个关系R、S和T,由关系R和S得到关系T的操作是( )
A. 自然连接
B. 交
C. 除
D. 并
正确答案:C
分析:除操作是一种逻辑操作,在关系数据库操作中,表示R除以S,结果是R中所有在S中无匹配的元素构成的集合。在这个问题中,T关系就是在R中存在但在S中不存在的数据。
第10题
定义无符号整数类为UInt,下面可以作为类UInt实例化值的是( )
A. -369
B. 369
C. 0.369
D. 整数集合{1,2,3,4,5}
正确答案:B
分析:无符号整数类UInt只能接受正整数或者0,而369符合该条件,所以B是正确答案。
第11题
计算机高档语言程序的运行措施有编译执行和解释执行两种,如下论述中正确的是( )
A. C语言程序仅可以编译执行
B. C语言程序仅可以解释执行
C. C语言程序既可以编译执行又可以解释执行
D. 以上说法都不对
正确答案:A
分析:C语言编写的程序需要通过编译器转化为机器代码后才能运行,所以A为正确答案。
第12题
如下论述中错误的是( )
A. C语言的可执行程序是由一系列机器指令构成的
B. 用C语言编写的源程序不能直接在计算机上运行
C. 通过编译得到的二进制目的程序需要连接才可以运行
D. 在没有安装C语言集成开发环境的机器上不能运行C源程序生成的.exe文献
正确答案:D
分析:C语言源程序编译后生成的可执行文件是独立的,安装环境主要是用于编译,因此选项D是不正确的。
第13题
如下选项中不能用作C程序合法常量的是( )
A. 1,234
B. “123”
C. 123
D. “\x7G”
正确答案:B
分析:在C语言中,字符串应该用双引号括起来,而非英文状态下的引号,所以“123"不是合法的C语言常量。