后记
今年(22考研)878的难度有了很大提升。
教育超市提供的往年878真题不再具有价值。
程序设计基础(C)
运算符优先级
优先级 | 运算符 | 结合律 |
---|---|---|
1 | 后缀运算符:[] () · -> ++ -- (类型名称){列表} |
从左到右 |
2 | 一元运算符:++ -- ! ~ + - * & sizeof_Alignof |
从右到左 |
3 | 类型转换运算符:(类型名称) | 从右到左 |
4 | 乘除法运算符:* / % |
从左到右 |
5 | 加减法运算符:+ - |
从左到右 |
6 | 移位运算符:<< >> |
从左到右 |
7 | 关系运算符:<<= >>= |
从左到右 |
8 | 相等运算符:== != |
从左到右 |
9 | 位运算符 AND:& |
从左到右 |
10 | 位运算符 XOR:^ |
从左到右 |
11 | 位运算符 OR:| | 从左到右 |
12 | 逻辑运算符 AND:&& |
从左到右 |
13 | 逻辑运算符 OR:|| | 从左到右 |
14 | 条件运算符:?: |
从右到左 |
15 | 赋值运算符: = += -= *= /= %= &= ^= |= <<= >>= |
从右到左 |
16 | 逗号运算符:, |
从左到右 |
格式输入函数
- 在
scanf
中,所有的非输入控制符
都要原样输入
格式输出函数
%f
:默认输出6位
强制类型转换
(type_name) expression
命令行参数
argc
是int
类型的,它表示的是命令行参数的个数。不需要用户传递,它会根据用户从命令行输入的参数个数,自动确定。argv
是char**
类型的,它的作用是存储用户从命令行传递进来的参数。它的第一个成员是用户运行的程序名字。
文件读写
打开文件
1 | if((fp = fopen("abc.txt","r")) == NULL) { |
关闭文件
1 | if(fclose(fp)) { |
文件读写
- 字符方式文件读写函数:
fgetc()
和fputc()
- 字符串方式文件读写函数:
fputs()
和fgets()
- 格式化方式文件读写函数:
fscanf()
和fprintf()
- 数据块方式文件读写函数:
fread()
和fwrite()
模式 | 描述 |
---|---|
r |
打开一个已有的文本文件,允许读取文件。 |
w |
打开一个文本文件,允许写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会从文件的开头写入内容。如果文件存在,则该会被截断为零长度,重新写入。 |
a |
打开一个文本文件,以追加模式写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会在已有的文件内容中追加内容。 |
r+ |
打开一个文本文件,允许读写文件。 |
w+ |
打开一个文本文件,允许读写文件。如果文件已存在,则文件会被截断为零长度,如果文件不存在,则会创建一个新文件。 |
a+ |
打开一个文本文件,允许读写文件。如果文件不存在,则会创建一个新文件。读取会从文件的开头开始,写入则只能是追加模式。 |
重要函数与定义
feof
:当设置了与流关联的文件结束标识符时,该函数返回一个非零值,否则返回零。FILE *fp;
:文件指针。EOF
:定义在头文件 stdio.h 中的常量(-1)。
指向函数的指针
在C语言中,函数名代表函数的入口地址。可以定义一个指针变量,接受函数的入口地址,让他指向函数(函数指针)
通过函数指针可以调用函数,还可以作为函数的参数
1 | 类型名(*变量名)(参数类型表); |
在使用函数指针前,要先对其进行赋值。赋值时,将函数名赋值给函数指针,但该函数必须已定义或声明,且函数返回值的类型和函数指针必须一致
1 | int fun(int x, int y) { |
函数和函数指针调用
1 | fun(3,5); |
几个函数
toupper
:如果 c 有相对应的大写字母,则该函数返回 c 的大写字母,否则 c 保持不变。isdigit
:如果 c 是一个数字,则该函数返回非零值,否则返回 0。isalpha
:如果 c 是一个字母,则该函数返回非零值,否则返回 0。
几个常量
EOF
:定义在头文件 stdio.h 中的常量(-1)。NULL
:(0)\0
:(0)
几点说明
- 没有
break
会继续执行case
和default
2000~2001学年《程序设计基础-C》试卷(秋)
13.不正确的赋值或赋初值的方式是______.
A、char str[] = “string”;
B、char str[7] = {‘s’, ‘t’, ‘r’, ‘i’, ‘n’, ‘g’};
C、char str[10]; str = "string";
D、char str[7] = {‘s’, ‘t’, ‘r’, ‘i’, ‘n’, ‘g’, ‘\0’};
14.对于以下结构定义,++p->str中的++加在______.
1 | struct{ |
A、指针str上
B、指针p上 C、str指的内容上 D、以上均不是
2000~2001学年《程序设计基础-C》试卷(春)
10.在C程序中,若对函数类型未加说明,则函数的隐含类型为______.
A、int
B、double C、void D、char
12.设变量定义为“int a[4];”,则表达式______不符合C语言语法。
A、*a B、a[0] C、a D、a++
15.对于以下的变量定义,表达式______不符合C语言语法.
1 | struct node{ |
A、p->pk B、*p.pk
C、*p->pk D、*x.pk
19.下列程序段的输出是______. ne,s
1 | char *a[2] = {"one", "two"}, **p = a; |
2001~2002学年《程序设计基础-C》试卷(秋)
14.对于以下的变量定义,表达式______是正确的.
1 | struct node{ |
A、p->k=2
B、p[0].s=”abc” C、p[0]->k=2 D、p->s=’a’
27.下列程序在运行时可能会出错,原因是______. 指针s没有赋值
1 |
|
29.下列程序段的输出结果是______. fgh
1 | char *st[] = {"abcd", "efgh", "ijkl", "mnop"}; |
30.用typedef定义一个10个元素的整型数组类型ARR,再用ARR定义一个10个元素的整型数组a。
typedef int ARR[10]
ARR a;
2001~2002学年《程序设计基础-C》试卷(春)
20.以下选项中不正确的实型常量是______.
A、0.23E
B、2.3e-1 C、1E3.2
D、2.3e0
40.下列程序段的输出结果是______. -10
1 | int c[] = {10, 0, -10}; |
2.函数sort使用冒泡法将一维整型数组中各元素按值从大到小排序。
1 | void sort(int a[], int n) |