第三章:C语言基本数据类型 ~~~ 复习题与编程练习的答案与详解
目录
第三章:C语言基本数据类型 ~~~ 复习题与编程练习的答案与详解
一、复习题(答案参考该书附录,解析为读者编写)
二、编程练习
一、复习题(答案参考该书附录,解析为读者编写)
1、指出下面各种数据使用的合适数据类型(有些可使用多种数据类型):
2、在什么情况下要用long类型的变量代替int类型的变量?
- 原因之一:在系统中要表示的数超过了int可表示的范围,这时要使用long类型。
- 原因之二:如果要处理更大的值,那么使用一种在所有系统上都保证至少是32位的类型,可提高程序的可移植性。
3、使用哪些可移植的数据类型可以获得32位有符号整数?选择的理由是什么?
- 如果要正好获得32位的整数,可以使用int32_ t类型。要获得可储存至少32位整数的最小类型,可以使用int_ least32_ t 类型。
- 如果要为32位整数提供最快的计算速度,可以选择int_ fast32_ t类型(假设你的系统已定义了,上述类型)。
4、指出下列常量的类型和含义(如果有的话):
5、Dottie Cawm编写了一个程序,请找出程序中的错误。
6、写出下列常量在声明中使用的数据类型和在printf()中对应的转换说明:
7、写出下列常量在声明中使用的数据类型和在printf ()中对应的转换说明(假设int为16位):
8、假设程序的开头有下列声明:
9、假设ch是char类型的变量。分别使用转义序列、十进制值、八进制字符常量和十六进制字符常量把回车字符赋给ch ( 假设使用ASCII编码值)。
10、修正下面的程序(在C中,/表示除以)。
11、指出下列转义序列的含义:
二、编程练习
1、通过试验(即编写带有此类问题的程序)观察系统如何处理整数上溢、浮点数上溢和浮点数下溢的情况。
#include <stdio.h>
int main(void)
{
int int_MORE = 2147483647;
float float_MORE = +3.4e38;
float float_LEAST = -3.4e38;
printf("Correct: int_MORE = %d \r\n", int_MORE);
printf("Correct: float_MORE = %f \r\n", float_MORE);
printf("Correct: float_LEAST = %f \r\n", float_LEAST);
int_MORE = int_MORE * 10;
float_MORE = float_MORE * 10;
float_LEAST = float_LEAST * 10;
printf("Error: int_MORE = %d \r\n", int_MORE);
printf("Error: float_MORE = %f \r\n", float_MORE);
printf("Error: float_LEAST = %f \r\n", float_LEAST);
return 0;
}
2、编写一个程序,要求提示输入一个ASCII码值(如,66), 然后打印输入的字符。
#include <stdio.h>
int main(void)
{
char a;//a为字符类型
scanf("%d",&a);//scanf用于输入、因为接收的是数字、所以是用%d
//ASCII码中不同的字符有对应不同的数字
printf("\r\n%c\n", a);//将数字转换为字符并输出
return 0;
}
3、编写一个程序,发出一声警报,然后打印下面的文本:
#include <stdio.h>
int main(void)
{
printf("\a");
printf("Startled by the sudden sound, Sally shouted,\r\n");
printf("\"By the Great Pumpkin, what was that!\"\r\n");
return 0;
}
4、编写一个程序,读取一个浮点数,先打印成小数点形式,再打印成指数形式。然后,如果系统支持,再打印成p记数法(即十六进制记数法)。按以下格式输出(实际显示的指数位数因系统而异):
#include <stdio.h>
int main(void)
{
float val;
printf("enter a floating-point value:");
scanf("%f",&val);
printf("fixed-point notation:%f\r\n",val);
printf("exponential notation:%e\r\n",val);
printf("p notation:%a\r\n",val);
return 0;
}
5、一年大约有3.156X10^7秒。编写一个程序,提示用户输入年龄,然后显示该年龄对应的秒数。
#include <stdio.h>
int main(void)
{
unsigned int val;
printf("输入年龄:");
scanf("%d",&val);
printf("对应的秒数:%f\r\n",val*3.156*10e7);
return 0;
}
6、1个水分子的质量约为3.0X10^-23克。 1夸脱水大约是950克。编写一个程序,提示用户输入水的夸脱数,并显示水分子的数量。
#include <stdio.h>
int main(void)
{
unsigned int val;
printf("输入水的夸脱数:");
scanf("%d",&val);
printf("对应水分子的数量:%e\r\n",950*val/3.0e-23);
return 0;
}
7、1英寸相当于2.54厘米。编写一个程序,提示用户输入身高(/英寸),然后以厘米为单位显示身高。
#include <stdio.h>
int main(void)
{
unsigned int val;
printf("输入身高(/英寸):");
scanf("%d",&val);
printf("以厘米为单位显示身高:%0.2f\r\n",val*2.54);
return 0;
}
8、在美国的体积测量系统中,1品脱等于2杯,1杯等于8盎司,1盎司等于2大汤勺,1大汤勺等于3茶勺。编写一个程序,提示用户输入杯数,并以品脱、盎司、汤勺、茶勺为单位显示等价容量。思考对于该程序,为何使用浮点类型比整数类型更合适?
#include <stdio.h>
int main(void)
{
float cup, pint, ounce, spoon, teaspoon;
printf("请输入杯数:");
scanf("%f", &cup);
pint = cup / 2;
ounce = 8 * cup;
spoon = 8 * cup * 2;
teaspoon = 8 * cup * 2 * 3;
printf(" 品脱:%f\r\n 盎司:%f\r\n 汤勺:%f\r\n 茶勺:%f\r\n", pint, ounce, spoon, teaspoon);
printf("如果使用整数类型,当出现半杯的时候,会导致数据的丢失,使精度下降!\r\n");
return 0;
}