C Primer Plus 第3章复习题

作者在 2017-08-12 16:45:39 发布以下内容

1.对下面的数据使用合适的数据类型:

A. East Simpleton 的人口。

B.DVD影碟的价格。

C.本章出现次数最多的字母。

D.这个字母出现的次数。

A、使用整数型数据。即  int  。因为人口的单位就是个嘛。

B、使用浮点型数据。即 float 。因为价格有可以含有小数点。

C、使用字符型数据。即 char 。因为字母是一个个的字符。

D、使用整数型数据。也是 int 。因为次数也是一个整数来的。

作者在 2017-08-12 17:27:40 补充以下内容

附录参考答案

[附件537]

作者在 2017-08-15 07:08:10 补充以下内容

2.需要 long 类型变量代替 int 类型变量的原因是什么?

答:

因为我们有时候需要处理的数据超出了 int 类型数据的范围,而在C语言标准中,long 类型储存范围比 int 类型的储存范围要大,可以满足我们的数据处理需要。所以有时我们需要用 long 类型变量代替 int 类型变量。

作者在 2017-08-15 07:14:22 补充以下内容

附录参考答案:

[附件537]

作者在 2017-08-15 07:29:15 补充以下内容

3.获得一个32位的有符号整数,可以使用哪些可移植的数据类型?每一个选择的原因是什么?

答:有两种可以选择的类型。

(1)long 类型或者 long int 类型。这种类型的整数不小于最大的 int 类型的整数值。C语言标准保证 long 有32位长。

(2)long long 类型或者 long long int 类型,这种类型的整数不小于最大的 long 类型的整数值。C语言标准保证 long long 有64位长。

作者在 2017-08-15 07:30:38 补充以下内容

附录参考答案:

[附件537]

答非所问,对题目没有理解清楚。这是大忌讳啊。------自言自语。


作者在 2017-08-17 11:30:30 补充以下内容

4.指出下列常量的类型和意义(如果有的话):

a. '\b'

b.1066

c.99.44

d.0XAA

e.2.0e30

答:

a.  char 类型,表示字符串\和字符b。

b.  int 类型,表示整数1066。

c. float类型,表示浮点数99.44。

d.十六进制法表示的整数,相当于十进制的170

e.科学计数法表示的数,相当于十进制的2.0*10的30次方,就是2后面有30个0.


作者在 2017-08-17 11:46:52 补充以下内容

附录参考答案:

C Primer Plus 第3章复习题参考答案.png (上传于2017-08-12 17:27:40)
C Primer Plus 第3章复习题参考答案.png

对题目的理解不透彻,是因为对概念不熟悉。-------------自言自语。


作者在 2017-08-17 12:06:08 补充以下内容

5.   Dottie Cawm 写的下面这个程序中有很多错误,找出这些错误:


include <stdio.h>
main 
(
   float  g; h;
   float  tax, ratle; )

   g = e21;
   tax = rate*g;

)


include <stdio.h>                     // 缺少预处理符号“#”。
main                                  //没有定义  main  的类型和参数的类型,即 main () 括号内没有定义。     
(                                    // 这里的“(”,应该是大括号“{”,是一个函数开始的标记。
   float  g; h;                     //连续定义几个变量,中间应该是用“,”。而不是分号“;”。在C语言中,“;”是表示一个语句的结束符号。
   float  tax, ratle; 
 
   g = e21;                 //这一行有错误,只是确定有,但是不知道具体在哪里。
   tax = rate*g;            // 这一行有错误,只是确定有,不知道具体错在哪里。
 
)                //这里的“(”应该是“}”,是一个函数结束的标记。                                         

还有两行,确定有错误,但是不知道错在哪里。


作者在 2017-08-21 10:22:11 补充以下内容

附录参考答案:

相比之下,才可以看到距离,还有很多东西要学习。

第三章复习题第5题参考答案.jpg (上传于2017-08-21 10:22:11)
第三章复习题第5题参考答案.jpg

作者在 2017-08-21 10:30:09 补充以下内容

6. 因为有表格,所以直接截图,但是做答案时,不能如此。

第三章复习题第6题题目.jpg (上传于2017-08-21 10:30:09)
第三章复习题第6题题目.jpg

想了一下,还是把表格做出来,不能偷这一下懒,学会插入表格,也是一种学习。

序号 常量 类型和说明符
a. 12 int类型常量,“%d"。
b. 0x3
c. 'C' char'类型常量,”%“。
d. 2.34E07 long int 类型常量,
e. '\40'
f. 7.0 float 类型常量,”%f"。
g. 6L
h. 6.0 float 类型常量,”%f"。

