C真的不难学,不信就看下我关于循环的理解

这篇具有很好参考价值的文章主要介绍了C真的不难学,不信就看下我关于循环的理解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

人生就是日复一日地不断的重复,既有相同的事情,也有相似的事情,却无论如何也无法回到最初。要想在生活的每一时刻都能有新的发现,恐怕只是一个美好的愿望。
下面将会给大家介绍程序中的重复流程——循环。

do语句

C语言中提供了3中循环执行语句,首先我们来看下do循环。

do语句

输入一个整数,显示它是奇数还是偶数。然后询问是否重复同样的操作,并按要求处理。
代码如下:

#include<stdio.h>

int main()
{
	int ret = 0;
	
	do
	{
		int n = 0;

		printf("请输入一个整数:");
		scanf("%d", &n);

		if (n % 2 == 0)
		{
			printf("输入的数是一个偶数\n");
		}
		else
		{
			printf("输入的数是一个奇数\n");
		}

		printf("要重复一次嘛?【Yes……0/No……9】");
		scanf("%d", &ret);
	} while (ret==0);

	return 0;
}

以上就是do语句的使用,下面是结构流程图
image.png
do是”执行“的意思,while是”在……期间“的意思。根据do语句的处理流程,只要在()中的表达式的判断结果不是0,语句就会循环执行。
另外do语句循环的对象语句称为循环体
本程序中do语句的循环体是{和}之间的复合语句(程序块),执行流程如下图:
image.png
本程序的情况下,如果读取到的变量的值为0,那么控制表达式ret0的判断结果就为1。因为1不等于0,所以复合语句的循环体就会再次被执行。
如果读取到的变量的值不为0,那么控制表达式ret
0的判断结果就为0,do语句就结束了。

复合语句(程序块)中的声明

上述例子中的n是在do语句中的复合语句部分进行声明的。需要注意的是,仅在复合语句中使用的变量通常要再复合语句中声明。
注意:
仅仅在复合语句中使用变量要在该复合语句中进行声明。

读取一定范围内的值

使用do语句的话,从键盘读取的数值是有限制的。代码如下;

#include<stdio.h>

int main()
{
	int hand = 0;

	do
	{
		printf("请选择出什么拳【0……石头/1……剪刀/2……布】");
		scanf("%d", &hand);
	} while (hand<0||hand>2);

	printf("你选择了");
	switch (hand)
	{
	case 0:
		printf("石头。\n");
		break;
	case 1:
		printf("剪刀。\n");
		break;
	case 2:
		printf("布。\n");
		break;
	}

	return 0;
}

如果读取的数值是0,1,2这些”合法的值“,就会显示”石头“”剪刀“”布“。而如果输入3或者-1这样的非法的值,就会提醒再次输入。

德摩根定律

对各条件取非,然后将逻辑与变为逻辑或、逻辑或变为逻辑与,然后再取其否定,结果和原条件一样。这就是德摩根定律。表示如下图:
image.png

求多个数的和及平均值

不停地输入整数,显示其和及平均值。
代码如下:

#include<stdio.h>

int main()
{
	int sum = 0;
	int cnt = 0;
	int retry = 0;

	do
	{

		int t = 0;
		printf("请输入一个整数:");
		scanf("%d", &t);
		sum = sum + t;
		cnt = cnt + 1;

		printf("是否继续?<Yes……0/No……9>");
		scanf("%d", &ret);
	} while (retry==0);

	printf("和为%d,平均值为%.2f\n", sum, (double)sum / cnt);

	return 0;
}

只要retry的值为0,就继续进行循环。
下面是求和的过程图:
image.png

复合赋值运算符

image.png
这样的称为复合赋值运算符。这里的@指代前面提到的各种运算符。
使用复合赋值运算符,计算输入的值的和以及平均值,代码如下:

#include<stdio.h>

int main()
{
	int sum = 0;
	int cnt = 0;
	int retry = 0;

	do
	{
		int t = 0;

		printf("请输入一个整数:");
		scanf("%d", &t);

		sum += t;
		cnt++;
		printf("是否继续?<Yes……0/No……9>");
		scanf("%d", &retry);

	} while (retry==0);

	printf("和为%d,平均值为%.2f\n", sum, (double)sum / cnt);

	return 0;
}

后置递增运算符和后置递减运算符

