复习第四课 C语言-分支语句和循环

news2024/11/24 22:33:50

目录

【1】字符输入输出

【2】C语言下的垃圾字符回收

【3】分支语句

【4】循环

练习:


【1】字符输入输出

按字符的输入输出

int getchar(void);
功能:从终端输入一个字符
参数:无
返回值:输入字符的ASCII值

int putchar(int c);
功能:向终端输出一个字符
参数:c:要输出的字符
返回值:输出字符的ASCII值

练习:实现大写字母转换成小写字母

#include <stdio.h>
int main() {
    char ch;
    printf("请输入一个大写字母:");
    ch = getchar();
    if (ch >= 'A' && ch <= 'Z') {
        ch = ch + ('a' - 'A');
        printf("转换后的小写字母为:%c\n", ch);
    }
    else {
        printf("输入不是大写字母!\n");
    }

    return 0;
}

【2】C语言下的垃圾字符回收

1.通过空格回收
scanf(" %c", &ch);
scanf("%*s%c", &ch);	//回收一个或多个空格、tab、\n

2.%*c
scanf("%*c%c", &ch);	//只能回收任意一个字符

3.getchar
ch = getchar();

【3】分支语句

》1.if-else

基本结构:
if(表达式)
{
    语句块1;
}
else
{
    语句块2;
}

分层结构:
if(表达式1)
{
    语句块1;
}
else if(表达式2)
{
    语句块2;
}
else
{
    语句块3;
}

嵌套结构:
if(表达式1)
{
    if(表达式2)
    {
        语句块1;//表达式1成立,表达式2成立
    }
    else
    {
        语句块2;//表达式1成立,表达式2不成立
    }
}
else
{
    语句块3;//表达式1不成立
}

总结:

1) if后面可以没有else,else前面必须有if

2) if和else后面的{}可以省略,但是省略后只会匹配后面的第一条语句

练习:实现大小写转换(用getchar、putchar实现)

输入大写字母输出小写字母,

输入小写字母输出大写字母,

输入的不是字母,提示输入错误。

#include <stdio.h>

int main() {
  char ch;

  printf("请输入一个字母:");
  ch = getchar();
  if (ch >= 'A' && ch <= 'Z') {
    ch = ch + 32; // 转换为小写字母
    putchar(ch);
  } else if (ch >= 'a' && ch <= 'z') {
    ch = ch - 32; // 转换为大写字母
    putchar(ch);
  } else {
    printf("输入错误,请输入一个字母。\n");
  }

  return 0;
}

练习:从终端输入一个学生的成绩,判断学生成绩,打印成绩级别

【90 - 100】 A

【80 - 89】 B

【70 - 79】 C

【60 - 69】 D

< 60 sorry you lost

#include <stdio.h>

int main() {
    int score;
    printf("请输入学生的成绩:");
    scanf("%d", &score);
    if (score >= 90 && score <= 100) {
        printf("成绩级别:A\n");
    } else if (score >= 80 && score < 90) {
        printf("成绩级别:B\n");
    } else if (score >= 70 && score < 80) {
        printf("成绩级别:C\n");
    } else if (score >= 60 && score < 70) {
        printf("成绩级别:D\n");
    } else {
        printf("成绩级别:Sorry you lost\n");
    }
    return 0;
}

》2.switch_case

基本结构:
switch(变量或表达式)
{
	case 常量1:语句块1;break;
	case 常量2:语句块2;break;
	case 常量3:语句块3;break;
	....
	default:语句块n+1;
}

执行顺序:

判断表达式或变量的值,和case后面的常量进行匹配,如果能匹配上就执行后面的语句块,遇到break就结束switch,当case都不匹配,直接执行default后面的语句块

注意:

1. 表达式不能是浮点型或字符串

2. case 后面的break可以省略,省略时代码会顺序执行,直到遇到break退出

练习:从终端输入一个学生的成绩,判断学生成绩,打印成绩级别

【90 - 100】 A

【80 - 89】 B

【70 - 79】 C

【60 - 69】 D

< 60 sorry you lost

#include <stdio.h>

int main() {
    int score;

    printf("请输入学生的成绩:");
    scanf("%d", &score);

    switch (score / 10) {
        case 10:
        case 9:
            printf("成绩级别:A\n");
            break;
        case 8:
            printf("成绩级别:B\n");
            break;
        case 7:
            printf("成绩级别:C\n");
            break;
        case 6:
            printf("成绩级别:D\n");
            break;
        default:
            printf("成绩级别:Sorry you lost\n");
            break;
    }

    return 0;
}

练习:从终端输入一个日期

scanf ("%d %d %d "; &year,&mon,&day),判断这是这一年的第几天

提示:判断闰年还是平年,闰年且闰年二月份以上比平年多一天。

