首页 > 其他分享 >C语言:详解循环结构

C语言:详解循环结构

时间:2024-12-13 19:58:24浏览次数:8  
标签:int C语言 break while 详解 表达式 printf 循环

目录

1.前言

1.1本篇所讲重点 

 2.for循环

2.1for循环讲解

2.2练习:

1.打印1到10的数字

2.求1+2+3....+100之和

3.逆序输出

 3.while循环

3.1while讲解

3.2while为真为假案例

3.3练习

 4.do-while循环

4.1do-while讲解

 4.2do-while先执行一次

 4.3练习

 5.switch语句

5.1switch讲解

5.2练习

 5.3 switch注意事项:

6.break和continue

for循环中的break和continue

break

 continue


1.前言

循环结构概念:循环结构是C语言的一种基本结构,它允许代码被多次重复的执行。在C语言中,有三种主要的结构:for循环,while循环和do-while循环,循环结构的存在使得程序能够高效地处理需要重复操作的任务。

1.1本篇所讲重点 

本篇以:for---while---do-while---switch----break----continue

 2.for循环

2.1for循环讲解

在C语言中,for循环绝对是使用最多的循环了,它的语法格式如下:

for (表达式1; 表达式2; 表达式3)
{
	循环语句;
}

表达式1:用于初始化循环变量,例如int i = 0,定义并且初始化了一个循环变量i.

表达式2:在每次循环迭代前进行求值。只要条件表达式的值为真,循环就会继续执行。

表达式3:在每次循环执行完之后,更新循环变量i的值。

2.2for循环嵌套

这其实就是嵌套,第一个循环语句,按需求写,原理就是外层控制内层循环,在C语言中,for循环是非常受欢迎的循环,也是非常有用的。 

for(表达式1;表达式2;表达式3)
{
    循环语句;
    for(表达式1;表达式2;表达式3)
        {
            循环语句;
        }
}

现在就让我们来练习一下吧,关于for循环嵌套的练习

1.打印99乘法表

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
	for (int i = 0; i <= 9; i++)
	{
		for (int j = 1; j < i + 1; j++)
		{
			printf("%d*%d=%d\t", j, i, j * i);
		}
		printf("\n");
	}
	return 0;
}

讲解:

        99乘法表使用了for循环嵌套,首先看问题,99乘法表是由数字组成,这就需要使用整形(int)来定义数据类型,然后99乘法表最高是9乘以9所以定义表达式2是小于或者等于9,这是i++,循环返回时,更新数据,现在外层循环讲完了,这时就该内层循环了,首先定义整形数据类型j,然后j等于1,j小于i+1,j++更新数据,这一段循环是指,外层循环i在循环时,i= 0,小于9直接进入了,内层循环中,所以j等于1,是指打印99乘法表时,j要优先输出,然后 内层循环过后,进入外层,后在进入内层,直到全部满足条件为止结束。

运行结果:

2.3单for循环练习:

1.打印1到10的数字

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

讲解:

        循环10次,每次加1,加到满足条件为止。 

运行结果如下: 

2.求1+2+3....+100之和

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
	int sum = 0;
	for (int i = 0; i <= 100; i++)
	{
		sum += i;
	}
	printf("1+2+3...+100的结果为:%d\n", sum);
	return 0;
}

讲解:

        首先定义一个sum,去接受1+2+3...+100的值,然后定义i去加这个数字,i= 0; i< = 100; i++,就是这个循环变量初始化为0,循环100次,进入循环后,sum += i,接收这个值,加完之后更新数据,在次进入循环,这时i为1,在加,循环往复100次,最终得到5050这个值。

运行结果如下:

2.4.逆序输出

#include <stdio.h>
int main()
{
	int num = 0;
	printf("请输入一个正整数:");
	scanf("%d", &num);
	for (; num > 0; num /= 10)
	{
		printf("%d ", num % 10);
	}
	return 0;
}

这里for循环的用法之一(后面会讲),逆序输出正整数,首先表达式2,先判断num大于0,num /= 10(num = num / 10), 每次循环都除以10,例如1234,第一次除得到4,第二次3,依此类推,直到0为止,printf("%d ",num % 10);,num%10,这里的意思就是,num % 10 之后得到4,打印到屏幕上,取模之后这个数字就是123了,123在除以10,在取模,直到零为止。 

调试图:

调试到scanf输入1234后:

 当1234进入循环后,printf("%d",num % 10);取模后,得到个位4,打印到屏幕上,for在表达式除以10,就剩余123,在进取模,这时123的3就是个位,在取3,直到零为止。

 讲解最终结果:

运行结果如下:

 3.while循环

while相对for来说比较简单,只需要判断条件就可以,为真循环,为假不执行

3.1while讲解

