[关闭]
@caelumtian 2017-08-21T13:24:57.000000Z 字数 3320 阅读 898

C 语言 2014年B卷

胡杨考研试题

选择题

  1. D 考察C语言变量命名规范,A 以数字开头 B 选项为关键字 C 是表达式
  2. B 进制转换 不明白可以看这个二进制、八进制、十进制、十六进制之间的转换
  3. C
  4. A 当数组作为参数的时候,形参有两种写法:数组做形参或者指针做形参。(附录:1)
  5. A 参考 附录 1
  6. D 详解见 附录 2
  7. B p+=2 令p指针指向40,++*p。利用p取出值40然后+1
  8. C
  9. C 好好看看共用体,详解见附录 3
  10. D 并不是必须的,有返回值的函数可以作为右值
  11. B
  12. D 类型的隐式转换,C语言规定的转换规则是由低级向高级转换。
  13. A 宏不可以递归,宏的内容参考附录 4
  14. C 考察参数宏。将M(3, 2)替换成 3 + 2,因此表达式变成 k = 3 + 2 * 5。
  15. D 不明白就去看结构体
  16. B char a[] = "TEST" 中会多有一个'\0'
  17. A 结构化程序设计的三种基本结构是:顺序结构、选择结构和循环结构
  18. A D 错误的原因是函数并无返回值
  19. A 这题我是写函数测了一遍,arr++会报错的,其余的返回都是相同地址
  20. C feof是C语言标准库函数函数,其原型在stdio.h中,其功能是检测流上的文件结束符,如果文件结束,则返回非0值,否则返回0,文件结束符只能被clearerr()清除。

问答题

21 C语言中唯一得三元运算符是什么

“(a>b)?a:b”是一个条件表达式,如果(a>b)条件为真,则条件表达式去值a,否则取值b。一般形式:表达式1?表达式2:表达式3,它是C语言中唯一的一个三目运算符。执行顺序:先求解表达式1,若为非0(真)则求解表达式2,此时表达式2的值作为整个条件表达式的值。若表达式1的值为0,则求解表达式33,表达式3的值作为整个条件表达式的值.

22 c语言的基本数据类型分为哪儿三类

C语言的三种基本数据类型为整型,实型,字符型。

  1. 整型,包括short, int, long等,用以表示一个整数,默认为有符号型,配合unsigned关键字,可以表示为无符号型。
  2. 实型,即浮点型,包括float, double等,用来表示实数,相对于整型,该类型可以表示带有小数部分的数值。需要注意的是,实型在计算机语言中为近似值表示,并非准确值,在多次计算后可能会出现真值偏差。
  3. 字符型,即char型,用来表示各种字符,与ascii码表一一对应。除可以用来表示各类字符外,char型的其它规则与整型相同,可以认为char是一种特殊的整型。

23 描述a和b其中之一小与c

a < c || b < c

24 定义一个宏交换两个参数的值

#define CHANGE(a,b,t) t=a;a=b;b=a

25 写出程序运行结果

3

26 枚举类型是什么,表示枚举类型的关键字是什么

  1. 它是一种构造数据类型。枚举类型用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型。
  2. enum

27 写出i + 1不同的语句

i+=1 标准答案
i ^ 1 列害了我的姐答案(位运算)

static和auto区别

  1. static变量存放在静态存储区,在程序整个运行期间都不释放;而auto变量存放在动态存储区,随着生命周期的结束而立即释放。
  2. static变量只赋值一次,以后就不用赋值;而auto变量在函数每调用一次都要赋初值。
  3. 如果用户不对static变量赋初值,则默认为0或'\0';而auto变量为不确定值。

写出结果

3

写出结果

 18 12 10

=;||;+;== 最低优先级是

==

写出结果

10100

*(arr+2) + 3表示什么

arr[2][3]所在的地址

写出结果

2 4 6 8 10

指出下面函数的功能相当于什么

strcpy

改错题

36

7行: if(p >= 'A' && p <= 'Z')
9 行: while(*(++p) != '\0')

37

4行:int tmp = *x;
6行:*y = tmp;

编程题

1. 1! + 2! + ... + 20! 的值

  1. #include <stdio.h>
  2. int main(void) {
  3. int t = 1;
  4. int i = 1;
  5. int s = 0;
  6. for(;i <= 20; i++) {
  7. t = t * i;
  8. s = s + t;
  9. }
  10. printf("%d", s);
  11. return 0;
  12. }

