C++primer习题集(第一章)
1.3
输出“hello,world!”。
1 cout << "Hello world!" << endl; 2 return 0;
1.4
编写乘法运算程序。
1 int a=3,b=4; 2 cout << "a*b="<<a*b<<endl; 3 return 0;
1.5
分几次进行输出。
1 int a=3,b=4; 2 cout << "a*b="; 3 cout<<a*b<<endl; 4 return 0;
1.6
解释下面程序片段是否合法。
1 str::cout<<"The sum of "<<v1; 2 <<" and "<<v2; 3 <<" is "<<v1+v2<<std::endl;
是错误的,加了分号就结束了这条语句,下一行应该再次”std::cout<<”才行,或者可以把第1、2行的分号删除,这样就是一句长句子,也行。
1.7
错误的嵌套,看看会输出什么,下面给一个简单的错误示例
1 /* 3 这是对/* *** */的错误嵌套 4 */
1.8
下面哪些输出语法是正确的,哪些是错误的?
1 cout <<"/*"<<endl; 2 cout <<"*/"<<endl; 3 cout<</* "*/"*/<<endl; 4 cout <</*"*/" /* " /* "*/<<endl; 5 return 0;
看颜色就知道了,3是错的,其他是对的,因为3的双引号并不能隔离掉*/,所以比你预期的“提前”结束了注释。
1.9
使用while语句将50-100的数累加。
#include<iostream> using namespace std; int main(){ int sum=0; int i=50; while(i<=100) { sum+=i; i++; } cout<<"sum from 50 to 100 ="<<sum<<endl; return 0; }
1.10
使用递减运算符“--”按照10-0的递减顺序打印出来。
1 #include<iostream> 2 3 using namespace std; 4 5 int main() 6 { 7 int i=10; 8 while(i>=0) 9 { 10 cout<<i<<endl; 11 i--; 12 } 13 return 0; 14 }
1.11
提示用户输入两个整数a和b,打印出两个整数之间的所有整数。
1 /*两个关键点,一个是确保变量a>=b,否则需要对ab进行调换, 2 一个是当a=b时的特殊情况需要输出一个值*/ 3 #include<iostream> 4 5 using namespace std; 6 7 int main() 8 { 9 int a,b; 10 cout<<"Please input 2 digital,a and b:"; 11 cin>>a>>b; 12 int tmp; 13 if(a<b) //let a>=b 14 { 15 tmp=a; 16 a=b; 17 b=tmp; 18 } 19 while(b<=a) 20 { 21 cout<<b<<endl; 22 b++; 23 } 24 return 0; 25 }
1.12
下面的for循环功能是什么?sum最终的值是多少?
1 int sum=0; 2 for(int i=-100;i<=100;i++) 3 sum+=i;
for循环的功能是计算-100到100之间整数的和,最终sum值为0。
1.13
使用for循环重做1.9—1.11。
//1.9 #include<iostream> using namespace std; int main(){ int sum=0; for(int i=50;i<=100;i++) sum+=i; cout<<"sum from 50 to 100 = "<<sum<<endl; return 0; }
//1.10 #include<iostream> using namespace std; int main(){ for(int i=10;i>=0;i--) cout<<i<<endl; return 0; }
//1.12 #include<iostream> using namespace std; int main() { int a,b; cout<<"Please input 2 digital,a and b:"; cin>>a>>b; int tmp; if(a<b) //let a>=b { tmp=a; a=b; b=tmp; } int num=0; for(int i=b;i<=a;i++) { cout<<i<<"\t"; num++; if(num%10==0) cout<<endl; } return 0; }
1.14
for循环和while循环有什么区别?各自有什么优缺点?
for循环适合知道循环次数的循环,结构清晰;
while循环适合未定循环次数的情况,只要判断为真,就一直可以循环,不需要清楚循环次数。
1.15
编写程序,包含“再探编译”里面的常见错误,熟悉错误信息。
直接看就好。
1.16
编写程序,从cin读取一组数据,输出他的和。
#include<iostream> using namespace std; int main() { int x; int sum=0; cout<<"输入一组数字,只要不为0就可以一直输入:"<<endl; cin>>x; while(x) { sum+=x; cin>>x; } cout<<"sum="<<sum<<endl; return 0; }
1.17
如果所有输入的值都相同会发生什么?没有重复值又会发生什么?
#include <iostream> int main(){ //currVal是我们正在统计的数;我们将读入的新值存入val int currVal=0, val=0; //读取第一个数,并确保确实有数据可以处理 if (std::cin >> currVal){ int cnt=1; //保存我们正在处理的当前值的个数 while(std::cin >> val){ //读取剩余的数 if (val ==currVal) //如果值相同 ++cnt; //将cnt加1 else { //否则,打印前一个值的个数 std::cout << currVal <<" occurs " << cnt <<" times "<< std::endl; currVal=val; //记住新值 cnt=1; //重置计数器 } } //while循环在这里结束 //记住打印文件中最后一个值的个数 std::cout << currVal <<" occurs " << cnt <<" times "<< std::endl; } //最外层的if语句在这里结束 return 0; }
如果一直输入同一个值,那程序会一直计数,无法终止;如果一直输入不同的数,那他每输入一个数字x,都会输出“x occours 1 times”
1.18
同上。
1.19
修改1.10,使得它可以考虑第一个数比第二数字小的情况。
见1.10。
1.20
将头文件拷贝到工作目录中,用它编写一个程序,读取一组书籍销售记录,将每条记录打印到标准输出上。
#include<iostream> #include "Sales_item.h" using namespace std; int main() { Sales_item book; while(cin>>book) cout<<book<<endl; return 0; }
1.21
读取两个相同的sales_item对象,计算他们的和。
#include<iostream> #include "Sales_item.h" using namespace std; int main() { Sales_item book1,book2; cin>>book1>>book2; cout<<book1+book2<<endl; return 0; }
1.22
编写程序,读取多个具有相同ISBN的销售记录,输出所有记录的和。
#include<iostream> #include "Sales_item.h" using namespace std; int main() { Sales_item item, sum; cin >> sum; while (cin >> item) { sum += item; } cout << sum << endl; return 0; }
1.23
编写程序,读取多条销售记录,并统计每个ISBN(每本书)有几条销售记录。
//基本和1.17的是一样的 #include<iostream> #include "Sales_item.h" using namespace std; int main(){ Sales_item cur_item, item; if (cin >>cur_item){ int cnt=1; while(cin >> item){ if (item.isbn() ==cur_item.isbn()) ++cnt; //将cnt加1 else { cout << cur_item <<" occurs " << cnt <<" times "<< endl; cur_item=item; //记住新值 cnt=1; //重置计数器 } } //while循环在这里结束 cout << cur_item <<" occurs " << cnt <<" times "<< endl; } //最外层的if语句在这里结束 return 0; }
1.24
输入表示多个ISBN的多个销售记录来测试上一个程序,每个ISBN的的记录应该聚集在一起。
同上。
1.25
借助网站上的Sales_item.h头文件,编译并运行本节给出的书店程序。
#include<iostream> #include"Sales_item.h" int main() { Sales_item total;//保存和的变量 //读入第一条交易记录,并确保有数据可以处理 if (std::cin >> total) { Sales_item trans; //保存下一条交易记录的变量 //读入并处理剩余交易记录 while (std::cin >> trans) { //如果仍在处理相同的书 if (total.isbn() == trans.isbn()) total += trans; //更新总销售额 else { //打印前一本书的结果 std::cout << total << std::endl; total = trans; //total现在表示下一本书的销售额 } } std::cout << total << std::endl; } else { //没有输入!警告 std::cerr << "No data!" << std::endl; return -1; } return 0; }