#include <stdio.h>
int main(int argc, char const *argv[])
{
    int year, mon, day, sum=0;
    scanf("%d %d %d", &year, &mon, &day);
    switch (mon)
    {
        case 12:sum+=30;
        case 11:sum+=31;
        case 10:sum+=30;
        case 9:sum+=31;
        case 8:sum+=31;
        case 7:sum+=30;
        case 6:sum+=31;
        case 5:sum+=30;
        case 4:sum+=31;
        case 3:sum+=28;
        case 2:sum+=31;
        case 1:sum+=day;break;
    default:
        printf("err\n");
        return -1;
    }
    //闰年并且大于2月sum++
    if ((year % 100 != 0 && year % 4 == 0 || year % 400 == 0) && mon > 2)
        sum++;
    printf("sum=%d\n", sum);
    return 0;
}

练习:

1.从终端输入3个整数;从大到小排序

#include <stdio.h>

void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

void sortDescending(int *a, int *b, int *c) {
    if (*a < *b) {
        swap(a, b);
    }
    if (*a < *c) {
        swap(a, c);
    }
    if (*b < *c) {
        swap(b, c);
    }
}

int main() {
    int a, b, c;

    printf("请输入三个整数:");
    scanf("%d %d %d", &a, &b, &c);
    sortDescending(&a, &b, &c);
    printf("从大到小排序的结果为:%d %d %d\n", a, b, c);
    return 0;
}

2.写程序实现功能:读入两个整数(data1和data2)和一个运算符(op),计算表达式data1 op data2 的值.其中op可以为+、-、*、/四个符号中的任一种(用switch语句实现)

#include <stdio.h>

int main() {
    int data1, data2;
    char op;
    float result;

    printf("请输入两个整数以及运算符(格式:data1 op data2):");
    scanf("%d %c %d", &data1, &op, &data2);

    switch (op) {
        case '+':
            result = data1 + data2;
            printf("结果:%d %c %d = %.2f\n", data1, op, data2, result);
            break;
        case '-':
            result = data1 - data2;
            printf("结果:%d %c %d = %.2f\n", data1, op, data2, result);
            break;
        case '*':
            result = data1 * data2;
            printf("结果:%d %c %d = %.2f\n", data1, op, data2, result);
            break;
        case '/':
            if (data2 != 0) {
                result = (float) data1 / data2;
                printf("结果:%d %c %d = %.2f\n", data1, op, data2, result);
            } else {
                printf("除数不能为0!\n");
            }
            break;
        default:
            printf("无效的运算符!\n");
            break;
    }
    return 0;
}

【4】循环

》1.for循环

1.基本结构
for(表达式1;表达式2;表达式3)
{
	语句块;
}
表达式1:赋初值
表达式2:循环终止条件
表达式3:增值或减值语句

执行顺序:

首先执行表达式1给循环变量赋初值,判断表达式2是否成立,

如果成立就进入循环执行循环语句,

执行完语句块再执行表达式3进行增值或减值,

再次判断表达式2是否成立如果成立继续进入循环,

直到表达式2不成立,循环结束

2.嵌套结构
for(表达式1;表达式2;表达式3)
{
	for(表达式4;表达式5;表达式6)
{
		语句块;
}
}

练习:打印所有的水仙花数

水仙花数:一个三位数,百位立方+十位立方+个位立方 = 原数

#include<stdio.h>
int main(int argc, char const *argv[])
{
    int s,g,b,i;
    for ( i = 100; i <= 999; i++)
    {
        b = i/100;
        s = i/10%10;
        g = i%10;
        if (b*b*b + s*s*s + g*g*g == i )//水仙花数
            printf("%d\n",i);  
    }
    return 0;
}

》2.while循环

1.基本结构
while(终止条件)
{
	语句块;
	增值减值语句;
}

执行顺序:先定义循环变量并赋初值,判断条件是否成立,

如果成立就进入循环执行语句块,然后执行增值减值语句,

继续判断终止条件是否成立,直到不成立循环结束。

2.do_while
do
{
	语句块;
	增值减值;
}while(终止条件);

执行顺序:先执行后判断

练习:

1.从终端上输入一个字符并在终端上输出这个字符,当输入字符为‘q’时,程序结束。

#include <stdio.h>
int main() {
    char ch;
    do {
        printf("请输入一个字符(输入 'q' 结束): ");
        scanf(" %c", &ch);
        printf("输入的字符是: %c\n", ch);
    } while (ch != 'q');
    printf("程序结束。\n");
    return 0;
}

2.打印以下图案:要求行数从终端输入

#include <stdio.h>