上述程序中使用的++是后置运算符,使用该运算符的表达式a++,能够是操作数的值仅增加1。这种只增加1的情况,我们称为递增。
image.png
如上表,是操作符的数值减1的–运算符是后置递减运算符。
两个运算符的功能如下图:
image.png
使用复合赋值运算符和后置递增运算符、后置递减运算符,能够使程序更加简洁、更易读。

while语句

和上面介绍的do语句不同,再循环体执行之前对循环的继续条件进行判断的是while语句。

while语句

输入一个整数数值,显示它开始递减到0的每个整数的程序如下:

#include<stdio.h>

int main()
{
	int n = 0;

	printf("请输入一个整数:");
	scanf("%d", &n);

	while (n>=0)
	{
		printf("%d", n);
		n--;
	}
	printf("\n");
	return 0;
}

这里为了实现递减使用了while语句,结构如下图;
image.png
while语句会在表达式达到0之前循环其中的语句。程序的流程图如下:
image.png

用递减运算符简化程序代码

#include<stdio.h>

int main()
{
	int n = 0;
	
	printf("请输入一个正整数:");

	while (n>=0)
	{
		printf("%d", n--);
	}
	printf("\n");
	return 0;
}

数据递增

显示出从0开始递增到输入的整数的各个整数。代码如下;

#include<stdio.h>

int main()
{
	int i = 0;
	int n = 0;

	printf("请输入一个正整数:");
	scanf("%d", &n);

	while (i<=n)
	{
		printf("%d", i++);
	}

	return 0;
}

限定次数的循环操作

输入一个正数后,并排连续显示出该整数的个数*,代码如下:

#include<stdio.h>

int main()
{
	int n = 0;

	printf("正整数:");
	scanf("%d", &n);

	while (n-->0)
	{
		putchar('*');
	}

	printf("\n");
	return 0;
}

假设输入的值等于15为例,首先对while语句的控制表达式n–>0进行判断。–是后置递减运算符,所以会对n的值是否大于0进行判断。

字符常量和putchar函数

在while语句执行的过程中,putchar('‘);被执行;像’‘这样,使用单引号括起来的字符称为字符常量,字符常量是int类型。
字符常量’'和字符串常量""的区别如下:
image.png

do语句和while语句

在执行过程中是有区别的:
do语句的循环体至少执行一次,而while语句的循环体则有可能一个也不会执行。
另外在判断时候继续执行的时间方面,do语句和while语句也完全不相同。
image.png

逆向显示整数值

输入一个非负整数,并进行逆向显示。
代码如下:

#include<stdio.h>

int main()
{
	int n = 0;

	do
	{
		printf("请输入一个正整数:");
		scanf("%d", &n);
		if (n<=0)
		{
			puts("\a请不要输入一个非正整数。");
		}
	} while (n<=0);

	while (n>0)
	{
		printf("%d", n % 10);
		n /= 10;
	}

	return 0;
}

image.png
下面是执行过程;
image.png

for语句

比起使用while语句,使用for语句实现循环会使程序更加简洁、易读。

for语句

递增显示从0到输入正整数为止的各个整数。
代码如下:

#include<stdio.h>

int main()
{
	int i = 0;
	int n = 0;

	printf("请输入一个正整数:");
	scanf("%d", &n);

	for ( i = 0; i <= n; i++)
	{
		printf("%d ", i);
	}

	return 0;
}

程序变得更加的简洁了。for语句的结构图如下;
image.png

  1. 作为”预处理“,判断并执行A部分。
  2. 如果作为”继续条件“的B部分控制表达式不为0,则执行语句(循环体)。
  3. 执行语句后,判断并执行作为”收尾处理“或”下一个循环的准备处理“的C部分返回到2中。

image.png
image.png
image.png

使用for语句实现固定次数的循环

输入一个整数连续显示出该整数整数个*
代码如下:

#include<stdio.h>

int main()
{
	int n = 0;
	int i = 0;

	printf("请输入一个整数:");
	scanf(("%d", &n));

	for ( i = 1; i <=n; i++)
	{
		putchar('*');
	}
	putchar("\n");
	return 0;
}

本程序中的for语句也可以替换为如下形式:

for(i=0;i<n:i++)
{
    putchar('*');
}

for循环和while循环的执行区别:
image.png
输入规定个数个整数并显示出它们的合计值和平均值(使用for语句)
代码如下:

#include<stdio.h>

int main()
{
	int i = 0;
	int sum = 0;
	int num = 0;
	int temp = 0;

	printf("输入多少个整数:");
	scanf("%d", &num);

	for ( i = 0; i < num; i++)
	{
		printf("No.%d", i + 1);
		scanf("%d", &temp);
		sum += temp;
	}

	printf("合计值:%d\n", sum);
	printf("平均值:%.2f\n", (double)sum / num);
	return 0;
}

偶数的枚举

下面是我编写的一段程序,实现输入一个整数值,显示该整数值以下的正偶数,代码如下:

#include<stdio.h>

int main()
{
	int i = 0;
	int n = 0;

	printf("请输入整数值:");
	scanf("%d", &n);

	for ( i = 2; i <= n; i+=2)
	{
		printf("%d ", i);
	}
	putchar('\n');

	return 0;
}

for语句中的i+=2部分中使用了复合赋值运算符+=,其作用是将右操作数的值加左操作数的值。
因为是将变量i加2,所以每次循环时i的值都会加2。

约数的枚举

编写一段程序,实现输入一个整数值,显示该整数值的所有约数,代码如下:

#include<stdio.h>

int main()
{
	int i = 0;
	int n = 0;

	printf("整数值:");
	scanf("%d", &n);

	for ( i = 1; i <=  n; i++)
	{
		if (n%i==0)
		{
			printf("%d ", i);
		}
	}
	printf("\n");

	return 0;
}

for语句中,变量i的值是从1到n递增的。
如果n除以i的余数为0(即n能被i整除),则判断i是n的约数,并显示它的值。

表达式语句和空语句

请看下面的代码,感觉这段代码是要显示变量n个*

for(i=1;i<=n;i++);
	putchar('*');

但是,无论n是怎样的值,结果都只显示一个*。
原因在于i++)后面的分号。只包含一个分号的语句,称为空语句,执行代码的时候什么也不会发生。
image.png

