C语言学习 四、选择与循环

news2024/11/15 10:21:40

4.1关系表达式与逻辑表达式

  • 算术运算符的优先级高于关系运算符
  • 关系运算符的优先级高于逻辑与 和 逻辑或运算符
  • 相同优先级的运算符从左到右进行结合

【例】

表达式 5 > 3 && 8 < 4 - !0 的最终值为多少

4.2 if-else语句

4.2.1 if-else单分支语句
  • if判断条件(表达式)为真,就执行某个语句,反之不执行这个语句
  • if判断条件(表达式)为真,就执行某个语句,反之用else分支执行另一个语句

 【if-else单分支例子:判断输入值是否大于0】

#include <stdio.h>

int main() {
    //if-else单分支
    //判断输入值是否大于0
    int i;
    //用while循环是因为可以反复进行测试
    while (scanf("&d", &i)) {
        if (i > 0) {
            printf("i is bigger than 0\n");
        } else {
            printf("i is smaller than 0\n");
        }
    }
    return 0;
}
 4.2.2 if-else多分支语句

无论有多少个if语句或else if语句,程序都只会执行其中的一个语句

 【if-else多分支例子:阶梯电费】

#include <stdio.h>

int main() {
    //if-else多分支语句
    //阶梯电费
    int num; //用电几度
    while (scanf("%d", &num)) {
        if (num > 500) {
            printf("电费为0.15元/度\n");
        } else if (num > 300) {
            printf("电费为0.10元/度\n");
        } else if (num > 100) {
            printf("电费为0.075元/度\n");
        } else if (num > 50) {
            printf("电费为0.05元/度\n");
        } else {
            printf("电费为0元/度\n");
        }
    }
}

【运行结果】

【小结】

注意多个if-else语句要加上 {} 括号

若没有加上 {} 括号,else子句从属于最靠近它的不完整if语句

4.3循环语句

4.3.1 while循环
  • while语句用来实现“当型”循环结果,其一般形式为“while(表达式) 语句;”
  • 当表达式的值非0时,执行while语句中的内嵌语句
  • while循环特点:先判断表达式,后执行语句
  • 为避免程序死循环,在语句中需要有让表达式趋近于假的操作来使程序跳出循环

 【while循环实现计算1-100之间所有整数之和】

#include <stdio.h>

//while循环
int main() {
    //计算1到100的和
    int i = 1, total = 0;
    while (i <= 100) { //若是在这里的while后加上分号会导致死循环
        total = total + i;//把i加到total上
        i++; //若是循环体内没有让while判断表达式趋近于假的操作会导致死循环
    }
    printf("total=%d\n", total);
    return 0;
}

【运行结果】

4.3.2 for循环

for循环可用于循环次数不确定而只给出循环结束条件的情况,它完全可以代替while循环语句,其一般形式为

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

 其中:

  • 表达式1为循环变量初始化
  • 表达式2为循环条件
  • 表达式3为循环变量迭代

for循环执行过程如下:

(1)先求解表达式1

(2)求解表达式2,若其值为真(非0),则执行for语句中指定的内嵌语句,后执行第(3)步。若其值为假(为0),则结束循环,转第(5)步

(3)求解表达式3

(4)转回第(2)步继续执行

(5)循环结束,执行for语句下面的语句

【for循环实现计算1-100所有整数之和】

#include <stdio.h>

//for循环
int main() {
    //计算i到100的和
    int i, total = 0;
    for (int i = 1; i <= 100; i++) {
        total += i;
    }
    printf("total=%d\n", total);
    return 0;
}

【运行结果】

【小结】

  • for循环语句中必须且只能有2个分号,用于分割表达式1,表达式2和表达式3
  • 表达式1,表达式2和表达式3也可以省略,但省略写法用的较少
  • 表达式1中可以用逗号初始化多个变量,如:i=1,total=0
  • 表达式3的作用是使表达式2趋近于假
  • for循环的可读性要比while循环好,能使用for循环时不要强制改为while循环
 4.3.3 continue语句

continue语句作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行是否执行下一次循环的判断

continue;

 【for循环中的continue语句】

#include <stdio.h>

