1.12 复习题
1.完美的可移植程序是,其源代码无需修改就能在不同计算机系统中成功编译的程序。
2.源代码文件包含程序员使用的任何编程语言编写的代码。目标代码文 件包含机器语言代码,它不必是完整的程序代码。可执行文件包含组成可执行程序的完整机器语言代码。
3.(1)定义程序目标;(2)设计程序;(3)编写程序;(4)编译程序;(5)运行程序;(6)测试和调试程序;(7)维护和修改程序。
4.编译器把源代码(如,用C语言编写的代码)翻译成等价的机器语言代码(也叫作目标代码)。
2.11 复习题
1.C语言的基本模块是什么?
1.它们都叫作函数。
2.语法错误违反了组成语句或程序的规则。这是一个有语法错误的英文
例子:Me
speak
English
good.。这是一个有语法错误的C语言例子:
printf"Where are the parentheses?";。
3.语义错误是指含义错误。这是一个有语义错误的英文例子:This sentence isexcellent Czech.[1]。这是一个有语义错误的C语言例子: thrice_n = 3 + n;[2]。
4.第1行:以一个#开始;studio.h应改成stdio.h;然后用一对尖括号把stdio.h括起来。
第2行:把{}改成();注释末尾把/*改成*/。
第3行:把(改成{
第4行:int s末尾加上一个分号。
第5行没问题。
第6行:把:=改成,赋值用=,而不是用:=(这说明Indiana Sloth了解 Pascal)。另外,用于赋值的值56也不对,一年有52周,不是56周。
第7行应该是:printf("There are %d weeks in a year.\n", s);
第9行:原程序中没有第9行,应该在该行加上一个右花括号}。
修改后的程序如下:
#include <stdio.h>
int main(void) /* this prints the number of weeks in a year */
{
int s;
s = 52;
printf("There are %d weeks in a year.\n", s);
return 0;
}
5.a.Baa Baa Black Sheep.Have you any wool?(注意,Sheep.和Have之间没有空格)
b.Begone!
O creature of lard!
c.What?
No/nfish?
(注意斜杠/和反斜杠\的效果不同,/只是一个普通的字符,原样打印)
d.2 + 2 = 4
(注意,每个%d与列表中的值相对应。还要注意,+的意思是加法,可以在printf()语句内部计算)
6.关键字是int和char(main是一个函数名;function是函数的意思;=是一个运算符)。
8.执行完第7行后,a是5,b是2。执行完第8行后,a和b都是5。执行完第9行后,a和b仍然是5(注意,a不会是2,因为在执行a = b;时,b的值已经 被改为5)。
9.执行完第7行后,x是10,b是5。执行完第8行后,x是10,y是15。执行完第9行后,x是150,y是15。
3.10 复习题
1.a.int类型,也可以是short类型或unsigned short类型。人口数是一个整数。
b.float类型,价格通常不是一个整数(也可以使用double类型,但实际上不需要那么高的精度)。
c.char类型。
d.int类型,也可以是unsigned类型。
2.原因之一:在系统中要表示的数超过了int可表示的范围,这时要使用long类型。
原因之二:如果要处理更大的值,那么使用一种在所有系统上都保证至少是 32 位的类型,可提高程序的可移植性。
3.如果要正好获得32位的整数,可以使用int32_t类型。要获得可储存至少32位整数的最小类型,可以使用int_least32_t类型。如果要为32位整数提供最快的计算速度,可以选择int_fast32_t类型(假设你的系统已定义了上述类型)。
4.a.char类型常量(但是储存为int类型)
b.int类型常量
c.double类型常量
d.unsigned int类型常量,十六进制格式
e.double类型常量
5.第1行:应该是#include <stdio.h>
第2行:应该是int main(void)
第3行:把(改为{
第4行:g和h之间的;改成,
第5行:没问题
第6行:没问题
第7行:虽然这数字比较大,但在e前面应至少有一个数字,如1e21或
1.0e21都可以。
第8行:没问题,至少没有语法问题。
第9行:把)改成}
除此之外,还缺少一些内容。首先,没有给rate变量赋值;其次未使用h变量;而且程序不会报告计算结果。虽然这些错误不会影响程序的运行(编译器可能给出变量未被使用的警告),但是它们确实与程序设计的初衷不符合。另外,在该程序的末尾应该有一个return语句。
下面是一个正确的版本,仅供参考:
#include <stdio.h>
int main(void)
{
float g, h;
float tax, rate;
rate = 0.08;
g = 1.0e5;
tax = rate*g;
h = g + tax;
printf("You owe $%f plus $%f in taxes for a total of $%f.\n", g, tax, h);
return 0;
}
6.写出下列常量在声明中使用的数据类型和在printf()中对应的转换说明:
7.写出下列常量在声明中使用的数据类型和在printf()中对应的转换说明(假设int为16位):
8.printf("The odds against the %d were %ld to 1.\n", imate, shot);printf("A score of %f is not an %c grade.\n", log, grade);
9.ch = '\r';
ch = 13;
ch = '\015'
ch = '\xd'
10.最前面缺少一行(第0行):#include <stdio.h>
第1行:使用/*和*/把注释括起来,或者在注释前面使用//。
第3行:int cows, legs;
第4行:country?\n");
第5行:把%c改为%d,把legs改为&legs。
第7行:把%f改为%d。
另外,在程序末尾还要加上return语句。
下面是修改后的版本:
#include <stdio.h>
int main(void) /* this program is perfect */
{
int cows, legs;
printf("How many cow legs did you count?\n");
scanf("%d", &legs);
cows = legs / 4;
printf("That implies there are %d cows.\n", cows);
return 0;
}
11.a.换行字符
b.反斜杠字符
c.双引号字符
d.制表字符