C 语言复习总结记录二

C 语言复习总结记录二

一 控制语句

1、语句的分类
  1. 表达式语句
  2. 函数调用语句
  3. 复合语句
  4. 控制语句
  5. 空语句

控制语句 控制程序的执行流程,实现程序的各种结构方式

C 语言支持三种结构 :顺序结构、选择结构、循环结构,由特定的语句定义符组成C语言有九种控制语句,可分成以下三类:

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

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

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

2、分支语句

0 表示假,非 0 即为真

int score = 0;
scanf("%d", &score);
if (score >= 90)
{printf("恭喜你,及格了");
}
else
{printf("继续加油吧");
}//else 是和它离的最近的 if 匹配的
int a = 0, b = 2;
if (a == 1)if (b == 2)printf("b == 2 !");
elseprintf("a != 1 !");

判断一个数是否为奇数;输出1-100之间的奇数

int main() {//奇数 : 不能被二整除的数int input = 0;scanf("%d", &input);if (input % 2) //这里用/也行, 但整除其实就是看余数, 用%更简洁printf("The input is an odd number");elseprintf("The input is not an odd number");for(int i = 1; i <= 100; ++i) {if (i % 2) printf("%d\n", i);}return 0;
}

switch 语句

常用于多分支的情况

例如,输入 [1, 7] 的整数,输出对应的星期几;其语句常用格式如下

switch(整型表达式)
{case 整型常量表达式:语句;break;...default:语句;break;
}

break 语句的实际效果是把语句列表划分为不同的分支部分

