前言:今天我们主要学习的是for语句,包括fou语句的一般形式,对应for语句的流程图,for语句的用法,以及for语句运用时的一些注意事项,通过学习for语句进行一些简单程序的设计等等。好了废话不多说直接开干。
今天我们主要讲的是for语句,在C语言中,for语句被称为循环语句,它可以实现C语言的重复执行操作指令。
1.for语句的一般形式
for(表达式1;表达式2;表达式3)
循环体语句
for语句的执行流程如图,它先计算表达式1,再判断表达式2,若其值为‘真’,则执行循环体语句,并接着计算表达式3,然后继续循环,若其值为‘假’,则结束循环,继续执行for的下一条语句。且计算表达式3在执行循环体语句之后。
2.for语句的3个表达式
(1)表达式1:初值表达式,对循环变量赋初值,从而指定循环的起点。
(2)表达式2:条件表达式,给出循环的条件,通常判断循环变量是否超过循环的终点。
(3)表达式3:步长表达式,设置循环的步长,改变循环变量的值,从而可改变表达式2的结果。
(4)循环体语句:被反复执行的语句,只能是一条语句。
3.对于for语句需要注意的
(1)如果循环体语句由多条语句组成,必须用大括号把它们括起来,变成一条复合语句
(2)在C语言中,仅由一个分号(;)构成的语句称为空语句,它什么都不做。所以,不要在for语句中随意加分号。
1.问题的引入:
输入两个整数lower和upper,输出一张华氏温度-摄氏温度转换表,华氏温度的取值范围为[lower,upper],每次增加1华氏温度。计算公式如下:
c=5*(f-32)/9
式中c为摄氏温度,f为华氏温度。
下面是源程序:
#include
int main()
{
int fahr,lower,upper;
double celsius; //由于这里涉及分数所以我们定义为浮点数
printf("请输入华氏温度的下确界值:"); //温度数值的输入
scanf("%d", &lower); //温度数值的读取
printf("请输入华氏温度的上确界值:");
scanf("%d", &upper);
if (lower<=upper) //if语句执行的条件
{
for (fahr=lower; fahr<=upper; fahr++) //for语句的应用
{
celsius=(5.0/9.0)*(fahr-32.0); //关系式的引入
printf("%4d %6.1f\n", fahr, celsius); //转换值的输出
}
}
else
{
printf("您输入的lower值大于upper值(输入错误)"); //错误提醒
}
return 0;
}
语句分析:这里令初始值fahr等于下确界值lower,语句再次进入的判断条件fahr<=upper,满足则语句再次被执行,直到条件不再满足,每次执行完循环体语句后,再执行fahr++语句,再进入判断语句,从而完成for语句。
下面是该程序的流程图:
注意:在输出格式控制说明中,可以加宽度限定词,指定数据的输出宽度。例如,整型数据的输出格式控制说明%md,则指定了数据的输出宽度为m(包括符号位),对于实型数据输出格式控制说明%m.nf,指定了输出浮点型数据时保留n位小数,且输出宽度为m(包括符号位和小数点)。
问题一:
输入一个正整数n,计算1-1/3+1/5-1/7+····的前n项和。
源程序:
#include
int main()
{
int denominator, flag, i, n;
double item,sum;
printf("Enter n:"); //输入提示
scanf("%d", &n);
flag=1; //用于表示符号
denominator=1; //denominator为第i项的分母
item=1;
sum=0; //赋sum初始值为零
for (i=1; i<=n; i++)
{
sum=sum+item;
flag=-flag; //改变符号
denominator=denominator+2; //分母递增2
item=flag*1.0/denominator; //计算第i+1项的值
}
printf("sum=%.2f\n", sum); //保留两位小数
return 0;
}
问题二:
输入一个正整数n,生成一张2的乘方表,输出2的0次到n次的值。
源程序:
#include
#include //调用数学函数
int main()
{
int i, n;
int power;
printf("Enter n:"); //输入提示
scanf("%d", &n);
for(i=0; i<=n; i++)
{
power=pow(2,i); //调用数学函数pow(2,i)计算2的i次方
printf("pow(2,%d)=%d\n", i, power);
}
return 0;
}
问题3
输入一个正整数n(n<=16),生成一张阶乘表,输出0!到n!的值。要求定义和调用函数fact(n)计算n!,函数类型为double。
源程序:
#include
double fact(int n); //自定义函数声明
int main()
{
int i,n;
double result;
printf("Enter n:");
scanf("%d", &n); //输入提示
for (i=0; i<=n; i++)
{
result=fact(i); //调用自定义函数计算阶乘
printf("%d!=%.0f\n", i, result);
}
return 0;
}
double fact(int n) //定义求阶乘的函数
{
int i;
double product;
product=1;
for (i=1; i<=n; i++) //循环n次,计算n的阶乘
{
product=product*i;
}
return product; //返回主函数
}
好啦,今天就分享到这里,又是一天兢兢业业的大学生。谢谢大家的关注。