int main() {
    int rows, i, j;

    printf("请输入行数:");
    scanf("%d", &rows);

    // 打印上半部分图案
    for (i = 1; i <= rows; i++) {
        for (j = 1; j <= i; j++) {
            printf("*");
        }
        printf("\n");
    }
    // 打印下半部分图案
    for (i = 1; i <=rows; i++) {
        for (j = 1; j < i; j++) {
            printf(" ");
        }
        for (j = i; j <= rows; j++) {
            printf("*");
        }
        printf("\n");
    }

    return 0;
}

3.打印9*9乘法表

#include <stdio.h>

int main() {
    int i, j;

    // 外层循环控制行数
    for (i = 1; i <= 9; i++) {
        // 内层循环控制列数
        for (j = 1; j <= i; j++) {
            printf("%d x %d = %2d\t", j, i, i * j);
        }
        printf("\n");
    }
    return 0;
}

4. 循环输入一个5位数,判断它是不是回文数。当输入0时循环结束。即12321是回文数,个位与万位相同,十位与千位相同。

#include <stdio.h>

int main() {
    int num;

    while (1) {
        printf("请输入一个5位数(输入0结束):");
        scanf("%d", &num);

        if (num == 0) {
            break;
        }
        int originalNum = num;
        int reversedNum = 0;
        int *ptr = #   
        // 反转数字
        while (*ptr != 0) {
            reversedNum = reversedNum * 10 + *ptr % 10;
            *ptr /= 10;
        }
        // 判断是否是回文数
        if (originalNum == reversedNum) {
            printf("%d 是一个回文数\n", originalNum);
        } else {
            printf("%d 不是一个回文数\n", originalNum);
        }
    }
    return 0;
}

 

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

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

相关文章

中信银行西安分行举办金融助力外贸企业“走出去“高端论坛

7月14日&#xff0c;中信银行西安分行联合中国出口信用保险公司陕西分公司、西安市工商联举办"智汇西安、信融全球"——金融助力外贸企业"走出去"高端论坛。该论坛紧跟“加快建设贸易强国”的战略指引&#xff0c;以创新金融服务助力外贸企业融入高水平对外…

ConfigMap/Secret:配置、定制我的应用

首先你要知道&#xff0c;应用程序有很多类别的配置信息&#xff0c;但从数据安全的角度来看可以分成两类&#xff1a; 一类是明文配置&#xff0c;也就是不保密&#xff0c;可以任意查询修改&#xff0c;比如服务端口、运行参数、文件路径等等。另一类则是机密配置&#xff0…

VTK 种子小部件 SeedWidget

Part1 vtkSeedWidget介绍 vtkSeedWidget 用于在场景中放置多个种子点。种子点可用于诸如连通性&#xff0c; 区域生长分割算法之&#xff0c;分割等。 效果图&#xff1a; vtkSeedWidget默认交互操作&#xff1a; 1. 鼠标点击widget上空白位置放置种子点 2. 鼠标移入种子点&am…

【测试开发】测试用例的设计方法

目录 一. 测试用例的基本要素 二. 测试用例的设计方法 1. 测试用例设计的万能公式 水杯测试用例 2. 基于需求的设计方法 邮箱注册测试用例 3. 等价类方法 有效等价类和无效等价类 等价类思想设计测试用例步骤 4. 边界值方法 边界值思想设计测试用例步骤 5. 判定表方法…

51单片机的智能交通控制系统【含仿真+程序+演示视频带原理讲解】- 未完稿

51单片机的智能交通控制系统【含仿真程序演示视频带原理讲解】 1、系统概述2、核心功能3、仿真运行及功能演示4、程序代码 1、系统概述 该系统由AT89C51单片机、LED灯组、数码管组成。通过Protues对十字路口红绿灯控制逻辑进行了仿真。 每个路口包含了左转、右转、直行三条车道…

SpringCloud Alibaba——Nacos1.x作为注册中心的原理

目录 一、原理二、原理步骤图解 一、原理 使用Http发送注册查询服务提供方列表定时拉取 (每10秒)检测到服务提供者异常&#xff0c;基于UDP协议推送更新定时心跳 (5秒)&#xff0c;检测服务状态定时心跳任务检查集群数据同步任务使用Distro 二、原理步骤图解 Nacos1.x作为注…

python的浅拷贝和深拷贝

1、结论 python中的拷贝有以下三种 变量的赋值操作 只是形成两个变量,实际上还是指向同一个对象 浅拷贝 Python拷贝一般都是浅拷贝&#xff0c;拷贝时&#xff0c;对象包含的子对象内容不拷贝&#xff0c;因此&#xff0c;源对象与拷贝对象会引用同一个子对象 深拷贝 使用co…

【C++】开源:Web文件服务器

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍开源项目——Web文件服务器。 无专精则不能成&#xff0c;无涉猎则不能通。。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#x…

代码随想录day17

