@caelumtian
2017-08-21T13:24:57.000000Z
字数 3320
阅读 898
胡杨考研试题
附录:1
)附录 1
附录 2
附录 3
附录 4
“(a>b)?a:b”是一个条件表达式,如果(a>b)条件为真,则条件表达式去值a,否则取值b。一般形式:表达式1?表达式2:表达式3,它是C语言中唯一的一个三目运算符。执行顺序:先求解表达式1,若为非0(真)则求解表达式2,此时表达式2的值作为整个条件表达式的值。若表达式1的值为0,则求解表达式33,表达式3的值作为整个条件表达式的值.
C语言的三种基本数据类型为整型,实型,字符型。
- 整型,包括short, int, long等,用以表示一个整数,默认为有符号型,配合unsigned关键字,可以表示为无符号型。
- 实型,即浮点型,包括float, double等,用来表示实数,相对于整型,该类型可以表示带有小数部分的数值。需要注意的是,实型在计算机语言中为近似值表示,并非准确值,在多次计算后可能会出现真值偏差。
- 字符型,即char型,用来表示各种字符,与ascii码表一一对应。除可以用来表示各类字符外,char型的其它规则与整型相同,可以认为char是一种特殊的整型。
a < c || b < c
#define CHANGE(a,b,t) t=a;a=b;b=a
3
- 它是一种构造数据类型。枚举类型用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型。
- enum
i+=1 标准答案
i ^ 1 列害了我的姐答案(位运算)
- static变量存放在静态存储区,在程序整个运行期间都不释放;而auto变量存放在动态存储区,随着生命周期的结束而立即释放。
- static变量只赋值一次,以后就不用赋值;而auto变量在函数每调用一次都要赋初值。
- 如果用户不对static变量赋初值,则默认为0或'\0';而auto变量为不确定值。
3
18 12 10
==
10100
arr[2][3]所在的地址
2 4 6 8 10
strcpy
7行: if(p >= 'A' && p <= 'Z')
9 行: while(*(++p) != '\0')
4行:int tmp = *x;
6行:*y = tmp;
#include <stdio.h>
int main(void) {
int t = 1;
int i = 1;
int s = 0;
for(;i <= 20; i++) {
t = t * i;
s = s + t;
}
printf("%d", s);
return 0;
}
#include<stdio.h>
//递归算法 a 是数组指针,key是查找的
int binary(int *a, int key, int low, int high) {
int mid;
if(low > high)
return -1;
mid = (low + high) / 2;
if(a[mid] == key)
return mid;
else if(a[mid] > key)
return recurbinary(a,key,low,mid -1);
else
return recurbinary(a,key,mid + 1,high);
}
//调用示例如下:
int a[] = {1,2,3,4,5,6,7,8,9,12,13,45,67,89,99,101,111,123,134,565,677};
binary(a, 89, 0, sizeof(a) / sizeof(a[0])-1));
非递归方法,见附录5
若函数调用时用数组名作为函数参数,以下叙述中,正确的是__C__。
A) 实参与其对应的形参共占用同一段存储空间
B) 实参将其地址传递给形参,结果等同于实现了参数之间的双向值传递?
C) 实参与其对应的形参分别占用不同的存储空间
D) 在调用函数中必须说明数组的大小,但在被调函数中可以使用不定
数组名作为函数的实参,实际传递的是数组的首地址。形参有两种写法:数组做形参或者指针做形参。无论数组或指针做形参,其实都是一个指针做形参,指向了函数以外的存储空间。在32位操作系统中,指针变量占4个字节,有自己的存储空间。数组实参也有自己的存储空间,所以答案C是正确的。
static
是定义一个静态变量
静态变量的存储空间在程序的整个运行期间是固定的,它不像动态变量是在程序执行当中被动态建立,动态撤销的.
如果一个变量被指定为静态,在编译时就为它分配好存储空间,程序一开始执行便被建立,直到该程序执行结束都是存在的。它不像动态变量仅存在于函数或程序被调用期间.
静态变量可分为静态局部变量和静态外部变量两种
作用
1.可以为变量初始化(在变量被编译的时候就赋值)
2.在函数多次调用的过程序中,静态局部变量的值具有可继承性
共用体类型数据的特点:
1. 同一个内存段可以用来存放几种不同类型的成员,但是在每一瞬间只能存放其中的一种,而不是同时存放几种。换句话说,每一瞬间只有一个成员起作用,其他的成员不起作用,即不是同时都在存在和起作用。
2. 共用体变量中起作用的成员是最后一次存放的成员,在存入一个新成员后,原有成员就失去作用。
3. 共用体变量的地址和它的各成员的地址都是同一地址。
4. 不能对共用体变量名赋值,也不能企图引用变量名来得到一个值。
5. 共用体类型可以出现在结构体类型的定义中,也可以定义共用体数组。反之,结构体也可以出现在共用体类型的定义中,数组也可以作为共用体的成员。
宏常考的知识点如下:
1. 宏分为带参数和不带参数两种定义方式
2. 宏定义末尾不加分号
3. 宏定义写在函数的花括号外边,作用域为其后的程序,通常在文件的最开头
4. 宏定义允许嵌套
5. 函数调用在编译后程序运行时进行,并且分配内存。宏替换在编译前进行,不分配内存
6. 宏定义不存在类型问题,它的参数也是无类型的
7. 宏替换只作替换,不做计算,不做表达式求解
8. 宏展开不占运行时间,只占编译时间,函数调用占运行时间(分配内存、保留现场、值传递、返回值)
9. 宏展开使源程序变长,函数调用不会
int binary( int *a, int key, int n ) {
int left = 0, right = n - 1, mid = 0;
mid = ( left + right ) / 2;
while( left < right && a[mid] != key ) {
if( a[mid] < key ) {
left = mid + 1;
} else if( a[mid] > key ) {
right = mid - 1;
}
mid = ( left + right ) / 2;
}
if( a[mid] == key )
return mid;
return -1;
}
//调用示例
binary( a, b[i], sizeof(a)/sizeof(a[0]))