C语言程序设计案例精粹
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.6 疑难解答和上机题

2.6.1 疑难解答

1. 常量和变量有什么区别呢?

解答:常量是不能改变的量,例如某个城市的名字,一般是不会改变的,但该城市的天气情况却经常变化,因此,城市的名称就是常量,而该城市的天气就是变量。

2. 除了二进制、八进制、十进制和十六进制,还有其他进制么?

解答:有的,比如等式110+20=200也有成立的时候,但在什么情况下成立呢,显然十进制时是不成立的。这里我们假设它在x进制下成立,那么将这个等式展开成x进制模式:

1*x2+1*x+0*x0+ 2*x = 2*x2+0*x+0*x0

转化为:

x2-3x = 0

解得:

x= 3或x = 0

显然,x=0不符合要求,因此取x=3。

因此,在三进制情况下上述等式成立。所以,存在除一般进制外的其他进制,只不过日常生活中很少应用。

3. 常量123、123.和123.0在内存中存储时有什么区别?

解答:常量123表示整型常量,在内存中占4个字节的存储空间,123.和123.0表示实型常量,在内存中占8字节的存储空间(实型常量在内存中默认都以双精度实型存储)。

4. 定义变量为short和int类型,都属于整型,两者有什么区别呢?

解答:实际应用中,有时需要用到较大的数值,有时仅使用较小的数值。例如表示时间的变量,最大值为24或者60即可,而有时又需要较大的数值才能表示,例如地球进化的时间,地球到月球的距离等。short型只能表示-32768~32767之间的数值,内存中占2个字节,int型能表示-2147483648~2147483647之间的数值,内存中占4个字节。有时候不需要表达很大的数值时,就使用short类型,这样就节省了内存的很多资源。

5. 为什么变量不能重名?

解答:变量不像人一样,可以根据体貌特征分析两个姓名相同的人,计算机识别不同变量的唯一方法就是按照不同的变量名区分。而假如将某变量定义为int型,然后又将这一变量定义为short型,系统会因为定义时占不同的内存单元而出现矛盾,为了避免计算机出现这种矛盾,C语言系统禁止不同数据类型的变量使用相同的变量名。

6. 为什么计算机中需要区别有符号和无符号?

解答:实际应用中,有些量必须由自已决定是否需要正负。如果这个量不会有负值,那么我们可以定义它为不带正负的类型。例如年龄,总会是正的,而某人的净收入,可能为正,也可能为负。计算机提供无符号的目的是尽可能对没有负号出现的变量赋予更大范围的数值,以使这个变量在使用时可以有更大范围的存取数据。

7. 字符串"a"和字符'a'有什么区别?

解答:字符和字符串主要区别在于两者在内存中所占的资源不同。字符串中每个字符在内存中占1个字节,但字符串末尾系统自动添加字符串结束符'\0',因此,字符串"a"所占字节数为2,而字符'a'所占字节数为1。

8. 标识符_input_,This-year,goto,3ku是否可定义为变量?

解答:变量定义的规则如下:

(1)由字母、数字和下画线组成。

(2)变量名不能和关键字相同。

(3)第一个字符必须是字母或下画线。

第一个标识符_input_可以作为变量;第二个标识符This-year由于含有字符 '-',因此不能作为变量;第三个标识符goto为C语言关键字,因此也不能作为变量;第四个标识符3ku由于首字母为数字3,因此也不能作为变量。

9. 为什么字符变量或常量可以进行算术运算?

在计算机系统中,字符都是以ASCII码存在系统中的,也就是每个字符都相当于一个数字。因此,程序使用字符作算术运算就相当于使用数字作算术运算,两者没有本质的区别。例如:

定义变量c:

char c = 'a' +3;

C语言中,字母以ASCII码存放,且大小写字母按ASCII码的顺序递增,在字母a的基础上加3,为字母d,因此,变量c为字母d。

10. 什么情况下会使用枚举呢?

解答:枚举类似于定义一些符号,这些符号都代表一定的数值,并且这些符号可以定义为容易看懂的名字。有时候在程序中要对一些变量赋值,同时又希望这些值表示一定的含义,这时就可以使用枚举。例如,定义枚举类型:

          enum  OneDay
          {
              GetUP = 6,
              HaveBreakFast=8,
              HaveLunch=12,
              HaveSupper=18,
              GoToSleep=22
          };

这样定义了一个一天中日常作息时间表,例如,有变量作为时间,当要验证该时间是否需要吃午饭时,只需将该变量和HaveLunch作比较,若相等,则该吃午饭了;若不等,则不吃午饭。这样设置将很容易使程序阅读者理解程序设置的功能。

2.6.2 上机题

1. 使用%d格式分别打印十进制数100和十六进制数0x100,分析打印数值的差别。

2. 浮点数100.123可以使用%d格式打印输出,也可以使用%f格式输出,试编写完整C语言代码实现使用这两种不同格式输出的效果。

3. 字母A和a的ASCII码分别为65和97,写一段完整的程序,将A和a的ASCII码输出到屏幕上。(提示:使用十进制格式输出%d可以输出字符的ASCII码值)。

4. 试编写一段完整的程序,利用格式输出%s,输出字符串:

Be careful !

This is not a test

(提示:若使用一条输出语句,调用printf函数,字符串中可以使用换行符’\n')。

5. 变量定义时通常使用变量定义语句,如定义字符型变量c,可使用语句:

char c;

试编写程序,定义整型变量i,并输出i的值。(提示:定义变量需要赋初值,否则将输出垃圾值)

6. 在程序题5的基础上,修改程序,定义char型变量a,并赋初值'a',使用a进行算术运算后输出最后一个小写字母z。(提示:字符可使用ASCII码参与算术运算。例如,变量b的ASCII码值等于'a'+1)

7. 参考范例2.16,试编写程序输出圆周率小数点后10位。(提示:圆周率小数点后前20位为3.14159265358979323846)

8. C语言中,可使用格式输出%o输出八进制数,试编写程序,以八进制格式输出整数10000和-10000。

9. C语言中,可使用格式输出%x,输出十六进制数,试编写程序,以十六进制格式输出整数1234567。

10. 试编写程序,定义表示星期的枚举类型:

              enum  week
              {
                  Sun,
                  Mon,
                  Teu,
                  Thr
                  Wen,
                  Fri,
                  Sat
              }
              并在程序中定义枚举类型变量:enum  week  week1;
              使week1 = Sat并输出week1的值。