第2章:C语言基础

2.1 常量

定义

常量:程序运行过程中,不变的数据叫常量


源由

 


用法

1、一般常量:可以用八进制、十进制、十六进制表示,十进制有正负,其他八进制和十六进制只有正,八进制以0为前缀,十六进制以0x或0X作为前缀

一般常量的书写格式:

(1)一般形式,如:0.123

(2)指数形式,如:123e5

2、字符常量:单引号括起来的一个字符

3、字符串常量:双引号括起来的一个或多个字符

4、符号常量:宏值,方便修改

5、布尔类型:只有两个值,true和false,0为false,非0为true


简单例子

123 //一般常量

'a' //字符常量

"abc" //字符串常量

PI //符号串常量

bool a; //布尔类型


详解

1、指数形式书写时,E或者e前面必须有数字,且e后面的指数必须为整数

2、一个实型常数缺省说明为double,如表示float型,则实数后加f或F,如:

1.23f、4.56

3、字符串常量,计算机存储形式会以\0表示字符串结束


进阶例子收集

1、define与const的区别:

define只是代替,没有类型的检查,而const定义后面要加类型,所以有类型的判断

2.2 变量

定义

在程序运行过程中,可以发生改变的数据称为变量


源由

 


用法

1、命名

以字母或下划线打头,后面跟字母、数字或下划线

2、定义:存储属性 类型区分符 变量名 初值 结束分号;


简单例子

static int num = 0 //存储属性:staitc,类型区分符:int,变量名:num,初值:0,结束分号(;)


详解

1、存储属性分成auto、register、extern、static

(1)auto存储类:属于一时性存储,其存储空间可以被若干变量多次覆盖使用

(2)register存储类:存放在通用寄存器中

(3)extern存储类:在所有函数和程序段中都可引用

static存储类:在内存中以固定地址存放的,在整个程序运行期间都有效


进阶例子收集

2.3 算述表达式

定义

由算述运算符、操作数、括号构成的表达式称为算述表达式


源由

 


用法

 


简单例子

 


详解

1、基本的算术运算符:+ - * / %(取余),先算乘除,后加减,同级自左向右

2、增量和减量:

(1)a++:取a作为表达式的值,然后a = a+1;

(2)++a:先执行a = a+1;然后取a作为表达式的值

(3)a--:取a作为表达式的值,然后a = a-1;

(4)--a:先执行a = a-1;然后取a作为表达式的值

2、赋值运算(=):赋值运算符用于将一个数据传给一个变量

(1)双目运算符,从右到左:d=a=b,先执行a=b,再执行d=a

(2)赋值操作是一个表达式

(3)当赋值两边类型不一至时,根据左边类型转

3、复合的赋值运算符

