C语言基础知识:C语言中的控制语句

news2024/11/23 19:01:23

目录

1. 条件判断语句

if(…) {…}

if(…) {…} else {…}

if(…) {…} else if(…) {…} … else if(…) {…} else {…}

switch() {case …: …; case …: …; … default: …;}

 2、循环语句

while语句

do while语句

for语句

3、循环体中的跳转语句

break语句。

continue语句。

goto语句。


C语言有九种控制语句。 可分成以下三类:

1. 条件判断语句

if语句、switch语句;

2 .循环执行语句

do while语句、while语句、for语句;

3. 转向语句

break语句、goto语句(此语句尽量少用,因为这不利结构化程序设计,滥用它会使程序流程无规律、可读性差)、continue语句、return语句。

1. 条件判断语句

if(…) {…}


1.一般形式:
if (表达式) {语句;}

表达式:
a,用非 0 值表示真,用 0 表示假;
b,if(flag) 相当于 if(flag!=0);
c,浮点数无法与 0 比较,只能用近似的值比较;例: 1e-6 等于1x10的-6次方可以看成0来使用;

2.用于单分支选择结构;
3.如含有交叉关系,使用并列的if语句;

例1:输出两个整数中的最大值

#include <stdio.h>
void main()
{
     int a,b;
     printf("请输入两个整数:");
     scanf("%d %d",&a,&b);
     if(a>b)
     {
     printf("max = %d\n",a);
     }
     if(a<b)
     {
     printf("max = %d\n",b);
     }
}

if(…) {…} else {…}

  1. 一般形式: if(表达式) {语句1; } else { 语句2;}
  2. 用于双分支控制的条件语句;
  3. 用于非此即彼的关系时;

例2:输出两个整数中的最大值

例2关于对于非法字符的检查与处理

#include <stdio.h>
void main()
{
	int a,b,max,data;
	printf("Input a,b:");
	data = scanf(" %d,%d",&a,&b);/*记录scanf()的返回值;*/
	if(data!=2)/*根据scanf()的返回值判断输入数据个数或者格式是否错误*/
    {
		printf("格式输入错误!");
		fflush(stdin);/*清除输入缓冲区中的错误内容(fflush()可能带来可移植性的问题)*/
	}
	else
	{
		max = a>b?a:b;/*三目运算符(a>b值为真则输出a的值,反之输出b的值)*/
		printf("%d\n",max);
	}

}

if(…) {…} else if(…) {…} … else if(…) {…} else {…}

  1. 一般形式:
    if(表达式1) { 语句1;}
    else if(表达式2) {语句2;}

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

  2. 用于多分支的控制的条件语句;

例3:判断字符

#include <stdio.h>
void main()
{
	char ch;
	printf("请输入一个字符:");
	ch = getchar();/*getchar、putchar专门用于字符输入输出;
				     getchar()写法上要写为 变量 = getchar();
					 putchar()用法为putchar(变量);
					 putchar('\n')输出一个控制符;
					 putchar('字母/字符');输出字母/字符;
					 */
	if(ch<=31)
	{
		printf("这是一个控制字符或通讯专用字符!\n");
	}
	else if(ch >= '0' && ch <= '9')
	{
		printf("这是一个数字!\n");
	}
	else if(ch >= 'A' && ch <= 'Z')
	{
		printf("这是一个大写字母!\n");
	}
	else if(ch >= 'a' && ch <= 'z')
	{
		printf("这是一个小写字母!\n");
	}
	else
	{
		printf("这是其他字符!\n");
	}
}

switch() {case …: …; case …: …; … default: …;}

  1. 一般形式:
    switch(表达式)
    {
    case 常量1:语句1;
    case 常量2:语句2;

    case 常量n:语句n;
    default: 语句n+1;
    }
  2. 用于多路选择的语句;

