注:stdio.h 头文件(Header files),h为head之意,std为standard之意,i为input之意,o为output之意。
%d为十进制整型格式输出变量的值,%f为按十进制小数格式输出变量的值,除非未指定,否则隐含输出6位小数,%c表示输出字符型变量的值。
1.const为指定(double)型定义只读变量。
2.#define为主函数之前定义的宏观变量函数 (#define 标识符 字符串)。
3.i++;++i ;自身已经发生了运行变化,但是赋值于 字符串 时 (i++值还未变,++i已经变)。
4.标识符命名:标识符必须以字母或下划线开头,且只能由英文字母、数字或下划线组成。
5.sizeof()是C语言提供的专用于计算指定数据类型字节数的运算符。
6.标准数学函数:(调用时需包含头文件<math.h>)
sqrt(x)是计算(x)平方根,x大于或等于0;
fabs(x)计算x的绝对值;
log(x)计算lnx的值,x应大于0;
log10(x)计算lgx的值,x应大于0;
exp(x)计算e的x次方的值;
pow(x,y)计算x的y次方的值;
sin(x)计算sinx的值,x为弧度,而非角度值;
cos(x)计算cosx的值,x为弧度,而非角度值;
7.‘’非0‘’为真;“0”为假。
8.if(a>b)i=a; else i=b;此输入方式可行但是只允许一条条件语句,如果想要多条条件语句这需要{}来帮助。
9. 表达式1? 表达式2:表达式3 含义:若表达式1值为真,这该条件表达式的值是表达式2的值,否则为表达式3的值。例:( max=a>b? a : b ;)
10.函数exit(code)的作用是终止整个程序的执行,强制返回操作系统。code为0或者为宏常量EXIT_SUCCESS时,表示正常运行;为非0或者宏常量EXIT_FAILURE时,表示程序出现某种错误后退出。(调用函数exit()需包含头文件<stdlib.h>)
11.switch(字符串)
{ case空(赋值字符串的int或char型值):
执行条件;
break;
case......
break;
default:
执行条件;
}
12.逻辑值优先级:!(逻辑非)>&&(逻辑与)>||(逻辑或);运算符&&与||都有短路状态,也就&&第一项为0是,第二项不进行计算。||第一项为1时,第二项不进行计算。
13.字符串=scanf();/*记录scanf()函数录取正确型赋值的个数*/。
14.fflush(stdin);/*清除输入缓冲区中的错误数据*/。
15.循环
①
while(循环控制表达式)注:先判断再执行
{
语句序列
}
②
do 注:先执行再判断(即循环一定执行一次及以上)
{
语句序列
}while(循环控制表达式);
③
for(初始化表达式;循环控制表达式;增值表达式) 初始化表达式;
{ 等价于: while(循环控制表达式)
语句序列 {
} 语句序列
增值表达式;
}
16.for和while循环条件下不能在循环条件括号外加“;”。
17.循环结构中循环语句是相互连接的而且赋值语句是每次循环都相互传递的。
18.随机数生成用函数rand(),随机函数rand()产生的是一个在0~RAND_MAX之间的整数,符号常量RAND_MAX是头文件stdlib.h中定义的,因此需包含头文件stdlib.h。
19.time()返回以秒计算的日历时间及一个标准时间点到当前时刻经过的相对时间(单位为秒),使用NULL作为time()是,time(NULL)的返回值被转换为无符号整数。可作为随机种子。
20. 强制性的goto:一般与if使用,当读到语句 if(表达式)goto 标识符1;如果if条件满足直接跳转到语句, 标识符:语句 。
21.break结束此循环体跳转为此循环体的后的第一句语句或 switch的一项case 然后执行下一句语句。而continue是结束循环体的一项小循环并非结束循环。
22.标识变量一般 int find=0;及fand为0时,条件为假的在for循环里用为:for(初始化表达式;!find;增值表达式),也可以判断逻辑是否为正确:find=(逻辑语句);当逻辑语句为真时find=1,反之find=0。
23. 静态变量用static,static 类型名 变量名;
24.在定义数组时不能使用变量定义数组;( int score[n]为错误的,但是int score[size]像这样的定义,可以定义但是一定要在main()前声明#define size 数字)在定义二维数组的时候二维长度的声明永远都不能省略。
25.void定义函数时候,函数不返回返回值。因此录入input信息的时候大多用void定义函数比较好。
26.数组调用时,以数组名不带方括号作为函数实参可以调用函数。数组调用函数时是以首地址调用函数的。readscore(score,n);但是函数定义首部函数期望用形参来接收一个数组。int Average(int score[ ],int n);
27.数组作为函数形参时,数组的长度可以不出现在数组名后面的方括号内,通常用另一个整形形参来指定数组的长度。
28.数组变量长度很大很大时使得low和high之后超出了limits.h中的定义的有符号整数的极限值,那么执行去取数据区中间点的语句mid=(low+high)/2;时发生数据数值溢出,导致mid成为负值。
防止数据溢出的方法可采用修改计算中间值的方法,用加减法替代计算mid的值,即mid=low+(high-low)/2。
29.实参向形参是单向值传递的。
30.在被调用函数中改变形参数组元素值时,实参数组元素值也会随之改变。这不是形参反向传给实参造成的,而是形参与实参具有相同的地址,共享同一段内存单元造成的。
31.当形参被声明为一维数组是,形参列表中的数组的方括号内可以为空。然而当形参被声明为二维数组时,可以省略数组第一维的长度声明,但是不能省略第二维的长度声明。
32.指针变量一般要初始化为int * pa=NULL,其指针pa指向地址00000000。
33. 在想控制形参能发生相互交换数据交换等,此时应定义指针函数时类似于:
void Swap(int*x,int*y)
{
int temp;
temp=*x;
*x=*y;
*y=temp;
}
34.数组下标是指数据的名称但不改变数据的变量值,从而实现数据的交换。
35. 假如定义一个指针函数:
main
{
SelectionSort(score,n,Ascending);
}
void SelectinSort(int a[ ] , int n,int(*compare)(int a,int b))
{
}
int Ascending(int a,int b)
{
}
此时的compare就是指向Ascending的一个函数指针。
36. 字符处理函数必须在程序开头包含头文件<ctype.h>。272p(字符处理函数)
37.const放在不同的位置有不同的作用。详情请看271p。
38.使用字符串转换函数必须在程序开头包含头文件<stlib.h>。277p
39.一维数组中,假设定义int *p数组为a[ ],且p=a;详细的说指针p指向数组a[ ] ,其关系如下:
地址: p+i = &p[i] = &a[i] =a+i ;
整形常量:*p+i = p[i] = a[i] =*(a+i) ;
40.二维数组中a[0]+1为代表元素a[0][1]的地址(&a[0][1]),*(a[0]+1)即为元素a[0][1];
41.二维数组a[i][j]的等价形式 : a[i][j] *(a[i]+j) *(*(a+i)+j) (*(a+i))[j];
二维数组行指针定义:int(*p)[4];
p=a;或p=&a[0];
二维数组行指针等价形式:p[i][j] *(p[i]+j) *(*(p+i)+j) (*(p+i))[j];地址形式:&p[i][j] p[i]+j *(p+i)+j 等;
二维数组列指针定义:int*p;
p=a[0]; p=*a; p=&a[0][0]
二维数组列指针等价形式*(p+i*n+j) p[i*n+j] a[i][j];地址形式:p+i*n+j &p[i*n+j] 等;
42. 11章的本章扩张还需仔细看。