入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

07:可变长数组、多维数组

创建时间:2016-09-23 投稿人: 浏览次数:341

【练习】
打印一个7组数字的彩票,每个数字范围01-36之间,且不能重复;
让用户输入7组同范围的数字,输出用户猜对了几个数,几等奖。
<思想>
双重循环实现验重,双重循环实现验证中奖
/*代码*/

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
    srand(time(0));
    int i = 0, j = 0;
    int lot[7] = {0};
    int user[7] = {0}, cnt = 0;
    for(i = 0; i < 7; i++){
        lot[i] = rand() % 36 + 1;
        for(j = 0; j < i; j++){
            if(lot[i] == lot[j]){
                i--;
                break;
            }
        }
    }
    printf("请输入购买的彩票(7位01-36):
");
    for(i = 0; i < 7; i++){
        scanf("%d", &user[i]);
        for(j = 0; j < 7; j++){
            if(user[i] == lot[j])
                cnt++;
        }
    }
    if(!cnt)
        printf("很遗憾,没有中奖!
");
    else if(cnt > 0)
        printf("恭喜你,猜对了%d个数,中了%d等奖。
", cnt, 7-cnt);
    printf("中奖号码为:");
    for(i = 0; i < 7; i++){
        if(lot[i] < 10)
            printf("0%d ", lot[i]);
        else
            printf("%d ", lot[i]);
    }
    printf("
");
    return 0;
}




【数组】
数组名称不可以代表存储区
数组名称可以代表数组里第一个存储区的地址
可以对数组名称进行 sizeof 计算,结果是数组里所有存储区的总字节个数

【变长数组】
c99规范里可以使用变长数组
声明变长数组的时候用变量表示数组里包含的存储区个数
如果程序多次运行则每次运行的时候变长数组里包含的存储区个数可能不同
每次程序运行过程中数组里包含的存储区个数仍然不会改变
变长数组不可以被初始化

【练习】
编写程序得到多个考试成绩,找到其中最大成绩/最小成绩/总成绩并把结果显示屏幕上(先得到成绩的数量,由用户决定)
<思想>
定义好max=0,min=100,然后进行循环判断。
/*代码*/
#include <stdio.h>
int main()
{
    int num = 0, max = 0, min = 100, sum = 0;
    printf("请输入考试成绩的数量:");
    scanf("%d", &num);
    int result[num];
    int i = 0;
    for(i = 0; i < num; i++){
        printf("请输入第%d个考试成绩:", i+1);
        scanf("%d", &result[i]);
        if(result[i] >= max)
            max = result[i];
        if(result[i] <= min)
            min = result[i];
        sum += result[i];
    }   
    printf("最大成绩为%d,最小成绩为%d,总成绩为%d。
", max, min, sum);
    return 0;
}

【二维数组】
一维数组不可以表示存储区的分组情况
多维数组可以表示存储区的分组情况
最常见的多维数组叫二维数组,它只能表示存储区的一次分组情况
声明二维数组的时候需要提供两个整数,前一个表示每个分组里的存储区个数,后一个表示每个分组里的存储区个数
二维数组名称结合两个下标可以用来表示二维数组里的某个存储区
前一个下标用来表示分组编号(组下标)
后一个下标用来表示分组里的存储区编号(组内下标)
(组下标)的范围是从 0~分组个数- 1 为止
(组内下标)的范围从 0~组内存储区个数- 1 为止
可以采用双重循环的方式依次处理二维数组里的每一个存储区
可以采用初始化一维数组的方式对二维数组进行初始化
可以在初始化的时候对初始化数据进行分组,一组初始化数据用来初始化一组存储区
如果可以根据初始化数据个数计算出分组个数,就可以省略二维数组声明里的分组个数
二维数组名称也可以用来代表数组里第一个存储区的地址
二维数组的名称不可以被赋值
可以对二维数组名称做 sizeof 计算,结果也是数组里所有存储区总字节数
二维数组名称使用时也可以只提供 1 个下标,这个写法表示:
>>下标代表组里第一个存储区的地址 arr[1] 等同于 arr[1][0]
arr[1]这个写法也可以当作一维数组名称看,这个一维数组里包含的存储区就是下标对应组里的所有存储区

【练习】
二维数组输出以下内容:
11112
40002
40002
40002
43333
<思想>
1 与 2 同样的循环规律,3 与 4 同样的循环规律

/*代码*/

#include <stdio.h>
int main()
{
    int i = 0, j = 0;
    int arr[5][5] = {0};
    for(i = 0; i < 4; i++){
        arr[0][i] = 1;
        arr[i][4] = 2;
    }   
    for(i = 1; i < 5; i++){
        arr[4][i] = 3;
        arr[i][0] = 4;
    }   
    for(i = 0; i < 5; i++){
        for(j = 0; j < 5; j++){
            printf("%d", arr[i][j]);
        }   
        printf("
");
    }   
    return 0;
}



阅读更多
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。