C语言基础

一、编写C语言程序一些注意点:

1.#include<stdio.h>头文件包含,一定要有;

2.每一个c语言中有且只有一个main函数,这是整个程序开始位置;

3.C语言中(),{},[],“”,‘’,都必须成对出现,必须使用英文符号;

4.C语言语句要以分号结束;

5.//为注释;

二、关键词

C语言中定义好了一些C语言,可以直接拿过来用,不需要再次定义

2.1数据类型相关的关键字

char:定义的变量是字符型变量,占1个字节;

short int:定义的变量是短整型变量,占2个字节;

int :定义的变量是整型变量,占4个字节;

long int:定义的变量是长整型变量,在32位操作系统下占4个字节,在64位操作系统下占8个字节;

float:定义的变量是单浮点型的实数,占4个字节;

double:定义的变量是双浮点型的实数,占8个字节;

struct:定义的变量是与结构体相关的;

union:定义的变量是与共用体相关的;

enum:定义的变量是枚举类型相关的;

signed:修饰char,short,int,long类型的数据,代表有符号的意思(正负)

*默认情况signed可以省略不写;

unsigned:修饰char,short,int,long类型的数据,代表无符号的意思(只能保存正数和0)

void:空类型关键字

void一般用于修饰函数的参数或返回值,代表函数没有参数或者返回值;

2.2存储类型相关的关键字

register:寄存器类型,修饰的变量是寄存器变量

*在编译的时候告诉编译器这个变量是寄存器变量,尽量将存储空间分配在寄存器中;

*(1)定义的变量不一定真的放在寄存器中(如果空间不够时,不会放在其中)

(2)cpu读取数据的时候去寄存器中拿比去内存中拿数据要快;

(3)register只能修饰字符型,整形变量,不能修饰浮点型;

(4)寄存器比较宝贵,不能修饰寄存器数组;

(5)不能对寄存器变量去地址,因为只有存放在内存中的数据才有地址;

static:静态的意思

static主要修饰全局变量,局部变量,函数

static修饰的变量,保存在静态全局区;

const:常量的意思

const修饰的变量只可读,不可修改

extern:外部的意思

一般用于声明函数和全局变量

2.3控制语句相关的关键字

if,else,switch,case,default,break,for,while,do,goto,continue;

条件控制语句:if,else;

switch,case, break,default;

循环语句:for;while do;goto;

2.4其他关键词

sizeof;typedef;volatile;

sizeof:测量数据所占存储空间大小(字节数)

typedef:重命名相关关键词,给一个已有的类型,重新起一个名字,并没有创造一个新的类型;

volatie易改变的意思,即告诉CPU每次使用volatile修饰的变量时候,重新去内存中去,保证每次取的都是新的值,而不是寄存器中的备份;

三,数据类型

3.1基本的数据类型;

char,short,int,long,float,double;

*浮点型默认保留小数点后六位,并且四舍五入;

3.2构造类型

由一些相同类型或者不同类型的数据组成的集合,这种数据类型成为构造体类型;

数组;结构体;共用体;枚举;

3.3常量和变量

3.3.1常量

在程序运行过程中,其值不可改变的量

分类:字符型:‘b’,‘a’;

字符串;“hello world”,“1234”;

整型:99,100,-100,0;

实型:3.1415,-3.14159;

因为计算机只能识别二进制数,也就是数字,对于非数值型的数据,需要一个数值型的数据进行表示,此时需要使用ASCII码表;

3.3.2变量

其值可以改变的量,成为变量;

变量定义方式:存储类型 数据类型 变量名(标识符)=变量或者常量;

标识符规则:(1)只能由数字,字母,下划线组成

(2)首字母不能是数字;

(3)不能与关键词相同;

3.3.2.1整型数据:整型常量,整形变量;

整型常量:(按进制分)

十进制:以正常数字开头1-9,456,789;

八进制:以0开头,0123;

十六进制:以0X开头,0X1e;

整形变量;(数据类型)

有无符号的短整型 2个字节

有无符号的整型 4个字节

有无符号的长整型 4个字节(32位处理器)

3.3.2.2实型数据

实型常量:成为实数或者浮点数

十进制形式:数字和小数点组成,3.14,0.2;

指数形式:123e3,123e-3,代表123*10*10*10;