switch语句相当于多个if-else语句;
(表达式)只能是char型或者int型;
case 后面至少要有一个空格,常量后面是冒号
(表达式)与 常量类型要保持一致;
记得记得记得 在需要跳出的时候,在语句后面加上break;

例4:简单的加减乘除计算

#include <stdio.h>
void main()
{
	double a,b;
	char ch;
	printf("Input a(+ - * /)b:");
	scanf("%f%c%f",&a,&ch,&b);
	switch(ch)
	{
	case '+':
		printf("%f%c%f=%.2f\n",a,ch,b,a+b);/*%.2f表示精度,可以理解为保留两位小数*/
		break;
	case '-':
		printf("%f%c%f=%.2f\n",a,ch,b,a-b);
		break;
	case '*':
	case 'X':
	case 'x':
		printf("%f%c%f=%.2f\n",a,ch,b,a*b);/*输入"x" "X" "*" 都执行这一条语句;不加break,会顺语句执行*/
		break;
	case '/':
		printf("%f%c%f=%.2f\n",a,ch,b,a/b);
		break;
	default:
		printf("请输入正确算式!\n");
	}
}

 2、循环语句

循环语句是用于重复执行某条语句(循环体)的语句,它包含一个控制表达式,每循环执行一次都要对控制表达式进行判断,如果表达式为真,则继续执行循环。C语言提供了3中循环语句,分别为while语句,do while语句和for语句。

while语句

while语句是控制表达式在循环体之前的循环语句,它的格式如下:

while (表达式) 
    语句

这里的圆括号是强制要求的,圆括号之内的表达式为控制表达式,圆括号之外的语句为循环体。

while语句的执行步骤,首先计算控制表达式的值,如果表达式的值不为0(为真),则执行循环体,接着再次判断控制表达式,如果其值不为0,再次执行循环体。执行这个步骤直到控制表达式的值为0时停止。

/*************************************
 * using_while_1.c                   *
 *                                   *
 * 简单的while语句                   *
 *************************************/

#include <stdio.h>

int main()
{
  int i = 1;
  int sum = 0;

  while(i <= 50)
  {
    sum += i;
    i++;
  }

  printf("1到50之间(包括1和50)的整数之和为%d\n", sum);

  return 0;
}

基本的while语句

如果while的控制表达式一直不为0,那么循环将一直进行下去,称为无限循环。这样的循环在循环体中都包含break,goto,return或者导致程序终止的函数(如exit等),以在适当的时机终止程序。

/****************************************
 * using_while_2.c                      *
 *                                      *
 * 无限循环与break                      *
 ****************************************/

#include <stdio.h>

int main()
{
  int i = 1;
  int sum = 0;
  while(1)
  {
    if ( i > 50)
      break;

    sum += i;

    i++;
  }

  printf("1到50之间(包括1和50)的整数和为%d\n", sum);
  return 0;
}

while和break

do while语句

do while语句与while语句非常相似,只不过do while语句在每次执行完循环体之后对控制表达式进行判断的,因此do while语句的循环体至少会执行一次,而while语句的循环体可能一次都不被执行。do while语句的格式如下:

do 
    语句
while(表达式);

其中控制表达式两端的括号也是必须的。

do while循环的执行步骤如下:首先执行循环体,再计算控制表达式的值,如果表达式的值非零再继续执行循环体,然后再次判断表达式的值。这个过程持续进行,知道控制表达式的值为0,终止do while语句执行。

建议对do while的循环体都使用大括号包裹起来,因为大括号会使do while语句被误认为是while语句。

/*************************************
 * using_do_while.c                  *
 *                                   *
 * C语言中的do while循环             *
 *************************************/

#include <stdio.h>

int main()
{
  int i = 1;
  int sum = 0;

  do
  {
    sum += i;
    i++;
  }while(i <= 50);

  printf("1和50之间(包括1和50)的整数之和为%d\n", sum);

  return 0;
}

dowhile

for语句

for语句的格式如下:

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

