第五章 循环结构程序设计总结

5.1 引例

【例子】假设今年我国人口总数为13亿,若按每年2%增长,计算从现在开始10年内每年人口数量

#include<stdio.h>
#include<math.h>
int main()
{    int n=13,year;
    double number,rate=0.02;
    for(year=1;year<=10;year++)
    {    number=n*pow((1+rate),year);
        printf("%2d年后,人数:%.2f亿\n,year,number");

    }
    return 0;
}

【例5.2】计算1-4/1+7/1-10/1+13/1-16/1+...的和,直到某一项的绝对值小于10负6次方

#include<stdio.h>
#include<math.h>
int main()
{    double sum,item,flag,denominator;
    sum=0;item=1;flag=1;denomintor=1;
    while(fabs(item)>=le-6)
    {    sum=sum+item;
        flag=-flag;
        denomintor=denomintor+3;
        item=flag/denomintor;
    }
    printf("sum=%f\n",sum);
    return 0;
}

5.2  使用for语句实现循环结构

5.2.1 for语句的 基本语法

for语句的一般形式:

for(表达式1;表达式2;表达式3)

        循环体语句;

1.首先计算表达式1;

2.判断表达式2,若其值为真(非0),则执行循环体语句,然后执行第3步;若值为假(0),结束循环,转到第5步执行。

3.计算表达式3。

4.返回第2步继续执行;

5.循环结束,继续执行for语句的下一条语句;

【例5.3】输入一个正整数n,求sum的值

#include<stdio.h>
int main()
{    int i,n,sum;
    scanf("%d",&n);
    sum=0;
    for(i=1;i<=n;i++)
        sum=sum+i;
    printf("由1到%d的和是:%d\n",n,sum);
    return 0;
}

【例5.4】输入一个正整数n,求n!

#include<stdio.h>
int main(void)
{    int i,n;
    double factorial;
    printf("输入n的值:")
    scanf("%d",&)
    factorial=1;
    for(i=1;i<=n;i++)
        factorial=factorial*i;
    printf("%d!=%.0f\n",n,factorial);
    return 0;
}

2.for语句的一般形式中省略表达式1

格式如下:

                                for(;表达式2,表达式3)

                                        循环语句;

说明:省略表达式1时,可以将循环变量赋初值放在for之前。注意,此时不能省略第一个“;”。

例5.3的循环语句:

for(i=1;i<=n;i++)
    sum=sum+i;

等价于:

i=1;
for(;i<=n;i++)
    sum=sum+i;

3.for语句的一般形式中省略表达式2

格式如下:

                                for(表达式1;;表达式3)

                                        循环体语句;

4.for语句的一般形式中省略表达式3

                        for(表达式1;表达式2;)

                                循环体语句;

例5.4的循环语句:

for(i=1;i<=n;i++)
    factorial=factorial*i;

等价于:

for(i=1;i<=n;)
{    factorial=factorial*i;
      i++;
}

5.for语句的一般形式表达式1和表达式3也可以是逗号表达式

例5.3的程序段:

sum=0;
for(i=1,i<=n;i++)
    sum=sum+i;

等价于:

for(sum=0,i=1;i<=n;i++)
    sum=sum+i;

表达式sum=0,i=1为逗号表达式。

6.for语句的一般形式表达式2的值只要非0,就执行循环体

例如:

for(;(ch=getchar())!='\n';)
    printf("%c",ch)

7.for语句的一般形式中循环语句可以省略

例5.3的循环语句:

for(i=1;i<=n;i++)
    sum=sum+i;

等价于:

for(i=1;i<=n;sum=sum+i,i++);

5.2.2 for循环使用示例

【例5.5】输入一个整数n,计算1-1/4+1/7-1/10+1/13-1/16+...的前n项之和

#include<stdio.h>
int main()
{    int n,i,denominator,flag;
    float sum,item;
    printf("输入n的值");
    scanf("%d",&n);
    flag=1;
    denominator=1;
    sum=0;
    for(i=1;i<=n;i++)
    {    item=flag*1.0/denominator;
        sum=sum+item;
        flag=-flag;
        denominator=denominator+3;
    }
priintf("Sum=%.2f\n",sum);
return 0;
}

 【例5.6】输入10个数,输出其中的最大数

#include<stdio.h>    
int main()
{    int i;
    float x,max;
    printf("请输入第1个数:")
    scanf("%f",&x)
    max=x;
    for(i=1;i<=9;i++)
    {    priintf("请输入第%d个数:",i+1);
        scanf("%f",&x);
        if(x>max)
          max=x;
    }
    printf("10个数的最大值是:%.0f",max);
    return 0;
}

【例5.7】输出所有的水仙花数

