加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

【第六章 循环】练习题答案

(2011-05-07 09:25:23)
标签:

杂谈

分类: C语言教学

1. 单项选择题

1)【答】!e等价于!(e!=0),即e==0。本题答案为A

2)【答】D

3)【答】D

4)【答】A

5)【答】C

6)【答】A

7)【答】A

8)【答】B

9)【答】C

2. 填空题

1)【答】s=7

2)【答】执行第1次循环时,i++返回1i=2s=3+1=4,执行else部分,i=3;执行第2次循环时,i++返回3i=4s=4+3=7,执行if部分;执行第3次循环时,i++返回4i=5s=7+4=11,执行else部分,i=6;执行第4次循环时,i++返回6i=7s=11+6=17,执行else部分,i=8,此时while条件不满足,退出循环。所以输出结果为:8

3)【答】使用两重循环。本题答案为:

*

**

***

****

4)【答】使用两重循环。本题答案为:

           1

          2

         3

        4

       5

       6

5)【答】使用两重循环。本题答案为:

                1

              1

          1

       1

    1

  1

6)【答】使用两重循环。本题答案为:

          *

       *

    *

  *

    *

       *

          *

 

3. 编程题

1)编写一个程序,求s=1-1/2+1/3-1/4…+1/99+1/100之值。

【解】使用一个for循环即可。程序如下:

#include <stdio.h>

main()

{

    int i;

    float s;

    s=0;

    for (i=1;i<=100;i++)

    {

        if (i%2==0)            

            s=s-1.0/i;

        else                     

            s=s+1.0/i;

    }

    printf("s=%f",s);

}

程序运行结果:

s=0.688172

2)编写一个程序,求s=1+(1+2)+(1+2+3)+…+(1+2+3+…+n)的值。

【解】采用两层循环求解,外层i1n,里层从1i。程序如下:

#include <stdio.h>

main()

{

    int i,j,s1,s=0,n;

    printf("输入n:");

    scanf("%d",&n);

    for (i=1;i<=n;i++)

    {

        s1=0;                  

        for (j=1;j<=i;j++)

            s1=s1+j;

        s=s+s1;

    }

    printf("s=%d\n",s);

}

3)编写一个程序,用户输入一个正整数,把它的各位数字前后颠倒一下,并输出颠倒后的结果。

【解】对于正整数n,从高位到低位依次计算出它的各位上的数字d,在计算出d后立即输出该数字,输出序列构成的数正好是n的各位数字前后颠倒的结果。程序如下:

#include <stdio.h>

main()

{

    int n,d;

    printf("输入一个正整数:");

    scanf("%d",&n);

    printf("颠倒结果:");

    do

    {

        d=n;

        printf("%d",d);

        n=n/10;

    } while (n!=0);

    printf("\n\n");

}

4)编写一个程序,求输入的三个正整数的最小公倍数。

【解】采用穷举法求解。输入三个整数分别为xyz,该最小公倍数一定是x的倍数。程序使用while循环,倍增x查找满足s % y == 0 && s % z == 0条件的s。程序如下:

#include <stdio.h>

main()

{

    int x,y,z,s;

    printf("输入三个整数=>x,y,z:");

    scanf("%d,%d,%d",&x,&y,&z);

    s=x;

    while (1)

    {

        if (s%y==0 && s%z==0)

            break;

        s+=x;

    }

    printf("最小公倍数:%d\n",s);

}

5)编写一个程序,求出200300之间的数,且满足条件:它们三个数字之积为42,三个数字之和为12

【解】采用穷举法求解。使用两重for循环嵌套语句,ijk分别表示该数的百位数、十位数、个位数,i只能是2jk进行循环。程序如下:

#include <stdio.h>

main()

{

    int i,j,k;

    i=2;

    for (j=0;j<=9;j++)

        for (k=0;k<=9;k++)

            if (i*j*k==42 && i+j+k==12)

                printf("i=%d,j=%d,k=%d\n",i,j,k);

}

6)编写一个程序,求出满足下列条件的四位数:该数是个完全平方数,且第一、三位数字之和为10,第二、四位数字之积为12

【解】采用穷举法求解。该数是一个四位数,其平方数只能在3299之间,使用一个for循环即可。程序如下:

#include <stdio.h>

main()

{

    int i,j,a,b,c,d;

    for (i=32;i<=99;i++)

    {

        j=i*i;                     

        a=j/1000;                  

        b=j/100-a*10;              

        c=j/10-a*100-b*10;        

        d=j-a*1000-b*100-c*10;     

        if (a+c==10 && b*d==12)

            printf("%d ",j);

    }

}

7)编写一个程序,求e的值。

 

【解】采用do-while循环语句,程序如下:

#include <stdio.h>

main()

{

    float t,e=0;

    int n=2;

    t=1;

    do

    {

        e+=t;

        t=t/n++;

    } while (t>1.0e-6);

    printf("e=%f\n",e);

}

8)编写一个程序,从键盘输入一个整数,将每位数字转变为英文,如输入9124,则输出:nine,one,two,four

【解】使用一个for循环获取输入的每个数字,然后使用switch语句进行转变。程序如下:

#include <stdio.h>

main()

{

    char c;

    int i;

    printf("输入一个数:");

    for (i=0;(c=getchar())!='\n';i++)

    {

        if (i>0) printf(",");

        switch(c)

        {

            case '0':printf("zero");break;

            case '1':printf("one");break;

            case '2':printf("two");break;

            case '3':printf("three");break;

            case '4':printf("four");break;

            case '5':printf("five");break;

            case '6':printf("six");break;

            case '7':printf("serven");break;

            case '8':printf("eight");break;

            case '9':printf("nine");break;

        }

    }

    printf("\n");

}

9)某人摘下一些桃子,卖掉一半,又吃了一只;第二天卖掉剩下的一半,又吃了一只;第三天、第四天、第五天都如此办理,第六天一看,发现就剩下一只桃子了。编写一个程序,采用迭代法问某人共摘了多少只桃子。

【解】经分析有:

6天的桃子数: 1

5天的桃子数: (1+1)*2=4

4天的桃子数: (4+1)*2=10

3天的桃子数: (10+1)*2=22

2天的桃子数: (22+1)*2=46

1天的桃子数: (46+1)*2=94

迭代变量为n,迭代初值为1,迭代表达式为(n+1)*2,迭代条件为5≥i≥1。程序如下:

#include <stdio.h>

main()

{

    int i,n=1;

    for (i=5;i>=1;i--)

        n=(n+1)*2;

    printf("n=%d\n",n);

}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有