编程菜鸟到大佬之路:C语言程序(七)

第七天学习精要

for循环


for循环语句

  • for循环一般用于将某段代码(语句组)重复执行若干次。
    • 第一步:计算“表达式1”。
    • 第二步:计算“表达式2”,若其值为true,则执行“{ }”中的语句组,然后转到第三步;若为false,则不再执行“{}”中的语句组,for语句结束,转到第五步。
    • 第三步:计算“表达式3”。
    • 第四步:转到第二步。
    • 第五步:从for语句后面继续往下执行程序。
      for( 表达式1 ;表达式2;表达式3) {
          语句组
      }
      
# include <iostream>
using namespace std;
int main()
{
	int i;	// i是循环控制变量
	for (i = 0; i < 26; ++i)
	{
		cout << char('a' + i);	// 'a'+i强制转换成char类型
	}
	return 0;	
} 

# 第二种写法
# include <iostream>
using namespace std;
int main()
{
	for (int i = 0; i < 26; ++i)
	// 语句组里只有一条一句就可以不用写”{ }”
		cout << char('a' + i);	
	return 0;
}
  • 循环控制变量定义在"表达式1"中,则其只在for语句内部起作用,可以不用担心循环控制变量重名

  • 循环控制变量并非每次只能加1,for循环可以嵌套,形成多重for循环。

  • for循环结构里的“表达式1”和“表达式3”都可以是用逗号连接的若干个表达式。

for( int i= 15, j = 0; i > j; i-=2, j+= 3)
    cout << i << "," << j << endl;
  • 例题: 写一个程序,输入一个正整数n,从小到大输出它的所有因子。
# include <iostream>
using namespace std;
int main()
{
	int n;
	cin >> n;
	for (int i = 1; i <= n; ++i)
	{
		if (n % i == 0)
			cout << i << endl;
	}
	return 0;
}
  • 例题: 给定正整数n和m,在1至n这n个数中,取出两个不同的数,使得其和是m的因子,问有多少种不同的取法。
# include <iostream>
using namespace std;
int main()
{
	int n, m, total = 0;	// total表示取法总数 
	cin >> n >> m;
	for (int i = 1; i < n; ++i)		// 取第一个数,共n-1种取法 
	{
		// 第二个数要比第一个数大,以免取法重复
		for (int j = i + 1; j <= n; ++j)	
		{
			if (m % (i + j) == 0)
				total += 1;
		}		
	}
	cout << total;	
	return 0;
}
  • for 语句括号里面的“表达式1”,“表达式2”,“表达式3”任何一个都可以不写,甚至可以全都不写,但是“;”必须保留

  • 可以用 break 语句从 for( ; ;)死循环中跳出

while循环和do…while循环


while循环

  • 并非到达指定次数,而是满足某条件时即停止循环,则适合用while语句来实现循环
    • 第一步:判断“表达式”是否为真,如果不为真,则转第四步。

    • 第二步:执行“语句组”。

    • 第三步:转第一步。

    • 第四步:while语句结束,继续执行while语句后面的语句。

      while(表达式) {
          语句组
      }
      
  • 例题:输入若干个(至少1个)不超过100的正整数,输出其中的最大值、最小值以及所有数的和。输入的最后一个数是0,标志着输入结束
# include <iostream>
using namespace std;
int main()
{
	int min = 150, max = 0, n, sum = 0;
	cin >> n;
	while (n <= 100 && n > 0)
	{
		if (n > max)
			max = n;
		if (n < min)
			min = n;
		sum = sum + n;
		cin >> n;
	}
	cout << max << "," << min << "," << sum;
	return 0;
}
  • 例题:用牛顿迭代法求输入的数的平方根
    • 欲求a的平方根,首先猜测一个 x 1 x_1 = a / 2 a/2 (也可以是随便什么其他值)作为其平方根
    • 根据迭代公式: x n + 1 = ( x n + a / x n ) / 2 x_{n+1} = (x_n + a / x_n) / 2 算出 x 2 x_2
    • 再将 x 2 x_2 代入公式右边算出 x 3 x_3 ……
    • 直到连续两次算出的 x n x_n x n + 1 x_{n+1} 的差的绝对值小于某个值ε,即认为找到了足够精确的平方根。
    • 这个ε值取得越小,计算出来的平方根就越精确。
# include <iostream>
using namespace std;
double EPS = 0.001; //用以控制计算精度
int main()
{
	double a;	// 输入a,要求a的平方根
	cin >> a;
	if (a >= 0)
	{
		double x = a / 2;
		double lastX = x + 1 + EPS;		// 确保能够进行至少一次迭代
		//只要精度未达要求,就继续迭代
		while (x - lastX > EPS || lastX - x > EPS)
		{
			lastX = x;
			x = (x + a/x)/2;
		}
		cout << x;
	}
	else
	{
		cout << "It can't be nagitive.";

	}
	return 0;
}

do…while循环

  • 如果希望循环至少要执行一次,就可以使用do…while语句。

  • 每执行一次循环后,都要判断“表达式”的值是否为真,如果真就继续循环,如果为假,就停止循环。

    扫描二维码关注公众号,回复: 3462048 查看本文章
do {
    语句组
} while(表达式);
  • 输出1到10000以内所有2的整数次幂:
int n = 1;
do {
    cout << n << endl;
    n *= 2;
} while( n < 10000);

猜你喜欢

转载自blog.csdn.net/faker1895/article/details/82925960