有关C语言的循环语句(含常见错误&经典例题)

C语言for循环结构经典练习 C语言的一些经典例题,还是挺有用的 阅读详情
AI摘要

博客主要介绍C语言的循环结构,包括for、do while和while。详细讲解了它们的语法,并给出多个具体例题,如用for打印9*9乘法口诀表、打印100 - 200的素数,用do while实现游戏菜单,用while合并两个升序序列等。

C语言常见的结构有顺序结构,选择结构,循环结构。这里我们主要介绍一下循环。

c语言中主要使用for,while,do while实现循环结构。现在我们分别介绍一下它们各自的用法和具体例题中的应用。

一.for

1)for的语法

for(变量赋值;判断的条件;执行的操作)

{

语句;

}

例如想要产生1-10的数字,如图所示顺序123 23 23直到不符合条件跳出循环。

677998c0cae94997a1eac1d7c0152677.jpeg

2)for例题

eg1.打印9*9的乘法口诀表

思路就是先产生1~9的数字,这里用到i的循环,输出了行。

然后由于乘法口诀表中不重复,列数应小于等于行数,所以用到j的循环,输出1~i列。

%2d是限制输出的最小长度为2个字节,并在每一行的循环体里面加入换行,使其更美观。

3f31476562e74589a0dff724d8a6401b.pngeg2.打印100-200的素数

/*
思路:
素数:即质数,除了1和自己之外,再没有其他的约数,则该数据为素数,具体方式如下
*/
//方法一:试除法
int main()
{
	int i = 0;
	int count = 0;


    // 外层循环用来获取100~200之间的所有数据,100肯定不是素数,因此i从101开始
	for(i=101; i<=200; i++)
	{
		//判断i是否为素数:用[2, i)之间的每个数据去被i除,只要有一个可以被整除,则不是素数
		int j = 0;
		for(j=2; j<i; j++)
		{
			if(i%j == 0)
			{
				break;
			}
		}
        
		// 上述循环结束之后,如果j和i相等,说明[2, i)之间的所有数据都不能被i整除,则i为素数
		if(j==i)
		{
			count++;
			printf("%d ", i);
		}
	}


	printf("\ncount = %d\n", count);
	return 0;
}

//上述方法的缺陷:超过i一半的数据,肯定不是i的倍数,上述进行了许多没有意义的运算,因此可以采用如下
// 方式进行优化
如果i能够被[2, sqrt(i)]之间的任意数据整除,则i不是素数
原因:如果 m 能被 2 ~ m-1 之间任一整数整除,其二个因子必定有一个小于或等于sqrt(m),另一个大于或等于 sqrt(m)。
*/方法二
int main()
{
	int i = 0;
	int count = 0;


	for(i=101; i<=200; i++)
	{
		//判断i是否为素数
		//2->i-1
		int j = 0;
		for(j=2; j<=sqrt(i); j++)
		{
			if(i%j == 0)
			{
				break;
			}
		}
		//...
		if(j>sqrt(i))
		{
			count++;
			printf("%d ", i);
		}
	}


	printf("\ncount = %d\n", count);
	return 0;
}


//方法三
/*
继续对方法二优化,只要i不被[2, sqrt(i)]之间的任何数据整除,则i是素数,但是实际在操作时i不用从101逐渐递增到200,因为出了2和3之外,不会有两个连续相邻的数据同时为素数
*/


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


	for(i=101; i<=200; i+=2)
	{
		//判断i是否为素数
		//2->i-1
		int j = 0;
		for(j=2; j<=sqrt(i); j++)
		{
			if(i%j == 0)
			{
				break;
			}
		}
		if(j>sqrt(i))
		{
			count++;
			printf("%d ", i);
		}
	}

	printf("\ncount = %d\n", count);
	return 0;
}
eg3.计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值,打印出结果

/*
思路:
1. 从上述表达式可以分析出
   a. 该表达式主要由100项,奇数项为正,偶数项为负
2. 设置一个循环从1~100,给出表达式中的每一项:1.0/i, 注意此处不能使用1,否则结果全部为0
    然后使用flag标记控制奇偶项,奇数项为正,偶数项为负
    然后将所有的项相加即可
*/

#include <stdio.h>
int  main()
{
	int i = 0;
	double sum = 0.0;
	int flag = 1;
	for(i=1; i<=100; i++)
	{
		sum += flag*1.0/i;
		flag = -flag;
	}
	printf("%lf\n", sum);
	return 0;
}

eg4.

