谭浩强C++第二版,第六章课后习题

#include "includes.h"

int arrays[20];

void swap(int& a, int& b)
{
    int temp;
    temp = a;
    a = b;
    b = temp;
    return;
}

void  swap_str(char* &a, char* &b)
{
    char *temp;
    temp = a;
    a = b;
    b = temp;
    return;
}
void Question6_1(int &a,int &b,int &c)
{
    cout << "6-1" << endl;
    if (a > b)
        swap(a, b);
    if (b > c)
        swap(b, c);
    if (a > c)
        swap(a, c);
    
    cout << a << b << c<<endl;
    return;
}

void Question6_2(char *a, char *b, char *c)
{
    
    if (strcmp(a, b)> 0)
        swap_str(a, b);
    if (strcmp(a, c) > 0)
        swap_str(a, c);
    if (strcmp(b, c) > 0)
        swap_str(b, c);
    cout << a << b << c << endl;
    return;
}

void input_10_number()
{
    int i = 0;
    for (i = 0; i < 10; i++)
    {
        cin >> arrays[i];
    }
}

void deal_10_word()
{
    Position max_number, min_number;
    max_number.value = 0;
    max_number.index = 0;
    min_number.value = 0;
    min_number.index = 0;
    int i = 0;
    for (i = 0; i < 10; i++)
    {
        if (arrays[i] > max_number.value)
        {
            max_number.value = arrays[i];
            max_number.index = i;
        }
            
        if (arrays[i] <= min_number.value)
        {
            min_number.value = arrays[i];
            min_number.index = i;
        }
            
    }
    swap(arrays[0], arrays[min_number.index]);
    swap(arrays[9], arrays[max_number.index]);
}

void print_10_words()
{
    int i;
    for (i = 0; i < 10; i++)
    {
        cout << arrays[i] << " ";
    }
    cout << endl;
    return;
}
void Question6_3()
{
    input_10_number();
    deal_10_word();
    print_10_words();
}

void move_words(int a[],int position)
{
    int recv_array[10];
    int temp_array[10];
    int recv_position;
    recv_position = position;
    for (int i = 0; i < 10; i++)
    {
        recv_array[i] = a[i];
    }
    

}

void Question6_4(int m)
{
    int a[10] = { 0,1,2,3,4,5,6,7,8,9 };
    int b[100];
    int i = 0,b_index = 0;
    int length = (sizeof(a) / sizeof(a[0]));
    for (i = 0; i < length; i++)
    {
        b_index = ((i + m) % length);
        b[b_index] = a[i];
    }
    cout << "m=" << m << endl;
    for (i = 0; i < length; i++)
    {
        cout << b[i] << " ";
    }
    cout << endl;
}

void Question6_5(int digit_number)
{
    int a[10000],search_index=0;
    int count=0,left_number;
    left_number = digit_number;
    int result = 0,j=0;
    cout << "digitnumber=" << digit_number;
    for (int i = 0; i < digit_number; i++)
    {
        a[i] = i;
    }
    while (left_number != 0)
    {
        if (a[j] != -1)
        {
            if (count == 2)
            {
                a[j] = -1;
                left_number--;
                count = 0;
            }
            else
            {
                count++;
                result = j;
            }
        }
        j++;
        j = j % digit_number;
    }
    cout << "result:" << result << endl;
}


void Question6_6(char * str)
{
    char* p_str;
    p_str = str;
    int count_str = 0;
    //当p_str指向的数组元素值不为空,进行循环体,
    //值为空时结束循环体。
    while (*p_str)
    {
        count_str++;
        p_str++;
    }
    cout << "str length:" << count_str<<endl;
}

void Question6_7_copy_str(int start_position)
{
    char str[100] = "abcdefghijklmnopqrstuvwxyz";
    char copy_to_str[100];
    char* p_str, * p_copy_to_str;
    p_copy_to_str = copy_to_str;
    p_str = str;
    p_str = p_str + start_position;
    while (*p_str)
    {
        *p_copy_to_str = *p_str;
        p_copy_to_str++;
        p_str++;
    }
    //复制后后的p_copy_to_str中,系统没有为它自动分配‘\0’,需要手动添加。
    *p_copy_to_str = '\0';
    p_copy_to_str = copy_to_str;
    p_str = str;
    cout << "original:" << p_str << endl;
    cout << "result:" << start_position << " " << p_copy_to_str <<endl;
    return;
}

