C语言-第十一周课堂总结-循环结构

循环语句的选择

  • 主要考虑因素-循环控制方式
    • 事先给定循环次数,首选for
    • 通过其他条件控制循环,考虑while 或do-while

例4-8 输入一批学生的成绩,求最高分(for)

题解

  • 假设读入的读入的第一个成绩是最高分,接下来每读入的一个数都要和最高分比较,如果大于之前的最高分,则将其赋值给max,以此循环

例4-9 Filbonacci 数列问题

题解

  • 需要额外处理前两个月
  • 此后用循环,递归,反复将前两个月的总数赋值给两个变量

代码

int N, sum, count, x, y;
	scanf("%d", &N);
	sum = 0;
	count = 1;
	x = 1;
	y = 1;
	
	while ( sum < N )
	{
		if ( N == 1 )
		{
			sum = 1;
			count ++;
		}
		else
		{
			while ( count < 3 )
			{
				sum = 1;
				count++;
			}
			if ( count % 2 != 0 )
			{
				sum = x + y;
				x = sum;
				count++;
			}
			else
			{
				sum = x + y;
				y = sum;
				count++;
			}
	    }
	}
	printf("%d\n", count - 1);

例4-10 素数问题

题目

输入 2 个正整数 m 和 n(1<=m<=n<=500),输出 m
到 n 之间的全部素数,每行输出 10 个。

题解

  • 用一个循环遍历从m到n的所有数,如果是素数,则输出
  • 在循环的过程中同时计数,当计数的变量能被10整除时,输出一个换行符
  • 第一层循环遍历从m到n的所有数,然后判断k是否为1或2,若不是,则进入第二层循环,另取一个变量i,让其从1开始到sqrt(k)+1结束,遍历,再次循环中插入判断语句,如果k能被i整除,则改变判断变量的值并结束循环,到k的下一个数,如果所有的i都不能被k整除,则判断变量的值不变,输出

例4-11 古典算术问题-搬砖问题

题目

某地需要搬运砖块,已知男人一人搬 3 块,女人一人搬 2 块,小孩两人搬 1 块.
问用 n 人正好搬 n 块砖,有多少种搬法?

题解

  • 首先要挖掘其中的制约关系,从而提高效率
  • 男人最多有n/3个,女人最多有n/2个,小孩最多有n-man-women个
  • 此题需要用到三层循环,最外层为man的循环,最内层为child的循环

例4-12 找零钱问题

题目

有足够数量的 5 分、 2 分和 1 分的硬币,现在要用这些硬币来
支付一笔小于 1 元的零钱 money,问至少要用多少个硬币?
输入零钱,输出硬币的总数量和相应面额的硬币数量。

题解

  • 硬币总数最小:优先考虑使用面值大的硬币,采用三重循环嵌套,按照 5 分、 2 分和 1 分的顺序,从上限 (money/币值) 到下限 (0)

本章总结

  • 循环结构以及循环机制
  • break与continue语句
  • 嵌套循环
  • 综合程序设计(循环结构)
  • 常用算法
    • 例题:求 π、拆分整数、求素数、猜数、求最值、求 fibonacci、找零钱
    • 习题:求水仙花数、求最大公约数/最小公倍数、求 ddd
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值