认认真真做完后,才发现差不多有一半的题量不会做。还是得再回过头把这一章仔细看一次。

作者在 2017-08-21 16:39:25 补充以下内容

附录参考答案:

第三章复习题第6题参考答案.jpg (上传于2017-08-21 16:39:25)
第三章复习题第6题参考答案.jpg

作者在 2017-08-25 00:16:45 补充以下内容

7.  指出下表中各常量的数据类型(在声明语句中使用的数据类型)以及在printf ( )中的格式说明符。假设 int 类型长度为16位。

序号 常量 类型 说明符
a. 012 int %d
b. 2.9e05L long float %lf
c. 's' char %c
d. 100000 int %d
e. '\n' 转义符
f. 20.0f float %f
g. 0x44 int %0x

作者在 2017-08-25 00:45:50 补充以下内容

附录参考答案

第3章复习题参考答案第7题.png (上传于2017-08-25 00:45:50)
第3章复习题参考答案第7题.png


还是会有许多的知识点会遗忘,这需要用更多的练习来加强记忆。----自言自语。

作者在 2017-09-04 10:24:42 补充以下内容

8.假设一个程序开始处有如下声明:


int imate = 2;
long shot = 53456;
char grade = 'A';
float log = 2.71828;
在下在面的 printf ();语句中添上合适的类型说明符。


printf ( "The odds against the %_ were %   1 . \n ", imate , shot );