while (条件表达式)
{
	循环语句
}

条件表达式:先判断表达式的值,为真执行,为假不执行,执行到结果位假时,结束循环。 

3.2while为真为假案例

 为真时会一直执行语句,无限循环,这也是一个易错点,在写代码时需要注意,当条件表达式没有临界点时,它会一直循环,不会停止,直到你手动结束它。

为假时则不执行

3.3练习

 打印1到10的数:

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

讲解:

        首先,这是按顺序执行的程序,进入程序后,先执行int i = 1;执行完之后i得到了1。

执行到printf把1打印在屏幕上之后,i++执行,执行完之后,返回到while条件表达式,判断有没有满足条件,不满足条件继续执行,循环往复,直到满足条件,当i等于10的时候,执行完printf,i++,在此判断 i  <= 10, 不满足,不需要在执行,程序结束。

 运行结果如下:

打印星号:

#include <stdio.h>
int main()
{
	int i = 1, j ;
	while(i <= 5)
	{
		j = 1;
		while(j <= i)
		{
			printf("*");
			j++;
		}
		printf("\n");
		i++;
	}
	return 0;
}

讲解:

        目的是使用*打印图案,首先初始化变量i,为1,第一层while进入循环,i小于5,执行下面语句,这里先定义了,j  = 1,目的是为内层循环做准备,当 j <= i 时,执行下面的语句打印一个*号,j自增,然后换行,i自增,然后跳到i <= 5这里,继续循环,要注意的是,这是j为2,需要打印2个星,依次循环直到停止,就会得到最终的一个图案。

运行结果:

 4.do-while循环

do-while和while很相似,不同的是,do-while需要先进行一次循环,在判断。

4.1do-while讲解

语法如下:

do
{
	循环语句;
} while (条件表达式);

 4.2do-while先执行一次

 例如:输入 12        结果:2

#include <stdio.h>
int main()
{
	int i = 0;
	scanf("%d", &i);
	int a = 0;
	do {
		a++;
		i = i / 10;
	} while (i);
		printf("%d",a);
	return 0;
}

运行结果如下:

 4.3练习

题目:计算数字累加,让用户输入一个数n,计算1到n的和

#include <stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	int cnt = 0;
	int sum = 0;
	do
	{
		sum += cnt;
		cnt++;
	} while (cnt <= n);
	printf("%d ", sum);
	return 0;
}

讲解:

        我创建了三个变量,一个用户输入的n,输入需要累加计算的数,然后创建cnt来判断,在创建一个变量在接受最终的结果。

运行结果如下:

 5.switch语句

在C语言中除了if之外,还有switch这样的分支结构。

5.1switch讲解

这样的结构相较于if来说是比较清晰的,不过各有各的本事,不能去混淆它俩。

switch (表达式)
{
case 1:
	语句;
	break;
case 2:
	语句;
	break;
	...
default:
	语句;
	break;
}

我相信你在看了我的详解if语句之后,在看这个switch语句来水非常简单了,那么直接来练习一下

5.2练习

用户输入一个数字,判断星期几,超出7就显示错误,重新输入

#include <stdio.h>
int main()
{
	int week = 0;
	while (1)
	{
		scanf("%d", &week);
		switch (week)
		{
		case 1:
			printf("星期一");
			break;
		case 2:
			printf("星期二");
			break;
		case 3:
			printf("星期三");
			break;
		case 4:
			printf("星期四");
			break;
		case 5:
			printf("星期五");
			break;
		case 6:
			printf("星期六");
			break;
		case 7:
			printf("星期日");
			break;
		default:
			printf("输入错误重新输入\n");
		}
	}
	return 0;
}

运行结果:

 5.3 switch注意事项:

 关于default顺序的问题:

        在使用switch中,可能会遇到这一种情况,例如switc表达式中的值无法匹配case语句的时候,这时候就要假如default了。

去掉break,这些代码的运行结果是什么???

#include <stdio.h>
int main()
{
	int week = 0;
	while (1)
	{
		scanf("%d", &week);
		switch (week)
		{
		case 1:
			printf("星期一");
		case 2:
			printf("星期二");
		case 3:
			printf("星期三");
		case 4:
			printf("星期四");
		case 5:
			printf("星期五");
		case 6:
			printf("星期六");
		case 7:
			printf("星期日");
		default:
			printf("输入错误重新输入\n");
		}
	}
	return 0;
}

讲解:
        break在C语言中是满足条件,跳出循环,当输入1时,输出case 1中的语句,按照顺序往下输出,到break时跳出循环,但是去掉break之后,程序就会按照顺序依次输出

6.break和continue

break:满足条件跳出循环 

continue:满足条件跳出本次循环

for循环中的break和continue

