程序结构与预处理命令

程序结构与预处理命令

一、程序结构

C语言中,程序结构包含顺序结构、选择结构、循环结构、跳转语句(break,continue,return,goto)

1.1顺序结构

顺序结构:
程序从上往下依次执行,上一条执行完成之后,下一条语句才会执行

1.2选择结构

选择结构
C语言常用的语句有if语句和switch-case语句
1.2.1if语句
a)第一种形式:

if(条件表达式)
{
语句块;
}

原理:只有当条件表达式成立时,执行语句块,否则不执行
条件表达式可以是变量,可以关系表达式
b)第二种形式

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

原理:只有当条件表达式成立时,执行语句块1,否则执行语句块
c)第三种形式

if(条件表达式1)
{
语句块1;
}
else if(条件表达式2)
{
语句块2
}
else if(条件表达式3)
{
语句块3
}
else
{
语句块n;
}

原理:从条件表达式1开始,进行判断,如果成立,执行语句块1,其他的
语句都不执行(跳出if语句),否则,接着往下判断,知道找到
条件成立的语句,如果条件都不满足,则执行else语句

注意:else跟跟离它最近的if语句配对
符合就近原则

1.2.2switch-case语句
形式:

switch(整型常量表达式)
{
case 数据1: 语句块1case 数据2: 语句块2case 数据3: 语句块3.....
default: 语句块n;
}

原理:整型常量表达式 最终的结果必须是整型常量
因为要跟case后面的数据进行匹配,判断是否相等
如果相等,就会执行该case后面的语句块,知道遇到
} 结束,如果都不跟case后面的数据匹配的话
则,执行default后面的语句

1.3循环结构

do-while语句,while语句,for语句
1)do-while
形式:

do
{
循环体;
}
while(条件判断);

原理:先执行循环体,然后进行条件判断,如果条件成立,则接着
返回去执行循环体,如果条件不成立,则不会再去执行循环体

本质:不管条件判断有没有成立,循环体都会执行一次

2)while
形式:

while(条件判断)
{
循环体;
}

原理:先进行条件判断,如果条件成立,则执行循环体,
如果条件不成立,则不执行循环体
本质:while语句,有可能一次循环体都不会执行

3)do-while 和while语句的区别:
do-while 语句,先执行,后判断,至少会执行一次循环体
while 语句:先判断,后执行,可能一次循环体都不会执行
补充: while(1) 死循环
跳出循环体,break语句

练习:密码门,你忘记密码了,你家密码4位,
如果你输入的密码是对,门开了
如果你输入的密码是错误的,门不会开

3)for语句
1 2 5 4
形式:for(赋值表达式;条件表达式;循环变量表达式)
{
3 6
循环体;
}
赋值表达式:循环变量赋初值
条件表达式:循环体可以结束的条件
循环变量表达式:可以让循环体达到结束的条件

注意:死循环:while(1)
for(;😉
赋值表达式;
形式:

for(赋值表达式;条件表达式;循环变量表达式)	
{
循环体;						
}	

循环的嵌套:

形式:

for(赋值表达式;条件表达式;循环变量表达式)	
{
	for(赋值表达式;条件表达式;循环变量表达式)
	{
	}	
}	

原理:循环嵌套,先执行最外一层循环,接着执行里面的循环的语句
直达里面的循环语句不满足条件,然后在执行外层循环,
依次下去

for(i=1;i<=4;i++)
{
for(j=1;i<=4;j++)
printf("%d\n",j);
break;
}

1.4跳转语句

break,continue,return ,goto
1)break
原理:跳转,
适用于:switch-case,循环结构(do-while,while,for语句)
注意:if 语句里不能用的,除非和if搭配使用在循环结构里
实质:break只能跳出当前循环,或者当前选择结构
结束循环语句,(结束的是离它最近的循环语句)
2)continue
原理:继续
适用于:循环结构
规则:结束本次循环,当前循环结束,接着进行下一轮循环
3)return
形式: return 表达式,return;
第一种形式表示的是,返回一个值,先计算表达式的的值,再返回数值
第二种形式表示的是结束函数

​ 在主函数里面 ,返回值,返回给了系统
​ 在子函数里面,返回值,给上一级函数

在一个函数里面,一旦遇到return语句,函数结束
不管函数里面有几个return语句,遇到第一个return语句,函数结束

4)goto
形式: goto 标签名;
标签名符合标识符的命名规则
本质:真正跳转语句
原理:程序刚开始执行的时候,遇到标签名不会去理会,程序执行遇到
goto语句的时候,程序就会转去执行标签名下的程序
直到某一个条件不满足
注意:只能在同一个函数跳转
在程序中,如果goto语句用的太多,会造成程序代码混乱

二、预处理命令

2.1程序运行过程

预处理指令符号:#
编译程序的四步:
预处理:编译之前完成的
编译:生成汇编文件
汇编:生成目标文件
链接:生成可执行文件

2.2宏定义

分类:无参宏定义,带参宏定义
概念:用宏名替换后面一段繁琐的字符串
1)无参宏定义
形式: 宏名 字符串
指令:define
#define 宏名 字符串
说明: 宏名符合标识符的命名规则
宏名一般大写,便于和变量名进行区分

注意:宏定义纯替换过程,所定义的字符串后面不能加分号
宏定义可以进行嵌套,但是你所嵌套的宏名必须在之前定义好
宏名不是替换打印函数双引号中内容
如果是多条语句,需在所要替换的字符串后面加分号
如果取消宏定义则用 #undef 你要取消的宏名

2)带参宏定义
形式:宏名(参数) 字符串
指令:define
注意: 宏名和参数之间不能有空格
不管带参还是无参,宏定义都只是一个纯替换的过程
2、文件包含
概念:将文件里面的内容,包含到当前文件中
<> :表示到系统下搜索目录
“” :表示到工作目录下去查找

2.3条件编译

条件编译三种形式:
1)第一种形式

#ifdef
程序段1 
#else
程序段2
#endif

原理:如果宏名被定义,则执行程序段1,否则执行程序段2
2)第二种形式

#ifndef 
程序段1
#else
程序段2
#endif

原理:如果未定义,则执行程序段1,否则执行程序段2
3)第三种形式

#if 条件表达式
程序段1
#else
程序段2
#endif

原理:条件表达式成立,则执行程序段1
否则执行程序段2

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_翩翩少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值