C【分支语句和循环语句】

news2024/10/6 23:40:54

1.if语句

//多分支    
if(表达式1)
    语句1;
else if(表达式2)
    语句2;
else
    语句3;

如果表达式的结果为真,则语句执行。 在C语言中如何表示真假? 0表示假,非0表示真。

#include <stdio.h>
int main()
{
    if(表达式)
   {
        语句列表1;
   }
    else
   {
        语句列表2;
   }
    return 0;
}

1.1 悬空else

//适当的使用{}可以使代码的逻辑更加清楚。
//代码风格很重要
#include <stdio.h>
int main()
{
    int a = 0;
    int b = 2;
    if(a == 1)
   {
        if(b == 2)
       {
            printf("hehe\n");
       }
   }
    else
   {
         printf("haha\n");
   }      
   

else的匹配:else是和它离的最近的if匹配的。

2.switch语句

#include <stdio.h>
int main()
{
    int day = 0;
    switch(day)
   {
        case 1:
            printf("星期一\n");
            break;
        case 2:
            printf("星期二\n");
            break;
        case 3:
            printf("星期三\n");
            break;    
        case 4:
            printf("星期四\n");
            break;    
        case 5:
            printf("星期五\n");
            break;
        case 6:
            printf("星期六\n");
            break;
        case 7:
            printf("星期天\n");    
            break;
   }
    return 0;
}

优化

#include <stdio.h>
//switch代码演示
int main()
{
    int day = 0;
    switch(day)
   {
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
            printf("weekday\n");
            break;
        case 6:
        case 7:
            printf("weekend\n");
            break;
   }
    return 0;
}

2.1 default子句

在每个 switch 语句中都放一条default子句是个好习惯,甚至可以在后边再加一个 break 。

#include <stdio.h>
int main()
{
    int n = 1;
    int m = 2;
    switch (n)
   {
    case 1:
            m++;
    case 2:
            n++;
    case 3:
            switch (n)
           {//switch允许嵌套使用
             case 1:
                    n++;
             case 2:
                    m++;
                    n++;
                    break;
           }
    case 4:
            m++;
            break;
    default:
            break;
   }
    printf("m = %d, n = %d\n", m, n);
    return 0;
}

3.while循环

3.1 while中的break

	/*
		break:跳出本次循环
		while中的break是用于永久终止循环的
	*/
	int c = 0;
	while (c <= 10)
	{
		if (c == 5)//等于5的时候跳出
			break;
		printf("%d", c);//01234
		c++;
	}
	printf("\n========");

3.2 while中的continue

	/*
		continue:跳出本次循环,后面的代码不在执行
		而是直接跳转到while语句的判断部分,进行下一次循环入口判断

	*/
	int d = 0;
	while (d <= 10)
	{
		if (d == 5)//等于5的时候跳出
			continue;
		printf("%d\n", d);//01234死循环
		d++;
	}
	printf("========");

	int e = 0;
	while (e <= 10)
	{
		e++;
		if (e == 5)//等于5的时候跳出
			continue;
		printf("%d", e);//1234
	}
	printf("========");

	return 0;

3.3 其他

//代码什么意思?
//代码1
#include <stdio.h>
int main()
{
 int ch = 0;
 while ((ch = getchar()) != EOF)
       putchar(ch);
    return 0;
}
这里的代码适当的修改是可以用来清理缓冲区的.
//代码2
#include <stdio.h>
int main()
{
    char ch = '\0';
 while ((ch = getchar()) != EOF)
 {
     if (ch < ‘0’ || ch > ‘9’)
        continue;
     putchar(ch);
 }
 return 0;
}
//这个代码的作用是:只打印数字字符,跳过其他字符的、
	//int ch 是因为 getchar 函数获取的是 ascll  不是字符!!!
	/*int ch = getchar();
	putchar(ch);
	printf("%c\n", ch);*/
	//int ch = 0;
	//EOF-- end of file -> 文件结束标志
	//while ((ch = getchar()) != EOF) {//只要不输出EOF就不会跳出
	//	putchar(ch);
	//}
	int ret = 0;
	int ch = 0;
	char password[20] = { 0 };
	printf("输入密码:");
	scanf("%s", password);//此时缓冲区;password\n
	//此时缓冲区还剩余一个'\n'
	//读取一下'\n'
	//getchar();
	while ((ch = getchar()) != '\n') {

	}
	printf("请确认(y/n)");
	//此时ret输出:10-->获取了输入流中的回车键
	ret = getchar();//y/n
	if (ret == 'y') {
		printf("输入成功");
	}
	else {
		printf("输入失败");
	}

4.for循环

4.1 for循环中的break和continue

	int b = 0;
	while (b <= 10) {
		if (b == 5) {
			continue;
		}
		printf("b:%d", b);//01234
		b++;
	}

	int c = 0;
	for (c = 1;c < 10;c++) {
		if (c == 5) {
			break;
		}
		printf("c:%d", c);//12346789
	}
	return 0;

4.2 for语句的循环控制变量

int i = 0;
//前闭后开的写法
for(i=0; i<10; i++)
{}
//两边都是闭区间
for(i=0; i<=9; i++)
{}

4.3 for循环变种

#include <stdio.h>
int main()
{
    //代码1
    for (;;)
    {
        printf("hehe\n");//死循环
    }
	return 0;
}

int main() {
	int a = 0;
	int b = 0;
	for (;a < 10;a++) {
		for (;b < 10;b++) {
			//这里就打印10个,因为当b跳出的时候b=10,再一次要进来则还是10,故进不来
			printf("hehe");
		}
	}
	printf("==============");


	//代码2
	int i = 0;
	int j = 0;
	//这里打印多少个hehe?
	for (i = 0; i < 10; i++)
	{
		for (j = 0; j < 10; j++)
		{
			printf("hehe\n");
		}
		printf(".....");
	}
}

int main() {
	//代码4-使用多余一个变量控制循环
	int x, y;
	for (x = 0, y = 0; x < 2 && y < 5; ++x, y++)
	{
		printf("hehe\n");//输出2个
	}
	return 0;

}

4.5 注意点

//请问循环要循环多少次?
#include <stdio.h>
int main()
{
 int i = 0;
 int k = 0;
 for(i =0,k=0; k=0; i++,k++)
        k++;
 return 0;
}

5.do..while循环

5.1 do while循环中的break和continue

#include <stdio.h>
int main()
{
    int i = 1;

    do
    {
        if (5 == i)
            continue;
        printf("%d\n", i);//1234
    } while (i < 10);

    return 0;
}



#include <stdio.h>
int main()
{
	int i = 10;

	do
	{
		if (5 == i)
			break;
		printf("%d\n", i);//10
	} while (i < 10);

	return 0;
}

6.练习

1. 计算 n的阶乘

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

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

int main() {
	int n = 0;
	int result = 1;
	int sum = 0;
	for (n = 1;n <= 10;n++) {
			result = result * n;
			sum += result;
	}
	printf("sum=%d\n", sum);
	return 0;
}

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

int main() {
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int k = 7;
	int i = 0;
	//数组长度
	int sz = sizeof(arr) / sizeof(arr[0]);
	for (i = 0;i < sz;i++) {
		if (k == arr[i]) {
			printf("找到了,下标为:%d", i);
			break;
		}
	}
	return 0;
}


int main() {
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int k = 7;
	int i = 0;
	//数组长度
	int sz = sizeof(arr) / sizeof(arr[0]);
	for (i = 0;i < sz;i++) {
		if (k == arr[i]) {
			printf("找到了,下标为:%d", i);
			break;
		}
	}
	return 0;
}

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

#include<string.h>
#include<windows.h>
#include<stblib.h>
int main()
{
	//
	//welcome to bit!!!!!!
	//####################
	//w##################!
	//we################!!
	//wel##############!!!
	//...
	//welcome to bit!!!!!!
	//
	//char arr[] = "abc";
	//[a b c \0]
	// 0 1 2 3
	//4-2
	char arr1[] = "welcome to bit!!!!!!";
	char arr2[] = "####################";
	int left = 0;
	//这里arr[0]-2:是因为,下面的实际长度下标值为:2=4-2
	// [a b c \0]
	//  0 1 2 3
	//int right = sizeof(arr1)/sizeof(arr1[0])-2;//err
	//使用strlen记得导入[#include<string.h>]
	int right = strlen(arr1)-1;

	while(left<=right)
	{
		arr2[left] = arr1[left];
		arr2[right] = arr1[right];
		printf("%s\n", arr2);
		//休息一秒
		//#include<windows.h>
		Sleep(1000);
		//#include<stblib.h>
		system("cls");//执行系统命令的一个函数-cls - 清空屏幕
		left++;
		right--;
	}
	printf("%s\n", arr2);
	return 0;
}

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

#include<string.h>
int main()
{
	int i = 0;
	char password[20] = { 0 };
	for (i = 0; i < 3; i++)
	{
		printf("请输入密码:>");
		scanf("%s", password);
		if (strcmp(password, "123456") == 0)//== 不能用来比较两个字符串是否相等,应该使用一个库函数-strcmp
		{
			printf("登录成功\n");
			break;
		}
		else
		{
			printf("密码错误\n");
		}
	}
	if (i == 3)
		printf("三次密码均错误,退出程序\n");
	return 0;
}

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

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

相关文章

美团多场景建模的探索与实践

总第574篇 2023年 第026篇 本文介绍了美团到家/站外投放团队在多场景建模技术方向上的探索与实践。基于外部投放的业务背景&#xff0c;本文提出了一种自适应的场景知识迁移和场景聚合技术&#xff0c;解决了在投放中面临外部海量流量带来的场景数量丰富、场景间差异大的问题&a…

JAVA - File类、字节流、字符流、特殊操作流

1.File类的构造方法 File类的创建文件功能 File类的判断和获取功能 File类的删除功能 2.IO流 - 字节流、字符流 字节流 处理字节数据&#xff1a;字节流以字节为单位处理数据&#xff0c;适用于处理二进制文件&#xff08;如图像、音频、视频文件&#xff09;或以字节为基本单…

Unity工具——LightTransition(光照过渡)

需求描述 在游戏中&#xff0c;开发者为了让玩家更直接地看到待拾取的物品从而为其添加一种闪烁效果&#xff0c;或者模拟现实中闪烁的灯光效果&#xff0c;我能够想到的一种方案则是通过控制光照强度来实现&#xff0c;那么本篇文章我们就尝试通过这个方案来实现一下&#xff…

【面试题精讲】你了解String.intern方法吗

有的时候博客内容会有变动&#xff0c;首发博客是最新的&#xff0c;其他博客地址可能会未同步,认准https://blog.zysicyj.top 首发博客地址 系列文章地址 String.intern 方法是 Java 中的一个方法&#xff0c;「它用于将字符串对象添加到字符串常量池中&#xff0c;并返回常量…

浅谈C++|STL之算法函数篇

一.遍历常用算法 1.1for_each 在 C 中&#xff0c;for_each 是一个算法函数&#xff0c;位于 <algorithm> 头文件中。它接受一个范围&#xff08;容器或迭代器对&#xff09;以及一个函数对象&#xff08;函数指针、函数、lambda 表达式等&#xff09;&#xff0c;用于…

C#,《小白学程序》第二十四课:大数的阶乘(BigInteger Factorial)算法与源程序

1 文本格式 /// <summary> /// 《小白学程序》第二十四课&#xff1a;大数&#xff08;BigInteger&#xff09;的阶乘 /// 用于大数的阶乘算法&#xff08;原始算法&#xff09; /// </summary> /// <param name"a"></param> /// <retur…

【算法挨揍日记】day05——209. 长度最小的子数组、3. 无重复字符的最长子串

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

2023-9-14 最长上升子序列

题目链接&#xff1a;最长上升子序列 #include <iostream> #include <algorithm>using namespace std;const int N 1010;int n; int a[N]; int f[N];int main() {cin >> n;for(int i 1; i < n; i ) cin >> a[i];for(int i 1; i < n; i ){f[i]…

【物联网】简要介绍最小二乘法—C语言实现

最小二乘法是一种常用的数学方法&#xff0c;用于拟合数据和寻找最佳拟合曲线。它的目标是找到一个函数&#xff0c;使其在数据点上的误差平方和最小化。 文章目录 基本原理最小二乘法的求解应用举例使用C语言实现最小二乘法总结 基本原理 假设我们有一组数据点 ( x 1 , y 1 …

使用Jconsole监控JMX

使用Jconsole监控 Jconsole启动 直接本地启动jdk工具 本地连接 本地启动java应用直接点击就可以连接 本地远程连接 idea启动服务连接 配置运行配置 配置远程参数 -Djava.rmi.server.hostname127.0.0.1 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxrem…

【无公网IP内网穿透】 搭建Emby媒体库服务器并远程访问「家庭私人影院」

目录 1.前言 2. Emby网站搭建 2.1. Emby下载和安装 2.2 Emby网页测试 3. 本地网页发布 3.1 注册并安装cpolar内网穿透 3.2 Cpolar云端设置 3.3 Cpolar内网穿透本地设置 4.公网访问测试 5.结语 1.前言 在现代五花八门的网络应用场景中&#xff0c;观看视频绝对是主力…

多元函数微分学

目录 多元函数的极限 多元函数的连续性 连续的概念 连续函数的性质 多元函数微分学是微分学中的重要组成部分&#xff0c;也是解决许多实际问题的关键工具之一。它可以研究多个自变量和因变量之间的关系&#xff0c;以及这些关系的数学性质。 多元函数微分学的研究对象是多…

Vulkan入门——编译Shaderc

编译 Vulkan-Samples时&#xff0c;遇到了如下shaderc编译报错。 ninja: error: /Users/xiaxl/Library/Android/sdk/ndk/21.1.6352462/sources/third_party/shaderc/libs/c_static/armeabi-v7a/libshaderc.a, needed by ../../../../build/intermediates/cmake/debug/obj/arme…

酷开系统壁纸模式,用一幅名画打开艺术之门

中国文化博大精深&#xff0c;在源远流长的数千年里&#xff0c;沉淀下了太多的经典之作。特别是中国名画&#xff0c;历史悠久&#xff0c;源远流长。哪怕一个朝代&#xff0c;一历年间&#xff0c;一个画家&#xff0c;甚至一幅画&#xff0c;就能道出万万千千的姿态。它们记…

CRM系统如何帮助外贸企业发展

外贸企业竞争激烈&#xff0c;提高自身竞争力&#xff0c;扩大海外业务市场&#xff0c;是每个外贸企业的目标。为了实现这一目标&#xff0c;不少外贸企业借助CRM系统&#xff0c;优化业务流程&#xff0c;管理维护客户&#xff0c;从而实现可持续发展。那么&#xff0c;外贸企…

Stability AI推出Stable Audio;ChatGPT:推荐系统的颠覆者

&#x1f989; AI新闻 &#x1f680; Stability AI推出Stable Audio&#xff0c;用户可以生成个性化音乐片段 摘要&#xff1a;Stability AI公司发布了一款名为Stable Audio的工具&#xff0c;用户可以根据自己的文本内容自动生成音乐或音频。免费版可生成最长20秒音乐片段&a…

2023年8月知识复习

物联网总括 物联网即通过网络将客观事物进行智能化互联的网络系统。互联网主要是人与人、人与计算机之间的通信&#xff0c;而物联网主要是物联网设备之间的通信。 注意&#xff1a;数据上传到云端不是物联网的必要条件。物联网可以仅在本地网络和局域网中进行通信和数据处理…

27、Flink 的SQL之SELECT (SQL Hints 和 Joins)介绍及详细示例(2-1)

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

小型水库雨水情测报和大坝安全监测解决方案

一、建设背景 我国小型水库数量众多&#xff0c;大多由农村集体经济组织管理&#xff0c;灌溉、供水、防洪、生 态效益突出&#xff0c;是农业生产、农民生活、农村发展和区域防洪的重要基础设施&#xff0c;实施乡 村振兴战略和生态文明建设的重要支撑保障。由于小型水库工程存…

【webrtc】时间戳reordered 重新排序、环绕的判断

inter_frame_delay_.CalculateDelay( ) 计算传输抖动值 webrtc源码分析(6)- jitter delay计算详解 大神对这块的使用,内涵外延,有深入细致的讲解。输入rtp时间戳、到达时间(当前系统时间?)-- 在rtp的时间戳的处理上,inter_frame_delay_.CalculateDelay( ) 计算传输抖动值…