//统计不用类型字符个数
void Question6_8()
{
    char str[100];
    int lower=0, upper=0, digit=0, others=0,space = 0,i=0;
    //错误输入带有空格的字符串方式:cin >> str;
    //应该用getchar(),连续接受字符串。
    while ((str[i] = getchar())!='\n')
        i++;

    //请注意字符串拼接,在最后添加'\0'结束符。
    str[i] = '\0';
    cout << str;
    char* p_str;
    p_str = str;

    //以'\0'为结束符。
    while (*p_str!='\0')
    {
        if (*p_str >= '0' && *p_str <= '9')
            digit++;
        if (*p_str >= 'a' && *p_str <= 'z')
            lower++;
        else if (*p_str >= 'A' && *p_str <= 'Z')
            upper++;
        else if (*p_str == ' ')
            space++;
        else
            others++;
        p_str++;
    }
    cout << "大写字母:" << upper << endl;
    cout << "小写字母:" << lower << endl;
    cout << "空格:" << space << endl;
    cout << "其他字符:" << others << endl;
}

void Question6_9(int n)
{
    int arrays[6][6] =
    {
        {1,2,3,4,5},
        {6,7,8,9,10},
        {11,12,13,14,15},
        {16,17,18,19,20},
        {21,22,23,24,25}
    };
    int row = 0, col = 0,step;
    for (int i = 0; i < n; i++)
    {
        for (int col = 0; col < i; col++)
        {
            swap(arrays[i][col], arrays[col][i]);
        }
    }

    for (int i = 0; i < 5; i++)
    {
        for (int j = 0; j < 5; j++)
        {
            cout << arrays[i][j] << " ";
        }
        cout << endl;
    }
}

void Question6_10()
{
    int arrays[6][6] =
    {
        {1,2,3,4,5},
        {6,7,8,9,10},
        {11,12,13,14,15},
        {16,17,18,19,20},
        {21,22,23,24,25}
    };
    int data[100];
    int data_index=0;
    int  min=0,pos_x,pos_y;
    for (int i = 0; i < 5; i++)
    {
        for (int j = 0; j < 5; j++)
        {
            if (arrays[2][2] < arrays[i][j])
            {
                swap(arrays[i][j], arrays[2][2]);
            }
            if(arrays[0][0] > arrays[i][j])
            {
                swap(arrays[0][0], arrays[i][j]);
                
            }
        }
    }
    for (int i = 0; i < 5; i++)
    {
        for (int j = 0; j < 5; j++)
        {
            if (i == 0 && j == 0)
                continue;
            if (arrays[0][4] > arrays[i][j])
            {
                swap(arrays[0][4], arrays[i][j]);

            }
        }
    }

    for (int i = 0; i < 5; i++)
    {
        for (int j = 0; j < 5; j++)
        {
            if ((i == 0 && j == 0)|| (i == 0 && j == 4))
                continue;
            if (arrays[4][0] > arrays[i][j])
            {
                swap(arrays[4][0], arrays[i][j]);
            }
        }
    }
    for (int i = 0; i < 5; i++)
    {
        for (int j = 0; j < 5; j++)
        {
            if ((i == 0 && j == 0) || (i == 0 && j == 4)||(i==4&&j==0))
                continue;
            if (arrays[4][4] > arrays[i][j])
            {
                swap(arrays[4][4], arrays[i][j]);
            }
        }
    }
    for (int i = 0; i < 5; i++)
    {
        for (int j = 0; j < 5; j++)
        {
            cout << arrays[i][j] << " ";
        }
        cout << endl;
    }
}

void Sort_String(char** str ,int Ncase)
{
    for (int i = 0; i < Ncase; i++)
    {
        for (int j = i; j < Ncase; j++)
        {
            if (strcmp(str[i], str[j]) > 0)
            {
                swap_str(str[i], str[j]);
            }
        }
    }
    for (int i = 0; i < Ncase; i++)
        cout << str[i] << endl;
}
void Question6_11_12()
{
    char * str[100];
    for (int i = 0; i < 10; i++)
    {
        str[i] = new char[100];
    }
    for (int i = 0; i < 10; i++)
    {
        cin >> str[i];
    }

    Sort_String(str,10);
}

