当前位置:网站首页>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.青蛙跳台阶问题
边栏推荐
- Ruoyi Ruoyi framework @DataScope annotation use and some problems encountered
- 托尔斯泰:生活中只有两种不幸
- CopyOnWriteArrayList details
- leetcode-693.交替位二进制数
- 全新探险者以40万的产品击穿豪华SUV价格壁垒
- ReentrantReadWriteLock详解
- mysql delete 执行报错:You can‘t specify target table ‘doctor_info‘ for update in FROM clause
- Yii2安装遇到Loading composer repositories with package information
- devops-2:Jenkins的使用及Pipeline语法讲解
- "Avnet Embedded Weekly" Issue 276: 2022.07.25--2022.07.31
猜你喜欢
Yuan xiaolin: Volvo focus on travel security, and put it perfectly
元宇宙系列--Value creation in the metaverse
《安富莱嵌入式周报》第276期:2022.07.25--2022.07.31
#夏日挑战赛# HarmonyOS 实现一个绘画板
详谈RDMA技术原理和三种实现方式
Not to be ignored!Features and advantages of outdoor LED display
Windows 事件转发到 SQL 数据库
DAYU200 OpenHarmony标准系统HDMI全屏显示
罗克韦尔AB PLC RSLogix5000中创建新项目、任务、程序和例程的具体方法和步骤
Interpretation of the 2021 Cost of Data Breach Report
随机推荐
世界顶级级架构师编写2580页DDD领域驱动设计笔记,属实有牌面
高可用版 主数据库数据结构改变 备数据库会自动改变吗
AI也有健忘症?英国41岁教授专访:解决灾难性遗忘
Convex Optimization of Optimal Power Flow (OPF) in Microgrids and DC Grids (Matlab Code Implementation)
破解数字化转型困局,企业分析协同场景案例解析
To participate in sweepstakes, incoming new programmers magazine welfare!
一文看懂推荐系统:召回03:基于用户的协同过滤(UserCF),要计算用户之间的相似度
devops-2:Jenkins的使用及Pipeline语法讲解
请问下,flink cdc监控oracle,我看源码是通过sid方式的,请问怎么改成service
Go Go 简单的很,标准库之 fmt 包的一键入门
可复现、开放科研、跨学科合作:数据驱动下的科研趋势及应用方案
使用Make/CMake编译ARM裸机程序(基于HT32F52352 Cortex-M0+)
【899. Ordered Queue】
uniapp的webview滑动缩放
Detailed ReentrantLock
MySQL性能优化_小表驱动大表
我在滴滴做开源
【QT】Qt 给已经开发好的程序快速封装成动态库
建造者模式/生成器模式
[Unity Getting Started Plan] Basic Concepts (8) - Tile Map TileMap 01