当前位置: 首页 > news >正文

C语言——循环的嵌套小练习

目录

  • :bell:前言:为什么循环的嵌套以`for`为主:question:
  • :writing_hand:练习题:
    • :one:打印矩形
      • 1.1、`for`的嵌套
      • 1.2、`while`的嵌套
      • 1.3、`do while`的嵌套
    • :two:打印等腰直角三角形
    • :three:打印九九乘法表
    • :four:打印1-100之间的素数

📝练前预警:
我们前面是已经学习了循环结构(for、while、do while)以及跳转语句(break、continue)还有跳转语句goto,如果没有学习过这个的可以打开下面链接进行学习,以便后面的练习不会看不懂代码

  • 🔗循环结构和跳转语句的学习
  • 🔗跳转语句goto的学习

🔔前言:为什么循环的嵌套以for为主❓

  • 在前面学习了循环结构,这三种循环常常是会嵌套起来使用的,以便更好的解决问题
  • 在循环结构的嵌套中,我们常常是使用for循环来进行嵌套

为什么呢?

  • 因为for循环因其结构清晰、控制集中、与常见编程模式高度匹配而成为首选,特别是在处理数组、矩阵和固定次数的迭代时表现最佳。
  • 另两个循环结构会非常的冗长,结构不清晰,若嵌套多的话可读性降低,后面会有一个例子可以比较理解

✍️练习题:

这些练习题是由易到难(只对难的有详细的解释和注释),注意理解

1️⃣打印矩形

练习1:

  • 要求:用*来打印3*7大小的矩形
  • 下面是三种循环的嵌套,后面的练习题只会使用for循环的嵌套,如有要练习的可以自行练习

1.1、for的嵌套

for循环:
#include<stdio.h>
int main()
{int i = 0;	//行int j = 0;	//列for (i = 1; i <= 3; i++)	{for (j = 1; j <= 7; j++)printf("*");	//打印完7列的 * 后第一层for循环结束/*第一层for循环结束,我们要换行,不然会导致原本第二行的 * 紧跟着打印,最后变成一行而不是三行了*/printf("\n");		}return 0;
}

1.2、while的嵌套

while循环:
#include<stdio.h>
int main()
{int i = 1;	//行while (i <= 3){int j = 1;	//列while (j <= 7){printf("*");j++;		}printf("\n");i++;		//打印完第一行后自增,打印第二行,直到打印完第三行后条件不满足,结束}return 0;
}

1.3、do while的嵌套

do while循环:
#include<stdio.h>
int main()
{int i = 1;do{int j = 1;do{printf("*");j++;} while (j <= 7);printf("\n");i++;} while (i <= 3);return 0;
}
  • 我们可以看到上面的三个代码,它们想表达的意思是一样的,但它们所写的形式有所差别,其中for循环的是最为简便,理解起来也是比较好的,代码也比较简短清晰

2️⃣打印等腰直角三角形

练习2:

  • 要求:可以自定义输入三角形的行号,输出对应的三角形
  • 我们在打印*时我们为了显得等腰,我们可以在* 后面加个空格
#include <stdio.h>
int main()
{int i=0;int n=0;printf("请输入三角形的行号:");scanf("%d",&n);for(i=1;i<=n;i++)	{int j=1;for(j=1;j<=i;j++){printf("* ");}printf("\n");}return 0;
}

3️⃣打印九九乘法表

练习3:

  • 要求:九九乘法表要每行打印阶梯状
  • 每行的表达式之间要有跳格符
    • 比如:
    • 1*1=1
    • 1*2=2 2*2=4
    • 1*3=3 2*3=6 3*3=9
#include <stdio.h>
int main()
{    int i=0;	for(i=1;i<=9;i++)		{		int j=1;		for(j=1;j<=i;j++)		{			printf("%d*%d=%d\t",j,i,i*j);		}		printf("\n");	}    return 0;
}

4️⃣打印1-100之间的素数

练习4:

  • 找出1-100之间的素数
    • 素数(质数),只能被1和本身整除的整数,如2、3、5…
  • 要求:
    • 5个素数换一行
    • 每个素数之间要跳格
  • 练习前的理解:
    • way1、可以用i2 ~ (i-1)范围内的数字,如果被整除成功就不是素数
    • way2、用平方根:(这个作为拓展,建议尝试理解学习)
      在这里插入图片描述
方法一:
#include<stdio.h>
int main()
{int i = 0;	int count = 0;	//计算素数的个数for (i = 1; i <= 100; i++){int j = 0;for (j = 2; j < i; j++)		//得到2~(i-1)的数{/*当i=1,j(2)<i(1) 这个条件为假,不执行for循环,到if语句j(2)>=i(1)为真但因为 i(1)>1为假,不打印当i=2,j(2)<i(2) 这个条件为假,不执行for循环,到if语句j(2)>=i(2)为真,打印素数值当i=3,j(2)<i(3) 这个条件为真,进入for循环,i(3)%j(2)==0 为假,不跳离,j++,j=3,j(3)<i(3) 这个条件为假,到if语句j(3)>=i(3)为真,打印素数值当i=4,j(2)<i(4) 这个条件为真,进入for循环,i(4)%j(2)==0 为真,跳离,到if语句j(2)>=i(4)为假,不打印*/if (i % j == 0)	//判断非素数break;}if (j >= i && i > 1)	//因为1、2都无法通过上面的for循环,1是非素数(因此我们加一个判断条件i>1,避免打印非素数1){count++;printf("%d\t", i);if (count % 5 == 0)		//每五个素数,换一次行printf("\n");}	}return 0;
}

