2、程序的执行,从入口点开始,原则上是由而下,从左而右执行的
3、最小的存储单位为位,它可以容纳两个值,即0或1。
4、1个字节为8位,所以一个8位的字节包含256(2^8)种可能0、1的组合
5、字是自然的存储单位。对于8位微机,一个字正好有8位。对于16位机,一个字的大小为16位。32位机中的字是32位。
6、二进八 3位一组 二进十六 4位一组
7、程序=数据结构+算法+开发工具+程序设计语言
8、#include<math.h>//定义数学函数
#include<stdio.h>//定义输入/输出函数 < >表示按照PHTH路径查找头文件," "表示按照当前路径查找头文件
9、\\ 单行注释,\\后面的部分被注释掉不起作用
/* */ 多行注释,/* */里面的部分被注释了
10、在C语言当中,一个程序,无论复杂或简单,总体上都是一个“函数”;这个函数就称为“main() 函数”,也就是“主函数”。
int main( int argc , char *argr[] )
agrc 记录输入在命令行字符串个数 *argc[] 存放输入在命令行的命令(一个数组,每个数都是指针)
shift+% 匹配{}
11、printf(“格式控制字符串”,输出参数);
格式控制字符串包括格式控制字符和其他字符,格式控制字符用输出参数替换,格式控制字符和输出参数一定要数量对应,类型兼容,替换其他字符原样输出
%d 带符号十进制整数 %s输出字符串
%o 无符号八进制整数 %f 输出含小数,隐含输出6位小数
%x无符号十六进制整数 %e 以指数形式输出
%u无符号十进制整数 %g%f或%e中输出宽度短的一个
%c输出单个字符 %p 以十六进制输出地址 printf("a=%d,&a=%p\n",a,&a);printf(“a=%d,b=%d”,a,b)
12、转义符号问题:
转义字符 含义 转义字符 含义
\n 换行 \t 水平制表\v 垂直制表 \b 退格
\r 回车 \f 换页
\a 响铃 \\ 反斜线
\' 单引号 \" 双引号
\ddd 3位进8进制数代表的字符 \xhh 2位进6进制代表的字符
%输出: %% \输出 \\
格式字符 % ± m .n h/l
[开始符] [标志字符] [宽度指示符] [精度指示符] [长度修正符] [格式转换符]
默认右对齐,-表示左对齐,+会在数字前显示加号,占用宽度的一位,m数据总长度(包括整数部分,小数点、和小数部分,.n精度(四舍五入)
13、scanf(格式控制字符串,地址列表) & 格式控制字符和地址列表一定要数量对应,类型兼容
scanf后如果跟scanf("%c")会读取缓冲区里的回车符,解决办法加一个getchar()在前面,或者scanf(“空格 %c”),会过滤掉前面的空格、tab、回车
char str[20]="hello"; str[0]='h' str[1]='e' str[2]='l' str[3]='l' str[4]='o' str[5]='\0'
gets() scanf("%s",str)
1.scanf("%s",str) 输入遇到空格、tab、回车截断
2.scanf("%s",str)如果输入字符串长度超出str的长度,会导致错误。
3.gets()解决了遇到空格截断的问题,但是如果输入字符串长度超出str的长度,会导致错误.
4.用fgets(char *s, int size, FILE *stream). (stdin stdout stderr)
scanf(" %c"),getchar() 解决scanf会读取缓冲区里的回车问题
14、 类型 标识符名字 取值范围 字节数
char 字符型 ASCII字符代码 1
unsigned char 无符号字符型 0至255 1
signed char 有符号字符型 -27 ~ 27-1 1
int 整型 -231~ 231-1 4(short int 2)
unsigned int 无符号整型 0 ~ 216-1 4
signed int 有符号整型 同int 4
float 浮点 10-38~1038 4
double 双精度型 10-308~10308 8(long double 12)
15、+ (加)、 - (减) 、 * (乘) 、 / (除) 和 % (求余数)
求余数,符号位取除数的符号
* / %中,任意一个数中为浮点数,则结果为浮点数
16、数据类型转换:
强制转换: (double)a; (int)(x)+y;先把x的值转换成int型,然后再加y
隐式转换:
数据参加运算前要进行下列转换: char,short→int,float→double
混合运算时数据类型由低级→高级 int unsigned long double
17、赋值运算符结合率为:“自右而左”。
18、自增自减运算符:
++i , --i 先自增或自减,i=i+1,a=i;
i++ , i-- 后自增或自减,a=i,i=i+1;
19、 条件表达式的一般格式为:
表达式1 ? 表达式2 : 表达式3
运算过程:表达式1的结果为真(非0)时,表达式2的计算结果作为条件表达式的值;否则,取表达式3的计算结果为条件表达式的值,条件运算符的结合率为:“自右至左”。
20、逗号运算符: ,
格式: 表达式1, 表达式2, 表达式3, LL, 表达式n
从左向右计算每个表达式的值,逗号表达式的值为表达式n的值。
21、短路性质: && || &&中如果第一个条件不成立,则不会再往下执行,||第一个条件成立,也不会继续往下运行
22、 优先级 运算符 综合性
1 () [] -> 自左向右
2 ! ++ -- & # 正号 负号 ~ 类型 sizeof 指针 自右向左
3 * / % 自左向右
4 + - 自左向右
5 << >> 自左向右
7 == != 自左向右
8 按位与 自左向右
9 按位异或 自左向右10 按位或 自左向右
11 && 自左向右
12 || 自左向右
13 ? : 自右向左
14 = += -= *= ?= %= &= ^= |= <<= >>= 自右向左
#define XX 10 宏定义
typedef int int32; 类型定义
例 typedef char *STRING; STRING name,sign;相当于 char *name,*sign;
#define STRING char* STRING name,sign;相当于 char *name,sign;
24、if语句
if(...) 括号里的判断语句为真执行
{
...
}
else if(...)
{
...
}
else
{
...
}
25、switch语句
switch(...)多分支选择
{ 如果不带break,则一直往下执行,知道遇到下一个break为止;
case 常量表达式1:语句1;break;case 常量表达式2:语句2;break;
case 常量表达式n:语句;nbreak;
default:语句n+1;break;
}
26、while(...)语句
当表达式为非0值时,执行while语句中的内嵌语句。先判断表达式,后执行语句。
27、do-while语句
do
循环体语句
while (表达式); 先执行循环体,然后判断循环条件是否成立,注意后面加‘;’
28、for循环
先求解表达式1;再解表达式2,若为真(非0)值,则执行语句,然后求解表达式3,再转到求解表达式2。若为假(0)值,则结束for语句的执行
for(表达式1;表达式2;表达式3) 可以省略表达式1,但应保留分好
{ 若省略表达式2,不判断循环条件,死循环
... 若能保证正常结束循环,可以省略表达式3
} 表达式1和3可以是逗号表达式,表达式2为关系表达式或逻辑表达式
29、continue语句
作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定.
30、break语句
break语句可以用来从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句
31、在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU跨切循环层的次数。