循环 - while语句
while(表达式)语句 - 表达式为真,执行语句,不能省略
//累加
int i = 0 , sum = 0;
while (i<=100)
{
sum = sum + i;
i++;
}
printf("sum=%d\n",sum);
//如果不加花括号,则while语句的范围只到while后面第一个分号处
do……while语句
do
语句
while(表达式);
int i=0,sum=0;
do
{sum = sum+i;
i++;
}while(i<=100);
当while后面的表达式的第一次的值为“真”时,两种循环的结果相同,否则,二者结果不相同(指两者具有相同的循环体的情况下)
for语句
for(表达式1;表达式2;表达式3)
语句
表达式1:循环变量赋初值
表达式2:循环条件
表达式3:循环变量增值
for(i=0;i<=100;i++)
sum=sum+i;
循环可以嵌套
break语句:提前终止循环,执行循环下面的语句 - 只能用在循环和switch语句中,不能单独使用。
continue语句:提前结束本次循环
for循环中
1、“表达式1”可以省略,即不设置初值,但表达式1后的分号不能省略
2、“表达式2”也可以省略,既不用表达式2来作为循环条件表达式,不设置和检查循环体的条件
3、“表达式3”也可以省略,但此时程序设计者应另外设法保证循环能正常结束
4、甚至可以将3个表达式都省略 - for(;;) 相当于while(1)
5、表达式1可以是设置循环变量初值的赋值表达式,也可以是与循环变量无关的其他表达式
6、表达式1和表达式3可以是一个简单的表达式,也可以是逗号表达式,即包含一个以上的简单表达式,中间用逗号间隔
7、表达式2一般是关系表达式(如i<100)或逻辑表达式(如a<b&&x<y),但也可以是数值表达式或字符表达式,只要其值为非零,就执行循环体
8、C99允许在表达式1中定义变量并赋初值
//在全系1000名学生中举行募捐,总数达到10万元结束
#define SUM 100000
int main()
{
float amount,aver,total;
int i;
for(i=1,total=0;i<=1000;i++)
{
pritnf("please enter amount : ");
scanf("%f",&amount);
total = total+amount;
if(total>=SUM)break;
}
aver = total / i;
printf("num = %d\n aver = %10.2f\n",i,aver);
return 0;
}
//输出100~200不能被3整除的数
int n;
for(n=100;n<=200;n++)
{
if(n%3 == 0)
continue;
printf("%d",n);
}
printf("\n");
//输出一个以4*5的矩阵数
int i,j,n=0;
for(i=1;i<=4;i++)
for(j=1;j<=5;j++,n++)
{
if(n%5 == 0)
printf("\n");
printf("%d\t",i*j);
}
printf("\n");
//求Π的近似值
int sign = 1;
double pi=0.0,n=1.0,term=1.0;
while(fabs(term)>=1e-6)
{
pi = pi+term;
n=n+2;
sign = -sign;
term=sign/n;
}
/*
for(;n<1000000;n+=2)
{
pi = pi+term
term = sign/n;
sign = -sign;
}
*/
pi=pi*4;
printf("pi=%10.8f\n",pi);
//斐波那契数
int f1 = 1, f2 = 1, f3;
int i;
printf("%d12d\n%12d\n",f1,f2);
for(i=1;i<=38;i++)
{
f3=f1+f2;
printf("%12d\n",f3);
f1=f2;
f2=f3;
}
/*改良
int f1=1,f2=1;
int i;
for(i=1;i<=20;i++)
{
printf("%12d%12d",f1,f2);
if(i%2==0)
printf("\n");
f1 = f1+f2;
f2 = f2+f1;
}
*/
//求100~200的全部素数
int n,k,i,m=0;
for(n=101;n<=200;n=n+2)
{
k=sqrt(n);
for(i=2;i<=k;i++)
{
if(n%i==0)break;
if(i>=k+1)
{
printf("%d",n);
m=m+1;
}
if(m%10==0)printf("\n");
}
//求n!前20项合
double s=0,t=1;
int n=1;
while(n<=20)
{
t=t*n;
s=s+t;
n++;
}
printf("%.5e\n",s);
//输入两个正整数m和n,求其最大公约数和最小公倍数
int p,r,n,m,temp;
printf("请输入两个正整数 n,m: ");
scanf("%d%d",&n,&m);
if(n<m)
{
temp=n;
n=m;
m=temp;
}
p=n*m;
while(m!=0)
{
r=n%m;
n=m;
m=r;
}
printf("它们的最大公约数为:%d\n",n);
printf("它们的最小公倍数为:%d\n",p/n);
//输出“水仙花数”
int i,j,k,n,sum;
printf("水仙花数有: ");
for(n=100;n<1000;n++)
{
i = n/100;
j = n/10-i*10;
k = n%10;
sum = pow(i,3)+pow(j,3)+pow(k,3);
if(n==sum)
printf("%d",n);
}
printf("\n");
//求分数序列2/1,3/2,5/3,8/5……前20项之和
int i,n=20;
double a = 2,b=1,s=0,t;
for(i=1;i<=n;i++)
{
s= s+a/b;
t=a;
a=a+b;
b=t;
}
//求完数(一个数等于它的因子之和)
int i,a,n,s;
for(a=2;a<1000;a++)
{
n=0,s=a;
for(i=1;i<a;i++)
{
if(a%i==0)
{
s=s-i;
if(s<0)
break;
}
}
if(s==0)
printf("%d\n",a);
}
for(i=0;i<4;i++,i++)
for(k=1;k<3;k++);
printf("*");
最终输出结果为*
//判断“幻方”矩阵每行,每列,主对角线及反对角线上元素之和都相等 #define N 3 int fun(int(*a)[N]) { int i,j,m1,m2,row,colum; m1=m2=0; for(i=0;i<N;i++) { j=N-i-1; m1+=a[i][i]; m2+=a[i][j]; } if (m1!=m2)return 0; for(i=0;i<N;i++) { row = colum = 0; for(j=0;j<N;j++) { row+=a[i][j]; colum+=a[j][i]; } if((row!=colum)||(row!=m1))return 0; } return1; }
//从小到大排序 void fun(int n,int*a) { int i,j,p,t; for(j=0;j<n-;j++) { p=j; for(i=j+1;i<n;i++) if(a[p]>a[i]) p=i; if(p!=j) { t=a[j]; a[j]=a[p]; a[p]=t; } } }