110. 平衡二叉树 首先是明白什么是平衡二叉树&#xff1a; 一棵高度平衡二叉树定义为&#xff1a; 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 然后&#xff0c;区别二叉树的高度和深度&#xff1a; 二叉树的高度&#xff1a;从叶子节点到根节点 二叉树的…

【C语言】多组输入

C系列文章目录 目录 C系列文章目录 一、什么是多组输入&#xff1f; 二、如何使用多组输入 2.1&#xff0c;试题举例讲解 2.2&#xff0c;错误解法 2.3&#xff0c;我们实现多组输入的思路 2.4&#xff0c;第一种正确的解法 2.5&#xff0c;第二种正确的解法 2.6&…

Exchange 服务器监控工具

Microsoft Exchange Server 是个消息与协作系统&#xff0c;提供了通常所需要的全部邮件服务功能&#xff0c;可以被用来构架应用于企业、学校的邮件系统或免费邮件系统。包括从电子邮件、会议安排、团体日程管理、任务管理、文档管理、实时会议和工作流等丰富的协作应用&#…

基于PyQt5的图形化界面开发——打砖块

目录 0. 前言1. 砖块类定义2. 挡板类定义3. 碰撞检测4. 小球和游戏初始化5. 完整代码6. 运行效果演示7. Pyinstaller 编译exe程序PyQt5 0. 前言 本文使用 PyQt5实现一个打砖块小游戏 操作系统&#xff1a;Windows10 专业版 开发环境&#xff1a;Pycahrm Comunity 2022.3 Pyt…

自学成为一名顶级黑客(网络安全)

一、自学网络安全学习的误区和陷阱 1.不要试图先成为一名程序员&#xff08;以编程为基础的学习&#xff09;再开始学习 行为&#xff1a;从编程开始掌握&#xff0c;前端后端、通信协议、什么都学。 缺点&#xff1a;花费时间太长、实际向安全过渡后可用到的关键知识并不多。…

加密与解密 解密篇 逆向分析技术 (一) 栈/调用约定

目录 逆向是什么 32位软件逆向技术 1.启动函数 2.函数 函数的识别 函数的参数 利用栈进行传递 下面是通过esp来寻址 通过寄存器来传递参数 例子 例子 函数的返回值 例子 例子 逆向是什么 将可执行程序反汇编 通过分析反汇编代码来理解其代码功能&#xff08;各个…

慢速减压控制技术在预防同步辐射光源和原位透射电镜氮化硅窗口膜真空中破裂的应用

摘要&#xff1a;氮化硅薄膜窗口广泛应用于同步辐射光源中的扫描透射软X射线显微镜和原位透射电镜&#xff0c;但氮化硅薄膜只有几百纳米的厚度&#xff0c;很容易因真空抽取初期的快速压差变化造成破裂。为此&#xff0c;本文提出了线性缓变压力控制解决方案&#xff0c;即控制…

【小数据处理】从日志中获取json数据的处理

写在头上 本次分析的数据来源是SpringBoot服务输出的logback日志。具体配置参考&#xff1a; 处理工具:Notepad v7.6。处理的日志内容不易过大&#xff0c;Notepad能打开电脑不卡最好&#xff08;100M以内吧&#xff09;。如果实在过大&#xff0c;先从日志源头进行截取&…

【javaEE面试题(五)在JMM(Java Memory Model (Java 内存模型))下谈volatile的作用】【保证内存可见 和 指令有序】

volatile的作用 JMM下volatile作用 volatile 能保证内存可见性 volatile 修饰的变量, 能够保证 “内存可见性”. 代码在写入 volatile 修饰的变量的时候 改变线程工作内存中volatile变量副本的值将改变后的副本的值从工作内存刷新到主内存 代码在读取 volatile 修饰的变量的时…

微信小程序上线与发布图文步骤操作

1.上传代码 打开微信小程序&#xff0c;在微信开发者工具的工具栏中单击“上传”按钮&#xff0c;页面中弹出提示框&#xff0c;根据提示填写相应的信息&#xff0c;然后单击“上传”按钮&#xff0c;即可上传代码。 2.查看上传代码之后的版本 登录微信小程序管理后台&…

【docker】部署svn服务器,docker安装部署svn服务器

话不多说直接上步骤&#xff01; 1.下载镜像&#xff0c;创建容器 # 下载镜像 docker pull elleflorio/svn-server # 创建svn仓库目录&#xff0c;进入svn仓库目录 mkdir -p /var/svn # 创建svn服务容器&#xff0c;把容器中的svn仓库映射到本机&#xff0c;并映射3690端口 d…

基于深度学习的高精度安全帽及背心检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度安全帽及背心检测识别系统可用于日常生活中或野外来检测与定位安全帽及背心目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的安全帽及背心目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系…