#include <stdio.h>
int main()
{int n = 1;int m = 2;switch (n){case 1:m++;  //n = 1, m++ 后 m = 3, 没有 break 继续执行case 2:n++;  //n = 2, m = 3case 3:switch (n){//switch允许嵌套使用case 1:n++;case 2:	//n = 2 跳转到该位置m++;n++;break; //n = 3, m = 4 跳出该 switch 作用域} //没有 break 继续向下执行case 4:m++;break; //n = 3, m = 5 跳出 switch 作用域default:break;}printf("m = %d, n = %d\n", m, n);return 0;
}

在使用 switch 语句时要在分支语句的最后加上 break; 如果不加的话后面的语句会被继续执行

无条件跳转到 .L8,如果没有 break,后面的段就会继续执行

image-20241119230032804

对于 switch - case 语句的理解:

它具有 跳转 的作用,当和某一个数字或者字符匹配上的时候,就会跳转到对应的入口地址处

break 也具有 跳转 的作用,当匹配对应的时候,执行跳转到对应的入口地址,后面就会顺着这个地址一直执行下去

3 循环语句

while 循环

编写程序,要求只打印输入的数字字符,跳过其它字符,当数字字符为 6 时,终止程序

了解一些关于 getchar 和 putchar 的基础知识,EOF 在 C 语言中是一个宏定义,通常等于 -1。它用于指示输入的结束,无论是从文件读取还是从标准输入读取数据时,当没有更多数据可读时,就会遇到 EOF。(在标准输入中,通过输入特定的字符或组合来表示 EOF,Windows Ctrl+Z 回车产生EOF,Unix/Linux 则是 Ctrl+D)

scanf 和 printf 可处理各类型的数据,比如整型、字符、浮点型等,但 getchar 和putchar 只针对字符

getchar:函数原型 int getchar(void),从标准输入 stdin 获取一个字符(一个无符号字符),返回值是用户输入的字符的 ASCII 码

putchar:原型 int putchar(int c) 整数参数 c,代表需要输出的字符。主要功能是将字符 c 写入标准输出设备(通常指的是控制台窗口),并返回所写入的字符,发生错误,则返回 EOF

//该段程序即打印字符, 例如 
// 输入 111'\n', 则控制台打印 111'\n'
int ch = 0;
while ((ch = getchar()) != EOF) {putchar(ch);
}

break 跳出终止当前语句,在此处即为跳出 while 循环或终止 while 循环

continue 用于终止本次循环,直接跳转到 while 语句的判断部分,进行下一次循环的判断

char ch = '\0';
while ((ch = getchar()) != EOF) {if (ch == '5')break;if (ch < '0' || ch > '9' ) //注意因为没有 ch == '\n' 时打印是重叠的continue;elseputchar(ch);
}

for 循环

for 循环的一般格式

for(初始化循环变量; 判断循环条件; 调整循环变量)循环语句;

打印 1 - 10 的数字

//while 循环
int i = 1; //初始化循环变量
while (i <= 10) //判断循环条件
{printf("%d\n", i); //循环语句++i; //调整循环变量
}//for 循环
for (int i = 1; i <= 10; ++i)
{printf("%d\n", i);
}

当存在固定的循环结束条件和循环变量时,明显 for 循环的在格式上比 while 循环更简洁

建议:一般不在 for 循环体内修改循环变量,防止循环条件失去控制;一般建议循环条件的取值范围采用 前闭后开 的写法(代码便于理解)

一些 for循环变种

#include <stdio.h>
int main()
{//1、死循环for(;;){printf("死循环");}//2、双层 forint i = 0;int j = 0;for(i = 0; i < 2; ++i){for (j = 0; j < 2; ++j)printf("Time \n");}	//总打印 4for(; i < 2; ++i){for (; j < 2; ++j)printf("Time \n");}	//总打印 2//3、多变量控制循环条件int x= 0, y = 0;for(; x < 2 && y < 5; ++x,++y)printf("Time \n");//小练习, 循环执行了几次 ?int i = 0, k = 0;for(i =0,k=0; k = 0; i++,k++)k++; // 0 次, 因为 k = 0 表达式的结果返回的是 k赋值后的结果为 0, 因此循环不会执行return 0;
}

do while 循环

特点:循环至少会执行一次

#include <stdio.h>
int main(){int i = 1, j = 1;do {++i;if (i == 7) break;if (i == 4) continue;++j;} while (i < 10);printf("%d\n", j); //5return 0;
}
4 goto 语句

C 语言中提供了可以跳转的 goto 语句和标记跳转的符号,最常见的用法是终止程序深度嵌套结构的处理过程。例如:一次跳出两层或多层循环

break 只能从最内层循环退出到上一层的循环

for(...)for(...){for(...){if(disaster)goto error;}}…
error:if(disaster)// 处理错误情况

关机小程序

#include<stdio.h>int main()
{char input[10];system("shutdown -s -t 60");again:printf("电脑将在1分钟内关机如果输入: 我是超人, 就取消关机 ! \n 请输入:>");scanf("%s", &input);if(strcmp(input, "我是超人") == 0)system("shutdown -a");elsegoto again;return 0;
}//使用 while 循环替代
int main()
{char input[10];system("shutdown -s -t 60");while(1){printf("电脑将在1分钟内关机如果输入: 我是超人, 就取消关机 ! \n 请输入:>");scanf("%s", &input);if(strcmp(input, "我是超人") == 0){system("shutdown -a");break;}}return 0;
}
练习

1、计算 n 的阶乘

int n = 0, res = 1;
scanf("%d", &n);
for (int i = 1; i <= n; ++i)
{res *= i;
}
printf("%d\n", res);

2、计算 1! + 2! + 3! + …… + 10!

int res = 1, sum = 0;
for (int i = 1; i <= 10; ++i)
{res *= i;sum += res;
}
printf("%d\n", sum); //4037913

3、在一个有序数组中查找具体的某个数字 n(二分查找)

int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int n = 0, left = 0, right = (sizeof(arr) / sizeof(int)) - 1;
scanf("%d", &n);
while (left <= right)
{int index = (left + right) / 2; //数组中间元素下标if (n > arr[index]) //比中间元素还大,说明在右侧{left = index + 1;}else if (n < arr[index]){right = index - 1;}else {printf("该数字在数组中对应的下标为 %d\n", index);break;}
}

4、编写代码,演示多个字符从两端移动,向中间汇聚

char arr[] = "Hello World!";
int left = 0, right = strlen(arr) - 1;
while (left <= right) {printf("%s\n", arr);arr[left] = ' ';arr[right] = ' ';++left;--right;
}

5、编写代码实现,模拟用户登录情景,并且只能登录三次(只允许输入三次密码,如果密码正确则提示登录成功,如果三次均输入错误,则退出程序

int i = 1;
char password[] = "123456";
char input[10];for (i = 1; i <= 3; ++i)
{printf("please input:");scanf("%s", input);if (strcmp(input, password) == 0)break;
}if (i == 4)printf("exit \n");
elseprintf("login \n");

6、猜数字游戏

原型:void srand(unsigned seed);

rand 函数用来发生随机数, 当然是 伪随机数

原型:int rand(void)

seed 的作用:srand 函数的作用是根据参数 seed,设置一个随机起始点,而 rand 函数根据这个起始点,发生随机数序列。默认的随机种子为 1。如果随机种子一样,rand 函数所发生的随机序列也一样。

因此,为使每次程序运行都能发生不同的随机序列,每次都应发生一个不同的种子参数

说明 :因为 rand 的内部实现是用线性同余法做的,它不是真的随机数,只不过是因为其周期特别长,所以一定范围内可看成是随机的,rand() 会返回一随机数值,范围在0 至 RAND_MAX 间。

在调用此函数发生随机数前,必须先利用 srand() 设好随机数种子,如果未设随机数种子,rand() 在调用时会主动设随机数种子为 1。rand() 发生的是假随机数字,每次执行时是雷同的。

若要不同, 以不同的值来初始化它. 初始化的函数就是 srand()

rand() % (n + 1); 生成 [0 , n] 的整数(n < RAND_MAX),为什么 n + 1,前面是取模运算 %

rand() % (n - m + 1) + m; 生成 [m , n] 范围内的随机数

//简单的测试, 当不设置种子时默认为 1, 每次程序的执行结果都是一样的
for (int i = 0; i <= 10; ++i)
{int res = rand();printf("%d\n", res);
}
void menu() {printf("*********************************\n");printf("************ 1.play *************\n");printf("************ 0.exit *************\n");printf("*********************************\n");
}void game() {int input = -1;int res = rand() % (9 + 1);while (1) {printf("请输入一个 0 - 9 的数字 \n");scanf("%d", &input);if (input > res){printf("猜大了\n");}else if (input < res){printf("猜小了\n");}else{printf("猜中了\n");break;}}
}int main() {int input = -1;srand((unsigned)time(NULL)); //NULL 参数使用当前的系统时间do {menu();printf("请输入以上数字选择功能: \n");scanf("%d", &input);switch (input){case 1:game();break;case 0:break;default:printf("选择错误, 请重新输入! \n");break;}} while (input);return 0;
}
ut > res){printf("猜大了\n");}else if (input < res){printf("猜小了\n");}else{printf("猜中了\n");break;}}
}int main() {int input = -1;srand((unsigned)time(NULL)); //NULL 参数使用当前的系统时间do {menu();printf("请输入以上数字选择功能: \n");scanf("%d", &input);switch (input){case 1:game();break;case 0:break;default:printf("选择错误, 请重新输入! \n");break;}} while (input);return 0;
}

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

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