用C语言在屏幕上输出以下图案:

思路:
仔细观察图形,可以发现,此图形中是由空格和*按照不同个数的输出组成的。
上三角:先输出空格,后输出*,每行中
  空格:从上往下,一行减少一个
  *:2*i+1的方式递增
  
下三角:先输出空格,后输出*,每行中
  空格:从上往下,每行多一个空格
  *: 从上往下,按照2*(line-1-i)-1的方式减少,其中:line表示总共有多少行
按照上述方式,将上三角和下三角中的空格和*分别输出即可。 
*/


int main()
{
	int line = 0;
	int i = 0;
	scanf("%d", &line);//7
	//打印上半部分
	for(i=0; i<line; i++)
	{
		//打印一行
		//打印空格
		int j = 0;
		for(j=0; j<line-1-i; j++)
		{
			printf(" ");
		}
		//打印*
		for(j=0; j<2*i+1; j++)
		{
			printf("*");
		}
		printf("\n");
	}


	//打印下半部分
	for(i=0; i<line-1; i++)
	{
		//打印一行
		int j = 0;
		for(j=0; j<=i; j++)
		{
			printf(" ");
		}
		for(j=0; j<2*(line-1-i)-1; j++)
		{
			printf("*");
		}
		printf("\n");
	}
	return 0;
}
  

二.do while语句

1).do while语法

do 

{

语句

}

while(表达式)

先进入循环体,在执行判断表达式。表达式为真,就会执行下一次,为假就不再循环。所以do while 的循环体至少执行一次。

2)do while 例题

eg5.实现一个游戏菜单

三.while语句

1)while的语法

while(循环的条件)

{

语句

}

注:后面必须跟语句 无语句放置一个单独分号

2)while的例题

eg6.输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。

输入包含三行,第一行包含两个正整数n, m,用空格分隔。n表示第二行第一个升序序列中数字的个数,m表示第三行第二个升序序列中数字的个数。
第二行包含n个整数,用空格分隔。
第三行包含m个整数,用空格分隔。

输出描述:

输出为一行,输出长度为n+m的升序序列,即长度为n的升序序列和长度为m的升序序列中的元素重新进行升序序列排列合并。

示例1

输入:

5 6
1 3 7 9 22
2 8 10 17 33 44

复制输出:

1 2 3 7 8 9 10 17 22 33 44
#include <stdio.h>


int main()
{
    int n = 0;
    int m = 0;
    int arr1[1000] = {0};
    int arr2[1000] = {0};
    //输入
    scanf("%d %d", &n, &m);
    int i = 0;
    for(i=0; i<n; i++)
    {
        scanf("%d", &arr1[i]);
    }
    for(i=0; i<m; i++)
    {
        scanf("%d", &arr2[i]);
    }
    //处理
    int j = 0;
    i = 0;
    while(i<n && j<m)
    {
        if(arr1[i] < arr2[j])
        {
            printf("%d ", arr1[i]);
            i++;
        }
        else
        {
            printf("%d ", arr2[j]);    
            j++;
        }
    }
    if(i == n)
    {
        for(; j<m; j++)
        {
            printf("%d ", arr2[j]);
        }
    }
    else
    {
        for(; i<n; i++)
        {
            printf("%d ", arr1[i]);
        }
    }
    return 0;
}
  
判断素数(质数)高效算法 最近看到一篇高效的素数判断算法文章,但是文章中有些部分写的还不够完整清晰,所以在此详细记录一下此算法理解过程。(理解此算法前应先明白使用 sqrt(num) 为判断条件判断素数的方法) 此算法产生的原因(定理):凡是大于5的素数一定与6的倍数相邻 相关证明过程可以去文章末尾的参考博客中查看 由定理可以直接写出算法: #include&lt;iostream&gt; #include&lt;math.h&gt; using namespace std; bool isPrime(int num 阅读详情

相关推荐

算法 - 判定素数的四种方法

如何判定一个数为素数,素数概念,判定素数的四种方法,时间复杂度

优快云 5226

超完整素数算法总结归纳

目录 素数的判定 Eratosthenes筛选(素数筛选) 因子数与因子和 完美数 n的第k个因子 分拆质数和 分解质因数 最接近的因数 丑数 素数的判定 Eratosthenes筛选(素数筛选) 因子数与因子和 完美数 n的第k个因子 分拆质数和 分解质因数 四因数 最接近的因数 丑数 素数的判定 素数的概念是只可以被1和他本身可以整除 所以我们可以使用试除法,如一个数为n (用2-n-1)对n进行试除,但是这样的话时间复杂度是O(N) #...

