1⃣️第一个C语言程序Hello Word!
C语言的基本格式 :
#include
int main ()
{
(这里写要调用的函数写完要加;)
return 0;
}
main是主函数程序执行只会执行主函数,如果没有主函数那程序就不能执行。
想要输出Hello Word,我们需要在函数里面写printf 例 :
#include
int main ()
{
printf (“hello word”);
return 0;
}
2⃣️C语言的关键字,标识符,注释。
关键字就是C语言提供的有特殊含义的符号,一共有32个
识别是不是标识符有这两点:
1> 全部都是小写
2> 在开发工具或者智能文本编辑工具(比如UltraEdit)中会显示特殊颜色
2.1 标识符
标识符就是程序员自己定义的,顾名思义就是用来标识的。既然要用来吧标示那就要取得有意义一点,且不能和关键字一个样,
标识符的命名规则
只能由26个英文字母的大小写、10个阿拉伯数字0~9、下划线_组成。
例:teas1 Teas1
注意⚠️标识符不能以数字开头,相同的名字字母大小写不一样,标识符也是不一样的。
2.2注释
注释在程序中的作用是相当于无视里面的东西。在工作中可以让别人知道你的代码是什么意思,而且不会影响程序运行。
注释有两种方法 // /* */
// 是只注释一行,/* */ 是可以前面开头到后面结束里面的所有都注释掉。
注释符也可以用来排出错误。
3⃣️常量
数据类型
整数型 int %d/%I 例 1‘34’0‘252
小数 float/double %f 例 1.2f/1.2
字符 char %c。 例 ’a‘ ’1‘ ‘+’
常量是什么
"量"表示数据。常量,则表示一些固定的数据,也就是不能改变的数据。
常量类型有
在C语言中,常量大致可以分为以下类型:
1> 整型常量(int)
其实就是int类型的数据,包括了所有的整数,比如6、27、109、256、-10、0、-289等
2> 浮点型常量(float\double)
浮点型常量分为double和float两种数据类型
double:双精度浮点型,其实就是小数。比如5.43、-2.3、0.0等,注意,0.0也算是个小数。你
float:单精度浮点型,也是小数,比double的精确程度低,也就是说所能表示的小数位数比较少。为了跟double区分开来,float型数据都是以f结尾的,比如5.43f、-2.3f、0.0f。需要注意的是,绝对不能有10f这样格式的,编译器会直接报错,只有小数才允许加上f。
3> 字符常量(char)
将一个数字(0~9)、英文字母(a~z、A~Z)或者 其他符号(+、-、!、?等)用单引号括起来,这样构成的就是字符常量。比如'6'、'a'、'F'、'+'、'$'等。
注意:单引号只能括住1个字符,而且不能是中文字符,下面的写法是错误的:'abc'、'123456'、’男'。
Char name[] = "test"
相当于char name [] = ‘t’+’e’+’s’+’t’+’\0’
4> 字符串常量
将一个或者多个字符用双引号("")括起来,这样构成的就是字符串常量。比如"6"、"男"、"哇哈哈"、"abcd"、"my_car4",其实printf("Hello World");语句中的"Hello World"就是字符串常量
4⃣️scanf函数
作用
sacnf函数使用来收取用户输入的一个值。
注意点,使用
// scanf函数只接受变量的地址
// scanf函数是一个阻塞式的函数,等待用户输入
// 用户输入完毕后,就会将用户输入的值赋值给所指定的变量
// 函数调用完毕
5⃣️运算
运算有算数运算,赋值运算,自增自减运算,位运算,逻辑,三目运算。
1算数运算。 就是小学的数学+—*/加减乘除
2赋值运算。赋值运算的符号是=,例子a=1,b=a,就相当于b的值是1了。=就是相当于把右边的值赋值给左边。
3自增自减运算。a++,和++a。在单独使用时是一样的。
int a = 10;
a++;
int a = 10;
++a; 没区别
这种情况就不一样了
int a = 10;
int b = ++a;
int a = 10;
int b = a++;
上面两段代码的执行结果是有区别的。
第1段代码:++a的意思是先对a执行+1操作,再将a的值赋值给b。因此最后a、b的值都是11
第2段代码:a++的意思是先将a的值拷贝出来一份,然后对a执行+1操作,于是a变成了11,但是拷贝出来的值还是10,a++运算完毕后,再将拷贝出来的值10赋值给了b,所以最后变量b的值是10,变量a的值是11
--a和a--的区别也是一样的。
逗号运算
int a = 2;
int b = 0;
int c;
c = (++a, a *= 2, b = a * 5);
printf("c = %d", c);
++a的结果为3,a *= 2的结果为6,b = a * 5的结果为30。因此,输出结果为:c=30
这里要注意的是,右边的表达式是有用括号()包住的,如果不用括号包住,也就是:
c = ++a, a *= 2, b = a * 5;
printf("c = %d", c);
输出结果将为:c=3 ,因为c = ++a也属于逗号表达式的一部分,跟后面的a *= 2以及b = a * 5是相互独立的
关系运算
>大于
<小于
>=大于等于
<=小于等于
==等于
!=不等于
&&且
||或
位运算
&按位与:9&5 &:只有对应的两个二进位均为1时,结果才为一,否则为0
1001
0101 (判断奇偶性可以使用这个)
——
0001
——————————————————————————————————
按位或 “|”,9&5 | 只要有二进位一个为1则结果为1,两个都是零才为零
1001
0101
——
1101
——————————————————————————————————-
按位异或 ^ ,9^5 ^ 当二进制位不相同时,结果为1,否则为零
1001
0101 (换位运算可以用这种)
——
1100
相同数值进行异域,结果肯定为0 比如9^9
交换9^5^6 ==9^6^5
任何数值根0异域,结果还是原来的数值 9^0 = 9
按位取反~ ,~9 ~二进位取反
~1001==0110
左移 << ,9<<1, 最高位数舍去,后面补一个0
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 1001
==
0000 0000 0000 0000 0000 0000 0000 0000
000 0000 0000 0000 00000000 0000 10010
优先等级
逻辑运算符的优先级顺序为: 小括号() > 负号 - > ! > 算术运算符 > 关系运算符 > && > ||
三目运算
1> 使用格式
表达式A ? 表达式B : 表达式C
2> 运算结果
如果表达式A成立,也就是为“真”,条件运算符的结果就是表达式B的值,否则,就为表达式C的值
3> 结合方向和优先级
优先级顺序为:算术运算符 > 关系运算符 > 条件运算符 > 赋值运算符
条件运算符的结合方向是“从右至左”
int a = 3>4 ? 4+5 : 5>4 ? 5+6 : 6>7+1;
上面的代码等价于
int a = (3>4) ? (4+5) : ( (5>4) ? (5+6) : (6>(7+1)) );
简化一下就是
int a = 0 ? 9 : ( 1 ? 11 : 0 );
继续简化为
int a = 0 ? 9 : 11;
所以a的值是11
6⃣️循环语句
IF语句
int a = 7;
if ( a )
{
printf("条件a成立\n");
printf("a的值为真");
}
C语言规定所有非0值都为“真”,而a的值是7,因此第3行的条件是成立的,接着就会执行第5、6行代码。输出结果如下:条件a成立a的值为真
注意点像a==0这样的表达式,最好写成0==a,若你误写成0=a,编译器会直接报错的。
假设你本来是想判断a是否为0,那么本应该写if (a == 0),若你误写成了if (a = 0),那将是一件非常可怕的事情,因为编译器又不报错,这样的BUG就难找了
switch
使用形式:
switch(整型表达式)
{
case 数值1:
语句1;
break;
case 数值2:
语句2;
break;
... ...
case 数值n:
语句n;
break;
default :
语句n+1;
break;
}
break
break关键字的作用是退出整个switch语句。默认的格式中,每个case后面都有个break,因此执行完case中的语句后,就会退出switch语句。
1> 如果某个case后面没有break,意味着执行完这个case中的语句后,会按顺序执行后面所有case和default中的语句,直到遇到break为止
while循环
形式
while ( 条件 )
{
语句1;
语句2;
....
}
如果条件成立,就会执行循环体中的语句(“循环体”就是while后面大括号{}中的内容)。然后再次判断条件,重复上述过程,直到条件不成立就结束while循环
while循环的特点:如果while中的条件一开始就不成立,那么循环体中的语句永远不会被执行
do-while循环
形式如下:
do {
语句1
语句2;
...
} while (条件);
不管条件成不成立他都会执行循环体里面的内容,再判断条件成不成立
for循环
形式
for (语句1; 条件; 语句2) {
语句3;
语句4;
...
}
for循环开始时,会先执行语句1,而且在整个循环过程中只执行一次语句1
接着判断条件,如果条件成立,就会执行循环体中的语句(“循环体”就是for后面大括号{}中的内容)
循环体执行完毕后,接下来会执行语句2,然后再次判断条件,重复上述过程,直到条件不成立就结束for循环。
注意点
不能随便在for()后面加;
如果在循环体中定义新的变量必须用大括号{}包住
若在循环体中定义一个新的变量,则在for的语句中不能使用这个变量例如:for(int i = o; i<5; i++,a++)
{
Int a = 10;
}a++不能使用a只能在循环体{}中使用因为当条件成立之后执行循环体a会消失a++就找不到变量a
输出就近原则。
7⃣️-short和long
Long long会随着编译器的位数不同而改变,如32位编译器long 有四个字节longlong int有八个个字节,64位long有八个字节,longlong也是八个字节,因为64位编译器最高只有八个字节
long只修饰int类型
8⃣️指针
格式:变量类型 *变量名;(*是指针类型的标准)
指针变量只能存储地址 ,知道一个地址就能改值
*p就是指向存储空间
指针跟字符串
指针注意点
想要用指针指谁就写一个那个类型的函数例如