相关文章

网络无人值守批量装机-cobbler

网络无人值守批量装机-cobbler 一、cobbler简介 ​ 上一节中的pxe+kickstart已经可以解决网络批量装机的问题了,但是环境配置过于复杂,而且仅针对某一个版本的操作系统进批量安装则无法满足目前复杂环境的部署需求。 ​ 本小节所讲的cobbler则是基于pxe+kickstart技术的二…

基于深度学习CNN算法的花卉分类识别系统01--带数据集-pyqt5UI界面-全套源码

文章目录 基于深度学习算法的花卉分类识别系统一、项目摘要二、项目运行效果三、项目文件介绍四、项目环境配置1、项目环境库2、环境配置视频教程 五、项目系统架构六、项目构建流程1、数据集2、算法网络Mobilenet3、网络模型训练4、训练好的模型预测5、UI界面设计-pyqt56、项目…

HarmonyOs鸿蒙开发实战(20)=>一文学会基础使用组件导航Navigation

敲黑板&#xff0c;以下是重点技巧。文章末尾有实战项目效果截图及代码截图可参考 1.概要 Navigation是路由导航的根视图容器Navigation组件主要包含​导航页&#xff08;NavBar&#xff09;和子页&#xff08;NavDestination&#xff09;&#xff0c;导航页不存在页面栈中&am…

tcpdump抓包 wireShark

TCPdump抓包工具介绍 TCPdump&#xff0c;全称dump the traffic on anetwork&#xff0c;是一个运行在linux平台可以根据使用者需求对网络上传输的数据包进行捕获的抓包工具。 tcpdump可以支持的功能: 1、在Linux平台将网络中传输的数据包全部捕获过来进行分析 2、支持网络层…

已阻止加载“http://localhost:8086/xxx.js”的模块,它使用了不允许的 MIME 类型 (“text/plain”)。

记录今天解决的一个小bug 在终端启动8080端口号监听后&#xff0c;打开网址http://localhost:8080&#xff0c;发现不能正确加载页面&#xff0c;打开检查-控制台&#xff0c;出现如下警告&#xff1a;已阻止加载“http://localhost:8086/xxx.js”的模块&#xff0c;它使用了不…

使用 helm 部署 gitlab

一、下载 Gitlab chart 进入 artifacthub 官网 选择你想要的版本&#xff08;我选择的chart版本是 8.4.0 , gitlab 版本是17.4.0 &#xff09; 进入到控制台&#xff0c;添加helm仓库 如果你想不改任何配置&#xff0c;你可以执行安装命令&#xff0c;等待安装即可helm instal…

若依-一个请求中返回多个表的信息

背景 主表是点位表关联子表 需要知道对应 合作商的信息关联子表 需要直到对应 区域的信息关联子表 需要直到对应 设备数量 实现的方案 关联实体相关的标签

C++注释

目录 1. 什么是注释 2. 语法 2.1 单行注释 2.2 多行注释 2.3 示例 3. 注释源代码的方法 3.1 使用多行注释 3.2 使用预处理器指令 #if #endif 3.3 使用条件判断语句 if (false) 4. 不能用宏定义&#xff0c;组成注释 5 // \ 会将源代码中的下一行也被当作注释中的一部…

