分支和循环语句(2)(C语言)

news2024/11/23 0:18:39

目录

do...while()循环

do语句的语法

 do语句的特点

do while循环中的break和continue

练习

goto语句

do...while()循环

do语句的语法

do
        循环语句;
while(表达式);

 do语句的特点

循环至少执行一次,使用的场景有限,所以不是经常使用。

#include <stdio.h>
int main()
{
	int i = 10;
	do
	{
		printf("%d\n", i);
	} while (i < 10);
	return 0;
}

do while循环中的break和continue

int main()
{
	int i = 0;
	do
	{
		if (i == 5)
			break;
		printf("%d ",i);
		i++;
	} while (i <= 10);
	return 0;
}
int main()
{
	int i = 0;
	do
	{
		if (i == 5)
			continue;
		printf("%d ",i);
		i++;
	} while (i <= 10);
	return 0;
}

do while循环中break和continue和在while循环中一模一样。

break都是用于终止循环,continue是跳过本次循环后边的代码,直接去判断部分。

练习

1. 计算 n的阶乘。

#include<stdio.h>
int main()
{
	int n = 0;
	scanf("%d",&n);
	int i = 0;
	int ret = 1;
	//得到1-n的数字,累乘
	for (i = 1; i <= n; i++)
	{
		ret *= i;
	}
	printf("%d\n",ret);
	return 0;
}

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

效率太低,循环次数多

#include<stdio.h>
int main()
{
	int n = 0;
	int i = 0;
	int ret = 1;
	int sum = 0;
	//让n变起来,从1-10
	for (n = 1; n <= 10; n++)
	{
		//得到1-n的数字,累乘
		for (i = 1; i <= n; i++)
		{
			ret *= i;
		}
		sum += ret;
		ret = 1;
	}
	printf("%d\n",sum);
	return 0;
}

对上述代码改进,提升效率 ↓

#include<stdio.h>
int main()
{
	int n = 0;
	int i = 0;
	int ret = 1;
	int sum = 0;
	//让n变起来,从1-10
	for (n = 1; n <= 10; n++)
	{
		ret *= n;//直接用上次得到的结果乘新的n
		sum += ret;
	}
	printf("%d\n", sum);
	return 0;
}

3. 在一个有序数组中查找具体的某个数字n。

此题用到了二分查找折半查找

这种方法效率很高,但条件苛刻,需要数组有序。

思路:

#include <stdio.h>
int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int k = 0;
	scanf("%d",&k);
	int sz = sizeof(arr) / sizeof(arr[0]);
	int left = 0;
	int right = sz - 1;
	int flag = 0;
	while (left <= right)
	{
		int mid = (left + right) / 2;
		if (arr[mid] < k)
			left = mid + 1;//右下标不变
		else if (arr[mid] > k)
			right = mid - 1;//左下标不变
		else
		{
			printf("找到了,下标是%d\n", mid);
			flag = 1;
			break;
		}
			
	}
	if (flag == 0)
	{
		printf("找不到了\n");
	}
	return 0;
}

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

#include<stdio.h>
#include <windows.h>
int main()
{
	char arr1[] = "**********************";
	char arr2[] = "welcome to bit!!!!!!!!";
	int sz = sizeof(arr2) / sizeof(arr2[0]);
	int left = 0;
	int right = sz - 2;//减去/0,求出的是下标
	// int right = strlen(arr2)-1;//包含string.h
	while (left <= right)
	{
		arr1[left] = arr2[left];
		arr1[right] = arr2[right];
		left++;
		right--;
		printf("%s\n",arr1);
		Sleep(500);//休眠0.5s,需要包含<windows.h>
		system("cls");//清空屏幕
	}
	printf("%s",arr2);
	return 0;
}

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

补充:比较字符串时,不能直接用 == 比较,strcmp函数是比较字符串的大小的,头文件是string.h

          如果>,返回 >0

          如果==,返回0

          如果< ,返回<0