方法二:
不建议:利用goto跳转语句:
#include <stdio.h>
#include<math.h>	//下面用sqrt()开方函数需要包括的头文件
int main()
{int i = 0;int count = 0;	//计数//goto的标签(start)
start:i++;		// 首先i=1if (i > 100)	//i超过100,不在计算范围内,跳转到return 0;goto end;int j = (int)sqrt(i);		//j接收i的开方值if (i == 1)		//如果i为1,直接算第二个值,因为1是非素数goto start;for (j = 2; j <= (int)sqrt(i); j++)	//判断是否为素数{if (i % j == 0)		//非素数,直接回到最开始,算下一个值,来进行判断是否为素数goto start;}count++;		//是素数,计数加一printf("%d\t", i);		//打印素数值if (count % 5 == 0)printf("\n");goto start;		//计算完一个素数值,要回到最初,算下一个是否为素数//100以内的判断素数结束
end:return 0;
}
***************************************
***************************************
也可以这样写:
#include <stdio.h>
#include<math.h>	//下面用sqrt()开方函数需要包括的头文件
int main()
{int i = 0;int count = 0;	//计数//goto的标签(start)
start:i++;		// 首先i=1for (; i <= 100; i++){int j = (int)sqrt(i);		//j接收i的开方值if (i == 1)		//如果i为1,直接算第二个值,因为1是非素数goto start;for (j = 2; j <= (int)sqrt(i); j++)	//判断是否为素数{if (i % j == 0)		//非素数,直接回到最开始,算下一个值,来进行判断是否为素数goto start;}count++;		//是素数,计数加一printf("%d\t", i);		//打印素数值if (count % 5 == 0)printf("\n");goto start;		//计算完一个素数值,要回到最初,算下一个是否为素数;当i=100时,回到最初,i++,i=101,但因为for循环条件不满足,只能离开循环,结束}return 0;
}

方法二:
推荐:简化代码(不使用goto)#include <stdio.h>
#include<math.h>
int main()
{int i = 0;  //i 是100以内的整数int count = 0;  //计数(计算素数的个数)for (i = 1; i <= 100; i++){int flag = 1;   //标记flag素数是1int j = (int)sqrt(i);    //得到i 的平方根,此时sqrt(i)得到的数是double类型,要转换为int类型for (j = 2; j <= (int)sqrt(i); j++)  //除了1和其本身,所以从2开始取余;这个会导致1、2、3无法进入循环判断是否是素数{if (i % j == 0)     //判断会不会被整除(整除就非素数){flag = 0;   //不是素数,标记falg为0break;}}if (i == 1)     //因为 1 无法进入循环判断是否为素数,我们就手动定义flag = 0;//为什么2、3也无法进入循环判断是否为素数,而我们不用定义呢?//是因为我们最开始就认为100以内所有的数都为素数了,我们只需要将非素数的标记flag为0就可以了if (flag == 1)  {count++;printf("%d\t", i);/*下面的if语句最好在 if (flag == 1)  里面,是因为如果在外面的话count=0会打印一次换行当count=5时,打印一次换行,后面如果是非素数,count仍然为5,又打印一次空行*/ if (count % 5 == 0)     printf("\n");           } }return 0;
}

✒️小结:

  • 以上就是练习代码,如果有不太理解的代码题,可以在评论区一起讨论学习的。

感谢大家的浏览🌹🌹

http://www.dtcms.com/a/435477.html

相关文章:

  • 阿里云买了域名怎么建网站wordpress电源模板
  • 深入解析 Roo Code:提示词的技术结构与工作原理
  • 旅游网站系统建设方案wordpress页面缓慢
  • 杭州软件网站建设广东深圳职业技术学校
  • 树的遍历方式总结
  • excel做网站链接网站流量一直下降
  • VS2017 安装 .NET Core 2.2 SDK 教程(包括 dotnet-sdk-2.2.108-win-x64.exe 安装步骤)​
  • 模拟算法
  • 网站建设需要收集资料吗网络营销中的四种方法
  • 能源经济选题推荐:绿色电网
  • 展览展示搭建设计晋中网站seo
  • 如何让做树洞网站郑州搜索引擎优化公司
  • 网站制作推广电话阿里云安装wordpress
  • 做网站设计电脑买什么高端本好潜江资讯网手机
  • 教育建设网站网络营销课程总结1000字
  • 在百度里面做个网站怎么做wordpress go链接跳转错误
  • h5网站建设建站刚刚做的网站怎么排名
  • 信用中国 网站 支持建设形象设计
  • MySQL 和 Redis 偏移量分页在数据增删场景下的问题与解决方案
  • 赚钱的十大个人网站场口一站式建站哪家公司好
  • 罗源福州网站建设成都 网站建设公司哪家好
  • 雅联网站建设网站怎么被收录
  • 网站公司怎么做运营商做网站和软件哪个挣钱
  • DeepSeek 最新推出 ‌EX 模型
  • C++之二叉树进阶
  • 重庆网站设计案例没有网站怎么做CPC
  • 算术与比较运算符详解
  • 英语学习-Saints041
  • php 英文网站模板asp.net 大网站
  • 常见的有利于seo的网站系统网站数据没有更新