循环语句

以上说到的do语句、while语句、for语句,都是循环执行流程的语句。这就是循环语句。

多重循环

将循环语句的循环体作为循环语句,就可以进行二重、三重循环。这样的循环称为多重循环。

二重循环

实际上,在一个程序中还可以嵌套另一个循环。所根据嵌套的循环的多少,有二重循环三重循环等。它们统称为多重循环
使用二重循环显示九九乘法表,代码如下:

#include<stdio.h>

int main()
{
	int i = 0;
	int j = 0;
	
	for ( i = 1; i <= 9; i++)
	{
		for ( j = 1; j <=i ; j++)
		{
			printf("%d*%d=%d ", i, j, i * j);
		}
		printf("\n");
	}
	return 0;
}

运行结果:
image.png
外侧的for语句的作用是使变量i的值从1到9递增。其中循环分别对应乘法表的第一行、第二行、……第九行。即纵方向的循环。
各行中执行的内侧的for语句的作用使变量j的值从1到9递增,这是各行中的横方向的循环。

使用break语句强制结束循环

在多重循环中执行break语句时,仅仅会跳出内侧的循环语句,而不会直接跳出所有的循环如下代码所示:

#include<stdio.h>

int main()
{
	int i = 0;
	int j = 0;

	for (i = 1; i <= 9; i++)
	{
		for (j = 1; j <= i; j++)
		{
			if (i*j>=40)
			{
				break;
			}
			printf("%d*%d=%d ", i, j, i * j);
		}
		printf("\n");
	}
	return 0;
}

代码运行;
image.png
当i*j的值大于等于40时直接跳出内层循环。

显示图形

下面我们来显示长方形,代码如下:


#include<stdio.h>

int main()
{
	int i = 0;
	int j = 0;
	int width = 0;
	int height = 0;

	printf("请输入长宽:");
	scanf("%d %d", &width, &height);

	for ( i = 0; i < height; i++)
	{
		for ( j = 0; j < width; j++)
		{
			printf("*");
		}
		printf("\n");
	}
	return 0;
}

image.png

程序的组成元素和格式

关键字

在C语言中,像if和else这样的标识符被赋予了特殊的意义。这种具有特殊意义的标识符称为关键字,它们是不能作为变量名使用的。
image.png

分隔符

一种有13中分隔符,就是又来分割的。
image.png

常量和字符串常量

字符常量、整数常量、浮点数常量和字符串常量都是程序的构成要素。

总结

image.png
image.png
image.png
以上就是关于C中的循环控制,其实这样看起来C也不是很难。文章来源地址https://www.toymoban.com/news/detail-481246.html

