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;
}

 

posted @ 2023-07-12 10:05  para_dise  阅读(70)  评论(0编辑  收藏  举报