使用itextpdf进行pdf模版填充中文文本时部分字不显示问题

在网上找了很多种办法 都解决不了; 最后发现是文本域字体设置出了问题; 在这不展示其他的代码 只展示重要代码; 1 引入扩展包 <dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</v…

web——sqliabs靶场——第十三关——报错注入+布尔盲注

发现是单引号加括号闭合的 尝试联合注入 发现不太行&#xff0c;那尝试报错注入。 测试报错注入 unameadmin) and updatexml(1,0x7e,3) -- &passwdadmin&submitSubmit 爆数据库 unameadmin) and updatexml(1,concat(0x7e,database(),0x7e),3) -- &passwdadmin&a…

QT如何共享文件+拷贝文件

QString sharedFolderPathImg "\\\\" IP "/profileImage/"; // 更换为你的共享文件夹路径QDir dirImg(sharedFolderPathImg);dirImg.setFilter(QDir::NoDotAndDotDot | QDir::AllEntries);QVector<QString> curFileEntryArrayImg dirImg.entryList…

跟《经济学人》学英文:2024年11月23日这期 Why British MPs should vote for assisted dying

Why British MPs should vote for assisted dying A long-awaited liberal reform is in jeopardy in jeopardy&#xff1a;在危险中 jeopardy&#xff1a;美 [ˈdʒepərdi] 危险&#xff1b;危机&#xff1b;风险&#xff1b; 原文&#xff1a; THIS NEWSPAPER believes …

【es6进阶】vue3中的数据劫持的最新实现方案的proxy的详解

vuejs中实现数据的劫持,v2中使用的是Object.defineProperty()来实现的&#xff0c;在大版本v3中彻底重写了这部分&#xff0c;使用了proxy这个数据代理的方式&#xff0c;来修复了v2中对数组和对象的劫持的遗留问题。 proxy是什么 Proxy 用于修改某些操作的默认行为&#xff0…

D73【 python 接口自动化学习】- python 基础之正则表达式

day73 正则表达式-元字符匹配 学习日期&#xff1a;20241119 学习目标&#xff1a;正则表达式--133 正则表达式-元字符匹配 学习笔记&#xff1a; 元字符匹配 数量匹配 实践操作 总结 字符串的r标记表示&#xff0c;字符串内转移字符无效&#xff0c;作为普通字符使用正则…

Python浪漫之画明亮的月亮

目录 1、效果展示 2、完整版代码 1、效果展示 2、完整版代码 import turtledef draw_moon():# 设置画布turtle.bgcolor("black") # 背景颜色为黑色turtle.speed(10) # 设置绘制速度# 绘制月亮的外圈turtle.penup()turtle.goto(0, -100) # 移动到起始…

微信小程序包之加农炮游戏

微信小程序 - 气球射击游戏 项目简介 这是一个简单有趣的微信小程序射击游戏。玩家通过控制屏幕底部的加农炮&#xff0c;射击从上方降落的蓝色气球。游戏考验玩家的反应能力和瞄准技巧。 游戏规则 点击屏幕任意位置发射炮弹大炮会自动对准点击位置击中气球获得10分如果气球触…

autogen+ollama+litellm实现本地部署多代理智能体

autogen 是一个专门为大语言模型 (LLMs) 驱动的自治代理 (autonomous agents) 设计的 Python 库,由 Microsoft 开发和维护。它通过高度模块化和可扩展的架构,支持用户快速构建和运行多代理系统,这些代理可以在没有明确人类干预的情况下协作完成复杂任务。AutoGen 支持以最少…

分公司如何纳税

分公司不进行纳税由总公司汇总纳税“子公司具有法人资格&#xff0c;依法独立承担民事责任;分公司不具有法人资格&#xff0c;其民事责任由公司承担。”企业设立分支机构&#xff0c;使其不具有法人资格&#xff0c;且不实行独立核算&#xff0c;则可由总公司汇总缴纳企业所得税…

HashMap源码详解

提醒你一下&#xff0c;用电脑或者平板看&#xff0c;手机屏幕小&#xff0c;图片会看不清楚&#xff0c;源码不方便看 基础前置 看该篇文章之前先看看这篇基础文章 HashMap底层原理-CSDN博客 先来看HashMap里面的一些参数。 1.DEFAULT_INITIAL_CAPACITY 默认的数组初…

09 —— Webpack搭建开发环境

搭建开发环境 —— 使用webpack-dev-server 启动Web服务&#xff0c;自动检测代码变化&#xff0c;有变化后会自动重新打包&#xff0c;热更新到网页&#xff08;代码变化后&#xff0c;直接替换变化的代码&#xff0c;自动更新网页&#xff0c;不用手动刷新网页&#xff09; …