break
#include <stdio.h>
int main()
{
	for (int i = 0; i <= 100; i++)
	{
		if (i == 5)
		{
			break;
		}
		printf("%d ", i);
	}
	return 0;
}

讲解:

        break:满足条件,跳出循环,i == 5 时满足条件,跳出循环,到输出到4时,条件满足5时退出循环。

 continue
#include <stdio.h>
int main()
{
	for (int i = 0; i <= 10; i++)
	{
		if (i == 5)
		{
			continue;
		}
		printf("%d ", i);
	}
	return 0;
}

 讲解:

        continue:满足条件,跳出本次循环,当i == 5时,continue跳出本次循环,就是跳出5,之后正常循环输出。

本篇到此为止,如果对您有帮助,请给博主一个小小赞。 

标签:int,C语言,break,while,详解,表达式,printf,循环
From: https://blog.csdn.net/hklhklhkhl123/article/details/144297168

相关文章

  • log4cxx在C语言中使用
    原文地址:log4cxx在C语言中使用–无敌牛欢迎参观我的个人博客:无敌牛–技术/著作/典籍/分享等介绍log4cxx是一个基于Apachelog4j的C++日志框架,使用ApachePortableRuntime(APR),在所有支持APR的平台都可以使用。log4cxx是开源代码,遵守ApacheLicense开源协议。......
  • Linux常用命令之ping命令详解
    ping命令是网络管理中最基本也是最常用的工具之一,用于测试主机之间的连通性。它通过发送ICMP(InternetControlMessageProtocol)回显请求(EchoRequest)到目标主机,并监听返回的回显应答(EchoReply)来工作。ping命令不仅可以用来检查网络连接是否正常,还可以帮助诊断网络速度......
  • 7-1 sdut- C语言实验—最值
    7-1sdut-C语言实验—最值分数12全屏浏览切换布局作者 马新娟单位 山东理工大学有一个长度为n的整数序列,其中最小值和最大值不会出现在序列的第一和最后一个位置。请写一个程序,把序列中的最小值与第一个数交换,最大值与最后一个数交换。输出转换好的序列。输入格......
  • 7-10 sdut- C语言实验-数组逆序(数组移位)
    7-10sdut-C语言实验-数组逆序(数组移位)分数13全屏浏览切换布局作者 马新娟单位 山东理工大学有n个整数,使其最后m个数变成最前面的m个数,其他各数顺序向后移m(m<n<100)个位置。输入格式:输入数据有2行,第一行的第一个数为n,后面是n个整数,第二行整数m。输出格式:......
  • 【 C语言练习(7)—递归法反向打印字符串】
    C语言练习(7)文章目录C语言练习(7)前言问题问题分析结果总结前言进一步练习和巩固递归函数构建思想问题使用递归的方法给定一个字符串abcde,反向输出edcba问题分析对于字符串的输入和输出使用getchar()和putchar(),如下面程序所示;首先要写递归函数,递归函数原理......
  • [VSCode] vscode下载安装及安装中文插件详解(附下载文件)
      前言vscode链接:https://pan.quark.cn/s/3acbb8aed758提取码:dSytVSCode是一款由微软开发且跨平台的免费源代码编辑器;该软件支持语法高亮、代码自动补全、代码重构、查看定义功能,并且内置了命令行工具和Git版本控制系统。通过上面的连接下载得到压缩包,解压得到exe......
  • kyanos详解
    一、简介官网:https://kyanos.io/cn/github:https://github.com/hengyoush/kyanosKyanos是一个网络流量采集和分析工具,它提供如下特性:强大的流量过滤功能:不仅可以根据传统IP/端口等信息过滤,还支持根据:进程/容器、L7协议信息、请求/响应字节数、耗时等过滤你想要的数据。强......
  • ZBlog首页/分类/内容页标题副标题等SEO标签详解
    文件位置:TDK代码位于zb_users/theme/你使用的主题id/template/seo.php文件中。标签类型及调用逻辑:文章内容页:标题:{$article.Metas.title}(SEO标题)→ {$title}(文章标题)+ {$article.Category.Name}(分类名称)+ {$name}(网站标题)关键词:{$article.Metas.keywords}(SEO关......
  • C语言中的字符串操作函数
    此篇文章在2024年10月29日被记录盘点C语言中的字符串操作函数1、字符串复制和连接#include<stdio.h>#include<string.h>intmain(){//strcpycharsrc1[]="Hello";chardest1[20];strcpy(dest1,src1);printf("strcpy:%s\n",dest1);......
  • c++类详解
    学习转自:c++类详解-CSDN博客1#include<iostream>2usingnamespacestd;34classCircle{5private:6doubleradius;78public:9//构造函数10Circle(doubler){11radius=r;12}1314//计算面积15doub......