BeautifulMan

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  16 随笔 :: 0 文章 :: 0 评论 :: 0 Trackbacks
第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、
 1 /* 整数上溢*/
 2 #include <stdio.h>
 3 int main(void)
 4 {
 5     int i = 2147483647;
 6     unsigned int j = 4294967295;
 7 
 8     /*
 9         无符号整数j像一个汽车里程指示表(形容的太好了,可参考《计算机科学导论》第3章 数据存储,有图),
10        当达到最大值时,它将溢出到起始点。整数i也是同样。它们的主要区别是unsigned int变量j的起始点是0(正像里程
11        指示表那样),而int变量i的起始点则是-2147483648。——参考《C Primer Plus》
12     */
13     printf("%d %d %d\n", i, i+1, i+2);
14     printf("%u %u %u\n", j, j+1, j+2);
15     return 0;
16 }
运行结果:
2147483647 -2147483648 -2147483647
4294967295 0 1
浮点数的上溢和下溢???(理解的不是很清楚,回头再来写)
2、
1 #include <stdio.h>
2 int main(void)
3 {
4     int asc;
5     printf("Please enter an ASCII value: ");
6     scanf("%d", &asc);
7     printf("The code is %c.\n", asc);
8     return 0;
9 }
3、
1 #include <stdio.h>
2 int main(void)
3 {
4     printf("\aStartled by the sudden sound, Sally shouted, ");
5     printf("\"By the Great Pumpkin,what was that!\"\n");
6     return 0;
7 }
4、
1 #include <stdio.h>
2 int main(void)
3 {
4     float number;
5     printf("Please enter a float value: ");
6     scanf("%f", &number);
7     printf("The input is %f or %e", number, number);
8     return 0;
9 }
5、
1 #include <stdio.h>
2 int main(void)
3 {
4     int age;
5     printf("Please enter your age: ");
6     scanf("%d", &age);
7     printf("Your age has %e s", age*3.156e7);
8     return 0;
9 }
6、
1 #include <stdio.h>
2 int main(void)
3 {
4     int num; // 夸脱数应该为整数吧!!
5     printf("Please enter water: ");
6     scanf("%d", &num);
7     printf("The water has %e ", num*950/3.0e-23);
8     return 0;
9 }
7、
1 #include <stdio.h>
2 int main(void)
3 {
4     float height;
5     printf("Please enter your height: ");
6     scanf("%f", &height);
7     printf("Your height is %.2f cm.\n", height*2.54);
8     return 0;
9 }
posted on 2015-10-31 22:22 李阿昀 阅读(1406) 评论(0)  编辑  收藏 所属分类: C Primer Plus 复习题与编程练习

只有注册用户登录后才能发表评论。


网站导航: