第九章 编程题

1

2

#include <iostream>
#include <cstring>
#include <string>
const int ArSize = 10;
void strcount(std::string str);

int main()
{   
    using namespace std;
    string input;
    char next;
    cout<<"Enter a line:\n";
    getline(cin,input);
    while(input!=""){
        strcount(input);
        cout<<"Enter next line (empty line to quit):\n";
        getline(cin,input);
    }
    cout<<"Bye\n";
    getchar();
    getchar();
    return 0;
}

void strcount(std::string str){
    using namespace std;
    static int total = 0;
    int count = 0;
    int i = 0;

    while(str[i]!='\0' && i<ArSize)if(isalpha(str[i++]))count++;
    total += count;
    i=0;
    cout<<"\"";
    while(i<ArSize && str[i]!='\0')cout<<str[i++]; //输出全部或前ArSize个字符。
    cout<<"\" contains "<<count<<" characters\n"<<total<<" characters total\n";
}

在这里插入图片描述
3

#include<iostream>
#include<string>
#include<cstring>

using namespace std;
const int RANGE = 1024;
const int SIZE = 2;
char zone[RANGE];
struct charff{
    char dross[20];
    int slag;
};


int main(){
    charff *p1 = new (zone) charff[SIZE];
    // charff *p1 = new (zone+SIZE*sizeof(charff)) charff[SIZE];
    charff *p2 = new charff[SIZE];
    strcpy(p1->dross,"apex"); // 存储在静态数组缓冲区
    p1->slag = 1;
    strcpy((p1+1)->dross,"legends");
    (p1+1)->slag = 5;
    for(int i=0;i<SIZE;i++){
        cout<<(p1+i)->dross<<'\t'<<(p1+i)->slag<<endl;
    }
    cout<<(void*)zone<<'\t'<<p1<<endl; // 验证地址

    strcpy(p2->dross,"ikun"); // 由new自动分配
    p2->slag = 2;
    strcpy((p2+1)->dross,"igang");
    (p2+1)->slag = 0;
    for(int i=0;i<SIZE;i++){
        cout<<(p2+i)->dross<<'\t'<<(p2+i)->slag<<endl;
    }
    cout<<p2<<endl; // 验证地址

    getchar();
    return 0;
}

在这里插入图片描述
4
sale.h

namespace SALES{
    const int QUARTERS = 4;
    struct Sales{
        double sales[QUARTERS];
        double average;
        double max;
        double min;
    };
    void setSales(Sales & s,const double ar[],int n);
    void setSales(Sales &s);
    void showSales(const Sales & s);
}

sale.cpp

#include <iostream>
#include <algorithm>
#include "sale.h"
namespace SALES
{
    using std::cin;
    using std::cout;
    using std::endl;
    using std::max;
    using std::min;
    void setSales(Sales &s, const double ar[], int n)
    {
        // 初始化
        for(int i=0;i<QUARTERS;i++)s.sales[i]=0;
        s.average = 0;
        // 数组为空时
        if(n==0){
            s.max = 0;
            s.min = 0;
            return ;
        }
        // 数组非空时
        s.max = ar[0];
        s.min = ar[0];
        int less = min(QUARTERS, n);
        for (int i = 0; i < less; i++)
        {
            s.sales[i] = ar[i];
            s.max = max(ar[i],s.max);
            s.min = min(ar[i],s.min);
            s.average+=ar[i];
        }
        s.average/=less;
    }
    void setSales(Sales &s) {
        // 初始化
        int i=0,n=0;
        s.average = 0;
        while(n<QUARTERS){
            cout<<"enter sale#"<<n+1<<" : ";
            cin>>s.sales[n];
            n++;
        }
        s.max = s.sales[0];
        s.min = s.sales[0];
        for (i = 0; i < QUARTERS; i++)
        {
            s.max = max(s.sales[i],s.max);
            s.min = min(s.sales[i],s.min);
            s.average+=s.sales[i];
        }
        s.average/=QUARTERS;
    }
    void showSales(const Sales &s) {
        for(int i=0;i<QUARTERS;i++){
            if(s.sales[i]==0)break;
            cout<<"sale #"<<i+1<<" : "<<s.sales[i]<<endl;
        }
        cout<<"max : "<<s.max<<endl;
        cout<<"min : "<<s.min<<endl;
        cout<<"average : "<<s.average<<endl;
    }
}

main.cpp

#include<iostream>
#include "sale.h"
int main(){
    using namespace SALES;
    Sales sales1,sales2;
    const double arr[5] = {1.1,2.2,3.3,4.4,5.5};
    setSales(sales1,arr,5);
    showSales(sales1);
    setSales(sales2);
    showSales(sales2);


    return 0;
}

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值