第3章复习题

By admin in 百科 on 2020年1月16日

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

1.指出下面各种数据使用的合适的数据类型(有些可使用多种数据类型)?

A. East Simpleton 的人口。

a.East Simpletion的人口        intshort intunsigned short

B.DVD影碟的价格。

b.DVD光盘的价格                floatdouble

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

c.本章出现次数最多的字母          char

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

d.本章出现次数最多的字母的次数   int unsigned int

2.在什么情况下要用long类型的变量代替int类型的变量?

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

在系统中要表示的数超过了int可表示的范围,这是要使用long类型。

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

如果要处理更大的值,那么使用一种在所有系统上都保证至少是32位的类型,可提高程序的可移植性。

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

3.使用哪些可移植的数据类型可以获得32位有符号整数?选择的理由是什么?

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

如果正好要获得32位的整数,可以使用int32_t类型。

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

附录参考答案

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

要获得可存储至少32位整数的最小类型,可以使用int_least32_t类型。

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

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

答:

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

如果要为32位整数提供最快的计算速度,可以选择int_fast32_t类型

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

附录参考答案:

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

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

——————————– 作者在 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位长。

‘b’ char类型常亮 但是存储位int类型

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

附录参考答案:

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

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

1066 int类型

——————————– 作者在 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.

99.44 double类型

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

附录参考答案:

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

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

0XAA 16进制int类型

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

  1.   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;            // 这一行有错误,只是确定有,不知道具体错在哪里。

)                //这里的“(”应该是“}”,是一个函数结束的标记。                                         

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

2.0e30  double类型

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

附录参考答案:

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

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

5.Dittue Cawm编写了一个程序,请找出程序中的错误。

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

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

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

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

序号 常量 类型和说明符
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"。

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

#include

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

附录参考答案:

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

(int) main {

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

  1.  指出下表中各常量的数据类型(在声明语句中使用的数据类型)以及在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

float g, h;

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

附录参考答案

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

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

float tax, rate;

——————————– 作者在 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 %  d  were % l  1 . n “, imate , shot
);

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

g = 1.e21   e前面至少要有一个数字;

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

附录参考答案:

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

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

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

tax = rate*g;

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

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

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

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

输出-32768~32767以内的数都一样!

return 0;

——————————– 作者在 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)
图片 10

6.写出下列常量在声明中使用的数据类型和在printf()中对应的转换说明:

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

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

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

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

正确的答案应该是:

答:转义序列:ch = ‘r’ ;

      十进制值: ch = 13 ;

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

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

Constant                 Type                    Specifier

——————————– 作者在 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);
}

12                         int                            %d

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

程序代码中:

第1行:

(1)

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

应该这样写:

int main (void)

(2)

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

所以应该这样写:

/*this programe is perfect*/

或者是这样子写:

// this programe is perfect 

0x3                     unsigned int                %#x

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

程序代码中:

第 2 行 没有错误。

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

所以

‘c’                     char                        %c

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

所以应该这样写:

int cows , legs , integer;

2.34E07                 double                        %e

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

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

int cows , legs ;

因为整个程序代码里没有用到  integer  这个变量

‘40’                     char                        %c

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

第 4 行 

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

应该这样写

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

7.0                     double                        %f

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

第 5 行

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

所以应该这样写

scanf ("%c",&legs);

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

所以应该这样写

scanf  (“%d”, &legs);

6L                         long int                    %ld

——————————– 作者在 2018-11-08 05:40:31 补充以下内容

scanf  ("%d", &legs);

6.0f                     float                        %f

——————————– 作者在 2018-11-08 05:46:19 补充以下内容

第 6 行 。

第 7 行。

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

所以应该这样写:

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

0x5.b6p12                 float                        %a

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

参考答案

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

7.写出下列常量在声明中使用的数据类型和在printf()中对应的转换说明(假设int为16位)

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

自言自语:

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

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

#include <stdio.h>

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

return () ;

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

切记切记!

Constant                 Type                    Specifier

——————————– 作者在 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 () ;
}

012                     int                        %#o

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

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

a. n 

b. \

c. *

d. t

2.9e05L                 long double                %le

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

答案:

a. n  =  换行 。

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

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

d.  t = 水平制表符号。

‘s’                     char                    %c

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

附录参考答案:

第3章复习题参考答案04.jpg (上传于2018-11-08
06:11:36)
图片 12

100000                     long int                %ld

——————————– 作者在 2018-11-08 06:14:53 补充以下内容

自言自语:

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

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

‘n’                     char                    %c

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

再补充下:

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

20.0f                     float                    %f

0x44                     unsigned                %x

-40                     int                        %d

8.假设程序的开头有下列声明:

int imate = 2;

long short = 53456;

char grade = ‘a’;

float log = 2.71828;

print(“The odds against the %d were %ld to 1.n”,imagte, short);

print(“A score of %f is not an %c grade.n”,log, grade);

9.假设ch是char类型的变量,分别使用转义序列、十进制值、八进制字符常量和十六进制字符常量把回车字符赋值给ch(假设使用ASCII编码值)

转义字符 char ch=    ‘r’;

十进制值 char ch=’13’

八进制 char ch=’15′

十六进制 char ch=’xd’

10.修正下列程序

void main(int) /* this program 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.n”, cows)

}

11.指出下列转义序列的含义

a. n  换行

b. \  反斜杠

c. ”  双引号

d. t  制表符

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2020 大奖888网页版登陆 版权所有