m0_61567378的博客 3576

从爱好者到工程师:如何低成本体验RFSoC ZU47DR?性能实测与避坑指南

本文详细介绍了如何低成本体验赛灵思RFSoC ZU47DR芯片,包括二手开发板选购、租赁服务、精简开发环境搭建等实用方案。通过性能实测与避坑指南,帮助爱好者和工程师在有限预算下充分利用这款集成了ARM处理器和FPGA的高性能芯片,降低开发门槛。

weixin_42525005的博客 221

素数求法的四种方法(逐次优化)

/* 思路: 素数:即质数,除了1和自己之外,再没有其他的约数,则该数据为素数,具体方式如下 */ //方法一:试除法 int main() { int i = 0; int count = 0; // 外层循环用来获取100~200之间的所有数据,100肯定不是素数,因此i从101开始 for(i=101; i&lt;=200; i++) { //判断i是否为素数:用[2, i)之间的每个数据去被i除,只要有一个可以被整除,则不是素数 int j = 0; fo

zjybp的博客 5548

Flocking for Multi-Agent Dynamic Systems: Algorithms and Theory的理论简述和python仿真实现(附源码)

经典论文Flocking for Multi-Agent Dynamic Systems: Algorithms and Theory的学习与编程仿真,提供源码

m0_59701926的博客 1238

国产麒麟系统各版本镜像下载

以上各链接均为迅雷下载,禁止商业用途!

2302_79474754的博客 6135

【C语言】while循环语句

本篇博客将深入探讨C语言中的while循环,从初识循环开始,逐步介绍while循环的基本语法、工作原理,以及在实际应用中的示例。

m0_74195174的博客 1万+

Xilinx IP核 Block Memory Generator v8.4 的使用

