ps:
第一次写,网上看到说边学边写博客更好,于是趁着放假就写了,目前在学,看完了明解c语言,现在在看c primer plus,刚复习完循环。
while循环
基本形式为:while(表达式)
当表达式为”真“时开始循环,当表达式为”假“时结束,在c语言中”真“的范围很广,数字中除了0以外的数都为真,而0为假。
在用while循环的时候要小心条件的设置,不要写出无限循环的程序
#include <stdio.h>
int main()
{
while(1)
putchar('*');
return 0;
}
这个例子就是表达式一直判定为真,会无限打印出 * 。
while的范围
while的范围另外循环的判定范围一般为while的下一行,如果要使用更复杂的循环就要在加上{}限定范围
#include <stdio.h>
int main()
{
int i=0;
while(i<5)
{
putchar('*');
i++;
}
return 0;
}
while判定“真”的范围还可以是许多其他的表达式如(4<5)也会被认为是”真“然后返回数字1. 或者scanf输入不为数字会被认为”假“返回数字0,有的时候会用bool来做条件,bool只有1或0。
do...while循环
基本形式为:do{
}while(表达式);
表达式内容为执行循环的条件,while后面是加分号的。
#include <stdio.h>
int main()
{
int i=10;
do
{
putchar('*');
i--;
}while(i>0);
return 0;
}
while和do的主要区别
while和do...while看起来好像没什么区别,但是其实还是有一个主要的区别的。
while根据表达式可能不会执行循环,但是do一定要执行至少一次循环,例如i=1,表达式为i>1,while就不会执行,但是do至少要执行一次。
for循环
基本形式(表达式1;表达式2;表达式3)
表达式1为初始化,表达式2为判断是否继续循环的条件,表达式3为对于表达式的更新
#include <stdio.h>
int main()
{
int i;
for(i=0;i<5;i++)
printf("%d",i);
return 0;
}
for内的3个表达式是可以多样化的
#include <stdio.h>
int main()
{
int i,j;
for(i=0,j=5;i<5;i++,j--)
printf(" %d %d \n",i,j);
return 0;
}
表达式的内容可以用逗号分开,然后用分号结束
简单嵌套:
嵌套在循环中十分常见,多重嵌套是经常的
#include <stdio.h>
#define num 5
int main()
{
int i,j;
for(i=1;i<=num;i++)
{
for(j=0;j<i;j++)
putchar('*');
putchar('\n');
}
return 0;
}
\\*#define是一个对象式宏,具体就是将num替代了5*\\
结果:
稍微复杂一点的:
#include <stdio.h>
#define num 5
int main()
{
int i,j;
char ch;
for(i=1;i<=num;i++)
{
for(j=0;j<num-i;j++)
putchar(' ');
for(j=0,ch='A';j<i;j++,ch++)
printf("%c",ch);
for(j=0,ch-=2;j<i-1;j++,ch--)
printf("%c",ch);
putchar('\n');
}
return 0;
}
学生分数分布竖表:
这是我学完循环写的一张表
#include <stdio.h>
#define number 80
int main()
{
int n,m=0;
int a,b;
int group[11] = { 0 };
int num[number];
printf("请输入学生数量:");
do {
scanf("%d", &n);
if (n<0 || n>number)
printf("请输入1~%d的数:", number);
} while (n<0 || n>number);
printf("请输入%d人的分数\n", n);
for (a = 0; a < n; a++)
{
printf("%2d号:", a + 1);
do {
scanf("%d", &num[a]);
if (num[a] < 0 || num[a]>100)
puts("请输入1~100的数");
} while (num[a] < 0 || num[a]>100);
group[num[a] / 10]++;
}
puts("\n---数据表---");
for (a = 0; a < 10; a++)
{
printf("%3d~%3d:", a * 10, a * 10 + 9);
for (b = 0; b < group[a]; b++)
;
printf("%d人", b);
putchar('\n');
}
printf(" 100:");
for (b = 0; b < group[10]; b++)
;
printf("%d人", b);
puts("\n--------------------分布图-------------------");
for (a = 0; a < 11; a++)
{
if (m < group[a])
m = group[a];
}
for (a = m; a > 0; a--)
{
for (b = 0; b < 11; b++)
{
if (group[b] >= a)
printf(" * ");
else
printf(" ");
}
putchar('\n');
}
puts("---------------------------------------------\n");
for (a = 0; a < 11; a++)
printf(" %d ", 10 * a);
return 0;
}
\\*这是竖表麻烦一点,横表简便一些*\\