到了这里,关于C真的不难学,不信就看下我关于循环的理解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 你真的掌握了“C语言分支循环”吗

    目录  前言 1. if语句 1.1 if 1.2 else 1.3 分支中包含多条语句 1.4 嵌套if 1.5 悬空else问题 2. 关系操作符 3. 条件操作符 4. 逻辑操作符: , || , ! 4.1 逻辑取反运算符 4.2 与运算符 4.3 或运算符 4.4 练习:闰年的判断 4.5 短路 5. switch语句 5.1 if语句和switch语句的对比 5.2 switch语句中的brea

    2024年02月03日
    浏览(40)
  • 关于Maven,你真的了解它吗?

    编译软件:IntelliJ IDEA 2019.2.4 x64 操作系统:win10 x64 位 家庭版 Maven版本:apache-maven-3.6.3 释义: POM,英文全称为 Project Object Model ,意思是 项目对象模型 ,就是 将项目封装为对象模型 ,便于开发者使用Maven管理构建项目 常见POM标签: 代码示例如下 详细目录结构如下所示:

    2024年02月02日
    浏览(102)
  • 关于低代码开发,你是真的了解了吗?

    在低代码开发已是大势所趋的今天,不少企业都切身感受到了低代码开发带来的便利。低代码开发平台的优势在当下数字化浪潮中,为企业提供了定制专属的数字化解决方案。 低代码本身没有太强的行业属性,这也让低代码开发平台能够更加灵活地适应不同行业。目前低代码

    2024年02月05日
    浏览(52)
  • 这些git必会命令,你确定不进来看下

    这篇内容比较干,也是开发工作中最常用管理代码托管分支的工具,下面是我常用的到git命令 所以有人说git pull = git fetch + git merge。具体后面会单独出篇文章来说下 在项目开发中,基本都会遇到这样的情况:本来你在自己的分支上愉快的开发功能A,但是突然加了一个优先级很

    2024年02月20日
    浏览(35)
  • 分享下我 Github 被封的经历

    最近好像又有人 Github 被封,每隔一段时间就有。分享下我自己的经历吧,好几年以前了,也许还是有点参考价值。 那是 2017 年 12 月,有天早上起来突然发现自己的号 phith0n 登不上去了,具体的表现是: 账号登录不上,登录以后明确告诉我我号被封了 Github 个人页面访问显示

    2024年02月06日
    浏览(36)
  • 关于setInterval如何停止循环

    关于setInterval如何停止循环 查了n久,其他csdn写的都是垃圾,完全浪费时间,不晓得他们做啥笔记。 需求是调用一次hCreate执行5次model方法,注意 clearInterval清除定时器 要 放在setInterval函数里面 ,否则定时器停不下来。

    2024年02月11日
    浏览(47)
  • 分享下我发现的16个AI辅助编程的网站

    这些工具和服务覆盖了多个方面,包括编程辅助、代码生成、问题解决、Git指令辅助、代码安全扫描等,为开发者提供了丰富的选择。 Codegeex (codegeex.cn/zh-CN): 类型:AI编程助手 支持语言:Python, C/C++, Java, Go, JavaScript等 特点:免费,支持一键转换代码语言,可集成在PyCharm和V

    2024年02月04日
    浏览(36)
  • 关于SpringBoot中出现的循环依赖问题

    环境: SpringBoot2.7.8 背景: 在增加出库订单时需要对物品表的的数量进行修改 因此我在OutboundController中创建了几个公共方法,并将其注入到Spring中,结果给我报了这一串错误。 Description: The dependencies of some of the beans in the application context form a cycle: ┌──-──┐ | getGoodsNumber defi

    2024年02月11日
    浏览(81)
  • 工作7年了,从“功能测试”到了现在的“测试开发”,年薪35W+,分享下我的心得

    时光飞逝,转眼间从事软件测试已经是第7个年头了。从最开始的毛头小子到现在的独当一面经历了太多,也学习了太多知识,所幸最后结果是好的,目前在上海工作从事测试开发岗位,年薪35W+, 曾就职于美团测试开发框架组,搭建过美团platuo测试框架,thrift测试框架,自动

    2024年02月01日
    浏览(66)
  • 服务器: 这个 token 是我的吗? 我不信

    人生有两个悲剧:第一是想得到的得不到,第二是想得到的得到了 其实token的出现是为了解决sessionId存放的问题 sessionId 在分布式系统, 如果你存放在一台机器, 让一台机器服务负责session相关的存放, 存放单点故障的风险, 这是有状态的, 那么如果用token进行改进的话, 就可以做

    2023年04月09日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包