printf ( “ A score of %__ is not a %__grade .\n", log ,grade);


答:


printf ( "The odds against the %   were % l  1 . \n ", imate , shot );

printf ( “ A score of % c  is not a %_f_grade .\n", log ,grade);



作者在 2017-09-04 10:39:27 补充以下内容

附录参考答案:

第三章复习题第8题参考答案.jpg (上传于2017-09-04 10:39:27)
第三章复习题第8题参考答案.jpg

%d和%ld的区别还没有掌握好,要再翻看一次。

第二个是因为不仔细,把顺序弄错了。写程序和写文章也要做到一样,不能出错啊,特别是逻辑性的错误。————自言自语

作者在 2017-09-04 17:45:23 补充以下内容

百度而来的有关于%ld和%d之间的区别的知识点。

C语言%ld用来输出长整型数。
%d用来输出整型数。
    因为格式符指明了输出指定的起始地址开始的若干个字节的内容(把它们作为长整型数或整型数来解释),所以,如果用错了对象,就会得出意想不到的结果。如果用%d来输出长整型数,就会只取它的头上几个字节,相当于对原来的长整型数取了模;而如果用%ld来输出整型数,因为实际的数字节数少而硬要取更多的字节,就会发生“把别人家的孩子领回家”的事,把别的数据解释为当前的值了。

%ld 的话 输出的字节要长点 %d 的要短点。比如,一个数大于32767 用%d 就要溢出。假如你想输出32768.用%d 就会输出-1.这就是溢出。但是用%ld 就不会。它能接受的数的范围大些!希望你懂了!
输出-32768~32767以内的数都一样!



作者在 2018-10-28 16:16:04 补充以下内容

9、假设ch为char类型变量,使用转义序列、十进制值、八进制字符常量和十六进制字符常量等方法将其赋值为回车符(假设作用ASCII编码值)。


答:转义序列:ch = '\r' ;

      十进制值: ch = 13 ;

      八进制字符常量: ch = 15 ;

     十六进制字符常量:ch = c ;

     

作者在 2018-10-28 16:18:59 补充以下内容

参考答案:


第3章复习题参考答案04.jpg (上传于2018-10-28 16:18:59)
第3章复习题参考答案04.jpg

作者在 2018-11-04 17:10:33 补充以下内容

自言自语:自己的答案中,只有第个是对的,其余都错了。

题目的要求是八进制、十六进制的字符常量来赋值,只有带英文的单引号的,才是字符常量。所以我的答案中的15和c都不是字符常量。

而且,八进制是要在常量前面加0,十六进制是要有前面加0x的。并且直六进制中的9以后的数字是用a到f的字母来代替的。

正确的答案应该是:



答:转义序列:ch = '\r' ;

      十进制值: ch = 13 ;

      八进制字符常量: ch = '015' ;

     十六进制字符常量:ch = '0xd' ;





作者在 2018-11-04 17:38:41 补充以下内容

10、改正下面的程序(在C中/表示除法)。


void main (int)   / this programe is perfect /
{
    cows , legs , integer ;
    printf ("How many cow legs did you count ?\n);
    scanf ("%c",legs);
    cows = legs / 4 ;
    printf ("That implies there are %f cows.",cows);
}


作者在 2018-11-04 17:50:08 补充以下内容

程序代码中:

第1行:

(1)

main 函数的类型和这个函数返回值的类型表示错误,颠倒过来了。

应该这样写:

int main (void)


(2)

 这一行的注释符号使用错误。C中是用“//”或者是“/**/”,来进行注释的。

所以应该这样写:


/*this programe is perfect*/
或者是这样子写:



// this programe is perfect 




作者在 2018-11-04 17:55:01 补充以下内容

程序代码中:

第 2 行 没有错误。

第 3 行 没有对变量 cows , leges 和 integer 的数据类型做限制,也就是没有对它们的数据类型做说明。

所以

作者在 2018-11-04 17:57:22 补充以下内容

所以应该这样写:


int cows , legs , integer;


作者在 2018-11-04 20:34:28 补充以下内容

刚刚又仔细看了一下,应该是


int cows , legs ;
因为整个程序代码里没有用到  integer  这个变量


作者在 2018-11-04 20:38:24 补充以下内容

第 4 行 

printf 语句中,?\n); 这个地方少了一个英文的双引号。

应该这样写


printf ("How many legs did you count ? \ n ");

作者在 2018-11-04 20:49:23 补充以下内容

第 5 行

(1)  scanf 语句中,参数应该是一个变量的地址,而不是变量本身。

所以应该这样写


scanf ("%c",&legs);


(2) legs 的数据类型是 int ,所以控制符应该是d, 而不是 c 。c 是用于控制字符的输入和输出的控制符。

所以应该这样写


scanf  ("%d", &legs);




作者在 2018-11-08 05:40:31 补充以下内容
scanf  ("%d", &legs);
作者在 2018-11-08 05:46:19 补充以下内容

第 6 行 。

第 7 行。

cows 的数据类型是 int (整数类型)。所以控制符应该是 d ,而不是 f 。f 是控制浮点数的输入和输出的控制符。

所以应该这样写:


printf ("That implies there are %d cows.",cows);





作者在 2018-11-08 05:48:30 补充以下内容

参考答案


第3章复习题参考答案04.jpg (上传于2018-11-08 05:48:30)
第3章复习题参考答案04.jpg

作者在 2018-11-08 05:57:12 补充以下内容

自言自语:

对比参考答案。有两处没有做对。

1、C中程序应该有一个预处理命令。所以第 1 行之前还要有


#include <stdio.h>
2、main 函数中应该有一个结束命令。所以第 7 行与第 8 行之前还要有;



return () ;
因此看题要全面审题,要从程序的整体结构上想有吧些错误,具体细节错误改过来后,还要问下自己结构上有没有错误。


切记切记!

作者在 2018-11-08 06:00:01 补充以下内容

所以整个程序应当这样写:


int main (void)   / this programe is perfect /
{
    int  cows , legs ;
    printf ("How many cow legs did you count ?\n");
    scanf ("%d",&legs);
    cows = legs / 4 ;
    printf ("That implies there are %d cows.",cows);
    return () ;
}


作者在 2018-11-08 06:02:33 补充以下内容

11、指出下列转义字符的意义:

a. \n 

b. \\

c. \*

d. \t

作者在 2018-11-08 06:09:09 补充以下内容

答案:

a. \n  =  换行 。

b. \\  = 输出一个反斜杠(\)。

c.  \* = 输出一个星号  (*)。

d.  \t = 水平制表符号。

作者在 2018-11-08 06:11:36 补充以下内容

附录参考答案:

第3章复习题参考答案04.jpg (上传于2018-11-08 06:11:36)
第3章复习题参考答案04.jpg
作者在 2018-11-08 06:14:53 补充以下内容

自言自语:

是看了书中的转义序列的表格,才晓得答案的,只的其中的换行,一眼就看出来了,因为经常用到它的。

另外,在抄题目时也弄错了,应该是双引号的,看成是一个星号了,切记仔细!

作者在 2018-11-08 06:17:11 补充以下内容

再补充下:

转义序列符号表格在书中的第 43 (54)页。没有记下为的时间,可以用做工具书。

学习杂记 | 阅读 6138 次
文章评论,共3条
孟祥建
2017-08-18 01:45
1
孟祥建
2017-08-18 01:51
2
你现在在学c语言吗,可以共勉,我差不多学了一本书了,需要的话我们还可以相互讨论下,对了要把每天都记录下来,从点滴开始,我现在还会深入学习,希望我们能成为好友,经常来我那逛逛,我们互相监督,不能落下每一天,我也会经常来你这逛逛。
yehuabao(作者)
2017-08-18 07:49
3
刚刚才学,一本书还没看完。谢谢。我这又有两三天落下了。
游客请输入验证码
浏览14397次