以f结尾的是float类型,例如3.14f;

不以f结尾的是double类型;

实型变量;

单精度和双精度类型

float:占四个字节

double:占八个字节

3.3.2.3字符数据;

字符常量:直接常量:用单引号括起来,‘a’,‘b’;

转义字符:“\“以反斜杠开头,后面跟一个或者几个字符,如'\n','\t',分别代表换行,横向跳格;

字符变量:用char定义的,每个字符分配一个字节的内存空间;

字符值以ASCll值的形式存在变量的内存空间中;

3.3.3.4字符串

字符串常量:由双括号括起来的字符序列:”hello“,”哈哈哈“;

字符串常量与字符常量的区别:‘a’ 为字符常量

“a”为字符串常量,字符串的结尾,编译器会自动添加一个结束标志位“\0”,所以字符串包含俩个字符“a”包含了俩个字符‘a'和’\0';

3.4格式化输出字符

与printf函数一起使用,输出一个指定数据类变量所存储的值

3.4.1普通字符

%d:输出十进制有符号的整数;

%ld:输出long有符号的整数;

%u:输出十进制无符号的整数;

%o:输出八进制表示的整数;

*%#o:输出八进制前导符

%x:输出十六进制表示的整数;

*%#x:输出十六进制前导符

%c:   输出单个字符;

%s:输出字符串;

%p:输出指针的值;

%e:输出指数形式的浮点数;

%f: 输出float型浮点数;

%lf:输出double型浮点数;

3.4.2特殊类型的格式化

%3d;要求宽度为三位,如果不足三位,前面空格补齐,如果足够三位,则此语句无效

%-3d;要求宽度为三位,如果不足三位,后面空格补起,如果足够三位,则此语句无效

%03d;要求宽度为三位,如果不足三位,前面0补起,如果足够三位,则此语句无效

%.2f;保留小数点后两位;

3.5类型转换

数据有不同的类型,不同类型的数据进行混合运算时,必然涉及daodao 类型转换

转换的方法有两种:第一种自动转换:遵循一定的原则,由编译系统自动完成

转换原则:1.占用内存字节数少的类型,向占用内存字节数大的类型转换,以保证精度不降低;

2.

第二种强制转换:

通过类型转换运算来实现:

(类型说明符)(表达式)

(float)a:把a的值转换为实型;

*类型转换符必须加括号

实例:

四、运算符

4.1运算符的概念

通过运算符将运算对象连接起来的,符号C语法规则的式子,称为C表达式;

运算对象包括:常量,变量,函数;

4.2运算的分类

单目运算符:参加运算的操作数只有一个;

++自增运算符 --自减运算符

a++

双目运算符:参加运算的操作数有两个;

+,-,*,/,%,+=,-+,*=,/=,%=(算数运算符)

a+b

a+=5 <----->a=a+5;

*%代表去余的意思,(10%3)==1(只有整数才可以取余)

三目运算符:参加运算的操作数有三个;

(表达式1)?(表达式2):(表达式3)

如果表达式1成立,则执行表达式2,如果不成立,则执行表达式3

4.3算数运算符

+,-,*,/,%,+=,-+,*=,/=,%=

4.4关系运算符

<,>,==,<=,>=,!=(不等于)

一般用于判断条件是否满足或者循环语句

*条件运算结果只有俩个,真或者假,0为假,非0为真;

*==与=的区别:==表示左右两边相等,=表示把右边的值赋给左边;

4.5逻辑运算符

4.5.1&&逻辑与

俩个条件都为真,结果为真

if((a>b)&&(a<c))

*不能写程if(b<a<c)这样的形式,因为会先判断a和b的值,然后的出来结(0/1)果后,在和C判断.

4.5.2||逻辑或

俩个条件至少有一个真,则为真

if((a>b)||(a<c))

4.5.3!逻辑非

如果原本的表达式为真,则为假,如果原本的表达式为假,则为真

if(!(a>b))

逻辑与和逻辑或的短路原则:

逻辑与短路原则:当第一个表达式为假,则整体表达式为假,后面的所有表达式不会被执行;

逻辑或短语原则:当第一个表达式为真,则整体表达式为真,后面的所有表达式不会被执行;

4.6位运算符(十六进制)

4.6.1&按位 与

任何值与0得0,与1保持不变

0101 1011 &

