您的位置: 网站首页 > 程序开发 > C语言程序设计案例教程 > 第五章 循环结构程序设计 > 【5.1 简单循环程序设计案例】

5.1 简单循环程序设计案例

 

5.1  简单循环程序设计案例

案例5.1  累加求和运算

【项目任务】

利用while语句编写程序,计算1+2+3++99+100的值。

【设计思路】

定义一个变量i,使用循环结构使得i的值在1100范围内以加1的速度递增,并把每次的累加和sum作为下次加法运算的被加数,最后把结果存到变量sum中。累加求和运算的流程图如图5-1所示。

5-1  累加求和运算流程图

【程序代码】

#include <stdio.h>

main()

{

    int i,sum=0;

 

    i=1;

    while(i<=100)

    {

        sum+=i;

        i++;

    }

    printf("%d\n",sum);

}

【运行结果】

5050

【知识拓展】

1.循环体如果包含一个以上的语句,应该用花括号括起来,以复合语句形的式出现。

2.在循环体中应有使循环趋向于结束的语句,如本案例中的i++

3.在C语言中有三种循环语句:while语句、do…while语句、for语句,它们实现累加求和的程序如下:

/*do…while语句案例*/

#include <stdio.h>

main()

{

    int i,sum=0;

 

    i=1;

    do

    {

        sum+=i;

        i++;

    }while(i<=100);      /*注意:不要丢掉分号*/

    printf("%d\n",sum);

}

/*for语句案例*/

#include <stdio.h>

main()

{

    int i,sum=0;

 

    for(i=1;i<=100;i++)

    {

       sum+=i;

    }

    printf("%d\n",sum);

}

4.编写程序,实现求的值。

案例5.2  统计字符个数

【项目任务】

输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。

【设计思路】

通过getchar( )函数以及一个循环语句不断接收从键盘输入的字符,判断该字符属于何种类型,并将所属类型的记录数字加1。当用户输入换行符时,表明字符串输入结束。

【程序代码】

#include<stdio.h>

main()

{

    char c;

    int letters=0,space=0,digit=0,others=0;

 

    printf("Please input some characters:\n");

    while((c=getchar())!='\n')

    {

        if(c>='a' && c<='z' || c>='A' && c<='Z')

            letters++;

        else if(c==' ')

                space++;

            else if(c>='0'&&c<='9')

                    digit++;

                else others++;

    }

    printf("letters=%d,space=%d,digit=%d,others=%d\n",letters,space,

digit,others);

}

【运行结果】

Please input some characters:

123 Hello,world!

letters=10,space=1,digit=3,others=2

【知识拓展】

1.在处理较复杂的事务时,一般会把各种语句结构结合起来,如该程序中就用到了循环结构以及多重选择语句。

2.在C语言中,“=”表示赋值,“= =”表比较。

案例5.3  阶乘运算

【项目任务】

实现阶乘运算。

【设计思路】

一个整数m的阶乘就是把1m之间的m个整数进行连乘。因此,用一个循环语句不断增加临时变量i的值,直到i=m为止;并使用另外一个临时变量fact存储每次相乘的积,作为下次乘法运算的因子。阶乘运算的流程图如图5-2所示。

5-2  阶乘运算流程图

【程序代码】

#include <stdio.h>

main()

{

    int m,i=1;

    long fact=1;   /*long主要防止溢出。另外,求阶乘时,各变量的初值应为1*/

    printf("Input a integer to m:");

    scanf("%d",&m);

    do

    {

        fact*=i;

        i++;

    }while(i<=m);

    printf("%d!=%ld\n",m,fact);

}

【运行结果】

Input a integer to m:5

5!=120

【知识拓展】

1.该项目还可以用递归方法实现。一般来说,n!=1*2*3**(n-1)*n,但是只要稍微变换一下,就可以将其描述为n!=n*(n-1)**3*2*1=n*(n-1)!,这样,一个整数的阶乘就被描述一个规模较小的阶乘与一个数的积。同样,可以将(n-1)!描述成为(n-1)*(n-2)!。依此类推,一个问题就被描述为一个较小规模的同样类型的问题了。

2while语句和do…while语句的区别在于:do…while语句先执行循环体,后判断表达式的条件;而while语句先判断表达式的条件,后执行循环体。