当前位置:网站首页>C语言02、语句、函数
C语言02、语句、函数
2022-08-03 16:07:00 【列宁格勒的街头】
语句
C语言有多种语句,大致分为以下五类:
1.表达式语句
2.函数调用语句
3.控制语句
4.复合语句
5.空语句
这里主要介绍控制语句,控制语句大致分为三类:分支语句(条件判断语句if,switch)、循环语句(do...while,while,for)、转向语句(break,goto,continue,return)
分支语句(if、switch)
如果A,则A。如果不A,则B。
if、else
在C语言中,0表示假,非0表示真
else的匹配:else是与离它最近且在上的if相匹配的
switch
#include <stdio.h>
int main()
{
int day = 0;
switch(day)
{
case 1:
printf("星期一\n");
break;
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期天\n");
break;
default:
printf("错误\n");
break;
}
return 0;
}
如果没有break,会继续执行语句。
那么continue可以放在switch语句中吗?不可以,continue只能在循环中使用
default可以出现在switch中的任何位置。
循环语句(while、for、do...while)
while循环
while()
{
}
while循环中只要遇到break,就直接停止后面的循环,直接跳出
while循环中遇到continue,会跳过本次循环中continue后的代码,直接跳转回判断部分
for循环
for(初始化部分; 判断部分; 调整部分)
{
}
当初始化部分不写时,就默认是其初始化值
不写判断部分,默认为真
for循环中的break、continue与while循环中一样
注意,若赋值为0,即出现k=0,则改条件为0
do...while循环
do
{
}while();
do后的内容至少执行一次
注意,do...while循环中的continue不会跳过while();部分。
break仍然是直接跳出
转向语句(break,goto,continue,return)
#include <stdio.h>
int main()
{
char input[10] = {0};
system("shutdown -s -t 60");
again:
printf("电脑将在1分钟内关机,如果输入:我是猪,就取消关机!\n请输入:>");
scanf("%s", input);
if(0 == strcmp(input, "我是猪"))
{
system("shutdown -a");
}
else
{
goto again;
}
return 0;
}
函数
函数是一段用于实现某种功能的代码,一般会有参数和返回值,并且可以对实现细节进行封装和隐藏
C语言中的函数大致分为两类:库函数和自定义函数
函数由返回类型、函数名、参数、函数体构成
库函数
为了方便我们实现某些功能和提高可移植性以及程序效率
C语言中的库函数:
1.IO函数
2.字符串操作函数
3.字符操作函数
4.内存操作函数
5.时间/日期函数
6.数学函数
7.其他库函数
查询库函数的几种途径:
自定义函数
即自己定义的函数
函数的参数
函数一般都需要传参
实际参数(实参)
真实传给函数的参数叫实参,实参可以是常量、变量、表达式、函数等,无论实参是哪种类型的量,在进行函数调用时,都必须有确定的值,以便把这些值传给形参
形式参数(形参)
形参是指函数名后括号中的变量,因为形参只有在函数被调用的过程中才实例化(分配内存单元),形参在函数调用完成之后就自动销毁了,因此形参只在函数中有效
函数的调用
函数的调用有传值调用和传址调用
传值调用
函数的形参和实参分别占有不同的内存块,对形参的修改不会影响实参
传址调用
传址调用是把函数外部创建的变量的内存地址传给函数参数的一种调用函数的方式,这种传参可以让函数和函数外部的变量建立起真正的联系,也就是在函数内部可以直接操作函数外部的变量
函数的嵌套调用和链式访问
嵌套调用:即一个函数里嵌套使用另一个函数。注意:函数可以嵌套调用,但是不能嵌套定义
链式访问:把一个函数的返回值作为另外一个函数的参数。
函数的声明和定义
声明:顾名思义,声明
定义:顾名思义,定义
注意:声明不开辟空间,定义才开辟
函数递归
把大事化小,通过对某段程序的重复多次运算来解决问题
递归有两个必要条件:
1.存在限制条件,并且当满足这个限制条件时,递归便不再继续
2.每次递归调用之后越来越接近这个限制条件
一般不推荐用递归,因为递归可能会使用很长的时间
迭代:迭代与递归不同,递归是重复一件事,迭代是在重复中得到反馈并进行改进
迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。
函数递归的几个经典题目:
1.汉诺塔问题
2.青蛙跳台阶问题
边栏推荐
- 如何启动 NFT 集合
- When mobile applications go overseas, is your "network optimization" holding back?
- ffplay视频播放原理分析
- 一文看懂推荐系统:召回03:基于用户的协同过滤(UserCF),要计算用户之间的相似度
- 将 Windows 事件日志错误加载到 SQL 表中
- EA 改口,称单人游戏是产品组合中“非常重要的一部分”
- leetcode SVM
- 30W 2C(JD6606S + FP6652X2)BOM
- 新版本 MaxCompute 的SQL 中支持的 EXTRACT 函数有什么作用?
- 【Unity入门计划】基本概念(8)-瓦片地图 TileMap 02
猜你喜欢
DAYU200 OpenHarmony标准系统HDMI全屏显示
ReentrantLock详解
MySQL窗口函数
全新探险者以40万的产品击穿豪华SUV价格壁垒
spark入门学习-2
[Unity Getting Started Plan] Basic Concepts (8) - Tile Map TileMap 02
Fortinet产品导入AWS AMI操作文档
罗克韦尔AB PLC RSLogix5000中创建新项目、任务、程序和例程的具体方法和步骤
AI+BI+Visualization, Deep Analysis of Sugar BI Architecture
Common distributed theories (CAP, BASE) and consensus protocols (Gosssip, Raft)
随机推荐
移动应用出海,你的“网络优化”拖后腿了吗?
MySQL窗口函数 OVER()函数介绍
Interpretation of the 2021 Cost of Data Breach Report
世界顶级级架构师编写2580页DDD领域驱动设计笔记,属实有牌面
Fortinet产品导入AWS AMI操作文档
CopyOnWriteArrayList详解
window.open不显示favicon.icon
MySQL窗口函数
83. Remove Duplicates from Sorted List
Common distributed theories (CAP, BASE) and consensus protocols (Gosssip, Raft)
Kubernetes 笔记 / 任务 / 管理集群 / 用 kubeadm 管理集群 / 配置一个 cgroup 驱动
2021年数据泄露成本报告解读
MySQL相关介绍
AI+BI+Visualization, Deep Analysis of Sugar BI Architecture
视频人脸识别和图片人脸识别的关系
常见分布式理论(CAP、BASE)和一致性协议(Gosssip、Raft)
5 v 8.4 v1A charging current charging management IC
Detailed ReentrantLock
AI+BI+可视化,Sugar BI架构深度剖析
ReentrantLock详解