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

【第五章 选择】练习题答案

(2011-05-07 09:22:42)
标签:

杂谈

分类: C语言教学

1. 单项选择题

1)【答】A

2)【答】C

3)【答】选项BCD中的比较运算符不正确,在选项A中,a=b返回b,若b0或空字符,则为假,否则为真。本题答案为A

4)【答】B。应改为if (x=y && x!=0) x+=y;

5)【答】D

6)【答】  A

7)【答】   C

8)【答】A

2. 填空题

1)【答】x % 2 == 0

2)【答】a % b == 0

3)【答】a*a+b*b==c*c || a*a+c*c==b*b || b*b+c*c==a*a

4)【答】(a+b<c && a+c<b && b+c<a)

5)【答】k=2,执行case 2分支,k++返回2,此时k=3,输出2,后跟一空格。由于没有break语句,继续执行case 3分支,k++返回3,此时k=4,输出3,由于有break语句,退出switch语句。所以输出为:2 3

6)【答】a>0s变为2a>b为真,t=t+s=3。所以输出为:s=2,t=3

7)【答】k=2,执行case 2分支,k++返回2,此时k=3,屏幕输出2,后跟一空格。由于没有break语句,继续执行case 3分支,k++返回3,此时k=4,屏幕输出3,由于没有break语句,继续执行case 4分支,k++返回4,此时k=5,屏幕输出4,由于有break语句,退出switch语句。所以输出为:2 3 4

8)【答】x=0,执行外层switch语句的case 0部分,y==2为真,则执行里层switch语句的case 1部分,输出“*”,遇到break语句,退出里层的switch语句,由于里层的switch语句之后没有break语句,所以转而执行外层switch语句的case 1部分,这时z=3,故执行里层switch语句的default部分,输出“#”,整个程序执行完毕。所以输出为:*#

 

3. 编程题

1)编写一个程序判断用户输入的字符是数字字符、字母字符还是其他字符。

【解】在'0''9'之间的为数字字符,在'a''z''A''Z'之间的为字母字符;否则为其他字符。程序如下:

#include <stdio.h>

main()

{

    char c;

    printf("输入一个字符:");

    scanf("%c",&c);

    if (c>='0' && c<='9')

        printf("\n%c是数字字符\n\n",c);

    else if ((c>='a' && c<='z') || (c>='A' && c<='Z'))

        printf("\n%c是字母字符\n\n",c);

    else

        printf("\n%c是其他字符\n\n",c);

}

2)假设今天是星期日,编写一个程序,求123456天后是星期几。

【解】星期是7天一个轮回,由于今天是星期日,所以123456除以7的余数即为星期几。程序如下:

#include <stdio.h>

main()

{

    int n=123456;

    n=n%7;

    printf("\n星期");

    switch(n)

    {

        case 0: printf("");

                break;

        case 1: printf("");

                break;

        case 2: printf("");

                break;

        case 3: printf("");

                break;

        case 4: printf("");

                break;

        case 5: printf("");

                break;

        case 6: printf("");

                break;

    }

    printf("\n\n");

}

3)编写一个程序,输入年号和月份,判断该年是否为闰年,并根据给出的月份判断是什么季节和该月有多少天?闰年的条件是年号能被4整除但不能被100整除,或者能被400整除。

【解】直接根据闰年的定义求解,如果是闰年,2月份为29天;否则为28天,其他月份相同。规定3~5月为春季,6~8月为夏季,9~11月为秋季,1212月为冬季。本题程序如下:

#include <stdio.h>

main()

{

    int y,m,leap,season,days;

    printf("年份,月份:");

    scanf("%d,%d",&y,&m);

    if ((y%4==0 && y0!=0) || (y@0==0))

        leap=1;

    else

        leap=0;

    if (m>=3 && m<=5)

        season=1;

    else if (m>=6 && m<=8)

        season=2;

    else if (m>=9 && m<=11)

        season=3;

    else

        season=4;

    switch (m)

    {

        case 1:

        case 3:

        case 5:

        case 7:

        case 8:

        case 10:

        case 12:days=31;break;

        case 4:

        case 6:

        case 9:

        case 11:days=30;break;

        case 2: if (leap==1)

                    days=29;

                 else

                    days=28;

    }

    printf("%d%s闰年\n",y,(leap==1 ? "" :  "不是"));

    printf("该季度是");

    switch(season)

    {

        case 1:printf("春季\n");break;

        case 2:printf("夏季\n");break;

        case 3:printf("秋季\n");break;

        case 4:printf("冬季\n");break;

    }

    printf("当月天数:%d\n",days);

}

4)报数游戏。ABCDEFGH8人站成一排,按图4.1所示的方法从1开始报数。问谁先报到123456

          H

1→  2→ 3→ 4→ 5→ 6→ 7→ 8

14←13←12←11←10← 9

15→16→17→18→19→20→21→22

28←27←26←25←24←23

29→30→…

4.1  游戏报数过程

【解】从图4.1中看到114是一个来回,再重复这一过程,所以只需对123456除以14的余数加以判断即可。程序如下:

#include <stdio.h>

main()

{

    int n=123456,i;

    i=n;

    printf("\n报数到%d的人是",n);

    switch(i)

    {

        case 1: printf("A");break;

        case 2:case 14: printf("B");break;

        case 3:case 13: printf("C");break;

        case 4:case 12: printf("D");break;

        case 5:case 11: printf("E");break;

        case 6:case 10: printf("F");break;

        case 7:case 9:  printf("G");break;

        case 8:         printf("H");break;

    }

    printf("\n");

}

程序的运行结果:

报数到123456的人是D

5)编写一个程序,求ax2+bx+c=0方程的根。

【解】先计算d=b2-4ac,再根据d是大于0、等于0还是小于0分别求根。程序如下:

#include <stdio.h>

#include <math.h>

int func(float a,float b,float c,float *x1,float *x2)

{

    float d;

    d=b*b-4*a*c;

    if (d>0)

    {

        *x1=(-b+sqrt(d))/(2*a);

        *x2=(-b-sqrt(d))/(2*a);

        return 2;

    }

    else if (d==0)

    {

        *x1=(-b)/(2*a);

        return 1;

    }

    else return 0;

}

main()

{

    float a,b,c,x1,x2,n;

    printf("输入a,b,c:");

    scanf("%f,%f,%f",&a,&b,&c);

    n=func(a,b,c,&x1,&x2);

    if (n==2)

    {

        printf("两个根:\n");

        printf("\tx1=%f\n",x1);

        printf("\tx2=%f\n",x2);

    }

    else if (n==1)

    {

        printf("一个根:\n");

        printf("\tx=%f\n",x1);

    }

    else printf("没有根\n");

}

0

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

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

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

新浪公司 版权所有