C++ Primer 课后练习 chapter 1

1. 练习1

1.1 问题描述

查阅你使用的编译器的文档,确定它所使用的文件命名约定。编译并运行 第2页的main程序。

1.2 答案

文件名约定:*.c

int main(){
	return 0;
}

2. 练习2

2.1 问题描述

改写程序,让它返回-1。返回值-1通常被当作程序错误的标识。重新编译并运行你的程序,观察你的系统如何处理main返回的错误标识。

2.2 答案

程序源码:

int main(){
	return -1;
}

运行结果:
没有任何报错。


3. 练习3

3.1 问题描述

编写程序,在标准输出上打印Hello,World。

3.2 答案

程序源码:

#include<iostream>

int main(void){
	std::cout<<"Hello, World!"<<std::endl;
	
	return 0;
}

运行结果:
运行结果


4. 练习4

4.1 问题描述

我们的程序使用加法来将两个数相加,编写程序使用乘法运算符*,来打印两个数的积。

4.2 答案

程序源码:

#include<iostream>

int main(void){
	std::cout<<3<<"*"<<5<<'='<<3*5<<std::endl;
	
	return 0;
}

运行结果:
运行结果


5. 练习5

5.1 问题描述

我们将所有输出操作放在 一条很长的语句中。重写程序,将每个运算对象的打印操作放在一条独立的语句中。

5.2 答案

程序源码:

#include<iostream>

int main(void){
	std::cout<<3;
	std::cout<<"*";
	std::cout<<5;
	std::cout<<'=';
	std::cout<<3*5;
	std::cout<<std::endl;
	
	return 0;
}

运行结果:
运行结果


6. 练习6

6.1 问题描述

解释下面程序片段是否合法。如果程序合法它输出什么?如果不合法原因何在?应该如何修正?

std::out<<"The sum of "<<v1;
		<<" and " <<v2;
		<<" is " <<v1+v2<<std::endl;

6.2 答案

不合法,后面两行少了 std::out。修改后如下:

std::out<<"The sum of "<<v1;
std::out<<" and " <<v2;
std::out<<" is " <<v1+v2<<std::endl;

7. 练习7

7.1 问题描述

编译一个包含不正确的嵌套注释的程序,观察编译器返回的错误信息。

7.2 答案

程序源码:

#include<iostream>

int main(void){
	std::cout<<3;
	std::cout<<"*";
	std::cout<<5;
	std::cout<<'=';
	/ 注释
	std::cout<<3*5;
	std::cout<<std::endl;
	
	return 0;
}

运行结果:
运行结果


8. 练习8

8.1 问题描述

