C learning_6

news/2024/4/23 20:02:26/

目录

语句的种类

C语言:结构化是程序设计语言

顺序结构:

选择结构(分支结构):

循环结构:

while语句中的break和continue


语句的种类

        1.表达式语句:表达式语句是指一个表达式后面跟随一个分号的语句。

#include<stdio.h>
int main()
{3 + 5;//表达式语句return 0;
}

        2.函数调用语句:函数调用语句是指一个函数调用语句后跟随一个分号的语句

#include<stdio.h>
int main()
{printf("hello\n");//表达式语句return 0;
}

        3.控制语句

        4.复合语句:复合语句(也称为代码块)是指在一对花括号 {} 中包含的一系列语句。

#include<stdio.h>
int main()
{{}//复合语句return 0;
}

        5.空语句:空语句是指不包含任何可执行语句的语句。

#include<stdio.h>
int main()
{;//空语句return 0;
}

这里我们着重讲解控制语句。

        控制语句是一种编程语言中用来控制程序执行流程的语句。它可以通过改变程序的执行顺序、跳转到指定代码块和重复执行一段代码等,来实现程序的各种控制需求。控制语句用于控制程序的执行流程,以实现程序的各种结构方式(C语言支持三种结构:顺序结构、选 择结构、循环结构),它们由特定的语句定义符组成,C语言有九种控制语句。

可分成以下三类:

        1. 条件判断语句也叫分支语句:if语句、switch语句;

        2. 循环执行语句:do while语句、while语句、for语句;

        3. 转向语句:break语句、goto语句、continue语句、return语句。              

C语言:结构化是程序设计语言

顺序结构:

        顺序结构是一种程序控制结构,它按照代码书写的先后顺序依次执行每个语句。顺序结构是编程中最基本、最基础的结构,几乎所有的程序都包含顺序结构。

        顺序结构中的代码会按照书写顺序顺次执行,没有任何条件、跳转或分支的控制。顺序结构通常用于执行一组逻辑上有序的指令序列,例如从文件中读取数据、对数据进行处理、将结果输出到屏幕等。

以下是一个简单的顺序结构示例,它实现了对两个数相加的操作:

        int a = 2;

        int b = 3;

        int c = a + b;

        printf("The result is: %d\n", c);

在上面的代码中,变量 a 和 b 分别赋值为 2 和 3,然后使用加号运算符将它们相加,将结果保存到变量 c 中。最后,使用 printf 函数输出变量 c 的值到屏幕上。

顺序结构是一种非常基础的编程结构,它通常是编写任何复杂程序或算法的基础。在编写程序时,需要按照逻辑流程将不同的操作语句按照正确的顺序排列,才能得到正确的结果。

选择结构(分支结构):

        选择结构是一种程序控制结构,它允许程序在满足不同条件的情况下执行不同的代码路径。选择结构通常用于根据特定的条件选择不同的处理路径,例如为一个变量赋值、输出不同的结果等。在大多数编程语言中,选择结构有两种类型:if...else 和 switch...case。

if...else 结构的语法形式如下:

if (condition)

{  

        // 条件为真时执行的代码  // ...

}

else

{  

        // 条件为假时执行的代码  // ...

}

if...else 结构会根据指定的条件来判断执行哪段代码。如果条件为真,那么执行 if 代码块中的语句;否则,执行 else 代码块中的语句。else 代码块是可选的,如果不需要对条件为假的情况进行处理,可以省略该代码块。

选择结构都可以根据特定的条件来执行不同的代码路径,具有很强的灵活性和应用范围。