2. 利用二分法查找n个数中指定的数

  1. #include<stdio.h>
  2. //递归算法 a 是数组指针,key是查找的
  3. int binary(int *a, int key, int low, int high) {
  4. int mid;
  5. if(low > high)
  6. return -1;
  7. mid = (low + high) / 2;
  8. if(a[mid] == key)
  9. return mid;
  10. else if(a[mid] > key)
  11. return recurbinary(a,key,low,mid -1);
  12. else
  13. return recurbinary(a,key,mid + 1,high);
  14. }
  15. //调用示例如下:
  16. int a[] = {1,2,3,4,5,6,7,8,9,12,13,45,67,89,99,101,111,123,134,565,677};
  17. binary(a, 89, 0, sizeof(a) / sizeof(a[0])-1));

非递归方法,见附录5

附录

1.这里给出一个同类型的考研题:

若函数调用时用数组名作为函数参数,以下叙述中,正确的是__C__
A) 实参与其对应的形参共占用同一段存储空间
B) 实参将其地址传递给形参,结果等同于实现了参数之间的双向值传递?
C) 实参与其对应的形参分别占用不同的存储空间
D) 在调用函数中必须说明数组的大小,但在被调函数中可以使用不定

数组名作为函数的实参,实际传递的是数组的首地址。形参有两种写法:数组做形参或者指针做形参。无论数组或指针做形参,其实都是一个指针做形参,指向了函数以外的存储空间。在32位操作系统中,指针变量占4个字节,有自己的存储空间。数组实参也有自己的存储空间,所以答案C是正确的。

2.static 静态变量解析

static 是定义一个静态变量
静态变量的存储空间在程序的整个运行期间是固定的,它不像动态变量是在程序执行当中被动态建立,动态撤销的.
如果一个变量被指定为静态,在编译时就为它分配好存储空间,程序一开始执行便被建立,直到该程序执行结束都是存在的。它不像动态变量仅存在于函数或程序被调用期间.
静态变量可分为静态局部变量和静态外部变量两种
作用
1.可以为变量初始化(在变量被编译的时候就赋值)
2.在函数多次调用的过程序中,静态局部变量的值具有可继承性

3.共用体类型数据

共用体类型数据的特点:
1. 同一个内存段可以用来存放几种不同类型的成员,但是在每一瞬间只能存放其中的一种,而不是同时存放几种。换句话说,每一瞬间只有一个成员起作用,其他的成员不起作用,即不是同时都在存在和起作用。
2. 共用体变量中起作用的成员是最后一次存放的成员,在存入一个新成员后,原有成员就失去作用。
3. 共用体变量的地址和它的各成员的地址都是同一地址。
4. 不能对共用体变量名赋值,也不能企图引用变量名来得到一个值。
5. 共用体类型可以出现在结构体类型的定义中,也可以定义共用体数组。反之,结构体也可以出现在共用体类型的定义中,数组也可以作为共用体的成员。

4. 宏定义

宏常考的知识点如下:
1. 宏分为带参数和不带参数两种定义方式
2. 宏定义末尾不加分号
3. 宏定义写在函数的花括号外边,作用域为其后的程序,通常在文件的最开头
4. 宏定义允许嵌套
5. 函数调用在编译后程序运行时进行,并且分配内存。宏替换在编译前进行,不分配内存
6. 宏定义不存在类型问题,它的参数也是无类型的
7. 宏替换只作替换,不做计算,不做表达式求解
8. 宏展开不占运行时间,只占编译时间,函数调用占运行时间(分配内存、保留现场、值传递、返回值)
9. 宏展开使源程序变长,函数调用不会

5. 二分法非递归

  1. int binary( int *a, int key, int n ) {
  2. int left = 0, right = n - 1, mid = 0;
  3. mid = ( left + right ) / 2;
  4. while( left < right && a[mid] != key ) {
  5. if( a[mid] < key ) {
  6. left = mid + 1;
  7. } else if( a[mid] > key ) {
  8. right = mid - 1;
  9. }
  10. mid = ( left + right ) / 2;
  11. }
  12. if( a[mid] == key )
  13. return mid;
  14. return -1;
  15. }
  16. //调用示例
  17. binary( a, b[i], sizeof(a)/sizeof(a[0]))
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注