本文主要介绍如何使用并初始化 Xilinx 提供的IP核 Block Memory Generator v8.4`,为了确保成功初始化,还对其进行了一个简单的仿真,更多细节请参考官方手册。

高阶近似的博客 1万+

C语言for循环语句及嵌套(误区,易错点要理解)

for循环语句的特点,详细介绍哈。

weixin_67118900的博客 1万+

用Python实现斗地主游戏(终端版)

马上就要过年了 大家也都放假了吧 过年必不可少的活动 打牌! 今天带大家来写一份斗地主 (又是好多天没怎么更新,忙成狗啊) 那么实现一个斗地主呢 我们肯定要先完善卡牌系统 from collections import Counter import numpy as np import itertools def cmp_to_key(mycmp): 'Convert a cmp= function into a key= function' class K: def _

Miku_wx的博客 9856

芯擎SEC1000芯片参数详细介绍

随着龙鹰一号的不断进化和应用,未来的智能座舱将不仅仅是显示和控制的集成,更是人与车之间的一种默契和无缝交互的体现。在汽车行业迈向智能化和电动化的浪潮中,座舱已不仅仅是一个驾驶者的操作空间,而是逐渐演变为一个集娱乐、信息、控制于一体的智能交互平台。今天的汽车不仅需要强劲的动力和炫酷的外观,更需要一颗强大而智能的“心脏”来支撑复杂的座舱体验和安全驾驶需求。想象一下,未来的汽车不再仅仅是交通工具,它将成为你的移动私人管家,了解你的习惯,甚至提前预测你的需求。让我们一起走进龙鹰一号的世界,探索智能座舱的无限可能!

weixin_43199439的博客 1725

【C语言语句】选择语句(分支语句),循环语句,呕心沥血总结C语言各种语句

【C语言语句】选择语句(分支语句),循环语句,呕心沥血总结C语言各种语句、语法。

程序员良辰 3538

请尽可能地详细说明一个VLA项目的立项训练到落地的全流程

一个机器人VLA项目的全流程是一个复杂的系统工程,它深度融合了机器人学 (Robotics)计算机视觉 (CV)和自然语言处理 (NLP)。其核心挑战在于高质量数据的获取和从仿真到现实的有效迁移。与纯粹的软件AI项目相比,它增加了硬件、物理交互和安全性的维度,但其最终能让AI走出虚拟世界、在物理世界中产生实际价值,这也是其巨大的魅力所在。

具身机器人和通用AI 303

玩转C语言for循环语句

本文章主要介绍C语言中的for循环语句

2401_84689376的博客 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

C语言for循环语句的使用方法

作为C语言三大循环语句之一的for循环在C语言中的也占有非常的重要地位。因此了解C语言的for循环语句的工作原理是非常的有必要的。也是必须的。

127.0.0.1的博客 1万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

c语言循环语句

本文介绍了C语言中的三种循环语句:while、for和do...while。重点讲解了while循环的结构和使用方法,包括break和continue语句的作用,以及getchar()函数的使用场景。同时详细说明了for循环的语法特点、控制变量建议和变种写法,并对比了do...while循环与其他两种循环的区别。文章通过具体代码示例展示了每种循环的基本用法和注意事项,其中for循环因结构清晰被推荐为主要使用方式。

y3245239334的博客 1633

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

c语言循环结构经典编程例题,C语言循环例题讲解

该楼层疑似违规已被系统折叠隐藏此楼查看此楼循环结构例题讲解以及各种图形(三角形及菱形等)输出案例:1、 输入一周七天的温度,然后求出该周平均温度并打印double sum = 0.0;double temperature = 0.0;for (int i = 1; i &lt;= 7; i ++) {printf("请输入第%d天温度:",i);scanf("%lf", &amp; temper...

weixin_30424427的博客 6786

【C语言学习】C语言语句与程序块全揭秘,5个经典问题深度解析

在C语言中,语句是最小的执行单位。表达式语句:由表达式和分号组成。复合语句:由花括号{}包围的一组语句组成。控制语句:用于控制程序的执行流程,如ifforwhile等。通过本文的介绍,相信大家对C语言的语句与程序块有了更全面的了解。理解这些概念对于编写正确且高效的代码至关重要。希望这篇文章能够帮助你在C语言的学习之路上更进一步。如果你有任何疑问或建议,欢迎在评论区留言交流。让我们一起享受编程的乐趣吧!😊。

java专栏 1951

C语言——分支语句 and 循环语句

分支语句与循环语句

小小小智_x0__0x_的博客 4685

c语言分支循环语句

大家好!今天为大家带来的是有关分支与循环语句的相关内容,希望对您有所帮助。

qiuyunoqy的博客 1771

初学C语言 - 循环语句

在有序数组中,按照传统的方法一个一个的查找效率太低,且费时间,而这里所展示的方法为折半查找,下面为你讲解什么是折半查找。以上为我近期学习到的一些C语言知识,希望对你有所帮助,同时我也会更加努力的学习C语言,争取成为一匹编程界的黑马!当 switch 表达式的值并不匹配所有的 case 标签的值时,这个 default 子句后面的语句就会执行。在需要执行的代码较多时,这三个部分之间的距离可能会变远,使读者不容易理解。,所以不输出,随后跳出第二次的内部循环,第三次则同理,所以一共输出三次。

E_Lonely的博客 1917

【C语言】循环语句(while循环、do-while循环、for循环、break、continue、goto语句)

讲解了C语言中有关循环语句、break、continue、goto语句相关知识点

2401_85970869的博客 2330

【C语言极简自学笔记】C 语言 for 循环语句:从基础到进阶的全面解析

for循环是 C 语言中最灵活的循环工具,其核心优势在于将循环的初始化、条件判断、变量更新集中在一行代码中,适合处理固定次数或有明确循环变量的场景。掌握以下几点可让你更高效地使用for语句: 基础语法:牢记三部分表达式的作用和执行顺序。 灵活应用:根据场景省略部分表达式,利用逗号表达式控制多变量。 避坑技巧:注意边界条件、变量作用域和死循环问题。

LQYYDSY的博客 3531

C语言分支、循环语句和转向语句

分支语句if switch 循环语句while for do……while 转向语句break continue return goto 区别

CcCcCyicunzai的博客 1475

C语言中的循环语句

在多层循环代码中,如果想要跳出循环,使用break语句不太便利,因为一个break只能跳出一层循环,多层就要使用多个break,不太方便,但如果使用goto语句将会直接快速的跳出循环,十分便利。当然,不是只有do...while语句这一种算法,但是这个代码更适合使用 do...while 循环,由于这个循环至少执行一次,所以即使在 n=0 的时候也是会统计位数的。只要break被执行,那么beak外的第一层循环就终止了,所以如果在循环中,想要在某种体条件下终止循环,可以借助于 break语句来完成。

wzsygcg的博客 1815
上一篇: 有关C语言的分支语句(含常见错误讲解与例题)
下一篇: 扫雷游戏 ||C语言实现
宋恩淇要努力
博客等级 码龄2年 108粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值