• 2020/11/5 C++实验回顾


    1. 输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。

    ⑴提示
    把输入的10个整数存入数组中,10个中最小的放与数组的第一个元素对换,最大的数与数组的第10个元素对换。其他的保持不变。

    要求
    定义3个函数:
    void input(int number[ ]); //此函数实现输入10个元素//
    void max_min_value(int array[ ]); //此函数实现交换数组的对应元素//
    void output(int array[ ]); //此函数实现输出10个元素//

    #include<iostream>
    using namespace std;
    const int n = 10;
    void input(int number[]) {
        int t;
        cout << "请输入10个整数:" << endl;
        for (int i = 0; i < n; i++) {
           cin >> t;
           number[i] = t;
        }
        cout << "数组创建成功" << endl;
    }
    void max_min_value(int array[]) {
        int min = array[0], max = array[0], minp = 0, maxp = 0, t;
        for (int i = 1; i < n; i++) {
           if (min > array[i]) {
               min = array[i];
               minp = i;
           }
           if (max < array[i]) {
               max = array[i];
               maxp = i;
           }
        }
        t = array[0];
        array[0] = min;
        array[minp] = t;
        t = array[n - 1];
        array[n - 1] = max;
        array[maxp] = t;
        cout << "交换成功" << endl;
    }
    void output(int array[]) {
        cout << "输出数组:" << endl;
        for (int i = 0; i < n; i++) {
           cout << array[i] << " ";
        }
        cout << endl;
    }
    int main() {
        int number[n];
        input(number);
        max_min_value(number);
        output(number);
        return 0;
    }
    

    Image

    2.二维数组统计

    编写程序统计一个字符串“C++ is beginer's language”中单词的个数,并将统计的每个单词存入二维数组array[ ][ ]中的一行,即数组array中的元素:array[0]=”C++”, array[1]=”is”, array[2]=”beginer’s”, array[3]=”language”。最后输出每个单词。

    #include<iostream>
    using namespace std;
    const int n = 20;
    void input(char a[][n], int& len_row, int& len_all) {
        cout << "请输入字符串:" << endl;
        char t;
        int end = 0;
        for (int i = 0; i < n; i++) {
           for (int j = 0; j < n; j++) {
               t = cin.get();
               if (t == ' ' || t == '
    ')
                  break;
               a[i][j] = t;
               len_all++;
               end = j + 1;
           }
           len_row++;
           a[i][end] = '';
           if (t == '
    ')
               break;
        }
        cout << "录入成功" << endl;
    }
    void output(char a[][n], int len_row){
        cout << "二维数组输出:" << endl;
        for (int i = 0; i < len_row; i++) {
           for (int j = 0; j < n; j++) {
               if (a[i][j] == '')
                  break;
               cout << a[i][j];
           }
           cout << " ";
        }
        cout << endl;
    }
    int main() {
        char a[n][n];
        int len_row = 0, len_all = 0;
        input(a, len_row, len_all);
        cout << "字符串总长度为:" << len_all << ",行数为:" << len_row << endl;
        output(a, len_row);
        return 0;
    }
    

    Image

    3. 循环单链表练习

    n个人围成一圈,从第一个人开始报数,报到5的人就退出圈(图中白色的表示退出圈),再从下个人开始报数,问最后剩下的那个人是第几个人。

    Image

    #include <iostream>
    using namespace std;
    //定义结构体
    typedef struct Node {
        int num;
        string name;
        struct Node* next;
    }stNode, * stLink;
    //初始化循环单链表
    void initStLink(stLink& L) {
        L = (stNode*) new stNode;   //创建头结点
        if (L == NULL)
           cout << "链表初始化失败" << endl;
        L->next = L; //头结点指向自己
        cout << "链表初始化成功" << endl;
    }
    //销毁链表
    void destroyLink(stLink& L) {
        stNode* p = L;
        stNode* q = p->next;
        while (q != L) {
           free(p);
           p = q;
           q = q->next;
        }
        free(p);
        p = NULL;
        q = NULL;
        L = NULL;
        cout << endl << "链表销毁成功" << endl;
    }
    //尾插入结点
    void stInsert(stLink& L, int i, int num, string name) {
        if (i < 1)
           cout << "插入位置不能小于1" << endl;
        stNode* p = L;    //L指向头结点,后续用于扫描
        int j = 0; //记录当前p指向的第几个结点
        while (p != NULL && j < i - 1) {   //循环找到第 i-1 个结点
           p = p->next;
           j++;
        }
        stNode* s = (stNode*) new stNode;
        s->num = num;
        s->name = name;
        s->next = p->next;
        p->next = s;
    }
    //创建循环链表
    void CreateStLink(stLink& L, int n, int* stNum, string* stName) {
        if (n < 1)
           cout << "创建失败(至少有一个结点)" << endl;
        for (int i = 0; i < n; i++) {
           stInsert(L, i + 1, *(stNum + i), *(stName + i));
        }
        cout << "链表创建成功" << endl << endl;
    }
    //输出链表信息
    void dispStLink(stLink L) {
        stNode* p = L->next;
        cout << "输出链表:" << endl;
        while (p != L) {
           cout << p->num << "  " << p->name << endl;
           p = p->next;
        }
        cout << endl;
    }
    //报数为 m 的出列,并播报最后剩余者
    void stFind(stLink& L, int n, int m) {
        stNode* p = L->next; //标记结点
        int call_n = 0;   //报数
        int out_n = 0;    //出局人数
        cout << "游戏开始" << endl;
        while (1) {   //循环报数
           if (p->num != 0) {   //如果没有出局
               if (out_n == (n - 1))    //如果只剩一人
                  break; //退出
               call_n++;  //报数
               call_n %= m;  //报到 m 就从0开始
               if (call_n == 0) {   //报数为 m 的
                  cout << p->num << "  " << p->name << "  出局!" << endl;    //播报出局
                  p->num = 0;   //出局标记
                  out_n++;   //出局人数 +1
               }
           }
           p = p->next;  //循环下一个结点
           if (p == L)   //p指向头结点时
               p = p->next;  //跳过头结点
        }
        cout << "最后的剩余者是:" << p->num << "  " << p->name << endl;
    }
    int main()
    {
        int stNum[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
        string stName[] = { "孙悟空", "嬴政", "林黛玉", "武松" , "朱莉" , "卡卡罗特" , "中本聪" , "高尔基" };
        int n = sizeof(stNum) / sizeof(stNum[0]); //人数
        int m = 5; //报数
        stLink L;
        initStLink(L);    //初始化
        CreateStLink(L, n, stNum, stName); //创建链表
        dispStLink(L);    //显示链表
        stFind(L, n, m);  //报数出局
        destroyLink(L);   //销毁链表
        return 0;
    }
    

    Image

  • 相关阅读:
    [转帖]gesture recognition
    [转帖]了解AmbiLight知识
    [转帖]AVS音视频编解码技术了解
    [笔记]新概念英语听力
    ES 学习记录
    Spring Aop 错误之:No MethodInvocation found ... the ExposeInvocationInterceptor is upfront in the interceptor chain. Specifically, note that advices with order HIGHEST
    AOP无法切入同类调用方法解决办法
    多数据源 Spring 1.x 和 spring 2.x区别
    Intellij IDEA 在一个窗口添加多个项目并全部加入version control
    PageHelper 分页和排序之间的关系
  • 原文地址:https://www.cnblogs.com/Liwker/p/13933404.html
Copyright © 2020-2023  润新知