后记

今年(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

命令行参数

  • argcint类型的,它表示的是命令行参数的个数。不需要用户传递,它会根据用户从命令行输入的参数个数,自动确定。
  • argvchar**类型的,它的作用是存储用户从命令行传递进来的参数。它的第一个成员是用户运行的程序名字。

文件读写

打开文件

1
2
3
4
if((fp = fopen("abc.txt","r")) == NULL) {
printf("File open error.\n");
exit(0);
}

关闭文件

1
2
3
4
if(fclose(fp)) {
printf("Can not close the file!\n");
exit(0);
}

文件读写

  • 字符方式文件读写函数:fgetc()fputc()
  • 字符串方式文件读写函数:fputs()fgets()
  • 格式化方式文件读写函数:fscanf()fprintf()
  • 数据块方式文件读写函数:fread()fwrite()
模式 描述
r 打开一个已有的文本文件,允许读取文件。
w 打开一个文本文件,允许写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会从文件的开头写入内容。如果文件存在,则该会被截断为零长度,重新写入。
a 打开一个文本文件,以追加模式写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会在已有的文件内容中追加内容。
r+ 打开一个文本文件,允许读写文件。
w+ 打开一个文本文件,允许读写文件。如果文件已存在,则文件会被截断为零长度,如果文件不存在,则会创建一个新文件。
a+ 打开一个文本文件,允许读写文件。如果文件不存在,则会创建一个新文件。读取会从文件的开头开始,写入则只能是追加模式。

重要函数与定义

  • feof:当设置了与流关联的文件结束标识符时,该函数返回一个非零值,否则返回零。
  • FILE *fp;:文件指针。
  • EOF:定义在头文件 stdio.h 中的常量(-1)

指向函数的指针

在C语言中,函数名代表函数的入口地址。可以定义一个指针变量,接受函数的入口地址,让他指向函数(函数指针)

通过函数指针可以调用函数,还可以作为函数的参数

1
2
类型名(*变量名)(参数类型表);
int(*funptr)(int, int);

在使用函数指针前,要先对其进行赋值。赋值时,将函数名赋值给函数指针,但该函数必须已定义或声明,且函数返回值的类型和函数指针必须一致

1
2
3
4
int fun(int x, int y) {
return x+y;
}
funptr = fun;

函数和函数指针调用

1
2
fun(3,5);
(*funptr)(3,5);

几个函数

  • toupper:如果 c 有相对应的大写字母,则该函数返回 c 的大写字母,否则 c 保持不变
  • isdigit:如果 c 是一个数字,则该函数返回非零值,否则返回 0。
  • isalpha:如果 c 是一个字母,则该函数返回非零值,否则返回 0。

几个常量

  • EOF:定义在头文件 stdio.h 中的常量(-1)
  • NULL(0)
  • \0(0)

几点说明

  • 没有break会继续执行casedefault

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
2
3
4
struct{
int len;
char *str;
}*p;

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
2
3
4
struct node{
int len;
char *pk;
} x = {2, "right"}, *p = &x;

A、p->pk     B、*p.pk     C、*p->pk     D、*x.pk

19.下列程序段的输出是______. ne,s

1
2
3
char *a[2] = {"one", "two"}, **p = a;
printf("%s,", *(p++)+1);
printf("%c\n", **p-1);

2001~2002学年《程序设计基础-C》试卷(秋)

14.对于以下的变量定义,表达式______是正确的.

1
2
3
4
struct node{
char s[10];
int k;
} p[4];

A、p->k=2     B、p[0].s=”abc”     C、p[0]->k=2     D、p->s=’a’

27.下列程序在运行时可能会出错,原因是______. 指针s没有赋值

1
2
3
4
5
6
7
#include <stdio.h>
void main()
{
char *s;
gets(s);
puts(s);
}

29.下列程序段的输出结果是______. fgh

1
2
char *st[] = {"abcd", "efgh", "ijkl", "mnop"};
printf("%s", *(st+1)+1);

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
2
3
int c[] = {10, 0, -10};
int *k = c + 2;
printf("%d", *k--);

2.函数sort使用冒泡法将一维整型数组中各元素按值从大到小排序。

1
2
3
4
5
6
7
8
9
10
11
12
void sort(int a[], int n)
{
int k, j, t;
for(k = 1; k < n; k++)
for(j = 0; j < n - k; j++)
if(a[j] < a[j + 1])
{
t = a[j + 1];
a[j + 1] = a[j];
a[j] = t;
}
}