课后习题解答(1-7)
 第一章
1_1.
1_1_2 判断正误:即使两个整型数据未超出该数据的取值范围,它们的和也可能会超出该数据取值范围。
正确。
1_1_4 判断正误:一个C程序可以有多个函数,其中主函数必须在程序的最开头。
错误。其它函数如果要在主函数中使用的话,必须先在主函数之前定义或者声明。
1_1_6 判断正误:若有定义“float x=1.3;”,则表达式(int)x的值为1,因此可以说x中存放的值就是1
错误。(int)x表达式的值与x的值是不一样的,前者是对x取整后的数值,而取整运算对x自身的值不会产生影响。
1_1_8 判断正误:若有命令行“#define N 1000”,则N++是不合法的表达式。
正确。N为符号常量,不能对符号常量进行修改。
1_1_10 C程序是由函数构成的,一个C程序必须有一个主函数
1_1_12  以下变量中不合法的是,合法的是
name  double  Int  if  for_1  2k  a12345678  _a
1_1_14  下面程序段的输出结果是1,1.000000
int a; double b;
a=b=123/100%2;
printf("%d,%f", a, b);
1_1_16  a*a*a*b*b/(c-d)
1_1_20  假设圆柱体的底面半径为r(=2.5),高为h(=3.5),请按下面给定的步骤编写求体积(体积=底面积X)的程序。
定义变量r,h,v(存放体积值),注意变量的数据类型。
给变量r,h赋值。
计算体积,并将结果存放在v中。
输出r,h,v的值。
程序如下:
#include <stdio.h>
#define PI 3.1415926
main()
{
   float  r, h, v;
   r=2.5;
   h=3.5;
   v=PI*r*r*h;
   printf("r=%f, h=%f, v=%f\n", r, h, v); 
}
1_1_22  编写输出以下图形的程序。
* *
# # #
3 3 3 3
程序如下:
#include <stdio.h>
main()
{
   printf("* *\n");
   printf("# # #\n");
   printf("%-2d%-2d%-2d%-2d\n", 3, 3, 3, 3);
}