表达式1是初始化步骤,只执行一次,表达式2是控制表达式,控制循环的终止,表达式3在每次循环的最后被执行。

for语句的执行步骤是:首先执行表达式1进行初始化,然后判断表达式2的值是否为真,若为真,则执行循环体,然后执行表达式3.随后再次对表达式2的值进行判断,若为真,则再次执行循环体和表达式3,依次循环直到表达式2的值为0为止。

for语句的3个表达式都可以省略,若省略表达式1,则在执行循环前没有初始化的操作;若省略第三个表达式,则执行完循环体后,没有再需要执行的语句,循环体确保循环能够在有限时间内终止;若省略第二个表达式,则每次判断都默认为真,除非在循环体内使用break,goto和程序终止函数外,循环不会停止。

/*************************************
 * using_for.c                       *
 *                                   *
 * C语言的for语句                    *
 *************************************/

#include <stdio.h>

int main()
{
  int sum = 0;

  int i;

  for (i = 1; i <= 50; i++)
  {
    sum += i;
  }

  printf("1和50之间(包括1和50)的整数之和为%d\n", sum);

  return 0;
}

for语句

3、循环体中的跳转语句

在循环体中可以使用breakcontinuegoto跳转语句。

break语句。

break语句在循环体的中间设置退出点,用以跳出whiledo whilefor循环,直接执行循环语句后面的语句。除此之外,break语句还用于switch语句,用以跳出switch语句而直接执行switch语句后面的语句。对于嵌套的循环语句和(或)switch语句,break只能跳过其所在的那层循环或switch语句。

continue语句。

continue语句并不跳出循环,而是将程序执行正好转移到循环体末尾处,跳过本次循环中循环体余下的内容。continue语句只能用于循环体中。

/**************************************
 * using_continue.c                   *
 *                                    *
 * C语言中用于循环体的continue语句    *
 **************************************/

#include <stdio.h>

int main()
{
  int n = 0;
  int sum = 0;

  while (n < 10)
  {
    int i = 0;
    scanf("%d", &i);
    if (i == 0)
      continue;
    sum += i;
    n++;
  }

  printf("以上十个非零数的和为:%d\n", sum);

  return 0;
}

continue

goto语句。

goto语句不仅可以用在循环体中,还可以用在程序的任何位置。与continuebreak不同,它可以跳转到同一个函数中任何有标记的语句处。goto依赖于定义在语句开头的标识符,其形式为:标识符 : 语句goto语句的形式为:goto 标识符;

goto易于造成程序混乱,代码难以阅读,并且其他跳转语句、returnexit语句能够满足大多数需要goto语句的情况。除非万不得已,尽量不要使用。

/**************************************
 * using_goto_in_loop.c               *
 *                                    *
 * C语言循环语句的循环体中使用goto语句*
 **************************************/

#include <stdio.h>

int main()
{
  int i = 0;

  while (i < 10)
  {
    switch(i)
    {
    case 0:
    case 1:
    case 2:
    case 3:
      printf("%d 小于 4\n", i);
      break;
    default:
      goto bigThan4;
    }
    i++;
  }

 bigThan4: printf("i开始不小于4\n");
  return 0;
}

goto in loop

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/530724.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

consul集群部署-linux

一.前言 1. Consul架构 consul是分布式、高可用的系统&#xff0c;下图是单数据中心的部署架构 2. Consul特性 服务发现&#xff1a;解决在分布式环境中&#xff0c;如何找到可用的服务地址的问题&#xff0c;支持通过DNS和HTTP查询服务地址。健康检查&#xff1a;定时监控服务…

如何正确学习网络安全(黑客)?看到就是赚到!

一、前言 本人10 年工作经验&#xff0c; 擅长 Web 安全攻防、渗透领域&#xff0c; 在金融领域的安全有丰富的实战经验。从事在线教育 3 年多培养学员过万&#xff0c;讲解清晰透彻&#xff0c;课程干货内容多&#xff0c;辅导学员耐心细致 那我们该如何正确学习网络安全&am…

