《C Primer Plus》第 2 章复习题和编程练习

一、复习题

1. C 语言的基本模块是什么?

答:函数。

2. 什么是语法错误?写出一个英语例子和 C 语言例子。

答:语法错误是指在语言表达式中违反了既定的语法规则的情况。

英语例子:I is Li ming.
上述表达式中 I 应该使用 am

C 语言例子:printf(I am Li ming).
上述表达式中字符串需要使用双引号括起来

3. 什么是语义错误?

答:语义错误是指在语言表达中,虽然语法上可能没有问题,但所表达的意思不符合逻辑、不恰当、不准确或存在歧义的情况。

英语例子:I am very exciting to hear the news.(我听到这个消息很兴奋。)
上述表达式中,“exciting” 表示 “令人兴奋的”,通常用来形容事物;而形容人感到兴奋应该用 “excited”。

C 语言例子:while (i = 0) { }
上述表达式想判断 i 是否等于 0 ,误写成了赋值表达式

4. Indiana Sloth 编写了下面的程序,并征求你的意见。请帮助他评定。

#include studio.h
int main{void}
(
	int s

	s := 56;
	printf(There are a weeks in a year.);
	return 0;

答:
1)首先,头文件需要使用尖括号<>括起,而且上述代码拼写错误。
2)main 函数后面紧跟小括号,且括号内没有 void
3)main 函数的函数体使用花括号括起,不是小括号
4)声明变量需要使用分号结尾,且最好初始化
5)赋值语句没有冒号(:)
6)使用 printf 函数打印字符串常量时,需要使用双引号

完整代码如下:

#include <stdio.h>
int main()
{
	int s;

	s = 56;
	printf("There are a weeks in a year.\n");
	
	return 0;
}

5. 假设下面的 4 个例子都是完整程序中的一部分,它们都输出什么结果?
a. printf(“Baa Baa Black sheep.”);
 printf(“Have you any wool?\n);
b. pirntf(“Begone!\nO creature of lard!\n);
c. printf(“What?\nNo/nfish?\n”);
d. int num;
 num = 2;
 printf(”%d + %d = %d”, num, num, num + num);

答:
a. 输出结果如下:
Baa Baa Black Sheep.Have you any wool?

b. 输出结果如下:
Begone!
O creature of lard!

c. 输出结果如下:
What?
No/nfish?

d. 输出结果如下:
2 + 2 = 4

6. 在 main、int、function、char、=中,哪些是 C 语言的关键字?

答:int 和 char。

7. 如何以下面的格式输出变量 words 和 lines 的值(这里,3020 和 350 代表两个变量的值)?
There were 3020 words and 350 lines.

答:
程序设计分析: 创建两个 int 变量,然后赋相应的值,然后按照格式输出。

代码如下:

#include <stdio.h>

int main()
{
	// 所需变量
	int words = 3020;
	int lines = 350;
	
	// 按照格式输出
	printf("There are %d words and %d lines.\n", words, lines);

	return 0;
}

8. 考虑下面的程序:

#include <stdio.h>

int main()
{
	int a, b;
		
	a = 5;
	b = 2;  // 第 7 行
	b = a;  // 第 8 行
	a = b;  // 第 9 行
	printf("%d %d\n", b, a);

	return 0;
}

请问在执行完第 7 、第 8 、第 9 行后,程序的状态分别是什么?

答:
第 7 行后: a = 5, b = 2
第 8 行后: a = 5, b = 5
第 9 行后: a = 5, b = 5

9. 考虑下面的程序:

#include <stdio.h>

int main()
{
	int x, y;

	x = 10;
	y = 5;  // 第 7 行
	y = x + y;  // 第 8 行
	x = x*y;  // 第 9 行
	printf("%d %d\n", x, y);
	
	return 0;
}

请问,在执行完第 7、第 8 、第 9 行后,程序的状态分别是什么?

答:
第 7 行后: x = 10, y = 5
第 8 行后: x = 10, y = 15
第 9 行后: x = 150, y = 15

二、编程练习

1. 编写一个程序,调用一次 printf() 函数,把你的名和姓打印在一行。再调用一次 printf() 函数,把你的名和姓分别打印在两行。然后,再调用两次 printf() 函数,把你的名和姓打印在一行。输出应如下所示(当然要把示例的内容换成你的名字):

答:
程序设计分析: 该程序非常简单,就是调用四次 printf() 函数,只是换行符的位置不同

代码如下:

#include <stdio.h>

int main()
{
	// 名和姓一行
	printf("Xiao Xue\n");
	// 分开两行
	printf("Xiao\n");
	printf("Xue\n");
	// 一行
	printf("Xiao ");
  printf("Xue\n");

	return 0;
}

2. 编写一个程序,打印你的姓名和地址。