//if - else 语句
#include<stdio.h>
int main()
{int age = 0;//输入scanf("%d", &age);if (age < 18){printf("未成年!\n");}else{printf("成年!\n");}return 0;
}//if - else if - else  语句
#include<stdio.h>
int main()
{int age = 0;//输入scanf("%d", &age);/*< 18      青少年18 - 30   青年31 - 50   中年51 - 80   中老年80 - 100  老年100 +     老寿星*/if (age < 18)printf("青少年!\n");//else if (18 <= age <= 30)//18 <= age 当输入15,该表达式为假,假就为0,0<=30变为true,\执行下列语句,不符合逻辑,故改写法有误else if ((age >= 18) && (age <= 30))printf("青年!\n");else if ((age >= 31) && (age <= 50))printf("中年!\n");else if ((age >= 51) && (age <= 80))printf("中老年!\n");else if((age >= 81) && (age <= 100))printf("老年!\n");else//else后不可直接带判断printf("老寿星!\n");
}

当我们写代码时,一定要有良好的代码风格

//悬空else语句
#include <stdio.h>
int main()
{int a = 0;int b = 2;if (a == 1)if (b == 2)printf("hehe\n");elseprintf("haha\n");//else是与最近的if语句匹配return 0;
}
//改进
#include <stdio.h>
int main()
{int a = 0;int b = 2;if (a == 1){if (b == 2)//不要写成(b=2),这样写条件表达式将永远是true{printf("hehe\n");}}else{printf("haha\n");}//else是与最近的if语句匹配return 0;
}

接下来我们做两个题目练习一下:

        1.判断一个数是否为奇数

#include<stdio.h>
int main()
{int n = 0;scanf("%d", &n);if (n % 2 == 1){printf("%d是奇数\n", n);}else{printf("%d不是奇数\n", n);}return 0;
}

        2.输出1-100之间的奇数

#include<stdio.h>
int main()
{int i = 0;for (i = 0; i <= 100; i++){//判断i是否为奇数if (i % 2 == 1){printf("%d ", i);}}return 0;
}

现在我们再来介绍一下switc-case-break语句

switch...case 结构的语法形式如下:

```switch (expression)

{  

        case value1:    // 匹配 value1 时执行的代码    

                // ...    

                break;  

        case value2:    // 匹配 value2 时执行的代码    

                // ...    

                break;  

        default:    // 所有值都不匹配时执行的代码    

                // ...    

                break;

}

switch...case 结构会根据指定的表达式值来判断执行哪个 case 代码块中的语句。如果表达式的值匹配某个 case 中的值,就会执行该代码块中的语句。break语句 的实际效果是把语句列表划分为不同的分支部分。如果没有任何一个值匹配表达式的值,则执行 default 代码块中的语句(default 块是可选的)。

有时候我们的需求变了:

1. 输入1-5,输出的是“工作日”;

2. 输入6-7,输出“休息日”

所以我们的代码就应该这样实现了:

#include<stdio.h>
int main()
{int day = 0;scanf("%d", &day);switch (day) // - day 整型表达式{case 1: case 2:case 3:case 4:case 5:printf("工作日\n");break;case 6:case 7:printf("休息日\n");break;default:printf("输入错误\n");break;}return 0;
}

是时候来验证一下我们学的咋样啦?看代码。

#include <stdio.h>
int main()
{int n = 1;int m = 2;switch (n){case 1:m++; // m = 3case 2:n++; // n = 2case 3:switch (n){//switch允许嵌套使用case 1:n++;case 2: m++; // m = 4n++; // n = 3break;}case 4:m++; // m =5break;default:break;}printf("m = %d, n = %d\n", m, n);// 5 3return 0;
}

1.switch语句是可以嵌套的

2.break语句只会跳出一层switch

循环结构:

        循环结构是一种程序控制结构,它允许程序在满足特定条件的情况下反复执行一段代码。循环结构通常用于处理需要重复执行某一任务的情况,如打印九九乘法表、读取文件中的每一行数据等。在大多数编程语言中,循环结构有两种类型:while 循环和 for 循环。

while 循环的语法形式如下:

while (condition) {  

        // 待重复执行的代码  // ...

}

while 循环会在每一次循环开始时检查 condition 条件是否满足,只有当条件为真时,才会执行循环体中的代码块。一旦循环体执行完毕,程序将返回到循环开始处,重新检查条件,直到条件不再满足为止,循环结束。

for 循环的语法形式如下:

for (initialization; condition; increment)

{  

// 待重复执行的代码  // ...

}

for 循环通常用于计数器的循环。在 for 循环中,初始化语句会在循环开始前执行一次,用于设置计数器的初始值;条件语句会在每次循环开始时执行,用于检查计数器是否满足循环终止条件;增量语句会在每次循环结束时执行,用于更新计数器的值。当计数器不再满足条件时,循环结束。

        这两种循环结构都可以用来控制程序的重复执行次数和循环条件,具有很强的灵活性和应用范围。

现在我们来介绍一下循环结构

我们已经掌握了,

if(条件)

        语句;

当条件满足的情况下,if语句后的语句执行,否则不执行。 但是这个语句只会执行一次。 由于我们发现生活中很多的实际的例子是:同一件事情我们需要完成很多次。 那我们怎么做呢? C语言中给我们引入了: while 语句,可以实现循环。

//while 语法结构

while(表达式)

         循环语句; 

//在屏幕上打印1-10
#include <stdio.h>
int main()
{int i = 1;while (i <= 10){printf("%d ", i);i++;}return 0;
}

while语句中的break和continue

break:

        break语句用于完全退出循环。break用于完全退出包含它的循环。当执行到break语句时,程序会跳出当前的循环,不再执行后续的循环代码,而是直接执行循环外的代码。break只能跳出一个循环,不能跳出多个循环。

#include <stdio.h>
int main()
{int i = 1;while (i <= 10){if (i == 5)break;//跳出循环printf("%d ", i);// 1 2 3 4i++;}return 0;
}

continue:

        continue语句用于跳过当前单次循环中的某些语句,开始下一次循环。当执行到continue语句时,程序不会执行剩余的循环体,而是直接进行下一次循环。

#include <stdio.h>
int main()
{int i = 0;while (i < 10){i++;if (i == 5)continue;//跳过本次循环continue后边的代码,直接去while循环的判断部分printf("%d ", i);// 1 2 3 4 6 7 8 9 10}return 0;
}

再看几个代码:

#include<stdio.h>
int main()
{char password[20] = { 0 };printf("请输入密码:>");//123456scanf("%d", password);printf("请确认密码(Y/N):>");char c = 0;scanf("%c", &c);if ('Y' == c || 'y' == c)printf("确认成功\n");elseprintf("确认失败\n");return 0;
}

 我们发现此程序在我们输入密码之后,没有让我们输入Y程序就自己输出确认失败了,这是为什么呢?

        这是因为在输入密码后,scanf函数还会将回车符('\n')留在输入缓冲区中,然后当我们输入确认字符时,scanf会读取到这个回车符,导致程序直接执行了确认失败的代码块。这种情况可以使用一个额外的getchar()函数来解决。

#include<stdio.h> int main() {char password[20] = { 0 };printf("请输入密码:>");//123456     scanf("%s", password);// 因为是读取字符数组,所以不需要使用 & 符号while(getchar()!='\n'){; // 把输入缓冲区中的回车符读取掉}printf("请确认密码(Y/N):>");char c = getchar(); // 直接使用 getchar 读取字符if ('Y' == c || 'y' == c) // 注意对大小写的判断printf("确认成功\n");elseprintf("确认失败\n");return 0;
}

这个代码的作用是:只打印数字字符,跳过其他字符的、

//#include <stdio.h>
//int main()
//{
//    char ch = '\0';
//    while ((ch = getchar()) != EOF)
//    {
//        if (ch < '0' || ch > '9')
//            continue;
//        putchar(ch);
//    }
//    return 0;
//}

      


http://www.ppmy.cn/news/47017.html

相关文章

2021地理设计组二等奖:基于GIS的东江源区土壤侵蚀及其影响因素空间分析

一、作品背景 水土保持情况普查对我国具有重要意义。我国目前是世界上水土流失最严重的国家之一&#xff0c;水土流失面积极其广且量大&#xff1b;严重的水土流失问题是我国生态环境问题的重要板块&#xff0c;若是持续恶化&#xff0c;将会严重影响我国的生态安全、饮水安全…

4.17日报

get()和 load()的区别&#xff1f; 数据查询时&#xff0c;没有 OID 指定的对象&#xff0c;get() 返回 null&#xff1b;load() 返回一个代理对象。 load()支持延迟加载&#xff1b;get() 不支持延迟加载。 121. 说一下 hibernate 的缓存机制&#xff1f; hibernate 常用的缓存…

MIT6.824 Lecture18 Fork Consistency

Background 拜占庭问题&#xff08;Byzantine Generals Problem&#xff09;得名于一个古老的传说&#xff0c;讲述了拜占庭帝国在战争中的一个失败策略。在这个故事中&#xff0c;多名拜占庭将军要协调进攻或撤退的行动&#xff0c;但是其中一些将军可能会向其他帝国泄露假消…

【MySQL | 进阶篇】09、MySQL 管理及常用工具(mysqladmin、mysqlbinlog、mysqldump 等)的使用

目录 一、系统数据库 二、常用工具 2.1 mysql 示例 2.2 mysqladmin 示例 2.3 mysqlbinlog 示例 2.4 mysqlshow 示例 2.5 mysqldump&#xff08;数据备份&#xff09; 示例 2.6 mysqlimport/source&#xff08;数据恢复&#xff09; 2.6.1 mysqlimport 2.6.2 …

企业绩效管理怎么做?

阅读本文您将了解&#xff1a;1.企业绩效管理是什么&#xff1b;2.企业绩效管理怎么做&#xff1b;3.绩效管理系统的优势所在。 一、绩效管理是什么 绩效考核和绩效管理是企业管理中必须了解和掌握的概念。绩效考核是企业对主要经济和技术指标完成情况按照既定方案进行的考核…

浅谈日出日落的计算方法以及替代工具 - 日出日落 API

引言 如果你想知道精确的日落日出时间&#xff0c;又或者你想设计一个日出日落时间查询的应用&#xff0c;又或者你只是好奇点进来了&#xff0c;还是可以过来围观一下涨涨知识&#xff0c;今天想跟大家聊一聊的是日出日落的计算方法以及替代工具 - 日出日落 API 。 日出日落…

产品说明书应该如何制作?

在当今互联网时代&#xff0c;产品说明书无疑是一种展示产品特性、引导用户使用和解决用户问题的重要方式。一份精心制作的产品说明书&#xff0c;能够让用户更快地了解和掌握产品的使用方法&#xff0c;让用户充分享受产品带来的便利。不过要做出一份高质量的产品说明书&#…

[java基础]面向对象(四)

多态&#xff1a;多种形态 向上造型/自动类型转换&#xff1a; 超类型的引用指向派生类的对象 能点出来什么&#xff0c;看引用的类型--------------这是规定&#xff0c;记住它 向下转型/强制类型转换&#xff0c;成功的条件只有如下两种&#xff1a; 引用所指向的对象&am…

【FTP服务】

目录 一、FTP服务二、FTP服务器安装配置FTP服务的安装匿名访问开启防火墙设置本地用户修改配置文件 以图形化的格式来写入文件 三、设置白名单&#xff0c;黑名单用户 一、FTP服务 作用: 是用来传输文件的协议 端口: FTP服务器默认使用TCP协议的20、21端口与客户端进行通信 2…

从零学习SDK(7)如何打包SDK

打包SDK的目的是为了方便将SDK提供给其他开发者或用户使用&#xff0c;以及保证SDK的兼容性和安全性。打包SDK可以有以下几个好处&#xff1a; 减少依赖&#xff1a;打包SDK可以将SDK所需的库、资源、文档等打包成一个文件或者一个目录&#xff0c;这样就不需要用户再去安装或…

JavaScript每日五题面试题(第一天)

1、什么是深拷贝和浅拷贝? 如何实现深浅拷贝&#xff1f; 首先我们先来理解一下什么是浅拷贝和深拷贝 什么是深拷贝和浅拷贝? 深拷贝 创建一个 新对象, 拷贝对象的所有属性, 如果属性是 基本数据, 拷贝的就是 基本数据 的值; 如果是 引用数据, 则需要重新分配一块内存, 拷…

select、poll、epoll(IO多路复用)

功能 三个模型都是用来判断是否有被监听的socket状态发生改变&#xff08;读写和异常&#xff09; select 首先介绍一下fd_set这个数组&#xff0c;这其实是一个类图&#xff0c;其中每一位表示一个socketfd&#xff0c;哪一位是1表示这一位对应的socket就是被监听的&#x…

Spark on Yarn(client和cluster模式,spark-shell 和 spark-submit 的区别,WorldCount实现与理解)

文章目录 Spark on Yarn两种模式clientcluster spark-shell 和 spark-submit 的区别的理解spark-shellspark-submit WorldCount实现IDEA本地实现On Yarn 实现WorldCount图解 Spark on Yarn spark on yarn 的两种模式是指 spark 应用程序的 driver 进程&#xff08;负责控制和协…

java线程小结

线程 1.概念与原理 1.1线程和进程的概念 现在的操作系统是多任务操作系统&#xff0c;而多线程是实现多任务的一种方式 进程&#xff1a;是指内存中运行的应用程序&#xff0c;有自己独立的内存空间&#xff0c;可以独立的运行&#xff0c;进程彼此之间互不干扰&#xff0c;一…

【C++】从C语言入门C++的基础知识

C基础知识 前言1. C关键字2. 命名空间namespace命名空间的创建命名空间的使用命名空间的注意事项 3. C输入&输出4. 缺省参数概念分类全缺省参数半缺省参数 5. 函数重载概念实现C为什么能进行函数重载C和C的相互调用&#xff08;可以不用看&#xff09; 6. 引用概念注意事项…

【云原生进阶之容器】第六章容器网络6.4.3--Flannel网络模式

《云原生进阶之容器》专题索引: 第一章Docker核心技术1.1节——Docker综述第一章Docker核心技术1.2节——Linux容器LXC第一章Docker核心技术1.3节——命名空间Namespace第一章Docker核心技术1.4节——chroot技术第一章Docker核心技术1.5.1节——cgroup综述

系统接口幂等性设计探究

前言&#xff1a; 刚开始工作的时候写了一个带UI页面的工具&#xff0c;需要设计登录功能&#xff0c;登录功能也很简单&#xff0c;输入用户名密码点击登录&#xff0c;触发后台查询并比对密码&#xff0c;如果登录成功则返回消息给前端&#xff0c;前端把消息弹出提示一下。…

面向计算机视觉的深度学习:1~5

原文&#xff1a;Deep Learning for Computer Vision 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 本文来自【ApacheCN 深度学习 译文集】&#xff0c;采用译后编辑&#xff08;MTPE&#xff09;流程来尽可能提升效率。 不要担心自己的形象&#xff0c;只关心如何实…

MVC和MVVM模式的区别

MVVM 和 MVC 都是软件架构模式&#xff0c;其中 MVVM 表示“Model-View-ViewModel”&#xff0c;而 MVC 表示“Model-View-Controller”。 MVC 模式中&#xff0c;控制器&#xff08;Controller&#xff09;充当视图&#xff08;View&#xff09;和模型&#xff08;Model&…

C语言中如何判断大小端字节序?

大小端&#xff08;Endian&#xff09;是指多字节整数在内存中存储的方式。在计算机中&#xff0c;一个多字节整数由多个字节组成&#xff0c;而不同的机器和处理器在存储多字节整数时会有两种不同存储方式&#xff0c;分别为大端字节序和小端字节序。 以一个4字节整数0x12345…