[学习笔记] [机器学习] 5. 逻辑回归(逻辑回归、混淆矩阵、分类评估指标、ROC曲线、AUC指标、类别不均衡问题)

视频链接数据集下载地址&#xff1a;无需下载 本文学习目标&#xff1a; 知道逻辑回归的损失函数、优化方法知道逻辑回归的应用场景应用LogisticRegression实现逻辑回归预测知道精确率、召回率等指标的区别知道如何解决样本不均衡情况下的评估会绘制ROC曲线图形 1. 逻辑回归…

Linux——Linux的基本指令

作者&#xff1a;几冬雪来 时间&#xff1a;2023年5月15日 内容&#xff1a;Linux基本指令讲解 目录 前言&#xff1a; 1. 什么是操作系统&#xff1a; 2.Linux操作系统&#xff1a; 3.Linux程序&#xff1a; 4.Linux基本指令&#xff1a; 1.ls&#xff1a; 作用&a…

Java基础 关键字与标识符

关键字(keyword) 定义:被 Java 语言赋予了特殊含义&#xff0c;用做专门用途的字符串(或单词) 这些单词已经被 Java 定义好 了。 特点:全部关键字都是小写字母。 关键字比较多&#xff0c;不需要死记硬背&#xff0c;学到哪里记到哪里即可。官方地址 1. 关键字一共 50 个&…

linux bonding 技术

文章目录 背景简介目录1. Bonding驱动简介1.1 配置并编译支持bonding的内核1.2 安装ifenslave控制工具 2. Bonding驱动选项3. 配置Bonding设备3.1 使用Sysconfig配置3.1.1 利用Sysconfig使用DHCP3.1.2 利用Sysconfig配置多个Bonds 3.2 使用Initscripts配置3.2.1 利用Initscript…

Linux篇3

Shell常用命令 0. Shell介绍1. 帮助命令1.0 help&#xff1a;获取内置命令帮助信息1.1 man&#xff1a;获取帮助信息 2. 文件目录相关2.1 pwd&#xff1a;打印当前工作目录的绝对路径2.2 cd&#xff1a;切换工作目录2.3 ls&#xff1a;列出目录内容2.4 mkdir&#xff1a;创建空…

Java小游戏之贪吃蛇

文章目录 一&#xff1a;窗口的绘制1.1 定义窗口类——SnakeGame1.2 设置窗口的参数1.3 启动main方法 二&#xff1a;窗口网格的绘制2.1 重写paint方法2.1.1 为什么要重写paint方法2.1.2 实现方式 2.2 Graphics2.3 设置网格线的参数 三&#xff1a;游戏物体父类的创建——Snake…

Swagger之集成与用法

简介 Swagger 是一个规范且完整的框架&#xff0c;用于生成、描述、调用和可视化 RESTful 风格的 Web 服务&#xff1b; 作用 1.接口的文档在线生成 2.功能测试 SpringBoot集成Swagger 1.创建一个普通的SpringBoot项目&#xff0c;支持web应用 2.pom中加入Maven依赖 <depe…

K8S的的就绪探针readinessProbe 和存活探针livenessProbe

就绪探针&#xff1a;readinessProbe 什么是readinessProbe readinessProbe&#xff1a; 当Pod需要开始接收流量时&#xff0c;“kubelet” 将定期检查 readinessProbe&#xff0c;如果该probe处于成功状态&#xff0c;则容器视为就绪&#xff0c;并将 Pod 标记为已就绪状态。…

栈的基本操作详细介绍 看了就会!!!

文章目录 栈的介绍栈的概念栈的结构 栈的实现&#xff08;动态数组实现&#xff09;初始化栈入栈出栈获取栈顶元素判断栈是否为空获取栈中有效元素的个数销毁栈 栈的介绍 栈的概念 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进…