支出下列哪些输出语句是合法的(如果有的话)。预测编译这些语句会产生什么样的结果,实际编译这些语句来验证你的答案(编写一个小程序,每次将上述一条语句作为其主题,改正每个编译错误。

std::out<<"/*";
std::out<<"*/";
std::out<</*"/*"*/;
std::out<</*"*/" /* "/*" */;

8.2 答案

程序源码:

#include<iostream>

int main(void){
	std::out<<"/*";
	std::out<<"*/";
	std::out<</*"/*"*/;
	std::out<</*"*/" /* "/*" */;
	
	return 0;
}

运行结果:
运行结果


9. 练习9

9.1 问题描述

编写程序,使用while循环将50到100的整数相加

9.2 答案

程序源码:

#include<iostream>

int main(void){
	int i=50;
	int sum = 0;
	
	while(i<=100) sum+= i++;
	std::cout<<"50~100的和为:"<<sum<<std::endl;
	
	return 0;
}

运行结果:
运行结果


10. 练习10

10.1 问题描述

除了++运算符将运算对象的值增加1之外,还有一个递减运算符(–)实现将值减少1。编写程序,使用递减运算符在循环中按递减顺序打印10到0之间的整数。

10.2 答案

程序源码:

#include<iostream>

int main(void){
	int i=11;
	int sum = 0;
	
	while(i--)std::cout<<i<<'\t';
	std::cout<<std::endl;
	
	return 0;
}

运行结果:
运行结果


11. 练习11

11.1 问题描述

编写程序,提示用户输入两个整数,打印出这两个整数所指定的范围内的所有整数。

11.2 答案

程序源码:

#include<iostream>

int main(void){
	int s,e;
	std::cout<<"请输入两个整数:";
	std::cin>>s>>e;
	
	while(s<=e)std::cout<<s++<<'\t';
	std::cout<<std::endl;
	
	return 0;
}

运行结果:
运行结果


12. 练习12

12.1 问题描述

下面的for循环完成了什么功能?sum的终值是多少

int sum = 0;
for(int i=-100;i<=100;++i)
	sum+=i;

12.2 答案

求和-100~100。sum的终值为 0。


13. 练习13

13.1 问题描述

使用 for 循环重做1.4.1节中的所有联系(第11页)。

13.2 答案

程序源码:

// 1.9
#include<iostream>

int main(void){
	int sum = 0;
	
	for(int i=50;i<=100;) sum+= i++;
	std::cout<<"50~100的和为:"<<sum<<std::endl;
	
	return 0;
}

//1.10 
#include<iostream>

int main(void){
	for(int i=10;i>=0;i--)std::cout<<i<<'\t';
	std::cout<<std::endl;
	
	return 0;
}
//1.11
#include<iostream>

int main(void){
	int s,e;
	std::cout<<"请输入两个整数:";
	std::cin>>s>>e;
	
	for(int i=s;i<=e;++i)std::cout<<i<<'\t';
	std::cout<<std::endl;
	
	return 0;
}

14. 练习14

14.1 问题描述

对比for与while,两种形式的优缺点

14.2 答案

for 循环清晰明了,一般 用于确定循环次数的循环
while 对于非确定循环次数的循环更方便。


15. 练习15

15.1 问题描述

编写程序,包含第14页中“再探编译”中讨论的常见错误,熟悉编译器生成的错误信息。


16. 练习16

16.1 问题描述

编写程序,从cin读取一组数,输出其和。

16.2 答案

程序源码:

#include<iostream>

int main(void){
	int t;
	int sum=0;
	std::cout<<"请输入整数:";
	while(std::cin>>t)sum+=t;
	
	std::cout<<sum<<std::endl;
	
	return 0;
}

运行结果:
运行结果


17. 练习17

17.1 问题描述

如果输入的所有值都是相等的,本节的程序会输出什么?如果没有重复值输出又会怎么样?

17.2 答案

如果输入的所有值都是相等的,则输出的值会显示输出n次。
如果输入的所有值没有重复值,则每个值都会输出一次。


18. 练习18

18.1 问题描述

编译并运行本节的程序,给它输入全都相等的值。再次运行程序,输入没有重复的值。

18.2 答案

程序源码:

#include<iostream>

int main(void){
	int currVal = 0,val = 0;
	
	if(std::cin >>currVal){
		int cnt=1;
		while(std::cin>>val){
			if(val == currVal)++cnt;
			else{
				std::cout<<currVal<<" occurs "<<cnt<<" times "<<std::endl;
				currVal = val;
				cnt = 1;
			}
		}
		std::cout<<currVal<<" occurs "<<cnt<<" times "<<std::endl;
	}
	
	return 0;
}

运行结果:
运行结果


19. 练习19

19.1 问题描述

修改你为1.4.1节练习1.10(第11页)所编写的程序(打印一个范围内的数),使其能处理用户输入的第一个数字比第二个数字小的情况。

19.2 答案

程序源码:

#include<iostream>

int main(void){
	int s,e;
	std::cout<<"请输入两个整数:";
	std::cin>>s>>e;
	
	int t;
	if(s>e){
		t = s;
		s= e;
		e=t;
	}
	
	while(s<=e)std::cout<<s++<<'\t';
	std::cout<<std::endl;
	
	return 0;
}

运行结果:
运行结果


  • 22
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值