数据和C习题

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

a.East Simpleton 的人口

b.DVD影碟的价格

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

d.这个字母出现的次数

答:a. 我们知道在一般32位操作系统上,int 占4个字节,每个字节是8位,也就是int的取值范围是-2^32~2^32 可以最多表示21亿多,如果你觉得不够的话,可以在上unsigned修饰符

 b.float c.char d.short 

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

答:个人认为,之所以用long代替int,主要原因可能是int的存储范围,满足不了我们需要存储的值。

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

答:int32_t,可移植数据类型定义在inttypes.h头文件中,之所以有一个这样的头文件是,各个平台操作系统,对于基本类型关键字的存储范围不一,而有时候我们需要一种在各种平台下都要满足我们的需要固定范围的数据类型来存储,因此大家就定义了一个这样的头文件,这个头文件保证,它定义的数据类型别名,在各个系统下的存储范围(大小)一直,(ps:这里忽略此头文件中的最小长度类型,和最大长度类型)

4.指出下列常量的类型和意义

a.'\b'   字符常量,转义字符,代表退格键

b.1066  int 常量,c语言默认为所有的整数都是int,前提是在int的长度能够容纳的情况下

c.99.44  double 常量,c语言默认为所有的浮点数都是double,前提是在double的长度能够容纳的情况下

d.0XAA  int 常量,16进制表示方法

e.2.0e30  double 常量 指数表示法

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

include <stdio.h>  //缺少#
main         //int main(void){} ,main(){} 这种是比较老的写法,C99标准中已经不可用,最好遵守新标准
(
  float g;h;    //float g,h;
 float tax,rate;

 g = e21;    //e21不是常量。
             
 tax=rate*g;    //rate 未定义,不能进行运算,即使定义了,要注意float的长度是否能够容纳两个float的乘积,考虑溢出问题
)

6.指出下列各个常量最适合的数据类型,以及printf()中格式说明符

a.12   short         "%d"

b.0x3  unsigned short      "%#x"

c.'C'  char           "%c"

d.2.34E07  float        "%e"

e.'\040'  char        "%#O"  //转义字符,八进制表示法,别看懵了

f.7.0   float        "%f"

g.6L   long        "%ld"

h.6.0f  float        "%f"

7.指出下列各个常量最适合的数据类型,以及printf()中格式说明符,假设int 16位


a.012  short  "%d"

b.2.9e05L  long double  "%e"

c.'s'    char    "%c"

d.100000  long   "%ld"  //int 16位 范围是在-2^16~2^16之间。即使是unsigned最大长度是65536容纳不了十万

e.'\n'    char   "%c"

f.20.0f  float    "%f"

g.0x44  short  "%d"

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

int imate = 2;
long shot = 53456;
char grade = 'A';
float log = 2.71828;

在下面printf()语句中添上最合适的类型说明符

printf("The odds against this%__where %__ to 1.\n",imate,shot);  //d  ld

printf("A score of %__ is not an %__ grade.\n",log,grade);  //f  c

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

char ch;
ch = '\n'    //字符形式
ch = 10;    //十进制
ch = 0xA;   //十六进制
ch = 012;    //八进制
ch = '\012';   或者'\12' //转义序列八进制
ch = '\xa';    //转义序列十六进制

10.改正下面程序

void main(int)  //int main(void)
{
  cows,legs,integer;  //根据上下问,float cows,legs,integer; 
  printf("How many cow legs did you count?\n");      
  scanf("%c",legs); //scanf("%c",&legs) scanf()第二个参数接受指针
  cows = legs/4;
  printf("That implies there are %f cows.\n",cows);        
}

11.指出下列转义字符的含义

a.\n 换行符

b.\\  字符\

c.\*  字符*

d.\t  table符(制表符)

二、编程练习

1.通过实验的方法(即编写带有此类问题的程序)观察系统如何处理整数上溢、浮点上溢和浮点下溢的情况

2.编写一个程序,要求驶入一个ASCII码值如(66)然后输出相应字符

3.编写一个程序,发出警报声,并打印下列文字:

Start by the sudden sound,Sally...

 

 

posted @ 2013-04-07 21:31  _Miss_once  阅读(1196)  评论(0编辑  收藏  举报