出售域名!

5. 嵌套循环

上一节求素数的例子在循环中调用一个函数,而那个函数里面又有一个循环,这其实是一种嵌套循环。如果把那个函数的代码拿出来写就更清楚了:

例 6.2. 用嵌套循环求1-100的素数

#include <stdio.h>





int main(void)


{


	int i, j;


	for (i = 1; i <= 100; i++) {


		for (j = 2; j < i; j++)


			if (i % j == 0)


				break;


		if (j == i)


			printf("%d\n", i);


	}


	return 0;


}

现在内循环的循环变量就不能再用i了,而是改用j,原来程序中is_prime函数的参数n现在直接用i代替。在有多层循环或switch嵌套的情况下,break只能跳出最内层的循环或switchcontinue也只能终止最内层循环并回到该循环的开头。

用循环也可以打印表格式的数据,比如打印小九九乘法表:

例 6.3. 打印小九九

#include <stdio.h>





int main(void)


{


	int i, j;


	for (i=1; i<=9; i++) {


		for (j=1; j<=9; j++)


			printf("%d  ", i*j);


		printf("\n");


	}


	return 0;


}

内循环每次打印一个数,数与数之间用两个空格隔开,外循环每次打印一行。结果如下:

1  2  3  4  5  6  7  8  9  


2  4  6  8  10  12  14  16  18  


3  6  9  12  15  18  21  24  27  


4  8  12  16  20  24  28  32  36  


5  10  15  20  25  30  35  40  45  


6  12  18  24  30  36  42  48  54  


7  14  21  28  35  42  49  56  63  


8  16  24  32  40  48  56  64  72  


9  18  27  36  45  54  63  72  81

结果有一位数的有两位数的,这个表格很不整齐,如果把打印语句改为printf("%d\t", i*j);就整齐了,所以Tab字符称为制表符。

习题

1、上面打印的小九九有一半数据是重复的,因为8*9和9*8的结果一样。请修改程序打印这样的小九九:

1	


2	4	


3	6	9	


4	8	12	16	


5	10	15	20	25	


6	12	18	24	30	36	


7	14	21	28	35	42	49	


8	16	24	32	40	48	56	64	


9	18	27	36	45	54	63	72	81

2、编写函数diamond打印一个菱形。如果调用diamond(3, '*')则打印:

	*


*	*	*


	*

如果调用diamond(5, '+')则打印:

		+


	+	+	+


+	+	+	+	+


	+	+	+


		+

如果用偶数做参数则打印错误提示。


Host by Unixetc