数组

1.一维数组

int scores[5];//数组的声明
#define LENGTH 5
int scores1[LENGTH];//使用宏定义声明
scores[0]=10;//一维数组的访问,使用下标索引,下标从0开始
//arr[5]=100;X//数组下标越界。可能得到非期望值
int i;
i=arr[1];//使用第二个元素进行赋值
//数组初始化为0
int 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值