数组

来源:互联网 发布:javascript冒泡排序 编辑:程序博客网 时间:2024/05/21 06:32

1.一维数组

int scores[5];//数组的声明#define LENGTH 5int scores1[LENGTH];//使用宏定义声明scores[0]=10;//一维数组的访问,使用下标索引,下标从0开始//arr[5]=100;X//数组下标越界。可能得到非期望值int i;i=arr[1];//使用第二个元素进行赋值//数组初始化为0int arr1[5]={1,2,3,4,5};char codes[5]={'A','b','c','D','e'};double pices[3]={1.2,2.4,3.6};//数组初始化必须在数组声明时//数组声明时可以省略数组长度,但是需要初始化数据来决定长度int arr1[ ]; //代码错误,数组长度不可知int codes[ ] = {1, 2, 3, 4, 5}; //代码正确//数组初始化时的初始化数据个数可以不跟数组长度匹配int arr1[5] = {1, 2, 3}; //数组前三个元素被初始化int codes[3] = {1, 2, 3, 4, 5}; //最后两个值被丢弃

2.冒泡排序法、折半查找法

//冒泡排序法//例:使用数组进行冒泡排序,要求结果从大到小排列,并且输出排序后的结果/*void func3(int a[]);int main(int argc, const char * argv[]) {    int scores[5]={88,77,66,100,99};    func3(scores);    return 0;}void func3(int a[]){    //传参传递的是数组的地址        for (int i=0; i<4; i++) {    //进行比较趟数        for (int j=0; j<4-i; j++) {   //每趟比较次数            if (a[j]<a[j+1]) {   //将较小的值存入scores[j],较大的数值存入scores[j+1]                int temp=a[j];                a[j]=a[j+1];                a[j+1]=temp;            }        }    }    for (int i=0; i<5; i++) {        printf("%d ",a[i]);    }}//使用数组进行折半查找(二分查找)void func4(int x);int zheban(int n);int main(int argc, const char * argv[]) {    int x;    printf("请输入你要找的数据(12,15,18,88,99)\n");    scanf("%d",&x);    func4(x);    printf("----------------------------\n");    printf("请输入你要找的数据(12,15,18,88,99,100)\n");    int location=zheban(x);    printf("%d是数组中下标为%d的值\n",x,location);    return 0;}void func4(int x){   //我做的    =.=只适应n为偶数,求各位大神指点    int arr[]={12,15,18,88,99};    int n=4;    for (int i=0; i<3; i++) {        if (x>arr[n/2]) {            n=n+n/2;        }else if (x<arr[n/2]) {            n=n-n/2;        }else{            printf("执行%d次后,找到下标%d的元素%d\n",i+1,n/2,arr[n/2]);            break;        }    }}int zheban(int n){        //老师答案    int scores[6]={12,15,18,88,99,100};    int left=0;    int right=5;    while (left<=right) {        int mid=(left+right)/2;        if (scores[mid]==n) {            return mid;        }        if (scores[mid]>n) {            right=mid-1;        }else{            left=mid+1;        }    }    return -1;}

3.数组作为函数参数

1.传递给函数的数组是一个地址2.只需要将数组首元素的地址传入即可//与指针作为参数的效果一样,会改变主函数中的数组值3.在函数的参数声明时只需要将参数定义为数组形式即可,而无须定义长度eg:void printArray(int arr[ ]);  //函数声明   *中括号不能省略

<span style="font-size:10px;">eg.//输入一个字符串,然后将其中的单词个数统计出来并打印void funcdc(char str[]);int main(int argc, const char * argv[]) {    char str[100];    printf("请输入一个字符串\n");    gets(str);    funcdc(str);    return 0;}void funcdc(char str[]){    int i=0;    int sum=0;    if (str[0]!=' ') {      //字符串首字母为非空格(=1)时,单词总数+1        sum=1;    }    do {        //当前字符为空格且下一个字符为非空格时,单词总数+1        if (str[i]==' '&&str[i+1]!=' ') {            sum+=1;        }        i++;    } while (str[i]!='\0');    printf("字符串:%s\n一共有%d个单词\n",str,sum);}</span>


4.字符串

