一:前序
1.一个c语言程序有且只有一个main函数,是程序运行的起点!
每个c语言程序写完后,都是先编译(.c---),后链接(.obj---),最后运行(.exe);
注意.c与.obj文件是无法运行的,只有.exe文件才可以运行
2.标识符的概念:
标识符是由字符、数字、下划线组成,并且第一个必须是字母或下划线
标识符分为关键字、预定义标识符、用户标识符
严格区分大小写,尽量采用能说明程序对象意义的标识符!
3.进制转换
十进制转换二进制、八进制、十六进制;
二进制、八进制、十六进制转成十进制;
1)c语言中只有八、十、十六进制,没有二进制
但是在运行时候,所有进制都要转成二进制来进行处理
八进制规定要以0开头,没有8,逢8进1;十六进制规定以0x开头;
2)小数的合法写法:c语言小数点两边有一个零的话,可以不用写;
3)实型数据的合法形式
- 2.333e-1是合法的,且数据是2.333*10的负一次方
- 口诀:e前e后必有数,e后必为整数
4)整型一般是4个字节,字符型是1个字节,双精度型一般是8个字节
4.算术表达式和赋值表达式
1)算术表达式:+ - * / %
“/”两边都是整型的话,结果就是一个整型;如:3/2=1;
“/”若有一边为小数,那么结果为小数;如:3/2.0=1.5
“%”符号请一定要注意是余数,%符号两边要求是整数
8%5=3 8/5=1
在c程序中,两个整数相除(整除),会自动舍去小数部分!
2)赋值表达式
表达式数值2是最右边的数值,a=b=5;该表达式为5,常量不可以赋值;赋值的左边只能是一个变量!
3)复合的赋值表达式:
int a=2;
a*=2+3; //a=10,相同于a=2*(2+3);
算术运算符与“=”结合在一起,形成的复合赋值运算符
4)自加表达式:
自加、自减表达式:假设a=5;++a(是为6),a++(为5);
运行的机理:++a是先八变量的数值加上1,然后吧得到的数值放到变量a中,然后再用这个++
a表达式的数值为6;
a++是先用该表达式的数值为5,然后再把a的数值加上1为6,再放到变量a中,进行了++a和a++后,在下面的程序中再用到a的话都是变量a中的6了;
口诀:++在前,先加后用;++在后,先用后加
++a,先取值,后执行;a++,先执行,后取值;
5)逗号表达式:优先级最低,表达式的数值是逗号最右边的那个表达式的数值
如:(2,3,4)的表达式的数值就是4;
z=(2,3,4) (整个是赋值表达式)这个时候z的值是4;
z=2,3,4 (整个逗号表达式)这个时候的z值是2;
x=(a=3,6*a); //a=3,x=18;
x=(a=3*5,a*4),a+15; // 表达式值30,x=60
运算次序,将3*5结果15赋值给变量a,再计算括号内第二个表达式的值,结果为60。
60是运算至此括号所构成表达式的值,此时a的值仍为15,最后计算整个表达式的值为30。
补充:
- 空语句不可以随意执行,会导致逻辑错误!
- 注释不是c语言,不占运行时间,没有分号,不可以嵌套!
- 强制类型转换:一定是(int)a不是int(a)注意类型上一定要有括号的!但要注意(int)(a+b)和(int) a+b的区别,前是吧a+b转变,后是吧a转型后再加b
- 三种取整去小数的情况:1.int a=1.6; 2. b=(int) a; 3.1/2; 3/2;
5.字符
1)字符数据的合法形式
‘1’是字符占一个字节;“1”是字符串占两个字节(含有一个结束符号);
‘0’的ASCII数值表示为48,‘a’的ASCII的数值是97,‘A'的ASCII数值为65;
一般考试表示单个字符错误的形式:’65‘,“1”;
字符是可以进行算数运算的:’0‘-0=48;
大写字母和小写字母转换方法:’A'+32=‘a' 相互之间差32;
2)转义字符:分为一般转义字符,八进制转义字符,十六进制的转义字符
1.一般转义字符:\t \n \' \" \\
2.八进制转义字符:’\141‘是合法的,前导0是不能写的
3.十六进制转义字符:'\x6d'是合法的,前导0不能写且x为小写
3)字符型和整数是近亲:两个有很大的相似之处
char a=65;
printf("%c",a); //输出结果:A
printf("%d",a); //输出结果:65
字符形式 | 含义 | ASCII码 |
\n | 换行 | 10 |
\t | 水平制表(下一个Tab) | 9 |
\b | 退格 | 8 |
\r | 回车 | 13 |
\f | 换页 | 12 |
\\ | 反斜杠\ | 92 |
\' | 单引号(撇) | 39 |
\" | 双引号 | 34 |
\ddd | 1到3位八进制代表的字符 | |
\xhh | 1到2位十六进制代表的字符 |
二:输入输出函数
1.数据输出printf()
1)使用printf和scanf函数,在最前面加上#include<stdio.h>
2) pirntf可以只有一个参数,也可以有两个参数
格式说明 | 表示内容 | 格式说明 | 表示内容 |
%d | 整型int | %c | 字符char |
%ld | 长整型long int | %s | 字符串 |
%f | 浮点型float | %o | 八进制 |
%lf | double | %#o | 带前导的八进制 |
%% | 输出一个百分号 | %x | 十六进制 |
%5d | %#x | 带前导的十六进制 |
转换描述 | 对应参数类型 | 实现的转换 |
%md | int | 输出十进制整数,m为输出最小宽度 (如数据的位数小于m,则左端补空;若数据位数大于m,则按实际长度输出) |
%m.nf 。 | float,double | 按带小数形式输出实数,m为输出最小宽度,n为小数点后位数。(如数据的位数小于m,则左端补空;若数据位数大于m,按实际长度输出。小数位数被截断时按四舍五入输出) |
printf("%2d",123); //第二部分有三位,大于指定的两位,原样输出123
printf("%5d",123); //第二部分有三位,小于指定的五位,左边补两个空格 123
printf("%10.6f",1.25);//小数要求补足6位的,没有6位的补0,结果位1.250000
printf("%5.3f",1.25); //小数三位,整个五位,结果1.250(小数点算一位)
printf("%3.1f",1.25); //小数一位,整个三位,结果为1.3(要进行四舍五入)
2.数据输入scanf()
1)scanf(”a=%d,b=%d“,&a,&b); 重点
2)指针在scanf int x=2; int *p; p=&x; scanf("%d”,p);
星号取数值,&取地址!
3.指定输入的长度(重点)
//终端输入:1234567
scanf(“%2d%4d%d”,&x,&y,&z);
//x为12,y为3456,z为7
//终端输入1 234567 1 2中间有空格,所有只有1给了x
scanf(“%2d%4d%d”,&x,&y,&z);
//x为1, y为2345,z为67
4.输入时候字符和整数的区别(重点)
scanf("%d", &x); //输入1,表示整数1
scanf("%c", &x); //输入字符’1‘,为整数49;
putchar,getchar函数的考点
char a=getchar()没有参数的,从键盘得到你输入的一个字符给变量a;
putchar(”y“)吧字符y输出到屏幕!