1011 0100

0001 0000

4.6.2 |按位 或

任何值与1的1,与0保持不变

0101 0011 |

1011 0100

1111 0111

4.6.3 ~按位取反

1变0,0变1

0101 1101~

1010 0010

4.6.4 ^按位异或

相异得1,相同得0

1001 1100 ^

0101 1010

1110 0110

4.6.5位移

>>右移

<<左移

注意区分:右移分为逻辑右移和算数右移

4.6.5.1右移

逻辑右移,高位补0,低位溢出

0101 1010 >>3

0000 1011

算数右移,高位补符号位,低位溢出

1010 1101 >>3

1111 0101

*最高位决定符号,为正则0,为负则为1;

总结:1.逻辑右移,高位补0,低位溢出,有无符号均是如此;

2.算数右移,高位补0,低位溢出,有符号是如此,无符号高位补0,低位溢出;

4.6.5.2左移

高位溢出,低位补0

4.7条件运算符号

()?():()

如果?之前表达式成立,则整个表达式的值是?和:之间的表达式的结果,否则是:之后表达式的结果;

A?B:C

先判断A的结果,如果A为真,则执行B,如果A为假,则执行C;

*本质是一个if else语句

if(A)

{B}

else

{C}

\

4.8逗号运算符

(.....,.....,.....)使用逗号隔开的表达式,以此从左向右执行,最后的表达式,是整个运算的结果

A=(B,C,D);

先执行表达式B,在执行表达式C,最后执行表达式D,A的结果为表达式D的值

4.9自加自减运算符

++,--

4.9.1将++放在变量后面

先使用,在++或者--

4.9.2将++放在变量前面

先++,在使用

4.10运算符优先级

五、控制语句

5.1选择控制语句

5.1.1if语句

形式1:if(条件表达式)

{

//复合语句若干语句集合

语句1;

语句2

}

形式2:

:if(条件表达式)

{

//复合语句若干语句集合

语句1;

语句2;

}

else

{

//复合语句若干语句集合

语句3;

语句4;

}

形式3:

:if(条件表达式)

{

//复合语句若干语句集合

语句1;

语句2;

}

else if(条件表达式2)

{

//复合语句若干语句集合

语句3;

语句4;

}

else if(条件表达式32)

{

//复合语句若干语句集合

语句5;

语句6;

}

...

else

{

语句块

}

5.1.2switch语句

switch(表达式)//表达式只能是字符型或者整型

{

case 常量表达式1:

语句1;

break:

case 常量表达式2:

语句2;

break:

case 常量表达式3:

语句3;

break:

......

default

语4;

break:

}

运行顺序:将常量表达式与switch后面表达式的值对比,如果刚好等于case后面的某一个值就会立即执行case后面的语句,如果都不是则会执行default;

*(1)switch后面只能跟整型,不能是浮点型;

(2)如果case后面的常量表达式与switch表达式的值都不一样,则执行default后面的语句;

(3)每一个case执行结束后要跟一个break,目的是为了跳出整个switch语句;

(4)case后面语句有很多,则不需要大括号;

5.2 循环控制语句

5.2.1for循环

for(表达式1;表达式2;表达式3)

{

//复合语句

语句1;

语句2;

......

}

执行顺序:先执行表达式1,然后执行表达式2,如果表达式2成立,则执行语句块,当语句块执行完毕后,在执行表达式3,然后在执行表达式2,如果表达式2成立,接着执行语句块,以此类推,直到表达式2不成立

使用for循环求1到100累加

5.2.3while循环

形式1:

while(条件表达式)

{

//复合语句块

语句块

}

执行顺序:首先判断while后面的条件表达式,如果表达式成立(为真),则执行语句块,执行完毕后,再执行条件表达式,直到条件表达式为假,循环结束;

使用while循环求1到100累加

形式2:

do

{

//复合语句块

语句块

}

while(条件表达式);

执行顺序:首先执行do后面的语句块,然后判断while后面的条件表达式,如果表达式成立(为真),则执行do后面的语句块,执行完毕后,再执行条件表达式,直到条件表达式为假,循环结束;

*不管表达式是否成立,do后面的语句块都会执行以此;

*while后面必须加一个分号

5.2.3goto循环

主要实现在一个函数里面代码的跳转

用goto实现1累加100

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值