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

目录

【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、\n2.%*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.hqwc.cn/news/22291.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用python get post数据 http https

0、目的 目的比较简单&#xff0c;测试&#xff0c;使用python来提交数据是非常简洁的&#xff0c;修改代码也容易&#xff0c;除了做人工智能&#xff0c;本身也是一个非常好的测试端工具 1、简单的post 一个简单的示例程序&#xff0c;将 headers 内容置为’application/j…

2023华为产品测评官-开发者之声 | 华为云CodeArts征文活动,多重好礼邀您发声!

"2023华为产品测评官&#xff0d;开发者之声"活动激发了众多开发者和技术爱好者的热情&#xff0c;他们纷纷递交了精心编写的产品测评报告。活动社群充满活力&#xff0c;参与者们热衷于交流讨论&#xff0c;互相帮助解决问题&#xff0c;一起探索云技术的无限可能。…

【机器人模拟-02】 模拟移动机器人设置里程计

一、说明 在本教程中,我将向您展示如何设置移动机器人的测程。本教程是“机器人模拟”指南中的第二个教程。测量位移是仿真中的重要内容,设置测程的官方教程在此页面上,但我将逐步引导您完成整个过程。 您可以在此处获取此项目的完整代码。让我们开始吧! 二、ROS 2 中的里程…

最火爆的大模型框架LangChain七大核心及案例剖析上(三)

最火爆的大模型框架LangChain七大核心及案例剖析上 10.6 GPT内容创建者案例详细剖析 我们回到“LangChain GPT内容创建者”案例,一行一行的解析代码,为了更好的看这个代码,先看一下它具体执行的整个日志过程,然后再看一下代码的部分。 首先,在控制台执行脚本,启动web页面…

微信小程序(二)

目录 1、input标签 一、表单绑定 1、数据绑定 2、输入获取 二、网络请求 1、介绍 2、注意 3、使用 4、基于Promise封装 三、自定义组件 1、创建 2、父向子组件通信 3、子向父组件通信 4、生命周期 四、vant weapp组件库 1、配置 2、使用 进入本章前的拓展&#…

用ChatGPT解析Wireshark抓取的数据包样例

用Wireshark抓取的数据包&#xff0c;常用于网络故障排查、分析和应用程序通信协议开发。其抓取的分组数据结果为底层数据&#xff0c;看起来比较困难&#xff0c;现在通过chatGPT大模型&#xff0c;可以将原始抓包信息数据提交给AI进行解析&#xff0c;本文即是进行尝试的样例…

河钢数字项目管理部负责人杨笑瑾受邀为第十二届中国PMO大会演讲嘉宾

河钢数字技术股份有限公司项目管理部负责人杨笑瑾女士受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾&#xff0c;演讲议题&#xff1a;项目群管理赋能组织变革。大会将于8月12-13日在北京举办&#xff0c;敬请关注&#xff01; 议题简要&#xff1a; 谈到组织变革自然…

DynaSLAM代码详解(5) — Tracking.cc跟踪线程

目录 5.1 DynaSLAM中Tracking线程简介 5 .2 RGBD模式下跟踪流程 5.3 DynaSLAM的低成本跟踪 (1) Tracking::LightTrack() 低成本跟踪函数 (2) Tracking::LightTrackWithMotionModel() 低成本的恒速模型跟踪流程 5.4 DynaSLAM的正常跟踪 文章着重将与ORB-SLAM2不同的地方&a…

SpringBoot2+Vue2实战(十八)修改密码

一、修改密码&#xff1a; Header.vue <el-dropdown-item style"font-size: 14px; padding: 5px 0"><router-link to"/password" style"text-decoration: none">修改密码</router-link></el-dropdown-item> router/i…

Kafka 深度剖析

1、应用场景 1.1 kafka场景 Kafka最初是由LinkedIn公司采用Scala语言开发&#xff0c;基于ZooKeeper&#xff0c;现在已经捐献给了Apache基金会。目前Kafka已经定位为一个分布式流式处理平台&#xff0c;它以 高吞吐、可持久化、可水平扩展、支持流处理等多种特性而被广泛应用…

牛客HJ99 - 自守数【暴力 + 换位取模】

原题传送门 原题描述 首先我们来看一下原题是怎么描述的&#xff0c;题面很简单&#xff0c;输入n&#xff0c;然后让我们去统计从1 ~ n之间的自守数有几个&#xff0c;那什么是【自守数】呢&#xff0c;上面也说到了&#xff0c;即一个数在平方之后该数的尾数等于该数自身的自…

ES6新特性基础总结

目录 简介 node.js安装 babel转码器 let命令 const命令 解构对象 字符串扩展 新增方法&#xff1a; 数组扩展 扩展运算符 伪数组 对象扩展 属性的简介表示法 属性名表达式 对象的扩展运算符 函数扩展 箭头函数 使用注意 Set数据结构 基本用法 size属性 特有方法 P…