//for循环中的continue语句
int main() {
    //计算i到100之间奇数的和
    int i, total = 0;
    for (int i = 1; i <= 100; i++) {
        if (i % 2 == 0) {//如果为偶数则不加入total
            continue;//continue下面的代码均不会得到执行
        }
        total += i;
    }
    printf("total=%d\n", total);
    return 0;
}

【运行结果】

【while循环中的continue语句】

#include <stdio.h>

//while循环中的continue语句
int main() {
    //计算1到100之间所有奇数的和
    int i = 1, total = 0;
    while (i <= 100) { //若是在这里的while后加上分号会导致死循环
        if (i % 2 == 0) {//如果为偶数则不加入total
            i++;//这里也需要i++,不然没有让循环结束的条件
            continue;//continue下面的代码均不会得到执行
        }
        total = total + i;//把i加到total上
        i++; //若是循环体内没有让while判断表达式趋近于假的操作会导致死循环
    }
    printf("total=%d\n", total);
    return 0;
}

【运行结果】

4.3.4 break语句
  • break语句的作用是结束整个循环过程,不再判断执行循环的条件是否成立。
  • break语句也可以用在while循环和do while循环当中,起到结束对应循环的作用。

【break语句例子】

从1开始累加,累加的和大于2000时结束for循环,同时打印此时total和i的值

#include <stdio.h>

int main() {
    int i, total;
    for (i = 1,total = 0; i <= 100; i++) {
        if (total > 2000) {
            break;//当和大于2000时,循环结束
        }
        total += i;
    }
    printf("total=%d,i=%d\n", total, i);//total=2016 i=64
    //i = 64并没有加入到total当中,所以2016其实是1加到63的总值
    return 0;
}

【运行结果】

【小结】

  • i=64并没有加入到total中,所以2016其实是1累加到63的总和
  • 一旦执行break语句,下一句要执行的就是 printf("total=%d,i=%d\n", total, i);

4.4课时作业

  • 课时4作业1

描述:输入一个整型数,判断是否为对称数,如果是,输出yes,否则输出no。不用考虑这个整型数过大,int类型存不下,不用考虑负值

输入:一个整型数

输出:输出yes或no

【课时4作业1代码】

#include <stdio.h>

//逆置数的判断
//比如:12321 逆置后:12321 与原来数相等
int main() {
    int a;
    int b = 0, backup;
    backup = a;//备份后的变量
    scanf("%d", &a);//读取一个整型数
    backup = a;//备份a
    while (a) {
        //a%10取出最后面一位数
        //b*10将原来的数*10
        b = b * 10 + a % 10;//b把原来的值乘10,然后再加上余数
        a = a / 10;
    }
    //printf("b=%d\n",b);
    //判断b和backup是否相等,相等即为对称数
    if (b == backup) {
        printf("yes\n");
    } else {
        printf("no\n");
    }
    return 0;
}

【运行效果】

  

  • 课时4作业2

描述:利用while 或 for循环计算n!的值

n!=1*2*3…*n

输入:一个正整数n (1<=n<=10)

输出:n!的值

【课时4作业2代码】

#include <stdio.h>

//求n的阶乘
int main() {
    int n;
    scanf("%d", &n);//输入一个正整数n
    int i, result = 1;//i 为游标
    for (int i = 1; i <= n; i++) {
        result *= i;
    }
    printf("%d\n", result);
    return 0;
}

【运行结果】

  • 课时4作业3

描述:某人想将手中一张面值100元的人民币换成10元、5元、2元和1元面值的票子。要求正好40张,且每种票子至少一张,问:有几种换法

输入:无输入

输出:一个数,表示共有多少种换法

【课时4作业3代码】

#include <stdio.h>

int main() {
    //a面值为10元,b面值为5元,c面值为2元,d面值为1元
    int a, b, c, d, count = 0;//count为换法
    for (int a = 1; a <= 10; a++) {
        for (int b = 1; b <= 20; b++) {
            for (int c = 1; c <= 40; c++) { //c<=37
                for (int d = 1; d <= 40; d++) { //d<=37
                    if (a + b + c + d == 40 && 10 * a + 5 * b + 2 * c + d == 100) {
                        count++;//换法加1
                    }
                }
            }
        }
    }
    printf("count=%d\n", count);
    return 0;
}

