C语言的一些总结

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就是指向存储空间 

指针跟字符串




指针注意点


想要用指针指谁就写一个那个类型的函数例如


你可能感兴趣的:(C语言的一些总结)