C语言复习 - 第五章

循环 - 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;
        }
    }
}

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值