#include<stdio.h>
int main()
{    int number,a,b,c;
    for(number=100;number<=999;number++)
    {    a=number/100;
        b=number%100/10;
        c=number%10;
        if(number==a*a*a+b*b*b+c*c*c)    
           printf("%5d",number);
    }
return 0;
}

【例5.8】由键盘输入一个正整数,判断该数是否为完数

#include<stdio.h>
int main()
{    int number,sum,i;
    printf("请输入一个正整数:")
    scanf("%d",&number);
    sum=0;
    for(i=1;i<=number-1;i++)
      if(number%i==0)
       sum=sum+i;
    if(number==sum)
        printf("%d是完数\n",number);
     else
        printf("%d不是完数\n",number);
    return 0;
}

 运行结果2

 

 【例5.9】统计由键盘中输入的若干个字符中,大写英文字母、小写英文字母、数字字符和其他字符的个数。

#include<stdio.h>
int main()
{    int upper,lower,digit,i,other;
     char ch;
    upper=lower=dight=other=0;
    printf("输入10个字符:");
        for(i=1;i<=10;i++)
    {    ch=getchar()
        if(ch>='a'&&ch<='z')
            lower++;
        else if(ch>='A'&&ch<='Z')
            upper++;
        else if(ch>='0'&&ch<='9')    
            digit++;
        else
            other++;
    }
    printf("小写字母%d个,大写字母%d,数字%d个,其他字符%d个\n",lower,upper,digit,other);
    return 0;
}

【5.10】任意输入一行小写字母,将它们转换成大写字母后输出

【例5.11】 由键盘输入3个数字,将其组合成一个整型数并输出

【5.12】由键盘输入一个正整数,判断其是否为素数

运行结果2

 5.3  使用while语句实现循环结构

 5.3.1  while语句的基本语法

while语句一般形式如下:

while(表达式)

        循环体;

while语句的执行流程如图5.3所示

第一步:计算表达式的值,若表达式的值为“真”,则执行第2步;若表达式的值为“假”,则转到第4步。

第二步:执行循环体语句。

第三步:返回第一步。

第四步:结束循环,执行while语句的下一条语句。

注意:while语句的特点是先判断循环条件,后执行循环体。

5.3.2   while循环使用示例

【例5.13】计算sum的值

【5.14】输入一个正整数n,计算n!

【5.15】由键盘输入一串字符,分别统计输入字符中数字字符、字母字符及其它字符个数

5.4 使用 do-while语句实现循环结构

5.4.1 do-while语句的基本用法

do   

        循环体

while(表达式);

do-while语句的执行流程如图5.4所示

1.执行循环体语句;

2.计算表达式的值,若表达式的值为‘真’,返回第一步;若表达式的值为‘假’,则执行第3步;

3.结束循环;

注意:do-while语句的特点是先循环体,后判断循环条件。因此,do-while循环至少要执行一次循环体。

5.4.2  do-while循环使用示例

【例5.16】使用do-while语句计算sum=\sum_{\sum_{n}^{n=1}}^{100}n的值

【例5.17】求两个自然数的最大公约数和最小公倍数

【例5.18】输入一个整数,统计该数的位数

5.5   改变循环结构的跳转语句

5.5.1  break语句

break结束整个循环

【例5.19】分析下面程序的运行结果

【例5.20】由键盘输入一个正整数,判断其是否为素数

运行结果1

 运行结果2

【例5.21】从键盘输入一批学生的成绩,计算平均分,并统计不及格成绩个数

5.5.2  continue语句

作用:结束本次循环,开始下次循环

【例5.22】把1~100之间能7整除的数,以每行5个的形式在屏幕上输出

【例5.23】分析下面程序运行结果

5.5.3  goto语句

四种循环控制语句,for循环语句、while循环语句、do-while循环语句 、goto循环

注意:语句标号必须与goto语句处于同一个函数中。通常goto语句与if语句连用实现循环控制

【例5.24】使用goto语句计算sum=\sum_{n=1}^{100}n的值

5.6    循环嵌套

 【例5.25】求1!+2!+3!+...+10!

【例5.26】输出乘法口诀表

 

【例5.27】求100以内的素数。要求每行输出10个。

【例5.28】将10~20之间的正整数分解质因数

5.7  典型算法举例

5.7.1  递推法

【例5.29】

【例5.30】求sin(x)=x-x^3/3!+x^5/5!-x^7/7!+...的近视值,要求精确到10负6次方

 

 5.7.2   迭代法

【例5.31】

5.7.3  穷举法

【例5.32】

 【例5.33】判断由1、2、3、4四个数字能组成多少个互不相同且无重复数字的三位数?输出这些数

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值