(1)有10种复合运算符:+=,-=,*=,/*,%=,<<=,>>=,&=,^=,|=

4、逗号运算和逗号表达式

(1)格式:表达式1,表达式2

先求解1,再求解2,最终结果为表达式2的值,例如:

a=3*5,a*4;结果为60

5、关系表达式:用关系运算符将两个表达式连接起来,有:<,<=,>,>=,==,!=,关系表达式的结果为bool类型,只有true和false

逻辑运算符:!(非)、&&(与)、||(或)

6、优先级:

!

* / %

+ -

> < >= <=

== !=

&&

||

6、条件运算符与条件表达式

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

表达式1必须为bool类型,先执行表达式1,若结果为true则执行表达式2,否则执行表达式3

(2)条件运算符优于赋值运算符,比关系运算符和算术运算符都低

(3)条件运算符的结合性为自右向左

(4)条件表达式与一般的if的语句的关系

(5)表达式2、3的类型可以不同,条件表达式的最终类型为2和3中较高的类型

7、sizeof 操作符

语法:sizeof(类型名)或者sizeof(表达式),结果值:类型或者表达式结果类型所占的字节数;

8、位运算:按位与(&)、按位或(|)、按位异或(^)、取反(~)、左移(<<)、右移(>>)

(1)将两个运算量的每一个位进行逻辑与(&)、或(|)、异或(^)、取反(~)、左移(<<)、右移(>>)

(2)左移运算后,低位补0,高位舍弃;右移运算后,低位舍弃,高位如果无符号则补0,有符号则补“符号位”

9、运算符优先级(由高到低):

括号

++,--,sizeof

*,/,%

+,-

==,!=

位运算

&&

||

?:

赋值运算

逗号运算

10、隐式转换:算术运算和关系运算中如果参与运算的操作数类型不一致,编译系统会自动对数据进行转换,基本原则是将低类型数据转换为高类型数据,数据类型由低到高为:

char、short、int、unsigned、long、unsigned log、float、double

10、强制转换语法:

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


进阶例子收集

1、算出以下a的值://结果为:-60

a=5;a=b=c=5;a=5+(c=6);a=(b=4)+(c=6);a=(b=10)/(c=2);a+=a-=a*a;

2、若x,y,z的初值均为1,则执行表达式w=++x||++y&&++z后,x,y,z的值分别是多少?

答案:x=2,y=1,z=1;原因,当执行了++x的时候,已经为真了,所以程序是不会再往下执行了,++y和++z根本得不到运行,所以这个特例不能用优先级去算结果;

2.4 基本控制结构

定义

 


源由

 


用法

1、if语句

(1)if(表达式) {语句;}

(2)if(表达式) {语句1;} else {语句2;}

(3)if(表达式1) {语句1;} elseif(表达式2) {语句2;} else {语句3;}

2、swith

switch(表达式)

{

case 常量表达式1:语句1;break;

case 常量表达式2:语句2;break;

...

case 常量表达式n:语句n;break;

default: 语句n+1;break;

}

当表达式为常量表达式值时,执行后面的语句;

3、while语句:

while(表达式){语句}

当表达式为真时,循环执行,直到表达式为假。

4、do-while语句

do{语句}while(表达式);

先做一次语句,再判断表达式,如果表达为真,则继续执行语句,直到表达式为假跳出循环体;

5、for语句

for(表达式1;表达式2;表达式3){语句}

(1)循环前先执行表达式1

(2)再判断表达式2,如果为真,则执行循环体语句,否则跳出循环体

(3)执行表达式3

步骤(2)与(3),直到循环体结束

6、goto

语句标号:用标识符,命名规则与变量名同

当从多重循环体深处跳到之外,如用break,将用多次,可用goto


简单例子

#include "stdafx.h"
#include <stdlib.h>
#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	int data;
	cout<<"pls input num:"<<endl;
	cin>>data;
	if(1==data){
		cout<<"if:data=1"<<endl;
	}
	else if(2==data){
		cout<<"if:data=2"<<endl;
	}
	else{
		cout<<"if:data=else"<<endl;
	}
	switch(data){
		case 1:
			cout<<"switch:data=1"<<endl;
		break;

		case 2:
			cout<<"switch:data=2"<<endl;
		break;

		default:
			cout<<"switch:data=default"<<endl;
		break;
	}
	while(data<10){
		cout<<"while"<<endl;
		data = 11;
	}
	int count = 0;
	for(int i=0; i<3; i++){
		count += i;
	}
	cout<<"sum[1+2]:"<<endl;
	system("pause");
	return 0;
}
//输出:
//pls inupt num:
//输入:1
//if:data=1
//switch:data=1
//while
//sum[1+2]:3

详解

2、switch

(1)表达式可以是整形、字符型、枚举型,但每个常量表达式的值不能相同

(2)多个case可以共用一组执行语句:

case 'A':

case 'B':

case 'C':count<

3、break与continue语句

break语句:使程序从循环体和switch语句内跳出,继续执行逻辑上的下一条语句,不宜用在别处;

continue语句:结束本次循环,接着判断是否执行下一次循环


进阶例子收集

 

 

2.5 自定义数据类型

定义

 


源由

 


用法

1、typedef语句:为一个已有的数据类型另外命名

typedef 已有类型名 新类型名;

2、枚举类型-enum:只需要将需要的变量值一一列举出来便构成了一个枚举类型;

enum 枚举类型名 {变量值列表};

3、结构体

结构体是由不同数据类型的数据组成的集合体

struct 结构名

{

数据类型 成员名1; 数据类型 成员名2; ... 数据类型 成员名n;

};

4、联合体

union 联合名

{

数据类型 成员名1; 数据类型 成员名2; ... 数据类型 成员名n;

};

定义联合体类型变量说明的语法形式:

联合名 联合变量名;

引用形式:

联合名.成员名


简单例子

typedef int int32_t


详解

1、对枚举按常量处理,不能对它们赋值

2、不能直接将整数赋值给枚举变量,应进行强制类型转换

3、结构体的使用

(1)定义结构变量的同时可以直接设置初值

(2)结构体成员的引用形式:

结构变量名.成员名

联合体的成员名公用一段内存


进阶例子收集

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值