字符串存储在字符数组中,结尾加上NULL(’\0’)作为字符串末端标志字符串初始化:char str[7] = "Hello!";//默认自动添加'\0'char str[  ] = "Hello!";//默认自动添加'\0'char str[7] = {'H', 'e', 'l', 'l', 'o', '!', '\0'};char str[  ] = {'H', 'e', 'l', 'l', 'o', '!', '\0'};//后面两种需要手动添加'\0'

字符串的输入和输出

  • 使用getchar( )函数输入

    char ch1=getcar();//(单)字符输入函数。当按回车键时,把第一个值赋给ch1。*只接收第一个字符,不管输入多少字符,按几次回车键。

  • 使用putchar( )函数输出

    getchar(c1);//(单)字符输出函数,将一个字符输出到标准输出设备。c1=字符变量、整型变量、整型常量,其值为字符的ASCII值

  • 使用scanf( )函数输入

    scanf("%s",str); //默认以空格分割

  • 使用printf( )函数输出

    printf("%d-格式控制字符串",i-输出参数表);//格式输出函数。数据项的个数、类型、顺序应与格式控制符对应一致

  • 使用gets( )函数输入

    gets(str);//输入到指定字符数组

  • 使用puts( )函数输出

    puts(str);//字符数组输出到标准输出设备--控制台

    eg.

    void func11(){//声明字符串数组接受控制台输入的字符串char str[100];printf("请输入一个字符串\n");//scanf("%s",str); //默认以空格分割gets(str);//输入到指定字符数组printf("您输入的字符串是:%s",str);puts(str);//输出到标准输出设备--控制台}void func22(){//声明字符数组接受控制台输入的字符串char str[100];char c;int i=0;//从控制台上获取输入的字符//!=‘\n’   判断字符是否回车printf("请输入一个字符串\n");while ((c=getchar())!='\n') {  str[i]=c;  //将获取到的字符存储到字符数组中  i++;}str[i]='\0';printf("你输入的字符串是:%s",str);}int main(int argc, const char * argv[]) { func11(); func22(); return 0;}

    字符串的相关库函数

    包含string.h头文件 strcpy(str1,str2)

     字符串复制函数,将str2的内容复制到str1中。

    strcat(str1,str2)

     字符串连接函数,将str2连接到str1之后

    strlen(str)

     获取字符串长度函数,不包括末端字符

    strcmp(str1,str2)

     字符串比较函数,str1大于str2返回正数,相等返回0,str1小于str2返回负数

    字符的相关库函数

    包含ctype.h头文件 常见的有以下几个函数

     isalpha(chr)//该字符是否为字母 isupper(chr)//该字符是否为大写字母 islower(chr)//该字符是否为小写字母 isdigit(chr)//该字符是否为数字 …… toupper(chr)//小写字母转换为大写字母 tolower(chr)//大写字母转换为小写字母

字符串数字转换库函数

包含stdlib.h头文件atoi(str)  将字符串转为整型数字函数atof(str)  将字符串转为浮点型数字函数

字符串格式化

使用控制字符串进行字符串的输入和输出控制字符串  %s代表字符串,默认左对齐,%-s代表右对齐  %10s代表输出占据10个字长,如果不足则按照对齐方式对其进行空格的填充以补齐占据长度  %10.3s代表输出占据10个字长,从格式化之前取3个长度字符串sprintf(str1,format,str2)  将str2按format格式化的结果存入str1中sscanf(str,format,变量1,变量2……)  从str按照format进行扫描,存入相应变量中

二维数组

二维数组的声明:
int values[3][4];double prices[3][6];char messages[4][100];
二维数组元素的访问
values[0][0] = 10; //第1行第1个元素values[1][3] = 30; //第2行第4个元素printf(“%d”,values[2][2]); //访问第3行第3个元素sum = 0;for(i = 0;i < 3;i++){   for(j = 0;j < 4;j++){        sum += values[i][j];    }}
二维数组的初始化
int values[3][4] ={{81,16,11,34},{23,45,33,55},{12,32,45,53}};//指定行列个数int values[3][4] = {8,1,11,34,23,45,33,55,12,32,45,53};//不用明显指出行,由系统自动分配int values[ ][4] = {81,16,11,34,23,45,33,55,12,32,45,53};//初始化可以省略行数,列数不能省略


随堂笔记为个人学习笔记,若有错误,望指出,谢谢!!

0 0