1.对下面的数据使用合适的数据类型:
A. East Simpleton 的人口。
B.DVD影碟的价格。
C.本章出现次数最多的字母。
D.这个字母出现的次数。
答
A、使用整数型数据。即 int 。因为人口的单位就是个嘛。
B、使用浮点型数据。即 float 。因为价格有可以含有小数点。
C、使用字符型数据。即 char 。因为字母是一个个的字符。
D、使用整数型数据。也是 int 。因为次数也是一个整数来的。
1.对下面的数据使用合适的数据类型:
A. East Simpleton 的人口。
B.DVD影碟的价格。
C.本章出现次数最多的字母。
D.这个字母出现的次数。
答
A、使用整数型数据。即 int 。因为人口的单位就是个嘛。
B、使用浮点型数据。即 float 。因为价格有可以含有小数点。
C、使用字符型数据。即 char 。因为字母是一个个的字符。
D、使用整数型数据。也是 int 。因为次数也是一个整数来的。
附录参考答案
[附件537]
2.需要 long 类型变量代替 int 类型变量的原因是什么?
答:
因为我们有时候需要处理的数据超出了 int 类型数据的范围,而在C语言标准中,long 类型储存范围比 int 类型的储存范围要大,可以满足我们的数据处理需要。所以有时我们需要用 long 类型变量代替 int 类型变量。
附录参考答案:
[附件537]
3.获得一个32位的有符号整数,可以使用哪些可移植的数据类型?每一个选择的原因是什么?
答:有两种可以选择的类型。
(1)long 类型或者 long int 类型。这种类型的整数不小于最大的 int 类型的整数值。C语言标准保证 long 有32位长。
(2)long long 类型或者 long long int 类型,这种类型的整数不小于最大的 long 类型的整数值。C语言标准保证 long long 有64位长。
附录参考答案:
[附件537]
答非所问,对题目没有理解清楚。这是大忌讳啊。------自言自语。
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.
附录参考答案:
对题目的理解不透彻,是因为对概念不熟悉。-------------自言自语。
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; // 这一行有错误,只是确定有,不知道具体错在哪里。
) //这里的“(”应该是“}”,是一个函数结束的标记。
还有两行,确定有错误,但是不知道错在哪里。
附录参考答案:
相比之下,才可以看到距离,还有很多东西要学习。
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"。 |
认认真真做完后,才发现差不多有一半的题量不会做。还是得再回过头把这一章仔细看一次。
附录参考答案:
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 |
附录参考答案
还是会有许多的知识点会遗忘,这需要用更多的练习来加强记忆。----自言自语。
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);
附录参考答案:
%d和%ld的区别还没有掌握好,要再翻看一次。
第二个是因为不仔细,把顺序弄错了。写程序和写文章也要做到一样,不能出错啊,特别是逻辑性的错误。————自言自语
百度而来的有关于%ld和%d之间的区别的知识点。
C语言%ld用来输出长整型数。 %d用来输出整型数。 因为格式符指明了输出指定的起始地址开始的若干个字节的内容(把它们作为长整型数或整型数来解释),所以,如果用错了对象,就会得出意想不到的结果。如果用%d来输出长整型数,就会只取它的头上几个字节,相当于对原来的长整型数取了模;而如果用%ld来输出整型数,因为实际的数字节数少而硬要取更多的字节,就会发生“把别人家的孩子领回家”的事,把别的数据解释为当前的值了。
%ld 的话 输出的字节要长点 %d 的要短点。比如,一个数大于32767 用%d 就要溢出。假如你想输出32768.用%d 就会输出-1.这就是溢出。但是用%ld 就不会。它能接受的数的范围大些!希望你懂了!
输出-32768~32767以内的数都一样!
9、假设ch为char类型变量,使用转义序列、十进制值、八进制字符常量和十六进制字符常量等方法将其赋值为回车符(假设作用ASCII编码值)。
答:转义序列:ch = '\r' ;
十进制值: ch = 13 ;
八进制字符常量: ch = 15 ;
十六进制字符常量:ch = c ;
参考答案:
自言自语:自己的答案中,只有第个是对的,其余都错了。
题目的要求是八进制、十六进制的字符常量来赋值,只有带英文的单引号的,才是字符常量。所以我的答案中的15和c都不是字符常量。
而且,八进制是要在常量前面加0,十六进制是要有前面加0x的。并且直六进制中的9以后的数字是用a到f的字母来代替的。
正确的答案应该是:
答:转义序列:ch = '\r' ;
十进制值: ch = 13 ;
八进制字符常量: ch = '015' ;
十六进制字符常量:ch = '0xd' ;
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);
}
程序代码中:
第1行:
(1)
main 函数的类型和这个函数返回值的类型表示错误,颠倒过来了。
应该这样写:
int main (void)
(2)
这一行的注释符号使用错误。C中是用“//”或者是“/**/”,来进行注释的。
所以应该这样写:
/*this programe is perfect*/
或者是这样子写:
// this programe is perfect
程序代码中:
第 2 行 没有错误。
第 3 行 没有对变量 cows , leges 和 integer 的数据类型做限制,也就是没有对它们的数据类型做说明。
所以
所以应该这样写:
int cows , legs , integer;
刚刚又仔细看了一下,应该是
int cows , legs ;
因为整个程序代码里没有用到 integer 这个变量
第 4 行
printf 语句中,?\n); 这个地方少了一个英文的双引号。
应该这样写
printf ("How many legs did you count ? \ n ");
第 5 行
(1) scanf 语句中,参数应该是一个变量的地址,而不是变量本身。
所以应该这样写
scanf ("%c",&legs);
(2) legs 的数据类型是 int ,所以控制符应该是d, 而不是 c 。c 是用于控制字符的输入和输出的控制符。
所以应该这样写
scanf ("%d", &legs);
scanf ("%d", &legs);
第 6 行 。
第 7 行。
cows 的数据类型是 int (整数类型)。所以控制符应该是 d ,而不是 f 。f 是控制浮点数的输入和输出的控制符。
所以应该这样写:
printf ("That implies there are %d cows.",cows);
参考答案
自言自语:
对比参考答案。有两处没有做对。
1、C中程序应该有一个预处理命令。所以第 1 行之前还要有
#include <stdio.h>
2、main 函数中应该有一个结束命令。所以第 7 行与第 8 行之前还要有;
return () ;
因此看题要全面审题,要从程序的整体结构上想有吧些错误,具体细节错误改过来后,还要问下自己结构上有没有错误。
切记切记!
所以整个程序应当这样写:
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 () ;
}
11、指出下列转义字符的意义:
a. \n
b. \\
c. \*
d. \t
答案:
a. \n = 换行 。
b. \\ = 输出一个反斜杠(\)。
c. \* = 输出一个星号 (*)。
d. \t = 水平制表符号。
附录参考答案:
自言自语:
是看了书中的转义序列的表格,才晓得答案的,只的其中的换行,一眼就看出来了,因为经常用到它的。
另外,在抄题目时也弄错了,应该是双引号的,看成是一个星号了,切记仔细!
再补充下:
转义序列符号表格在书中的第 43 (54)页。没有记下为的时间,可以用做工具书。