C 语言——循环

  • 顺序执行语句序列
  • 在满足某个条件之前反复执行一个语句序列(循环)
  • 通过进行一个判断在两个可选的语句序列之间选择执行(分支)

一.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关键字,这些是定义并使用具有返回值的函数时的基本要素。

 

七.循环注意:

  • 明确定义结束循环的条件。
  • 确保循环判断中使用的值在第一次使用之前已经初始化。
  • 确保循环在每个周期中更新了判断值。
原文地址:https://www.cnblogs.com/mutouyky/p/8283932.html