计算机程序设计C++ 第四周笔记

发布于 2020-03-07  344 次阅读


复杂信息的表达与处理

一维数组

定义方法

语句格式:<类型> <标识符>[<大小>]
举例:double length[30],width[30];
const int N=100,M=20;int score[N*M];

初始化方法

语句格式:<类型> <数组名> [<表达式常量>] ={<表达式1>,<表达式2>,...}
初始化方法:

  • 全部元素
    double room[]={401,402,403,404};
  • 部分元素
    double average[30]={21.0,2020,a*b,7.5+2.3};

使用方法

语句格式:<数组名>[<下标>]
举例:

int length[10],width[10];   //定义数组
length[0]=1;                //给数组元素赋值,正确
sum=length[0]*2;            //数组元素参与运算,正确
cin>>length[0];             //输入数组元素,正确
cout<<length[0];            //输出数组元素,正确
cin>>length;                //对整型数组整体输出,错误
cin>>length[10];            //数组下标超界,错误
width=length;               //数组整体赋值,错误
cout<<length;               //整型数组整体输出,错误

例 将单词小写字母转换为大写

#include<iostream>
using namespace std;
int main(){
    char str[10];
    int i=0;
    cin>>str;
    while(str[i]!='\0'){
        str[i]=str[i]-32;
        i=i+1;
    }
    cout<<str<<endl;
    return 0;
}


二维数组

定义方法

语句格式 : <类型> <数组名>[<常量表达式1>][<长量表达式>]
例如: int score[60][3] 行标列标不能是变量

初始化方法

语句格式: <类型> <数组名>[<行数>][<列数>]={<表达式1>,<表达式2>...}
例如:

  • int A[3][3]={1,2,3,4,5,6,7,8,9};
  • int B[3][3]={1,2,3};

使用方法

语句格式: <数组名>[<行标>][<列标>]
例如: 

  • int A[2][2];
  • A[0][0]=5;

多维数组

例如: int A[5][4][3];


结构体

结构体类型定义方法

语句格式:

struct <结构体名>{
    类型名1 成员名表1;
    类型名2 成员名表3;
    ... ...
};

例如:

struct Date{
    int year,month,day;
};

同一结构体的成员不能同名,但可与其他变量名同名。

结构体变量声明方法

语句格式:struct <结构体名> <变量列表>;
声明时机:

  1. 定义结构体类型后声明
    • struct Date today;
  2. 定义结构体类型同时声明,可以省略结构体名
    • struct Date{int year,month,day;}today;

结构体变量初始化方法

语句格式: struct <结构体名> <变量1>={<数据列表>},<变量2>={<数据列表>},...;
例如: struct Date today={2015,2.20};

结构体变量使用方法

语句格式: <结构体名>.<成员名>
举例:

  • today.year=2015
  • today.month=2
  • today.day=20

结构体所占内存大小

语句格式 :sizeof(类型名)或者sizeof(变量名)
举例:

  • struct SHAPE1 {char name;int x;int y;char classification}
  • sizeof(SHAPE1) //4*4=16
  • struct SHAPE2 {char name;double x;int y;char classification}
  • sizeof(SHAPE2) //8*2+4*2=24
  • struct SHAPE3 {char name;double x;double y;char classification}
  • sizeof(SHAPE3) //8*4=32

结构体数组定义方法

语句格式: struct <结构体名> <结构体数组名>[<数组大小>];
例如: struct Date manydates[30];

结构体数组初始化方法

语句格式: struct <结构体名> <结构体数组名>[<数组大小>]={<结构体类型值列表>};
例如: struct Date manydates[30]={{2015,1,1},{2015,2,17},{2015,3,8}}

结构体数组使用方法

语句格式: <结构体数组名>[<整型表达式>]
例如: 给第 i 个赋值

  • manydates[i].year=2015
  • manydates[i].month=2
  • manydates[i].day=20

枚举

枚举类型定义方法

语句格式: enum <枚举类型名>{枚举常量表};
例如: enum Week{Sun,Mon,Tes,Wed,Thu,Fri,Sat}; //Sun=0,Mon=1,Tes=2,Wed=3,Thu=4,Fri=5,Sat=6

枚举变量声明方法

语句格式:enum <枚举类型名> <枚举变量列表>;
声明时机:

  • 定义枚举类型后声明
    • enum COLOR background,foreground;
  • 定义枚举类型时同时声明
    • enum Week {Sun=7,Mon=1,Tes,Wed,Thu,Fri,Sat} begin,end;

枚举变量的使用方法

例如:

  • enum Week {Sun=7,Mon=1,Tes,Wed,Thu,Fri,Sat} begin,end;
  • cin>>background; //直接输入枚举变量,错误
  • begin=1; //整数赋给枚举变量,错误
  • begin=Mon; //将枚举常量赋给枚举变量,正确
  • end=Sun;
  • begin=end; //相同类型的枚举变量赋值,正确
  • begin=(Week)1; //整型强制类型转换后赋给枚举变量,正确
  • int a=begin; //将枚举变量赋给整型变量,正确
  • int b=Sun; //将枚举常量赋给整型变量,正确
  • cout<<begin; //直接输出枚举变量,正确
  • cout<<end-begin; //枚举变量可以参加数学运算,正确

实例

冒泡排序

用户从键盘输入N,然后输入N个实数,使用冒泡排序方法对这N个元素排序,输出排序后的数据。

#include<iostream>
#include<cmath>
using namespace std;
int main(){
    double a[100];
    int N;
    int i=0,j=0;
    cin>>N;
    for(i=0;i<N;i++){
        cin>>a[i];
    }
    for(i=0;i<N-1;i++){
        for(j=0;j<N-1-i;j++){
            if(a[j]>a[j+1]){
                int tmp;
                tmp=a[j];
                a[j]=a[j+1];
                a[j+1]=tmp;
            }
        }
    }
    for(i=0;i<N;i++){
        cout<<a[i]<<" ";
    }
    cout<<endl;
    return 0;
}

文字信息统计

C++中提供了一些字符串处理的库函数,方便字符串操作。
常见的有: 

  • int srtlen(char *s);//求字符串s的长度
  • char *strcpy(char *destin,char *source);//将字符串source复制到destin中
  • int strcmp(char *string1,char *string2);//比较string1和string2
  • char *strcat(char *desting,char *source);//将source连接到destin末尾
  • char *strlwr(char *string);//string转换为小写
  • char *strupr(char *string);//string转换为大写

字符串的末尾标志为'\0'字符标识其结束,在VS2008及以上调用strcpystrcat等函数是由于安全原因会提示警告,解决方法:#define _CRT_SECURE_NO_WARNINGS


我们都要做生活的高手。