答:
程序设计分析: 该程序依旧十分简单,只需要调用 printf() 函数就行,记住中间换行。

代码如下:

#include <stdio.h>

int main()
{
	// 打印姓名和地址
	printf("My name is Xiao Xue\n");
	printf("I live in China.\n");

	return 0;
}

3. 编写一个程序把你的年龄转换成天数,并显示这两个值。这里不用考虑闰年的问题。

答:
程序设计分析: 不考虑闰年,那么一年就是 365 天,使用两个 int 类型的变量来完成这个程序。

代码如下:

#include <stdio.h>

int main()
{
	// 把年龄转换成天数
	int year = 22;
	int days = year * 365;

	printf("My age is %d days.\n", days);

	return 0;
}

4. 编写一个程序,生成以下输出:
For he’s a jolly good fellow!
For he’s a jolly good fellow!
For he’s a jolly good fellow!
Which nobody can deny!
除了 main() 函数以外,该程序还要调用两个自定义函数:一个名为 jolly(),用于打印前 3 条信息,调用一次打印一条;另一个函数名为 deny(),打印最后一条信息。

答:
程序设计分析: 自定义的两个函数的返回值均为 void,然后不需要参数。在这两个函数中调用 printf() 函数进行打印。(要写函数声明、函数调用和函数定义)

代码如下:

#include <stdio.h>

// 函数声明
void jolly();
void deny();

int main()
{
	// 调用函数 jolly() 三次
	jolly();
	jolly();
	jolly();

	 // 调用函数 deny() 一次
	deny();

	return 0;
}

// 函数定义
void jolly()
{
	printf("For he's a jolly good fellow !\n");
}

void deny()
{
	printf("Which nobody can deny !\n");
}

编写一个程序,生成以下输出:
Brazil, Russia, India, China
India, China
Brazil, Russia
除了 main() 函数以外,该程序还要调用两个自定义函数:一个名为 br(),调用一次打印一次 “Brazi, Russia”;另一个名为 ic() ,调用一次打印一次 “India, China”。其他内容在 main() 函数中完成。

答:
程序设计分析: 该题和上一题总体上差不多,只是要在主函数中输出换行符和逗号。

代码如下:

#include <stdio.h>

// 函数声明
void br();
void ic();

int main()
{
	br();
	printf(", ");
	ic();
	printf("\n");
	ic();
	printf("\n");
	br();
	printf("\n");

	return 0;
}

// 函数定义
void br()
{
	printf("Brazil, Russia");
}

void ic()
{
	printf("India, China");
}

6. 编写一个程序,创建一个整形变量 toes,并将 toes 设置为 10。程序中还要计算 toes 的两倍和 toes 的平方。该程序打印 3 个值,并分别描述以示区分。

答:
程序设计分析: 该程序创建一个 int 类型的变量,并初始化,然后分别输出该变量的 1 倍、2 倍和 3 倍。

代码如下:

#include <stdio.h>

int main()
{
	// 打印并计算整型 toes 的两倍和平方
	int toes = 10;

	printf("Twice is %d\n", 2 * toes);
	printf("Square is %d\n", toes * toes);

	return 0;
}

7. 许多研究表明,微笑益处多多。编写一个程序,生成以下格式输出:
Smile!Smile!Smile!
Smile!Smile!
Smile!
该程序要定义一个函数,该函数被调用一次打印一次"Smile",根据程序需要使用该函数。

答:
程序设计分析: 该函数只要在主函数中使用时中间适当输出一个换行符即可。

代码如下:

#include <stdio.h>

// 函数声明 
void Smile();

int main()
{
	Smile();
	Smile();
	Smile();
	printf("\n");
	Smile();
	Smile();
	printf("\n");
	Smile();
	printf("\n");

	return 0;
}

// 函数定义
void Smile()
{
	printf("Smile!");
}

8. 在 C 语言中,函数可以调用另一个函数。编写一个程序,调用一个名为 one_three() 的函数。该函数在一行打印单词 “one”,再调用第 2 个函数 two(),然后再另一行打印单词"three"。two() 函数在一行显示单词"two"。main() 函数在调用 one_three() 函数前要打印短语"starting now:“,并在调用完毕后显示短语"done!”。因此,该程序的输出应如下所示:
starting now:
one
two
three
done!

答:
程序设计分析: 上面说了这么多,无非就是设计两个函数,一个打印 “one”,一个打印 “two”。然后剩下的在主函数 main() 中处理。

代码如下:

#include <stdio.h>

// 函数声明
void one_three();
void two();


int main()
{
	printf("starting now:\n");
	one_three();
	two();
	printf("three\n");
	printf("done!\n");

	return 0;
}

// 函数定义
void one_three()
{
	printf("one\n");
}

void two()
{
	printf("two\n");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值