【运行效果】

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

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

相关文章

使用OpenCV将图片切割成小图 及图片拼接(附python代码)

文章目录 1. 图片切割2. 图片拼接3. AcknowledgmentReference 要分割的图片如下&#xff1a; 1. 图片切割 思路也比较简单&#xff0c;代码注释比较详细&#xff0c;看代码就行。 from cv2 import cv2 import numpy as np import ospic_path .jpg # 分割的图片的位置 pic_ta…

【嵌入式——QT】QWT应用

【嵌入式——QT】QWT应用 概述步骤一步骤二步骤三代码声明代码实现图示 概述 QWT&#xff0c;全称Qt Widgets for Technical Applications&#xff0c;是一个基于Qt开发的第三方库。它主要为具有技术背景的程序提供GUI组件和一组实用类&#xff0c;用于生成各种统计图。QWT的主…

【CPP】C++11多线程

thread类 在C11之前&#xff0c;涉及到多线程问题&#xff0c;都是和平台相关的&#xff0c;比如windows和linux下各有自己的接口&#xff0c;这使得代码的可移植性比较差。C11中最重要的特性就是对线程进行支持了&#xff0c;使得C在并行编程时不需要依赖第三方库&#xff0c…

深度学习500问——Chapter04:经典网络解读(1)

文章目录 4.1 LeNet-5 4.1.1 模型介绍 4.1.2 模型结构 4.1.3 模型特性 4.2 AlexNet 4.2.1 模型介绍 4.2.2 模型结构 4.2.3 模型特性 4.3 ZFNet 4.3.1 模型介绍 4.3.2 模型结构 4.3.3 模型特性 4.4 Network in Network 4.4.1 模型介绍 4.4.2 模型结构 4.4.3 模型特性 4.1 LeNet-…

60、服务攻防——中间件安全CVE复现weblogicJenkinsGlassFish

文章目录 weblogicJbossJenkinsGlassFish weblogic 默认端口&#xff1a;7001&#xff0c;历史漏洞&#xff1a;CVE_2017_3506、CVE_2018_2893、CVE_2018_3245、CVE_2020_14882、CVE_2021_2394 Jboss 历史漏洞&#xff1a;CVE-2017-12149、CVE-2017-7504 Jenkins GlassFis…

安卓 Android Activity 生命周期

文章目录 Intro生命周期方法 & 执行顺序结论code Intro 本文提供一个测试类通过打印的方式展示在多个Activity之间互相跳转的时候&#xff0c;各个Activity的生命周期相关方法的执行顺序。 生命周期方法 & 执行顺序结论 下图出自 郭霖 《第一行代码&#xff08;第二…

深度学习pytorch——激活函数损失函数(持续更新)

论生物神经元与神经网络中的神经元联系——为什么使用激活函数&#xff1f; 我们将生物体中的神经元与神经网络中的神经元共同分析。从下图可以看出神经网络中的神经元与生物体中的神经元有很多相似之处&#xff0c;由于只有刺激达到一定的程度人体才可以感受到刺激&#xff0c…

微服务高级篇(三):分布式缓存+Redis集群

文章目录 一、单点Redis的问题及解决方案二、Redis持久化2.1 单机安装Redis2.2 RDB持久化2.3 AOF持久化2.4 RDB和AOF对比 三、Redis主从3.1 搭建Redis主从架构3.1.1 集群结构3.1.2 准备实例和配置3.1.3 启动3.1.4 开启主从关系3.1.5 测试 3.2 数据同步3.2.1 全量同步【建立连接…

Windows11企业版安装WSL2和Ubuntu发布版(避坑)

背景 win10企业版升级win11企业版后&#xff0c;安装WSL2&#xff0c;最后安装WSL的Ubuntu发布版&#xff0c;尝试网上各种方法&#xff0c;还是出现文章第三节所写的问题&#xff0c;差点被这问题搞放弃了&#xff0c;全网少有针对这个问题的答案&#xff0c;有也不顶用&…

python-pandas基础学习

