变量c,数值既不是大写字母也不是小写字母,所以直接执行putchar (c);输出ASCII码为1
。当从键盘是接收的字符是回车符时,返回值0,条件为假,退出循环。
3. 若本题改为,从键盘输入任意一串字符,以’#’号键结束时,while循环的循环条件表达式可修改为: (c=getchar())!='#' 。
【4.6】编程实现,利用循环嵌套在屏幕上显示如下图形。程序文件名ex4_6.c。
分析:打印图形的程序设计的算法是将图形看作是由行和列组成字符图案,采用双循环结构,外循环控制图形的行数,内循环控制每一行输出的字符。该图形总共7行,第一行看上去只的一个“*”,但输出时先要输出6个空格,再输出1个“*”,第二行先输出5个空格,再输出3个“*”,依次规律输出每行的字符。
每行应由两种字符组成的图案,一个字符是空格,一个字符是星号。因此,内循环采用两个并行循环,第一个循环控制每行空格输出的个数,第二个循环控制每行“*”输出的个数。
由于每行的空格个数和“*”号数都不一样,因此内循环次数不是一个固定值,根据每行空格或“*”个数的规律设置内循环的循环条件。若以第七行第一个“*”为坐标原点,则每行上空格的个数变化可设置为k<6-i。用变量i表示行数,用变量j表示每行上打印“*”的个数,则每行上“*”的个数变化可设置j<2*i+1。
#include <stdio.h>
void main()
{
int i,j,k;
for (i=0;i<7;i++) /*外循环控制图形的行数*/
{
for (k=0;k<6-i;k++) /*循环控制每行的空格数*/
printf(" ");
for (j=0;j<2*i+1;j++) /*循环控制每行的星号个数*/
printf("*");
printf("\n"); /*每输完一行图形字符须换行*/
}
}
小结:
1. 通常情况下图形打印采用双循环结构。外循环控制图形的行数,内循环控制每行的字符个数。内循环的循环次数不是一个固定值,一般需要找出循环次数与外层循环控制变量之间的关系,以便确定内层循环的次数。
2. 外循环的循环体的最后一条语句通常是printf("\n"); 语句,控制每行的换行。
3. 本程序使用了三个循环结构,其中第一个循环和第二、第三个循环是嵌套关系,而第二与第三个循环之间是并列关系。 循环嵌套编程时,内外循环的循环控制变量必须不相同,否则会出错。但并行循环时循环控制变量可以相同,互不干涉。