首页 > 其他 > 详细

C Primer Plus 第3章 数据和C 复习题与编程练习

时间:2015-11-01 02:02:09      阅读:884      评论:0      收藏:0      [点我收藏+]
第3章  数据和C
复习题
1、对下面的各种数据使用合适的数据类型:
     a.East Simpleton的人口
     b.DVD影碟的价格
     c.本章出现次数最多的字母
     d.这个字母出现的次数
答:a.int类型,可以是short、unsigned或unsigned short;人口数是一个整数。
      b.float类型;价格不太可能正好是一个整数(您也可以使用double,但实际上并不需要那么高的精度)。
      c.char类型。
      d.int类型,可以是unsigned。
2、需要用long类型变量代替int类型变量的原因是什么?
答:一个原因是在您的系统中long可以容纳比int类型更大的数;一个原因是如果您确实需要处理更大的值,那么使用一种在所有系统上都能保证至少是32位的类型会使程序的可移植性更好。
3、获得一个32位的有符号整数,可以使用哪些可移植的数据类型?每种选择的原因是什么?
答:要获得正好是32位的数,您可以使用int32_t(如果在您的系统上有这一定义的话)。要获得可存储至少32位的最小类型,可以使用int_least32_t。如果要在32位的类型中获得提供最快计算速度的类型,可以选择int_fast32_t。(参考
3.4.5  可移植的类型:inttypes.h,理解的不是很清楚!!!)
4、指出下列常量的类型和意义(如果有的话):
     a.‘\b‘
     b.1066
     c.99.44
     d.0XAA
     e.2.0e30
答:a.char常量(但以int类型存储)
      b.int常量
      c.double常量
      d.unsigned int常量,十六进制格式
      e.double常量
5、Dottie Cawm写的下面这个程序中有很多错误,找出这些错误。
1 include <stdio.h>
2 main
3 (
4     float g; h;
5     float tax, rate;
6 
7     g = e21;
8     tax = rate * g;
9 )
答:第1行:应该是#include <stdio.h>
      第2行:应该是int main(void)
      第3行:使用{,而不是(
      第4行:在g和h之间应该是逗号而不是分号
      第5行:无错误
      第6行:(空行)无错误
      第7行:在e之前应该至少有一个数字,.1e21或1.e21都是正确的,尽管这个数有点大。
      第8行:无错误,至少在语法上没有
      第9行:使用},而不是)
缺少的行:首先,rate没有被赋值。其次,变量h从来没有被使用。而且程序永远不会把它的计算结果通知给您。这些错误都不会阻止程序的运行(尽管可能会向您出示一个警告以说明变量没有被使用),但是它们确实减弱了程序本来就不多的功能。而且在结尾处应该有一个return语句。
   下面是正确版本之一:  
 
 1 #include <stdio.h>
 2
 int main(void)
 3 {
 4     float g, h;
 5     float tax, rate;
 6     rate = 0.08;
 7     g = 1.0e5;
 8 
 9     tax = rate * g;
10     h = g + tax;
11     printf("You owe $%f plus $%f in taxes for a total of $%f.\n", g, tax, h);
12     return 0;
13 }
6、指出下表中各常量的数据类型(在声明语句中使用的数据类型)及其在printf()中的格式说明符。
          常量         类型        说明符     

12

0x3
  ‘C‘  
  2.34E07  
 ‘\040‘   
 7.0   
 6L   
 6.0f   













答:
          常量           类型           说明符     

12int%d

0x3unsigned int%#x
  ‘C‘char %c 
  2.34E07double  %f
 ‘\040‘ char  %c
 7.0 double  %f
 6L long  %ld
 6.0f float %e 












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

012

2.9e05L
  ‘s‘  
  100000  
 ‘\n‘   
 20.0f   
 0x44   
















答:
          常量           类型           说明符     

012int%#0

2.9e05Llong double%Le
  ‘s‘char %c 
  100000long %ld 
 ‘\n‘ char%c 
 20.0f float %f 
 0x44 unsigned int %#x 
















8、假设一个程序开始处有如下的声明:
1 int imate = 2;
2 long shot = 53456;
3 char grade = ‘A‘;
4 float log = 2.71828;
在下面printf()语句中添上合适的类型说明符:
1 printf("The odds against the %___ were %___ to 1.\n", imate, shot);
2 printf("A score of %___ is not an %___ grade.\n", log, grade);
答:
1 printf("The odds against the %d were %ld to 1.\n", imate, shot);
2 printf("A score of %f is not an %c grade.\n", log, grade);
9、假设ch为char类型变量。使用转义序列、十进制值、八进制字符常量以及十六进制字符常量等方法将其赋值为回车符(假设使用ASCII编码)。
答:
1 char ch = ‘\r‘;
2 char ch = 13;
3 char ch = ‘\015‘;
4 char ch = ‘\xd‘;
10、改正下面程序(在C中/表示除法)。
1 void main(int) / this progarm is perfect /
2 {
3    cows, legs integer;
4    printf("How many cow legs did you count?\n);
5    scanf("%c", legs);
6    cows = legs / 4;
7    printf("That implies there are %f cows.\n", cows)
8 }
答:
 1 #include <stdio.h>
 2 int main(void/* this progarm is perfect */
 3 {
 4    int cows, legs;
 5    printf("How many cow legs did you count?\n");
 6    scanf("%d", &legs);
 7    cows = legs / 4;
 8    printf("That implies there are %d cows.\n", cows);
 9    return 0;
10 }
11、指出下列转义字符的含义:
1 a.\n
2 b.\\
3 c.\"
4 d.\t
答:a.换行字符
      b.反斜线字符
      c.双引号字符
      d.制表字符
编程练习
1、



















C Primer Plus 第3章 数据和C 复习题与编程练习

原文:http://www.blogjava.net/BeautifulMan/archive/2015/10/31/428003.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!