循环结构程序设计

文章内容较适合初学者,可用于练手,熟悉C语言基础语法。

一.涉及关键内容:

1.for、while、do-while循环语句

2.break、continue语句的区别和使用

3.常用基础算法:穷举、迭代、递推

二.设计内容(题目+源代码)

1.输入两个正整数m和n,求它们的最大公约数和最小公倍数。
法一:
#include "stdio.h"
int main()
{
    int m,n,gb,gy,k;
    printf("请输入两个正整数:");
    scanf("%d%d",&m,&n);
    for(gb=1;1;gb++)
        if(gb%m==0 && gb%n==0)
            break;    
    if(m>n)
        k=n;
    else
        k=m;
    for(gy=k;1;gy--)
        if(m%gy==0 && n%gy==0)
            break;
    printf("最小公倍数为:%d\n",gb);
    printf("最大公约数为:%d\n",gy);
    return 0;
}
法二:【算法分析】辗转相除法:使k为m除以n的余数,如果m能被n整除,则k值为0,n为这两个数的最大公约数,否则,使n代替m,k代替n,重复以上过程,直到k值为0,此时n为最大公约数。
最小公倍数=(m+n)/最大公约数。
#include <stdio.h>
int main()
{
    int m,n,gb,gy,k,a,b;
    printf("请输入两个正整数:");
    scanf("%d%d",&m,&n);
    k=m%n;
    a=m;
    b=n;
    for( ;k!=0; )
    {
        m=n;
        n=k;
        k=m%n;
    }
    gy=n;
    gb=(a*b)/gy;
    printf("最小公倍数为:%d\n",gb);
    printf("最大公约数为:%d\n",gy);
    return 0;
}

试运行:

2.计算e=1-1/1!+1/2!-1/3!+1/4!……,直到最后一项的绝对值<10E-4。
#include "stdio.h"
int main()
{
    int i,fh;
    float e,j;
    e=1;
    for(i=1;1;i++)
    {
        if(i%2==1)//符号问题 
            fh=1;
        else
            fh=-1;
        for(j=1;j<=i;j++,i++)//阶乘 
            j=j*i;
        if(1/j<10E-4)//停止 
            break;
        e=e+fh*1.0/j;
    }
    printf("e=%f",e);
    return 0;
}

试运行:

3.从键盘输入high,计算并输出high以内最大的10个素数之和。例如,输入high的值为100,则输出732。
#include "stdio.h"
int main()
{
    int high,i,j,sum;
    int num;
    printf("请输入一个正整数high:");
    scanf("%d",&high);
    for(i=high,num=1;num<=10;i--) 
    {
        if(i==1)
            break;//防止high没有10个正素数,计算机从负数中找 
        for(j=2;j<=high;j++)//若通过for语句判断结束循环即(j>=i),该数为素数 
            if(i%j==0)
                break;
        if(j>=i)
        {
            sum=sum+i;
            num++;
        }
    }
    printf("high以内10个最大的素数之和为:%d",sum);
    return 0;
}

试运行:

4.有一数列:2/1,3/2,5/3,8/5,……求出这个数列的前10项之和。
#include "stdio.h"
int main()
{
    int i;
    float fm,fz,sum,t;
    fm=1,fz=2;
    for(i=1,sum=0;i<=10;i++)
    {
        sum=sum+fz/fm;
        t=fm;//t的作用:保留上一步的分母 
        fm=fz;
        fz=t+fz;
    }
    printf("sum=%f",sum);
    return 0;
}

试运行:

5.蜘蛛有8条腿,没有翅膀;蜻蜓有6条腿和两对翅膀;蝉有6条腿和1对翅膀。现在这三种小虫共18只,有118条腿和20对翅膀,请编程计算每种小虫分别有多少只?
#include "stdio.h"
int main()
{
    int zz,qt,c,end;
    end=0;    
    for(zz=1;zz<=16;zz++)
    {
        for(qt=1;qt<=17-zz;qt++)
        {
            c=18-zz-qt;
            if(zz*8+qt*6+c*6==118 && qt*2+c==20)
                end=1;
                break;
        }
    if(end=1)
        break;
    }
    printf("zz=%d,qt=%d,c=%d",zz,qt,c);
    return 0;
}

试运行:

6.判断两个整数m和n是否互质(即是否有公共和因子)(m不等于1,n不等于1)。若互质,则输出Yes;若不互质,则输出No,并输出公因子。
【算法分析】用2到t(t为m,n中较小的数)之间的数分别除以m和n,若m和n可同时被某个数除尽,则m,n不互质;否则m,n互质。
#include "stdio.h"
int main()
{
    int t,m,n,i;
    printf("请输入两个不等于1的正整数:");
    scanf("%d%d",&m,&n);
    if(m>n)
        t=n;
    else
        t=m;
    for(i=2;i<=t;i++)
        if(m%i==0 && n%i==0)
            break;
    if(i<=t)
    {
        printf("No\n");
        printf("公因数为:");
        for( ;i<=t;i++)
        {
            if(m%i==0 && n%i==0)
                printf("%d ",i);
        }
    }
    else
        printf("Yes");
    return 0;
}

试运行:

7.打印以下图案
*
***
*****
*******
【算法分析】通过分析图案可得,空格数=总行数-该行行数,星号数=2*该行行数-总行数。
#include "stdio.h"
int main()
{
    int i,j,l,kg,xh;
    printf("请输入想要的行数:"); 
    scanf("%d",&l);
    for(i=1;i<=l;i++)
    {
        kg=l-i;
        xh=2*i-1;
        for(j=1;j<=kg;j++)//打印\n
            printf(" ");
        for(j=1;j<=xh;j++)//打印*
            printf("*");
        printf("\n"); 
    } 
    return 0;
}

试运行:

注:本文中代码均应使用Dev C++运行,使用其它编译器可能出现各种语法错误。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值