//6-13
float integral(float (*p)(float), float a, float b, int n)
//用矩形法求定积分的通用函数
{
    int i;
    float x, h, s;
    h = (b - a) / n;
    x = a;
    s = 0;
    for (i = 1; i <= n; i++) 
    {
        x = x + h;
        s = s + (*p)(x) * h;
    } 
    return(s);

float fsin(float x) // 计算 sin(x) 的函数
{
    return sin(x);
}
float fcos(float x) // 计算 cos(x) 的函数 
{
    return cos(x);
}
float fexp(float x) // 计算 exp(x)的函数
{
    return exp(x);
}


void Question6_12()
{
    int Ncase;
    int data[1000];
    cout << "请输入数字的个数:" << endl;
    cin >> Ncase;
    cout << "请输入数字:" << endl;
    for (int i = 0; i < Ncase; i++)
    {
        cin >> data[i];
    }
    for (int i = Ncase - 1; i >= 0; i--)
    {
        cout << data[i]<<" ";
    }
    cout << endl;
}

void Question6_14()
{
    char str[] = "abcd123 123?123tab222";
    int result[1000] = {0,0,0,0,0,0,0,0,0,0};
    int temp[1000];
    int num_count = 0, result_cnt=0;
    cout << str << endl;
    char* p_str;
    p_str = str;
    while (*p_str != '\0')
    {
        if (*p_str > '0' && *p_str < '9')
        {
            temp[num_count] = (*p_str) - '0';
            num_count++;
        }
        else
        {
            if (num_count != 0)
            {
                for (int i = 0; i < num_count; i++)
                {
                    result[result_cnt] = result[result_cnt] * 10 + temp[i];
                }
                result_cnt++;
                num_count = 0;
                for (int i = num_count - 1; i >= 0; i--)
                {
                    temp[i] = 0;
                }
            }
        }
        p_str++;
    }

    if (num_count != 0)
    {
        for (int i = 0; i < num_count; i++)
        {
            result[result_cnt] = result[result_cnt] * 10 + temp[i];
        }
        result_cnt++;
        num_count = 0;
        for (int i = num_count - 1; i >= 0; i--)
        {
            temp[i] = 0;
        }
    }
    cout << "共有" << result_cnt << "个整数" << "分别如下:" << endl;
    for (int i = 0; i < result_cnt; i++)
        cout << result[i] << " ";
    cout << endl;
}


int Question6_17_strcmp(const char* str1,const char* str2)
{
    const char * p_str1, * p_str2;
    p_str1 = str1;
    p_str2 = str2;
    int result = 0;
    while (true)
    {
        if (*p_str1 == '\0' && *p_str2 == '\0')
            break;
        if (*p_str1 == '\0' && *p_str2 != '\0')
            return -1;

        if (*p_str1 != '\0' && *p_str2 == '\0')
            return 1;

        if (*p_str1 > *p_str2)
        {
            result = *p_str1 - *p_str2;
            return result;
        }else if (*p_str1 < * p_str2)
        {
            result = *p_str1 - *p_str2;
            return result;
        }
        if(*p_str1!='\0')
            p_str1++;
        if(*p_str2!='\0')
            p_str2++;
    }
    return 0;
}


void Question6_18(int month)
{
    char* Month[20];
    for (int i = 0; i < 20; i++)
    {
        Month[i] = new char[20];
    }
    strcpy(Month[1],"January");
    strcpy(Month[2] , "February");
    strcpy(Month[3] , "March");
    strcpy(Month[4], "April");
    strcpy(Month[5], "May");
    strcpy(Month[6], "June");
    strcpy(Month[7], "July");
    strcpy(Month[8], "Auguest");
    strcpy(Month[9], "September");
    strcpy(Month[10], "October");
    strcpy(Month[11], "November");
    strcpy(Month[12], "December");
    cout << Month[month] << endl;
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值