C learning_6

news2024/11/18 3:46:38

目录

语句的种类

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");
    else
        printf("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 = 3
    case 2:
        n++; // n = 2
    case 3:
        switch (n)
        {//switch允许嵌套使用
        case 1:
            n++;
        case 2: 
            m++; // m = 4
            n++; // n = 3
            break;
        }
    case 4:
        m++; // m =5
        break;
    default:
        break;
    }
    printf("m = %d, n = %d\n", m, n);// 5 3
    return 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 4
		i++;
	}
	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("请输入密码:>");//123456
    scanf("%d", password);
    printf("请确认密码(Y/N):>");
    char c = 0;
    scanf("%c", &c);
    if ('Y' == c || 'y' == c)
        printf("确认成功\n");
    else
        printf("确认失败\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");
    else
        printf("确认失败\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.coloradmin.cn/o/442018.html

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

相关文章

cookie劫持与明文密码发送

一&#xff0c;目的&#xff1a; 1.已经取得web权限&#xff0c;查看数据库后发现md5密码太复杂无法破解&#xff0c;想要窃取网站后台的cookie或者一个账户和明文密码 2.思路1: 准备一个xss平台&#xff0c;把script脚本放在admin登录后可以看的资源文件里&#xff0c;把cook…

Tomcatd的详细介绍以及--手写 MyWebServer.java

Tomcat 官方文档 地址: https://tomcat.apache.org/tomcat-8.0-doc/ WEB 开发介绍 1. WEB&#xff0c;在英语中 web 表示网/网络资源(页面,图片,css,js)意思&#xff0c; 它用于表示 WEB 服务器(主机)供浏览器访问的资源 2. WEB 服务器(主机)上供外界访问的 Web 资源分为&…

java类图与代码实例

在 Java编程中&#xff0c;类图是一个非常重要的概念。类图的作用是用来展示类的结构以及类之间的关系。通过类图&#xff0c;可以很方便地展示出对象之间的关系。下面我将使用实例来演示一下我在学习 Java时的类图。 首先我们来看一下我们使用过的类图。 现在&#xff0c;我会…

【Linux】网络配置ifonfig解读

1、配置文件位置 在Linux系统中&#xff0c;IP地址的配置信息通常存储在网络接口配置文件中。不同的发行版可能会将这些文件存放在不同的位置。 以较为流行的Ubuntu和CentOS为例&#xff1a; Ubuntu系统&#xff1a;网络接口配置文件位于/etc/network/interfacesCentOS/RHEL…

Linux之进程知识点

一、什么是进程 进程是一个运行起来的程序。 问题思考&#xff1a; ❓ 思考&#xff1a;程序是文件吗&#xff1f; 是&#xff01;都读到这一章了&#xff0c;这种问题都无需思考&#xff01;文件在磁盘哈。 本章一开始讲的冯诺依曼&#xff0c;磁盘就是外设&#xff0c;和内…

春秋云境:CVE-2022-28060(SQL注入)

目录 一、题目 二、bp抓包跑sqlmap 一、题目 介绍&#xff1a; Victor CMS v1.0 /includes/login.php 存在sql注入 进入靶场&#xff1a; 官方给出的应该是登录界面 admin登录看看 是空白页面 不过看包头应该是POST方式&#xff1a; 二、bp抓包跑sqlmap burp抓包&#xff…

程序员如何把ChatGPT用到开发中

问&#xff1a;ChatGPT是程序员的好帮手&#xff1f;还是要干掉程序员&#xff1f; ChatGPT现在如何了&#xff1f; ChatGPT最近火到不行&#xff0c;在短短几个月时间里&#xff0c;OpenAI打造的ChatGPT就从一个弱小无助的AI聊天程序发展成几乎无所不知、无所不能的强大AI大…

Servlet 详细介绍的代码实列,以及Servlet 流程图和Servlet 流程分析和 @WebServlet源码分析

目录 动态 WEB 开发核心-Servlet 官方文档 对Java Web 技术体系的流程图改造说明(细化).[整体的概念] 什么是 Servlet Servlet(java 服务器小程序)&#xff0c;它的特点: Servlet 在 JavaWeb 项目位置 Servlet 基本使用 编写类HelloServlet去实现 Servlet 接口 在web.…

C#基于ASP.NET实现的共享笔记服务系统

共享笔记服务系统需要实现的功能包括用户的管理&#xff0c;以及笔记信息的管理和使用等。 用户用户需要注册激活&#xff0c;添加自己的个人信息&#xff0c;用户姓名&#xff0c;年龄&#xff0c;性别&#xff0c;民族&#xff0c;身份证号&#xff0c;用户证编号&#xff0c…

QGroungControl在QT中源码编译(包括配置环境)

一、环境配置 VS2019 Qt 5.15.2 1、安装 我原先的Qt版本是5.12的&#xff0c;在编译源码的时候会出错&#xff0c;提示最少需要5.15版本的&#xff0c;于是卸载原来的Qt重新安装5.15.2版本的&#xff01; 网上说5.15以及以上版本的只能在线安装了&#xff0c;所以我参考QT5.…

【hello Linux】详解各种缓冲区

目录 两种缓冲区的说明 用户级缓冲区&#xff1a; 数据如何从用户级缓冲区——>文件内核缓冲区&#xff1f; 刷新策略&#xff1a;对于各种文件的 了解了各种知识之后&#xff0c;使用代码来进行更深理解的认识&#xff1a; Linux&#x1f337; 两种缓冲区的说明 先用一张…

ROS学习笔记(八):ROS2

ROS学习笔记&#xff08;八&#xff09;&#xff1a;ROS2 ROS1存在的问题ROS2ROS2的设计目标ROS2的系统架构ROS2的关键中间件——DDS ROS2的通信模型 ROS1存在的问题 ROS&#xff08;一般ROS均指ROS1&#xff09;经过多年的发展&#xff0c;已成为机器人领域的重要的工具与平台…

【社区图书馆】《uni-app跨平台开发与应用》读书随想录

目录 导言 读书感悟 《uni-app跨平台开发与应用》(从入门到实践)图书目录 作者简介 导言 最近我读了一本关于uni-app跨平台开发与应用的书籍&#xff0c;名为《uni-app跨平台开发与应用从入门到实践》。这本书让我对uni-app跨平台开发与应用有了更深入的了解&#xff0c;作…

HttpServletResponse注意事项和细节和原理示意图

目录 HttpServletResponse HttpServletResponse 介绍 HttpServletResponse 类图 向客户端返回数据方法 处理中文乱码问题-方案 处理中文乱码问题-方案 2 请求重定向 请求重定向原理示意图 应用实例 DownServlet Java类 DownServletNew.java xml配置 请求重定向注意…

Ubuntu中用VSCode交叉编译程序放到从机上运行

文章目录 前言&#xff1a;1. 前期准备&#xff1a;1.1 树莓派系统烧录与虚拟机创建1.2 VSCode拓展下载 2. 树莓派交叉编译链查询与下载2.1 交叉编译链如何判断下哪一个2.2 交叉编译链各种版本含义 3. 开始操作3.1 创建helloworld程序3.2 配置交差编译链3.3 json文件说明与配置…

变压器感量计算

1、L:感量计算LBmax*Ae*Np*R/V0.3*17.1*123*1.8/1.01.15mH 第一步:根据经验确定一个大概的感量值。 第二步:实际Sense电压波形测试&#xff0c;判断有没磁饱和&#xff0c;频率是否正确。 W功率 L感量 变压器 …

学系统集成项目管理工程师(中项)系列08a_合同管理(上)

1. 合同&#xff08;Contract&#xff09; 1.1. 契约 1.2. 广义概念 1.2.1. 以确定各种权利与义务为内容的协议&#xff0c;即只要是当事人之间达成的确定权利义务的协议均为合同&#xff0c;不管它涉及哪个法律部门及何种法律关系 1.2.2. 合同除应包括民法中的合同外&…

HTTP请求UML时序图--(POST)图和(GET)图源码分析及代码分析和MIME 介绍--常用的状态码说明

目录 WEB 开发通信协议-HTTP 什么是 HTTP 协议 介绍 http 请求 hi.html 的 UML时序图 HTTP 请求包分析 1. HTTP 请求包分析(GET)图, 说明 可以通过浏览器抓包分析 代码说明 HTML部分 JAVA部分 web.xml部分 3) 完成测试&#xff0c;并抓包分析 HTTP 请求包分析(POST…

汽车车身钣金—车身连接方式

摘要&#xff1a; 当汽车车身构件遭受严重损伤失去维修意义时,汽车维修厂商一般采用更换部件或总成的方法进行修复。 车身连接方式 当汽车车身构件遭受严重损伤失去维修意义时,汽车维修厂商一般采用更换部件或总成的方法进行修复。 车身外部覆盖件大多由相对独立的板件相互…

场效应管(MOS)基础知识

MOSFET管是常用的半导体器件&#xff0c;又称为开关管、场效应管、英文名称&#xff08;MOSFET),简称MOS管 按元件封装工艺可分为两大类:插件类、贴片类。大部分MOSFET管的外观极其类似&#xff0c;常见的封装种类有T0-252&#xff0c;T0-251&#xff0c;T0-220&#xff0c;T0—…