#include <stdio.h>
#include <string.h>
int main()
{
	int i = 0;
	for (i = 0; i < 3; i++)
	{
		char password[20] = { 0 };
		scanf("%s", password);
		if (strcmp(password, "123456") == 0)
		{
			printf("登陆成功\n");
			break;
		}
		else
		{
			printf("密码错误\n");
		}
		if (i == 3)
		{
			printf("三次密码错误,退出程序\n");
		}
	}
	return 0;
}

goto语句

C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。
从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。
但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程

goto语言真正适合的场景如下:

for(...)
        for(...)
        {
                for(...)
                {
                        if(disaster)
                        goto error;
                }
        }

error:
        if(disaster)
        // 处理错误情况

下面是使用goto语句的一个例子,然后使用循环的实现方式替换goto语句:

#include <stdio.h>
int main()
{
	char input[10] = { 0 };
	system("shutdown -s -t 60");
again:
	printf("电脑将在1分钟内关机,如果输入我是猪,就取消关机\n");
	scanf("%s",input);
	if (strcmp(input, "我是猪") == 0)
	{
		system("shutdown -a");
		printf("你很配合,已取消关机\n");
	}
	else
	{
		goto again;
	}
	return 0;
}

而如果不使用goto语句,则可以使用循环:

#include <stdio.h>
int main()
{
	char input[10] = { 0 };
	system("shutdown -s -t 60");
	while (1)
	{
		printf("电脑将在1分钟内关机,如果输入我是猪,就取消关机\n");
		scanf("%s", input);
		if (strcmp(input, "我是猪") == 0)
		{
			system("shutdown -a");
			printf("你很配合,已取消关机\n");
			break;
		}
	}
		

	return 0;
}

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

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

相关文章

C#导入数据使用Task异步处理耗时任务

C#多线程中&#xff0c;我们可以使用async和await来异步处理耗时任务。 现在我们打开一个Excel表格&#xff0c;将Excel表格的每一行数据进行处理&#xff0c;并存储到数据库中 新建Windows应用程序DataImportDemo&#xff0c;.net framework 4.6.1 将默认的Form1重命名为Fo…

js防止F12扒数据

