- 顺序执行语句序列
- 在满足某个条件之前反复执行一个语句序列(循环)
- 通过进行一个判断在两个可选的语句序列之间选择执行(分支)
一.while循环
1.while循环是一个入口条件循环,即先进行条件判定在决定是否执行while语句,条件为真则执行,否则反之。
2.当您构造一个while循环时,循环中必须包含能改变判断表达式的值最终变为假。否则循环永远不会停止。
/*输入系列数并求和*/
int n;
int sum=0;
printf("Please enter some number:");
while((scanf("%d",&n))==1) //C语言风格
{
sum += n; //相当于sum=sum+n;
}
printf("%d",sum);
已知scanf()函数返回读入项目的个数,如果您输入一个非数字,那么scanf()返回0,条件判断为假,循环则终止。
3.判断条件中使用的是关系运算符,它们不能用来比较字符串。用于浮点数的时候只能用<和>。因为舍入误差可能导致两个数不想等,例如:3和1/3的乘积应该是1.0,如果您用6位小数表示1/3,成绩就是.999999而不等于1.
4.在c中,更一般的来说,只要非零值都被认为真,只有0被认为是假。当然,关系表达式为真,则值为1,为假,则为0.
while(goats!=0)可被while(goats)取代,作为C程序员您应该熟悉后者表达。它们都是只有在goats值为0时才为0或假。
5.计数循环:它们循环执行预先确定的次数。
- 必须初始化一个计数器
- 计数器与某个有限的值进行比较
- 每次执行循环,计数器的值都要递增。
const int number=10;
int count=1;
while(count<=number)
{
printf("#");
count++;
} //循环执行10次,当count增加到11时退出循环,此时输出结果为“##########”(10个)
二.for循环
for循环也是入口条件循环。
for(初始化;判断;更新)
statement
初始化只在循环开始前执行一次,其后不在执行;然后判断,结果为真,则执行一次循环;再接着计算更新值,接着再检查判断执行语句。
在每个表达式中可以添加逗号使用多个初始化或更新表达式。
您也可以直接为:
for(;;)
printf("I am student.
");
中间的那个控制表达式为空将被认为是真,所以循环会永远执行。
涉及到初始化和更新变量、索引计数的循环时使用for循环较为恰当,其他条件下使用while循环好一些。
三.退出条件循环:do while
do{
statement
}while(判断); //特别注意最后的(;)符号
先执行一次,再进行判断,为真,则返回继续执行,为假,退出循环。
四.嵌套循环
- 通常使用嵌套循环来按行按列显示数据,内循环处理一个行中的所有列,外循环处理所有行。
#include <stdio.h>
#define ROWS 6
#define CHARS 10
int main(void)
{
int row;
char ch;
for(row=0;row<ROWS;row++) //外循环处理所有的行
{
for(ch='A';ch<('A'+CHARS);ch++) //内循环处理每一个行中的所有列
{
printf("%c",ch);
}
printf("
"); //使得每个列换行,在内循环外,外循环内
}
return 0;
}//内部循环在外部循环的每次单独循环中都完全执行它的所有循环
输出结果:
- 嵌套变化
通过使内部循环的一部分依赖于外部循环,可以使内部循环在每个周期中的表现不同
const int ROWS=6;
const int CHARS=6;
int row;
char ch;
for(row=0;row<ROWS;row++)
{
for(ch=('A'+row);ch<('A'+CHARS);ch++) //使内部循环的开始字符依赖于外部循环的循环次数
printf("%c",ch);
printf("
");
}
输出结果:
五.初试数组
一个数组就是线性存储的一系列相同类型的数。
字符数组,但不是字符串
即是字符数组,又是字符串
假设我要进行10个数的求和,使用数组的方法则是:
#include <stdio.h>
#define SIZE 10
int main(void)
{
int index,num[SIZE];
int sum=0;
for(index=0;index<SIZE;index++)
scanf("%d",&num[index]); //读入10个数,即使你多输入了几个数,数组还是只读入10个数,因为他的大小只有10
printf("The number as follows:
");
for(index=0;index<SIZE;index++) //验证输入
printf("%5d",num[index]);
printf("
");
for(index=0;index<SIZE;index++) //求和
sum +=num[index];
printf("The sum of these number is:%d",sum);
return 0;
}
下面代码可以很方便处理一个大小为SIZE的数组
for(index=0;index<SIZE;index++) //数组下标从0开始到SIZE-1
六.使用函数返回值的例子
#include <stdio.h>
double power(double n,int p); //函数原型
int main(void)
{
double x,xpow;
int exp;
printf("Please enter:
");
while(scanf("%lf%d",&x,&exp)==2)
{
xpow=power(x,exp); //函数调用,并传递给它两个值
printf("%.3g to the power %d is %.5g
",x,exp,xpow);
printf("Please enter:
");
}
printf("bye!
");
return 0;
}
double power(double n,int p) //形式参量n,p接受调用函数的实际参数x,exp的传递赋值
{
double pow=1;
int i;
for(i=1;i<=p;i++)
pow*=n;
return pow; //返回double类型的pow值赋值给xpow
}
声明函数、调用函数、定义函数、使用return关键字,这些是定义并使用具有返回值的函数时的基本要素。
七.循环注意:
- 明确定义结束循环的条件。
- 确保循环判断中使用的值在第一次使用之前已经初始化。
- 确保循环在每个周期中更新了判断值。