可参考&#xff1a; pandas&#xff1a;http://pandas.pydata.org/docs/user_guide/10min.html 一、基础知识 DataFrame 方法&#xff0c;可以将一组数据&#xff08;ndarray、series, map, list, dict 等类型&#xff09;转化为表格型数据 import pandas as pd data {name: …

Python代码规范化

什么是代码规范化&#xff1f; 代码的规范化书写是指按照一定的规范和标准编写代码&#xff0c;使得代码结构清晰、易于阅读和理解。 代码规范化的意义 Python代码规范化的意义在于提高代码可读性、可维护性和可重用性&#xff0c;从而使代码更易于理解、调试和协作&#xff0c…

解锁AI生成模型的无限可能:Stability-AI 带你领略前沿科技

厌倦了千篇一律的图片和视频&#xff1f;想要创作独一无二的艺术作品&#xff1f;Stability-AI 横空出世&#xff0c;为你打开通往 AI 生成模型的大门&#xff0c;带你领略前沿科技的无限可能&#xff01; 神奇的功能&#xff0c;尽在掌握 Stability-AI 拥有众多令人惊叹的功能…

AI基础知识(4)--贝叶斯分类器

1.什么是贝叶斯判定准则&#xff08;Bayes decision rule&#xff09;&#xff1f;什么是贝叶斯最优分类器&#xff08;Bayes optimal classifier&#xff09;&#xff1f; 贝叶斯判定准则&#xff1a;为最小化总体风险&#xff0c;只需在每个样本上选择那个能使条件风险最小的…

js - 练习题

文章目录 FED3&#xff1a;查找两个节点的最近的一个共同父节点FED4&#xff1a;根据包名&#xff0c;在指定空间中创建对象FED5: 数组去重FED6&#xff1a;用 JavaScript 实现斐波那契数列函数,返回第n个斐波那契数。 f(1) 1, f(2) 1 等FED12&#xff1a;字符串统计FED17&am…

联想ThinkSystem服务器主要硬件Windows Server驱动下载说明

故障现象&#xff1a; 不知道如何获取ThinkSystem系列服务器在Windows Server操作系统下的驱动程序&#xff1f; 解决方案&#xff1a; 本文提供ThinkSystem系列服务器安装Windows Server操作系统所需要的驱动程序下载说明。 以下多路机型的Windows Server 2012 R2及2016驱动…

Linux基础命令[20]-useradd

文章目录 1. useradd 命令说明2. useradd 命令语法3. useradd 命令示例3.1 不加参数3.2 -d&#xff08;指定家目录&#xff09;3.3 -g&#xff08;指定用户组&#xff09;3.4 -G&#xff08;指定附属组&#xff09;3.5 -p&#xff08;加密密码&#xff09;3.6 -e&#xff08;指…

【JDBC编程】Java连接MySQL的五个步骤

目录 JDBC编程 1.JDBC的使用 2.数据库连接Connection 3.Statement对象 4.ResultSet对象 JDBC编程 JDBC编程运用了MySQL提供的 Java 的驱动包 mysql-connector-java &#xff0c;需要基于 Java 操作 MySQL 即需要该驱动包。同样的&#xff0c; 要基于 Java 操作 Oracle 数据库…

XML Data – Semi-Structured Data XML 数据 - 半结构化数据

Outline • Structured, Semistructured, and Unstructured Data • XML Hierarchical (Tree) Data Model • Extracting XML Documents from Relational Databases • XML Documents, DTD, and XML Schema • XML Languages 结构化、半结构化和非结构化数据 - XML 层次&#x…

Java最后一块石头的重量 II(力扣Leetcod1049)

最后一块石头的重量 II 力扣原题 有一堆石头&#xff0c;用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合&#xff0c;从中选出任意两块石头&#xff0c;然后将它们一起粉碎。假设石头的重量分别为 x 和 y&#xff0c;且 x < y。那么粉碎的可能结…

Java学习笔记NO.24

T1.完成理工超市系统的商品类及其子类的定义&#xff0c;实现“浏览商品”及“查看商品详情”功能 &#xff08;1&#xff09;商品类 public class Goods {public String name;public double price;public int count;public String desc;public Goods(String name, double p…