1_2
1_2_2 下面程序段的输出结果a=3,b=-27
int a=10, b=10;
a+=b-=a*=b/=3;
printf("a=%d,b=%d", a, b);
本题考查复合赋值运算符及其运算过程。(从右到左运算,运算过程中变量的值会发生改变)
1_2_4 下面程序段的输出结果a=10,b=10,c=12,d=11
int a=10, b=10, c, d;
c=(++a, b++, a++, ++b); /*该语句从整体来看完成一个赋值运算,而赋值运算的右侧表达式则是作逗号运算*/
d=--a, b--, --a, b--; /*这个语句从整体来看是作逗号运算,逗号运算的第一个子表达式是赋值运算,其它三个是自减运算*/
printf("a=%d,b=%d,c=%d,d=%d",a,b,c,d);
本题考查逗号运算,自加自减运算符以及它们与括号、赋值运算符等各种运算符的运算优先级次序。
1_2_6 语句printf("%d", 32766+5);的输出结果是-32765
第二章
2.1 基础部分习题
2_1_1. 判断正误:程序中的所有语句都被执行一次,而且只能执行一次。
错误。循环结构中循环体部分的语句就可执行多次,分支结构中只能选择其中的一个子句执行。
2_1_2. 判断正误:在C语言中,任何表达式的尾部加上一个分号就可以构成语句。
正确。
2_1_4. 编写程序输出12.5X3.4的值(要求:不使用变量);
#include <stdio.h>
main()
{
    printf("%f", 12.5*3.4);
}
2_1_6
改正后的程序:
#include <stdio.h>
main()
{
    int m, h;
    h = 500/60;
    m = 500%60;
    printf("500分钟是%d小时%d分钟", h, m);
}
2_1_8
#include <stdio.h>
main()
{
    char  x, y, t;
    x=getchar();
    y=getchar();
    printf("交换前: x=%c,y=%c", x, y);
    t=x;
    x=y;
    y=t;
    printf("交换后: x=%c,y=%c", x, y);
}
2_2 提高部分习题
2_2_2 已有定义“int a; double b; char c;"和语句"scanf("%d%lf%c", &a, &b, &c);", 若通过键盘给变量abc分别赋值12, 3.4和字符A,其正确的输入形式为12  3.4A
第三章
3_1  基础部分习题
3_1_1. 判断正误:逻辑运算符两侧的运算量可以是任何类型的数据。
正确。进行逻辑运算时,如果运算量是0值则被看成是逻辑值为0,非0值则被看作逻辑值1,最后的计算结果要么为0,要么为1(具体计算过程按逻辑运算规则进行)。
3_1_2. 判断正误:关系表达式和逻辑表达式的值只能是01
正确。关系运算和逻辑运算的结果要么为真要么为假,在C语言中分别用10表示。
3_1_4. 能正确表示0≤a≤10的逻辑表达式是a>=0&&a<=10
3_1_6. 如果字符变量c中的字符为大写英文字母,则转换为小写英文字母的语句是c+=32;
3_1_8. 下面程序段的输出结果是1,1
char ch='b'; int x, y;   
x=ch=='B'+'a'-'A';
字符串长度超出定义值
y='0'||'1'-'1';
printf("%d,%d", x, y);
解答:
    对于x=ch=='B'+'a'-'A',首先要清楚运算符计算的优先次序(从整体来看是执行一个赋值运算,而赋值运算符右边的表达式是执行一个关系运算,关系运算的左侧变量ch值为'b',右侧为算术表达式(对于字符型数据的算术运算和关系运算等都是依据各字符的ASCII码值进行,因此该表达式的值为'b'),从而赋值运算右侧关系表达式值为1x即被赋值为1)。
    对于y='0'||'1'-'1',逻辑运算符两侧的运算量要先转换为01值。对于字符‘0’,由于其ASCII码值48为非0值,因此||右边的运算不用再进行,整个逻辑表达式结果为1,则y被赋值1
3_1_10. 下面程序段的输出结果是BBBCCC
该题主要考查switch结构,要注意各case子句中有无break语句的区别。
3_2  提高部分习题
3_2_2. 下面程序段的输出结果是2
该题考查条件运算符 ? :   它的一般形式是:   表达式1?表达式2:表达式3
当表达式1的计算结果为非0值(即它所表达的条件为真)时,运算结果取表达式2的值,否则取表达式3的值。
第四章
4_1 基础部分习题
4_1_2 判断正误:由于表达式x%3 != 0x%3的值相等,所以while(x%3 != 0)while(x%3)等价。
错误。条件存在问题,故因果关系不成立。因为x%3 != 0的值只能为0或者1,而x%3的值可为0,12
4_1_4 若分别运行以下程序段,从键盘输入eor<CR> (<CR>表示回车),则运行后v1v2的值分别是2,2
4_1_6 下面程序段的输出结果是4
4_1_8  i%7==0
4_1_10
#include
main()
{
    int i=33;
    while(i<=122)
    {
        printf("%c,%3d,%3o,%-4x", i, i, i, i);
        if((i-33+1)%4==0)
            printf("\n");
        i++;
    }
}
4_1_12
#include <stdio.h>
main()
{
    char ch;
    printf("Input data:");
    ch=getchar();
    do
    {
        if(ch>='A' && ch<='Z')
            ch=ch+32;
        if(ch>='a' && ch<='z')
        {
            ch=ch+2;
            if(ch>'z') ch=ch-26;
        }
        putchar(ch);
        ch=getchar();
    }while(ch!='#');
}
4_1_14
提示:如果要通过数据验证一个程序是否正确,应该将各种可能的情况都考虑到。
如输入的字符串数据可能出现的情况有:所有字符都为大写字母,所有字符都为小写字母,大小写字母混合,所有字符不是字母,大写字母与其它字符混合等等。
4_1_15
#include <stdio.h>
main()

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。