目录
一. 基础知识
一个C语言有且只有一个main函数,是程序运行的起点,当C语言程序写完后,都是先编译,后链接,最后运行。编译生成的是.c文件 ,链接生成的是.opj文件,运行是.exe文件,只有.exe文件可以运行。
1. 标识符的概念
标识符是由字母,数字,下划线组成,并且第一个字必须为字母或下划线。
标识符分为关键字,预定义标识符,用户标识符。
关键字 | 不可以作为用户标识符 |
预定义标识符 | 可以做为用户标识符 define定义 scanf输入 printf输出 include引用头文件 |
用户标识符 | 用户在自己写代码时自己命名的合法标识符 |
在这里关键字和预定义标识符是系统里定好的,也就是说,写一个函数,不可以命名为if,注意严格区分大小写。 尽量采用说明程序对象意义的标识符。
2. 进制的转换
1.十进制转化为二进制 整数部分除以二倒序,取余 小数部分乘以二正序取余
2.十进制转化为八进制的话,一般先把十进制转化为二进制,二进制就是01010110这些零和一组成的一串数字 。而八进制就是 二进制三个为一组,转化为一个八进制数0-7之间的,如111代表的是七,001代表的是一 ,以次类推,就可以把二进制转化为八进制了
3.C语言只有八,十,十六进制,没有二进制;但在运行的时候,所有的进制都要转化为二进制来进行处理。
4.C语言小数的合法写法 :C语言小数点两边有一个是零的话,可以不用写 如1.0可写成1.,0.1可写成.1。
5.实型数据的合法形式;2.333e-1 就是合法的,且数据是2.333乘以十的负一次方。 口诀 :e前e后必有数,e后必为整数。
6. int整形一般是4个字节,char字符型是1个字节,double双精度型一般是8个字节
二. 算数表达式和赋值表达式
1.算数表达式 + - * / %
“/” 两边都是整形的话,结果就是一个整形。 3/2的结果就是1。如果有一边是小数,那么结果就是小数。3/2.0的结果就是1.5。
“%”符号请一定要注意是余数,%符号两边要求是整数。 如8%5的运行结果是3。
2.赋值表达式
表达式数值是最右边的数值,a=b=5;该表达式为5,常量不可以赋值。
注意 int x=y=10; 【错误,定义时,不可以连续赋值】 赋值左边只能是一个变量。 int x = 7.7; 【对,x就是7】 float y=7;【对,y就是7.0】
3. 复合的赋值表达式:
a * = 2 + 3相当于a = a * (2+3) 算数运算符与“=”结合在一起,形成复合的赋值运算符。
i + = 2 等价于 i = i + 2 a % + 3 等价于a = a % 3 a * = b+5 等价于 a =a *(b+5)
4.自加表达式:
自加,自减表达式:假设a=5, ++a(是为6),a++(为5)
运行原理 :
++a 是先把变量的数值加上1,然后把得到的数值放到变量a中,然后再用这个++a表达式的数值为6。
a++是先用该表达式的数值为5,然后再把a的数值加上6,再放到变量a中。
进行了++a和a++后 在下面的程序中再用到a的话都是变量a中的6了。
口诀 ++在前先加后用,++在后先用后加。
5.逗号表达式
优先级别最低。表达式的数值是逗号最右边的那个表达式的数值。
如:(2,3,4)的表达式的数值就是4;
z = (2,3,4)(整个是赋值表达式) 这个时候z的值是4;
z =2,3,4(整个是逗号表达式)这个时候z的值为2。 逗号表达式的值是4,z的值是2
x = (a = 3,6*a)在这其中第一个元素是a = 3,第二个元素是6*a,在这其中6*a为逗号表达式的值,a本来是3,6*a就是18,那么赋值时有括号,所以是把这个6*a赋值给了x。 所以 a = 3 x = 18
x=(a=3*5,a*4),a+15 在这里逗号在括号外面,所以说这是一个逗号表达式,它的值就是最右边的a+15,a的值是3*5为15,而x的值和上面的一样进行赋值是把逗号里面最右边的这个元素赋给了x,a这个时候的值为15,15*4为60,所以x的值为60 但是整个表达式的值是a+15为30. 表达式值为30,x = 60。
注意
1. 空语句不可以随意执行,会导致逻辑错误。
2.注释不是c语言,不占运行时间,没有分号,不可以嵌套!
3.强制类型转换:
一定是(int)a不是int(a),注意类型上一定有括号的。(一定要在强制类型的上面加一个括号才表示强制的类型转换,它是在int,float,double型 这些类型说明上面加括号)
注意(int)(a+b)和(int)a+b的区别; 前是把a+b转型,后是把a转型再加b
4.三种取整丢小数的情况;1.int a=1.6; 2.b=(int)a; 3.1/2; 3/2
三.字符
1. 字符数据的合法形式:
单引号‘1’是字符占一个字节,双引号“1”是字符串占两个字节(含有一个结束符号)。
‘0’的ASCLL数值表达为48,‘a’的ASCLL数值是97,‘A’的ASCLL数值是65
一般考试表达单个字符错误的形式;‘65’ “1”
字符是可以进行算数运算的,记住: '0'-0=48
大写字母和小写字母转换的方法:‘A’+32=‘a’ 相互之间一般是相差32
‘A’ | 65 |
“A” | 65 | \0 |
2. 转义字符
转义字符分为一般转义字符,八进制转义字符,十六进制转义字符
1.一般转义字符,常用 \t 空格 , \n换行 , \' 单引号 , \"双引号 , \\斜杠;
2.八进制转义字符:‘\141‘ 是合法的,前导的0是不能写的;、
3.十六进制转义字符:’\x6d‘ 才是合法的,前导的0不能写,并且x是小写
3. 常用转义字符及其应用
字符形式 | 含义 | AsCLL |
---|---|---|
\n | 换行 | 10 |
\t | 水平制表 (下一个Tab) | 9 |
\b | 退格 | 8 |
\r | 回车 | 13 |
\f | 换页 | 12 |
\\ | 反斜杠\ | 92 |
\' | 单引号(撇) | 39 |
\'' | 双引号 | 34 |
\ddd | 1到3位八进制代表的字符 | |
\xbb | 1到3位十六进制代表的字符 |
字符型和整形是近亲;两个具有很大的相似之处
char a = 65;
printf("%c", a); //结果为A printf("%d", a); //结果为65
/*功能:使用转义字符控制数据的输出*/
#include<stdio.h>
void main()
{
char cl = 'A',cl2 = 'N';
printf("a\tbc\tABC\n");
printf("xye\t%c%c",cl, cl2);
}
输出结果为 a bc ABC
xye AN
四.输入输出函数
1. 输出函数printf()
1,使用printf和scanf函数时,要在最前面加上#include<stdio.h>
2,printf可以使用一个参数,也可以使用两个参数。
3.printf("第一部分",第二部分); 把第二部分的变量,表达式,常量以第一部分展现出来!
4.printf("a=%d, b=%d", 12,34); !!!重点
一定要记住是将12和34以第一部分的形式现在在终端也就是黑色的屏幕上。
在黑色屏幕上显示为 a=12,b=34
printf("a=%d, \n b=%d", 12, 34); 结果为: a=12, b=34
2.进制例子
int x=017;
printf("%d", x); 15 十进制
printf("%o", x); 17 八进制
printf("%#o", x); 017 带前导的八进制
printf("%x", x); f 十六进制
printf("%#x", x); 0xf 带前导的十六进展
3. 常用的printf转换描述
格式说明 | 表示内容 | 格式说明 | 表示内容 |
---|---|---|---|
%d | 整形 int | %c | 字符 char |
%ld | 长整型long int | %s | 字符串 |
%f | 浮点数float | %o | 八进制 |
%lf | double | %#o | 带前导的八进制 |
%% | 输出一个百分号 | %x | 十六进制 |
%5d | 输出一个整形数据长度为5 | %#x | 带前导的十六进制 |
转换描述 | 对应参数类型 | 实现的转换 |
%md | int | 输出十进制,m为输出最小宽度 (如果数据的位数小于m,则左端扑空,若数据位数大于m,则按实际长度输出) |
%m.nf | float,double | 按照小数形式输出实数,m为输出最小宽度,n为小数点后位数。 (如果数据的位数小于m,则左端补空;若数据位数大于m,按实际长度输出。小数位数被截断时四舍五入输出) |
例子 int x =12,y = 34;
char z='a';
printf("%d",x,y); 一个格式说明,两个输出变量,后面的y不能输出
printf("%c", z); 结果为:12a 因为两个printf之间没有换行
printf("%2d",123); 第二部分有三位,大于指定的两位,原样输出123
printf("5d",123); 第二部分有三位,小于指定的五位,左边补两个空格 123
printf("%10.6f",12.5); 小数要求补足六位的,没有六位的补0.结果为 1.250000(左边加上两个空格)
printf("%5.3f", 1,25); 小数三位,整个五位,结果为1.250(小数点算一位)
printf("%3.1f",1.25); 小数一位,整个三位,结果位1.3(要进行四舍五入)
4.数据输入scanf()
1. scanf("a=%d, b =%d", &a, &b);
一定要记住是以第一部分格式在终端输入数据。
在黑色屏幕上输入的为 a=12, b=34才可以把12和34正确给a和b。有一点不同都不行
2.scanf("%d,%d"x,y); 这种写法绝对错误,scanf的第二个部分一定要是地址!
scanf("%d,%d", &x, &y); 注意写成这样才可以!
3.特别注意指针再scanf的考察
例如:int x= 2;int*p;(加*号是取数值)//我们把x所在的地址赋值给了p,这样时候*p就表示的是指向x所在的那个房子
p=&x; 加=是取地址
scanf("%d",x); 错误 (第二部分一定要是一个地址的形式才行)
scanf("%d", p);正确
scanf("%d".p); 错误(p本来代表的就是地址)
scanf("%d", *p); 错误(加了*号表示是这个地址里的数值是多少)
4.指定输入的长度
终端输入: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
5. 字符和整形是近亲
int x = 97;
printf("%d", x); 结果为97
printf("%c", x); 结果为 a
6.输入时候和整形的区别(重点)
scanf("%d", &x); 这个时候输入1,特别注意的是整形1
scanf("%d", &x); 这个时候输入1,特别注意的是字符’1‘ASCLL为整数49
补充说明:
1.scanf函数的考察格式:
注意该函数的 第二部分是&a 这样的地址,不是a;
scanf("%d%d*d%d",&a,&b,&c); 跳过输入的第三个数据
2.putchar ,getcha r函数的考查
char a - getchar()是没有参数的,从键盘得到你输入的一个字符给变量a。
putcchar('y')把字符y输入到屏幕中
3. 如何实现两个变量x,y中数值的互换
不可以把 x = y,y = x;要用中间变量 t = x;x=y;y = t
五. 表达式
1. 关系表达式
a,关系表达式的数值只能为1(表示为真),或0(表示假)。
如 9>8这个关系表达式时真的,所以9>8这个表达式的数值就是1.
如 7>6这个关系表达式是假的,所以7>6这个表达式的数值就是0;
b,考试最容易错的:就是int x=1,y=0.z=2;
x<y<z 是真还是假? 带入为1<0<2,从数学的角度出发肯定是错的,但如果是c语言那么就是正确的!因为要1<0为假得到0,表达式就变成了0<2那么运算就是1.
c,等号和赋值的区别!一定记住“=”就是赋值,“= =”才是等号
2. 逻辑表达式
核心:表达式的数值只能为1(表示为真),或0(表示假)。
a,共有& &且 || 或 !非三种逻辑运算符号。
b,!> && > || 优先的级别。
c,表示 x大于10的方法。
0<x<10是不行的(一定记住)。是先计算0<x 得到的结果为1或则0;再用0,或1与10进行比较得到的总为真(为1).所以一定要用(0<x)&&(0<10)表示比0大比10小。