课后习题解答(第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.
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>
①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()
{
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
{
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
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 基础部分习题
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;
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_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);", 若通过键盘给变量a、b、c分别赋值12, 3.4和字符A,其正确的输入形式为12 3.4A
2_2_2 已有定义“int a; double b; char c;"和语句"scanf("%d%lf%c", &a, &b, &c);", 若通过键盘给变量a、b、c分别赋值12, 3.4和字符A,其正确的输入形式为12 3.4A
第三章
3_1 基础部分习题
3_1_1. 判断正误:逻辑运算符两侧的运算量可以是任何类型的数据。
正确。进行逻辑运算时,如果运算量是0值则被看成是逻辑值为0,非0值则被看作逻辑值1,最后的计算结果要么为0,要么为1(具体计算过程按逻辑运算规则进行)。
3_1_2. 判断正误:关系表达式和逻辑表达式的值只能是0或1。
正确。关系运算和逻辑运算的结果要么为真要么为假,在C语言中分别用1和0表示。
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';
字符串长度超出定义值3_1 基础部分习题
3_1_1. 判断正误:逻辑运算符两侧的运算量可以是任何类型的数据。
正确。进行逻辑运算时,如果运算量是0值则被看成是逻辑值为0,非0值则被看作逻辑值1,最后的计算结果要么为0,要么为1(具体计算过程按逻辑运算规则进行)。
3_1_2. 判断正误:关系表达式和逻辑表达式的值只能是0或1。
正确。关系运算和逻辑运算的结果要么为真要么为假,在C语言中分别用1和0表示。
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'),从而赋值运算右侧关系表达式值为1,x即被赋值为1)。
对于y='0'||'1'-'1',逻辑运算符两侧的运算量要先转换为0或1值。对于字符‘0’,由于其ASCII码值48为非0值,因此||右边的运算不用再进行,整个逻辑表达式结果为1,则y被赋值1。
3_1_10. 下面程序段的输出结果是BBBCCC
该题主要考查switch结构,要注意各case子句中有无break语句的区别。
printf("%d,%d", x, y);
解答:
对于x=ch=='B'+'a'-'A',首先要清楚运算符计算的优先次序(从整体来看是执行一个赋值运算,而赋值运算符右边的表达式是执行一个关系运算,关系运算的左侧变量ch值为'b',右侧为算术表达式(对于字符型数据的算术运算和关系运算等都是依据各字符的ASCII码值进行,因此该表达式的值为'b'),从而赋值运算右侧关系表达式值为1,x即被赋值为1)。
对于y='0'||'1'-'1',逻辑运算符两侧的运算量要先转换为0或1值。对于字符‘0’,由于其ASCII码值48为非0值,因此||右边的运算不用再进行,整个逻辑表达式结果为1,则y被赋值1。
3_1_10. 下面程序段的输出结果是BBBCCC
该题主要考查switch结构,要注意各case子句中有无break语句的区别。
3_2 提高部分习题
3_2_2. 下面程序段的输出结果是2
该题考查条件运算符 ? : , 它的一般形式是: 表达式1?表达式2:表达式3
3_2_2. 下面程序段的输出结果是2
该题考查条件运算符 ? : , 它的一般形式是: 表达式1?表达式2:表达式3
当表达式1的计算结果为非0值(即它所表达的条件为真)时,运算结果取表达式2的值,否则取表达式3的值。
第四章
4_1 基础部分习题
4_1_2 判断正误:由于表达式x%3 != 0和x%3的值相等,所以while(x%3 != 0)和while(x%3)等价。
错误。条件存在问题,故因果关系不成立。因为x%3 != 0的值只能为0或者1,而x%3的值可为0,1或2。
4_1_4 若分别运行以下程序段,从键盘输入eor<CR> (<CR>表示回车),则运行后v1和v2的值分别是2,2
4_1_6 下面程序段的输出结果是4
4_1_8 i%7==0
4_1 基础部分习题
4_1_2 判断正误:由于表达式x%3 != 0和x%3的值相等,所以while(x%3 != 0)和while(x%3)等价。
错误。条件存在问题,故因果关系不成立。因为x%3 != 0的值只能为0或者1,而x%3的值可为0,1或2。
4_1_4 若分别运行以下程序段,从键盘输入eor<CR> (<CR>表示回车),则运行后v1和v2的值分别是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小时内删除。
发表评论