C/C++ L4

2018/07/05 C/C++

C/C++程序语言设计 Level4。

MAC

数组

C语言使用数组处理批量数据。

  1. 数组是一组有序数据的集合。下标代表数据在数组中的位置。
  2. 用数组名和下标来唯一确定数据在数组中的元素。
  3. 数组中的每一个元素都属于同一个数据类型,不能把不同类型的数据放在同一个数组中。

定义与引用一维数组

定义一维数组的形式是:

类型符 数组名[常量表达式];

引用一维数组的形式是:

数组名[下标]

实例:对10个数组元素依次赋值0-9,然后逆序输出。

#include <iostream>
using namespace std;

int main(){
    int a[10];
    for(int i=0;i<=9;i++){
        a[i] = i;
    }
    for(int i=9;i>=0;i--){
        cout << a[i] << " ";
    }
    cout << endl;
    return 0;
}

一维数组的初始化

示例:

#include <iostream>
using namespace std;

int main(){
    int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    int b[10] = {0, 1, 2, 3};
    int c[10] = {0};
    int d[] = {1, 2, 3, 4, 5};
}

实例:用数组来处理斐波那契数列问题。

#include <iostream>
using namespace std;

int main(){
    int f[20] = {1, 1};
    for(int i=2;i<20;i++){
        f[i] = f[i-2] + f[i-1];
    }
    for(int i=0;i<20;i++){
        cout << f[i] << " ";
    }
    cout << endl;
    return 0;
}

简单排序

排序问题属于计算机算法的范畴,这里以冒泡排序为例。

实例

#include <iostream>
using namespace std;

int main(){
    int a[10];
    for(int i=0;i<10;i++){
        cin >> a[i];
    }
    for(int i=0;i<9;i++){
        for(int j=0;j<9-i;j++){
            if(a[j]>a[j+1]){
                int t = a[j];
                a[j] = a[j+1];
                a[j+1] = t;
            }
        }
    }
    for(int i=0;i<10;i++){
        cout << a[i] << " ";
    }
    cout << endl;
    return 0;
}

二维数组

二维数组常常称为矩阵,把二维数组写成行、列的排列形式,它跟普通的表格很类似。注意,尽管二维结构有行、列的描述,但是实际上二维数组在计算机内依旧是线性的储存。

实例:给定一个3*4的矩阵,要求编程求解其中最大的元素的值。

#include <iostream>
using namespace std;

int main(){
    int a[3][4] = {
        {1,2,3,4}, 
        {9,8,7,6}, 
        {-10,10,-5,2}
    };
    int max = -10000;
    for(int i=0;i<3;i++){
        for(int j=0;j<4;j++){
            if(a[i][j]>max){
                max = a[i][j];
            }
        }
    }
    cout << "最大值是:" << max << endl;
    return 0;
}

字符数组

字符型的数据类型使用关键字char,占用1个字节。C语言中没有字符串的类型,而是使用字符型数据的数组来储存字符串。

示例:

#include <iostream>
using namespace std;

int main(){
    char a[10] = {'I', ' ', 'a', 'm', ' ', 'h', 'a', 'p', 'p', 'y'};
    char b[] = {'I', ' ', 'a', 'm', ' ', 'h', 'a', 'p', 'p', 'y'};
}

C语言使用’\0’表示字符串的结束位置,C系统在字符数组储存字符串的时候自动添加该符号,占据1个字节。下面是声明字符串的例子:

#include <iostream>
using namespace std;

int main(){
    char c[] = "I am happy";
    // 这个数组实际上是占用11个字节
}

输入、打印字符串的例子:

#include <iostream>
using namespace std;

int main(){
    char c[] = "Hello World!";
    cout << c << endl;

    char str[13];
    cin >> str;
    cout << str << endl;
    return 0;
}

习题

  1. 求解1-100内的所有素数。
  2. 编写一个程序,将输入的两个字符串拼成新的字符串打印出来。
  3. 有一份电报经过加密,加密的算法是将原来的字母移动2位,请你写一份解密程序。例如一份电报的内容是crrng,那么它解密之后是apple。这种加密方式叫做凯撒加密,破解的密钥是移位数。

参考

#include <iostream>
#include <cmath>
using namespace std;

int main(){
    for(int i=2;i<=100;i++){
        int temp = 0;
        for(int j=2;j<=sqrt(i);j++){
            if(i%j==0){
                temp = 1;
                break;
            }
        }
        if(!temp){
            cout << i << " ";
        }
    }
    cout << endl;
    return 0;
}
#include <iostream>
#include <cmath>
using namespace std;

int main(){
    char c1[1000];
    char c2[1000];
    cin >> c1 >> c2;
    int position = 0;
    for(int i=0;i<1000;i++){
        if(c1[i] == '\0'){
            position = i;
            break;
        }
    }
    for(int i=0;i<1000;i++){
        c1[position+i]=c2[i];
        if(c2[i] == '\0'){
            break;
        }
    }
    cout << c1 << endl;
    return 0;
}
#include <iostream>
using namespace std;

int main(){
    char chipText[1000];
    char plainText[1000];
    cin >> chipText;
    for(int i=0;i<1000;i++){
        if(chipText[i] == '\0'){
            plainText[i] = '\0';
            break;
        }
        plainText[i] = (chipText[i] - 'a' + 24) % 26 + 'a';
    }
    cout << plainText << endl;
    return 0;
}

Search

    Table of Contents