机器学习期末复习 决策树相关

决策树基本原理&#xff1a;基于信息增益、增益率与基尼系数的划分选择&#xff0c;预剪枝与后剪枝&#xff0c;多变量决策树以及决策树优缺点概述 如何避免决策树过拟合&#xff1f; 预剪枝和后剪枝 预剪枝&#xff1a; 1.生成结点&#xff0c;根据信息增益选出最优划分属…

玩转Google开源C++单元测试框架Google Test系列(gtest)之八 - 打造自己的单元测试框架

一、前言 上一篇我们分析了gtest的一些内部实现&#xff0c;总的来说整体的流程并不复杂。本篇我们就尝试编写一个精简版本的C单元测试框架&#xff1a;nancytest &#xff0c;通过编写这个简单的测试框架&#xff0c;将有助于我们理解gtest。 二、整体设计 使用最精简的设计…

Docker下Gitlab配置私有证书

Docker下Gitlab配置私有证书 1 创建私有证书※2 内网穿透配置&#xff08;可选&#xff09;3 Gitlab 配置私有证书3.1 新增存储HTTPS证书文件夹3.2 启动容器3.3 开放HTTPS端口3.4 设置IP、端口3.5 配置邮箱3.6 让配置生效3.7 访问 1 创建私有证书 参考 制作HTTPS私有证书 —HT…

玩转Google开源C++单元测试框架Google Test系列(gtest)之三 - 事件机制

一、前言 gtest提供了多种事件机制&#xff0c;非常方便我们在案例之前或之后做一些操作。总结一下gtest的事件一共有3种&#xff1a; 1. 全局的&#xff0c;所有案例执行前后。 2. TestSuite级别的&#xff0c;在某一批案例中第一个案例前&#xff0c;最后一个案例执行后。…

【STM32】基础知识 第十四课 串口通信: 深入探究与应用

【STM32】基础知识 第十四课 串口通信: 深入探究与应用 概述串口通信的基本原理串行通信 & 并行通信串行通信并行通信串行 vs 并行 单工/半双工/全双工单工通信半双工通信全双工通信总结 同步通信/异步通信同步通信异步通信波特率 常见的串行通信接口STM32 串口配置STM32 串…

linux pl320 mbox控制器驱动分析-(3) pl320驱动代码分析

linux pl320 mbox控制器驱动分析-&#xff08;3&#xff09;pl320驱动代码分析 1 pl320 mbox控制器宏定义2 初始化接口3 ipc_handler mbox中断处理函数4 数据的收发4.1 数据发送4.2 数据接收4.3 中断发送接收测试代码 5 设置以及清除远端目的core5.1 设置远端目的core5.2 清除远…

中东地区DNSpionage安全事件分析

事件摘要 思科Talos公司最近发现了一个以影响.gov域名为攻击手段的安全事件&#xff0c;而此安全事件主要针对黎巴嫩和阿拉伯联合酋长国&#xff08;阿联酋&#xff09;以及一家私营的黎巴嫩航空公司。根据我们的研究&#xff0c;攻击者花费了许多时间来了解受害者的基础网络&…

第九章结构性模式—桥接模式

文章目录 桥接模式解决的问题概念结构 实例使用场景 结构型模式描述如何将类或对象按某种布局组成更大的结构&#xff0c;有以下两种&#xff1a; 类结构型模式&#xff1a;采用继承机制来组织接口和类。对象结构型模式&#xff1a;釆用组合或聚合来组合对象。 由于组合关系或…

【数据科学赛】评估大语言模型 #¥65000

CompHub[1] 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…&#xff09;比赛。本账号会推送最新的比赛消息&#xff0c;欢迎关注&#xff01; 以下信息由AI辅助创作&#xff0c;仅供参考 比赛名称 大语言模型评估[2] (见文末阅读原文) 大赛背景 本次竞赛希…