zoukankan      html  css  js  c++  java
  • Coursera课程笔记----计算导论与C语言基础----Week 10

    C程序中的数组(Week 10)

    一维数组

    • 数组的定义

      类型 数组名[常量表达式] int sheep[10]

    • 定义数组时,[]内必须为常量表达式

      • 可以用const int
      • 可以在main函数前,#define(预定义部分)
    • 数组的初始化

      • int a[10] = {1,2,3,4,5,6,7,8,9,10}
      • int a[ ] = {1,2,3,4}
      • int a[4] = {1,2} // a[2]和a[3]就为0了

    二维数组

    int a[3][4] //3行4列
    

    在内存中存储,拉平成一个线性的序列

    • 数组的初始化:大框号内的大括号,或直接拉平输入,也可以部分初始化

    • cout<<setw(3)<<a[i][j]; //setw设置输出占位

    三维数组

    int a[5][3][4] //高3宽4深5的立方体,5片,3行,4列
    

    存储方式也是拉成一条线

    数组的作用

    例1 数字统计

    • 输入20个0~9之间的整数,统计每个数载输入数列中出现的次数
    #include <iostream>
    using namespace std;
    int main()
    {
      int mun,count[10] = {0};
      for(int i=0;i<20;i++)
      {
        cin >> num;
        for(int j = 0; j < 10; j ++)
        {
          if(num == j) count[j]++;
        }
      }
      for(int i = 0; i < 10; i++)
      {
        if(count[i]!=0)
          cout<<i<<"输入了"<<count[i]<<"次"<<endl;
      }
      return 0;
    }
    

    例2 数字统计

    • 某学校有1000老师,分布在20个不同的学院中,每个学院最多12个系,请你编写一个程序,输入每位老师的所在院、系的编号,打印出各个系老师的数量。(两级概念——二维数组)
    #include <iostream>
    #include <iomanip>
    using namespace std;
    
    int main()
    {
      int teacher[21][13];
      int school,department;
      int i,j;
      char name[30];
      
      for(i = 0; i < 1000; i++)
      {
        cin>>name>>school>>department;
        teacher[school][department]++;
      }
      
      for(i=1;i<21;i++)
        for(j = 1 ;j < 13; j++)
          cout<<setw(4)<<teacher[i][j];
      cout<<endl;
      return 0;
    }
    
    

    例3 找出素数

    • 请编写程序,输出100以内所有素数

    • 典型的解决方法:

      • 循环(i从2至100)

        • 设置一个标示p = 0;

        • 循环(j从2至i-1)

          如果(i mode j == 0)p=1

        • 如果p=0,输出i

      • 埃拉托斯特尼筛子法:筛出所有的合数

        • 稍做优化:可以让2,3,4……,c中的每个数自我相加多次,来获得100之内的所有合数
        • c的确定:根据初等数论,若n为合数,则n的最小正因数满足1<c<=$sqrt{2}$
    #include<iostream>
    #include<cmath>
    using namespace std;
    int main()
    {
      int sum = 0, a[100] = {0};
      for(int i=2;i<sqrt(100.0);i++)//Optimization Point1
      {
        sum = i;
        if(a[sum] == 0)//Optimization Point2
        {
        while(sum < 100)
        {
          sum = sum + i;
          sum = sum + i;
          if(sum < 100) a[sum] = 1;
        }
        }
      }
      for(int i=2; i<100;i++)
      {
        if(a[i] == 0) cout<<i<<" ";
      }
      return 0;
    }
    

    练习

    Quiz1 求字母的个数

    #include <iostream>
    using namespace std;
    int main()
    {
        char s[80];
        int a=0,e=0,i1=0,o=0,u=0;
        cin.getline(s,80);
        for (int i = 0; s[i] !='' ; i++) {
            if(s[i] == 'a')
                a++;
            if(s[i] == 'e')
                e++;
            if(s[i] == 'i')
                i1++;
            if(s[i] == 'o')
                o++;
            if(s[i] == 'u')
                u++;
        }
        cout<<a<<" "<<e<<" "<<i1<<" "<<o<<" "<<u<<endl;
    }
    

    Quiz 2 忽略大小写比较字符串大小

    #include <iostream>
    using namespace std;
    int main()
    {
        char s1[80],s2[80];
        cin.getline(s1,80);
        cin.getline(s2,80);
    
        for (int i = 0; i < 80; i++) {
            if(s1[i] == '' && s2[i] != '')
            {
                cout<<'<'<<endl;
                break;
            }
            if(s2[i] == '' && s1[i] !='')
            {
                cout<<'>'<<endl;
                break;
            }
            if(s1[i] == '' && s2[i] == '')
            {
                cout<<'='<<endl;
                break;
            }
    
            if(s1[i] >= 65 && s1[i] <=90)
                s1[i] += 32;
            if(s2[i] >= 65 && s2[i] <=90)
                s2[i] += 32;
    
            if(s1[i] > s2[i])
            {
                cout<<'>'<<endl;
                break;
            }
            if(s1[i] < s2[i])
            {
                cout<<'<'<<endl;
                break;
            }
        }
        return 0;
    }
    

    Quiz3 最长单词2

    #include <iostream>
    using namespace std;
    int main()
    {
        char s[500];
        cin.getline(s,500,'.');
        int length = 0;
        char longest[100];
        int maxLength = 0;
    
        for (int i = 0; s[i] != '' ; i++) {
            if((s[i] >= 65 && s[i] <=90 || s[i] >= 97 && s[i] <= 122) &&
                (s[i+1] >= 65 && s[i+1] <=90 || s[i+1] >= 97 && s[i+1] <= 122))
            {
                length++;
                continue;
            }
            if((s[i] >= 65 && s[i] <=90 || s[i] >= 97 && s[i] <= 122) &&
                    (s[i+1] < 65 || s[i+1] > 122 || s[i+1] < 97 && s[i+1] > 90) &&
                    ((length + 1) > maxLength))
            {
                length++;
                maxLength = length;
                for (int j = length - 1; j >= 0 ; j--) {
                    longest[j] = s[i - (length - 1 - j)];
                }
                length = 0;
            }
            if(s[i+1] < 65 || s[i+1] > 122 || s[i+1] < 97 && s[i+1] > 90)
                length = 0;
        }
        for (int i = 0; i < maxLength; i++) {
            cout<<longest[i];
        }
        cout<<"
    ";
    }
    
    

    Quiz4 矩阵交换行

    #include <iostream>
    #include <iomanip>
    using namespace std;
    int main()
    {
        int matrix[5][5];
        int m,n;
        int tmp[5];
    
        for(int i=0;i<5;i++)
            for(int j=0;j<5;j++)
                cin>>matrix[i][j];
        cin >> m >> n;
        if(!(m <= 4 && m >=0) || !(n <= 4 && n >=0))
        {
            cout<<"error"<<endl;
            return 0;
        }
    
        if(m == n)
        {
            for(int i=0;i<5;i++)
                for(int j=0;j<5;j++)
                {
                    cout<<setw(4)<<matrix[i][j];
                    if(j == 4)
                        cout<<'
    ';
                }
            return 0;
        }
    
        for (int i = 0; i < 5; i++) {
            tmp[i] = matrix[m][i];
            matrix[m][i] = matrix[n][i];
            matrix[n][i] = tmp[i];
        }
    
        for(int i=0;i<5;i++)
            for(int j=0;j<5;j++)
            {
                cout<<setw(4)<<matrix[i][j];
                if(j == 4)
                    cout<<'
    ';
            }
    
        return 0;
    }
    

    Quiz5 异常细胞检测

    #include <iostream>
    using namespace std;
    int main()
    {
        int n,number = 0;
        cin >> n;
        const int N = n;
        int matrix[N][N];
        for (int i = 0; i < N; i++)
            for (int j = 0; j < N; j++)
                cin >> matrix[i][j];
    
        for (int i = 1; i < N-1; i++)
            for (int j = 1; j < N-1 ; j++) {
                if (-matrix[i][j] + matrix[i - 1][j] >= 50 && -matrix[i][j] + matrix[i + 1][j] >= 50 &&
                    -matrix[i][j] + matrix[i][j - 1] >= 50 && -matrix[i][j] + matrix[i][j + 1] >= 50)
                    number++;
            }
    
        cout<<number<<endl;
        return 0;
    }
    

    Quiz6 循环移动

    #include <iostream>
    using namespace std;
    int main()
    {
        int n,m;
        cin >> n >> m;
        const int N = n;
        int number[N];
        for (int i = 0; i < N; i++)
            cin >> number[i];
    
        for (int i = 0; i < m; i++) {
            int temp = number[N-1];
            for (int j = N-2; j >= 0; j--) {
                number[j+1] = number[j];
            }
            number[0] = temp;
    
        }
        for (int i = 0; i < N; i++)
        {
            cout << number[i]<<' ';
        }
        return 0;
        }
    

    Quiz7 中位数

    #include <iostream>
    using namespace std;
    int main()
    {
        int n;
        while (cin >> n)
        {
            if(n == 0) break;
            int average = 0;
            int number[15000];
    
            for (int i = 0; i < n; i++) {
                cin >> number[i];
            }
    
            for (int i = 0; i < n; i++) {
                for (int j = 1; j < n - i; j++) {
                    if (number[j - 1] > number[j]) {
                        int temp = 0;
                        temp = number[j];
                        number[j] = number[j - 1];
                        number[j - 1] = temp;
                    }
                }
            }
    
            if(n % 2 == 0)
                average = (number[n/2] + number[n/2 - 1])/2;
            else average = number[n/2];
    
            cout<<average<<endl;
        }
        return 0;
    }
    
    //如何不排序实现这个程序?
    

    Quiz8 校门外的树

    #include <iostream>
    using namespace std;
    int main()
    {
        int tree[10001] = {0};
        int leftM[101] = {0},rightM[101] = {0};
        int l,m;
        int num = 0;
        cin >> l >> m;
        for (int i = 0; i < m; i++)
            cin>>leftM[i]>>rightM[i];
        for (int i = 0; i <= l; i++) {
            tree[i] = 1;
        }
    
        for (int i = 0; i < m; i++)
            for (int j = leftM[i]; j <= rightM[i]; j++)
                tree[j] = 0;
    
        for (int i = 0; i <= l; i++)
            if(tree[i] == 1)
                num++;
    
        cout<<num<<endl;
        return 0;
        }
    
        //如果数据范围很大(L=500w),该用什么办法处理?
    
  • 相关阅读:
    使用pynlpir增强jieba分词的准确度
    graph easy绘制ascii简易流程图
    kubernetes版本融合解决方案
    设计的一些kubernetes面试题目
    使用go-template自定义kubectl get输出
    docker、oci、runc以及kubernetes梳理
    启动docker容器时的Error response from daemon: devmapper: Error mounting: invalid argument. 错误解决
    kubernetes endpoint一会消失一会出现的问题剖析
    docker启动容器报错: could not synchronise with container process: not a directory
    docker中执行sed: can't move '/etc/resolv.conf73UqmG' to '/etc/resolv.conf': Device or resource busy错误的处理原因及方式
  • 原文地址:https://www.cnblogs.com/maimai-d/p/12813618.html
Copyright © 2011-2022 走看看