【项目任务】
利用while语句编写程序,计算1+2+3+…+99+100的值。
【设计思路】
定义一个变量i,使用循环结构使得i的值在1~100范围内以加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.编写程序,实现求的值。
【项目任务】
输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。
【设计思路】
通过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语言中,“=”表示赋值,“= =”表比较。
【项目任务】
实现阶乘运算。
【设计思路】
一个整数m的阶乘就是把1~m之间的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)!。依此类推,一个问题就被描述为一个较小规模的同样类型的问题了。
2.while语句和do…while语句的区别在于:do…while语句先执行循环体,后判断表达式的条件;而while语句先判断表达式的条件,后执行循环体。