当前位置:网站首页>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.青蛙跳台阶问题
边栏推荐
猜你喜欢
随机推荐
Why do I strongly recommend using smart async?
MySQL性能优化_小表驱动大表
破解数字化转型困局,企业分析协同场景案例解析
请问下,flink cdc监控oracle,我看源码是通过sid方式的,请问怎么改成service
实时渲染流程操作复杂吗,如何实现?
正向代理与反向代理
devops-2:Jenkins的使用及Pipeline语法讲解
1、实例开启无锁表结构变更以后,在任务编排中通过“单实例SQL”节点进行的结构变更,是优先采用无锁表
用户侧有什么办法可以自检hologres单表占用内存具体是元数据、计算、缓存的使用情况?
[QT] Qt project demo: data is displayed on the ui interface, double-click the mouse to display specific information in a pop-up window
Detailed ReentrantLock
Yuan xiaolin: Volvo focus on travel security, and put it perfectly
Kubernetes 笔记 / 任务 / 管理集群 / 用 kubeadm 管理集群 / 配置一个 cgroup 驱动
泰山OFFICE技术讲座:文字边框高度研究
基于DMS的数仓智能运维服务,知多少?
Fortinet产品导入AWS AMI操作文档
参与便有奖,《新程序员》杂志福利来袭!
ffplay视频播放原理分析
CPU个数_核心数_线程数之间的关系
WordPress建站技术笔记
![[Deep Learning] Today's bug (August 2)](/img/c5/c4c6d97276bd9997c49ed886aa24cf.png)








![[微信小程序开发者工具] × #initialize](/img/38/ea90525f53de3933a808f0d75028b0.png)