1.while语句
while语句用来构成当型循环,多用于解决循环次数事先不确定的问题。形式:
while(表达式)
{
循环体
}
功能:先判断表达式值的真假,若为真(非零)时,就执行循环体;否则,退出循环结构。
结构:
① 从何处来 ② 到何处去 ③ 如何修改循环变量 ④ 在条件满足情况下做什么事情;
循环的初始值+循环条件+循环体+循环变量的增量+具有唯一真值的表达式
流程:如图所示
注意:
-
while语句中的表达式一般是关系表达式或逻辑表达,也可以是数值表达式或字符表达式,只要其值为真(非0)即可继续执行循环体
-
循环体语句可以为任意类型,循环体如果包含一个以上的语句,应该用花括号起来,以复合语句的形式出现。如果不用花括号,则while语句的范围只到while后面第一个分号处。
-
在循环体中应该有使循环趋向于结束的语句,以避免死循环
-
允许while语句的循环体中包含另一个while语句,从而形成循环的嵌套
例1:输入一行字符,按字母、数字、和其他分成三类,分别统计各类字符的数目('\n’)不在统计范围内。
3个整型变量,为其统计各自数目的计算器
int a, //字母
int b, //数字
int c //其它
算法分析:
① 将各位计数器变量值置为0;
② 读入字符
③ 检查c是否换行符,如果不是,则检查c符合哪种字符条件,并将相应计数器变量的值加1,然后转步骤③循环;如果c是换行符,则结束循环,转为步骤⑤
④ 输出结果
#include "stdio.h"
main()
{
printf("请输入一行字符:\n");
char c;
int a=0,b=0,d=0;
while((c=getchar())!='\n')
{
if(c>='a'&&c<='z'||c>'A'&&c<'Z')
{
a++;
}
else
{
if(c>='0'&&c<='9')
{
b++;
}
else
{
d++;
}
}
}
printf("字母有:%d\n",a);
printf("数字有:%d\n",b);
printf("符号有:%d\n",d);
return 0;
}
例2:输入一正文,统计正文包含的行数、字数、字符数
算法分析:
(1)将标志位state置为初值0,表示字符不在子字,各计数器变量均为0;
(2)读一个字符c,如果不是EOF,则进行:
① 字符数+1;
② 若c是行数则行数+1;
③ 若c是空格符、换行符、制表符,则将标志置为0,表示c字符不在字中;若c为非空白符,如果标志位为0(表示c是字符的第一个字符)则将字数+1,并修改标志位为1(表示当前字符c是一个字中的字符)
④ 循环步骤2
⑤ 如果c是EOF,则循环结束,转步骤3
(3)输出结果
#include "stdio.h"
#define IN 1
#define OUT 0
main()
{
int c,nl,nw,nc,state; //nc:字符数 nl:行数 //nw:字数
state=OUT;
nl=nw=nc=0;
printf("请输入内容并以ctrl+z为结束:\n");
while((c=getchar())!=EOF) //不等于-1,即为真
{
++nc;
if(c=='\n')
{
++nl;
}
if(c=='\t'||c==' '||c=='\n')
{
state=OUT;
}
else
{
if(state==OUT)
{
state=IN;
++nw;
}
}
}
printf("字符数:%d\n",nc);
printf("行 数:%d\n",nl);
printf("字 数:%d\n",nw);
return 0;
}