
如财务人员需要给每个人计算工资,一个班级需要计算学生一次考试的总成绩和平均成绩。在C语言程序设计中有for语句、while语句、do循环语句。
for ( <表达式1> ; <表达式2> ; <表达式3> ) <语句>
(1) 计算循环头部中的表达式1的值;
(2) 计算循环头部中的表达式2的值,假定其值为M,若缺省其值为1;
(3) 若M为逻辑真(非0)则执行一遍循环体,否则结束for语句;
(4) 计算表达式3的值,紧接着自动转向第2步继续执行循环循环。
(1) for(i=0; i<5; i++) printf("%d ",i*i);
(2) for(j=1,p=1; j<=M; j++,p*=j);
(3) for(k=1,s=0; ;) {s+=k*(k+1); k+=2; if(k>5) break;}
在一个for循环语句的循环体内,还可以包含有for循环语句。
(1) for(i=1; i<4; i++)
for(j=1; j<=5; j++) s+=1;
2) for(i=1; i<4; i++)
for(j=1; j<=i; j++) p+=i*j;
(3) for(i=1; i<=5; i++) {
scanf("%d",&x);
for(j=2; j<=3; j++) if(x%j==0) break;
if(j>3) c++;
}
#include<stdio.h>
#include<stdlib.h>
void main()
{
int n,x,max,min;
printf("输入待处理数据的个数(n>0):");
scanf("%d",&n);
for(;n<=0;) {printf("重输(n>0):"); scanf("%d",&n);}
printf("需要从键盘上输入%d个待处理的数据!\n",n); //输入提示
scanf("%d",&x);
max=min=x;
for(;--n;) {
scanf("%d",&x);
if(x>max) max=x;
if(x<min) min=x;
}
printf("max:%d, min:%d\n",max,min);
}
输入待处理数据的个数(n>0):6
需要从键盘上输入6个待处理的数据:
48 62 30 24 55 36
max:62, min:24
程序2:
#include<stdio.h>
void main()
{
int a,b;
for(a=0,b=1; b<20; a=a+b,b=a+b)
printf("%d %d ",a,b); //0 1 1 2 3 5 8 13
printf("%d %d\n",a,b); //21 34
}
分析:设循环变量为i,它的初值、终值和步长应分别为2、50和2,设用于累加的变量为s,它的初值应为和式中的第一项1。在循环体中每次把i的平方值累加到s上。
#include<stdio.h>
void main()
{
int i,s=1;
for(i=2;i<=50;i+=2) s+=i*i;
printf("s=%d\n",s);
}
运行结果:s=22101
举例2:由勾股定理可知,在一个直角三角形中,两条直角边a和b与斜边c的关系为a2+b2=c2,编一程序求出每条直角边均不大于30的所有整数组解。如(3,4,5)、(5,12,13)就是该题的2组解。
分析:根据题意,需要使用三重循环来解决,设外循环变量用a表示,初值、终值和步长取1、30和1。内循环变量用b表示,初值、终值和步长取a+1,30和1。会出现象(3,4,5)和(4,3,5)这样的重复组。最内层循环的变量用c表示,它表示直角三角形的斜边,c>b同时c
1。
#include<stdio.h>
const int N=30;
void main()
{
int a,b,c;
for(a=1; a<=N; a++)
for(b=a+1; b<=N; b++) {
for(c=b+1; c<=b+a-1; c++) {
if(c*c==a*a+b*b)
&n
printf("(%d, %d, %d)\n",a,b,c);
p; }
}
}
运行结果: //共13组,前5组
(3, 4, 5)
(5, 12, 13)
(6, 8, 10)
(7, 24, 25)
(8, 15, 17)