添加 js 代码防止F12扒数据 ((function() {var callbacks [],timeLimit 50,open false;setInterval(loop, 1);return {addListener: function(fn) {callbacks.push(fn);},cancleListenr: function(fn) {callbacks callbacks.filter(function(v) {return v ! fn;});}}funct…

面试八股文Mysql:(1)事务实现的原理

1. 什么是事务 事务就是一组数据库操作&#xff0c;这些操作是一个atomic&#xff08;原子性的操作&#xff09; &#xff0c;不可分割&#xff0c;要么都执行&#xff0c;要么回滚&#xff08;rollback&#xff09;都不执行。这样就避免了某个操作成功某个操作失败&#xff0…

藏语翻译器:藏语翻译小助手

这是一款翻译功能齐全的翻译软件&#xff0c;主打藏语翻译功能&#xff0c;同时具备文字翻译、图片翻译、音频翻译、视频翻译、文档翻译等热门功能&#xff0c;支持将翻译结果导出为可编辑的文本文档&#xff0c;方便后续编辑整理。支持朗读原文和译文&#xff0c;帮助我们学习…

LeetCode209. 长度最小的子数组

题目&#xff1a;LeetCode209. 长度最小的子数组 描述&#xff1a; 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl1, …, numsr-1, numsr] &#xff0c;并返回其长度。如果不存在符合条件的子…

Grafana Prometheus 通过JMX监控kafka

第三方kafka exporter方案 目前网上关于使用Prometheus 监控kafka的大部分资料都是使用一个第三方的 kafka exporter&#xff0c;他的原理大概就是启动一个kafka客户端&#xff0c;获取kafka服务器的信息&#xff0c;然后提供一些metric接口供Prometheus使用&#xff0c;随意它…

【React学习】—函数式组件(四)

【React学习】—函数式组件&#xff08;四&#xff09; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><ti…

17.电话号码的字母组合(回溯)

目录 一、题目 二、代码 一、题目 17. 电话号码的字母组合 - 力扣&#xff08;LeetCode&#xff09; 二、代码 class Solution {const char*data[10]{"","","abc","def","ghi","jkl","mno","pq…

解决nvm安装后,node生效但npm无效

问题描述 nvm安装后&#xff0c;node生效但npm无效 清除缓存 C:\Users\cc\AppData\Roaming cc是我的用户名改成你自己的就行删除 npm和npm-cache

pdf怎么删除不要的页面?这几种删除方法了解一下

pdf怎么删除不要的页面&#xff1f;在处理pdf文档时&#xff0c;我们经常会遇到需要删除某些页面的情况。一些多余或无关的页面可能会对文档的整体结构造成混乱&#xff0c;甚至会影响文档的可读性。此外&#xff0c;删除多余页面还可以减小文件大小&#xff0c;方便存储和传输…

B2B2C多用户商城系统--多店铺商城系统源码搭建

要搭建一个B2B2C多用户商城系统&#xff0c;需要以下几个步骤&#xff0c;包括系统设计、数据库设计、前端设计和后端设计。 1. 系统设计 在系统设计阶段&#xff0c;需要确定系统的基本架构和功能模块。以下是系统设计的一些要点&#xff1a; 采用敏捷开发流程&#xff0c;…

微服务03-RabbitMQ

1、简介 MQ,中文是消息中间件(队列)(MessageQueue),字面来看就是存放消息的队列。也就是事件驱动架构中的Broker。 简单来说,消息中间件就是指保存数据的一个容器(服务器),可以用于两个系统之间的数据传递。 几种常见MQ的对比: RabbitMQActiveMQRocketMQKafka公司…

1. CUDA编程手册中文版---CUDA简介

1.CUDA简介 1.1 我们为什么要使用GPU 更多精彩内容&#xff0c;请扫描下方二维码或者访问https://developer.nvidia.com/zh-cn/developer-program 来加入NVIDIA开发者计划 GPU&#xff08;Graphics Processing Unit&#xff09;在相同的价格和功率范围内&#xff0c;比CPU提供…

XShell7连接CentOS7并利用lrzsz上传文件

xshell连接centos7 第一步&#xff1a;开放Linux防火墙的22号端口号 firewall-cmd --zonepublic --add-port22/tcp --permanentfirewall-cmd --reload 通过&#xff1a;firewall-cmd --zonepublic --list-ports 验证22端口是否开放 第二步&#xff1a;查看Linux主机端口号 命…

Java高级应用

一、异常处理 异常处理就是针对程序可能出现的错误情况&#xff0c;进行抛出异常。要么终止程序&#xff0c;要么进行避免错误情况。就需要用到的语法是try&#xff08;避免&#xff09;。throws&#xff08;对可能出现的情况进行抛出&#xff09;。 在实际开发中&#xff0c…

Spring自动装配原理

如上图&#xff0c;Spring的自动装配&#xff0c;要从AutoConfigurationImportSelector类说起&#xff0c;一直在此类selectImports方法的内部底层&#xff0c;有一个loadSpringFactories()方法&#xff0c;此方法会查找MET-INF目录下的spring.factories文件。先将此文件中的值…

C++核心编程——函数高级、类和对象

3 函数提高 3.1 函数默认参数 在C中&#xff0c;函数的形参列表中的形参是可以有默认值的。 语法&#xff1a;返回值类型 函数名 &#xff08;参数默认值&#xff09;{} 注意事项&#xff1a; 1、如果函数的参数列表中某个参数已经有了默认参数&#xff0c;那么从这个参…

mysql索引的数据结构(Innodb)

首选要注意,这里的数据结构是存储在硬盘上的数据结构,不是内存中的数据结构,要重点考虑io次数. 一.不适合的数据结构: 1.Hash:不适合进行范围查询和模糊匹配查询.(有些数据库索引会使用Hash,但是只能精准匹配) 2.红黑树:可以范围查询和模糊匹配,但是和硬盘io次数比较多. 二…

QGIS开发五:使用UI文件

前面我们说了在创建项目时创建的是一个空项目&#xff0c;即不使用 Qt 提供的综合开发套件 Qt Creator&#xff0c;也不使用 Qt Visual Studio Tools 这类工具。 但是后面发现&#xff0c;如果我想要有更加满意的界面布局&#xff0c;还是要自己写一个UI文件&#xff0c;如果不…