0
点赞
收藏
分享

微信扫一扫

Java生成图片_基于Spring AI

有点d伤 2024-10-14 阅读 27

初始数组


回顾:计算平均数

#include<stdio.h>

int main()
{
    int number;
    int sum = 0;
    int count = 0;

    scanf("%d", &number);
    while ( number != -1) {
        sum += number;
        count ++;
        scanf("%d", &number);
    }

    printf("%f\n", 1.0*sum/count);

    return 0;
}

改变:计算平均数,并输出所有大于平均数的数

>> 需要记录每次输入的数

如何记录很多个数

数组

int number[100];

scanf("%d", &number[i]);

修改

#include<stdio.h>
int main()
{
    int x;
    int number[100];  
    //定义了一个叫number的新变量(数组),数组内每个单元都是一个int,数组大小是100(可以放100个int)
    double sum = 0;
    int cnt = 0;

    scanf("%d", &x);
    while ( x != -1) {
        number[cnt] = x;  //每读到一个x,会赋给number数组当中的某个单元
        sum += x;
        cnt ++;
        scanf("%d", &x);
    }
    if(cnt>0) {
        printf("%f\n", 1.0*sum/cnt);
        int i;

//遍历整个数组,找出当中大于平均数的数
        for (i=0; i<cnt; i++){
            if(number[i]>sum/cnt){
                printf("%d\n", number[i]);
            }
        }
    }

    return 0;
}

看看是怎么运行的

 小结

这个数组存在安全隐患:

没有判断cnt是否会超过number可以使用的最大下标

定义数组


定义数组

<类型>变量名称[元素数量];

*类型是数组变量的名称

元素必须是整数

数组

是一种容器,特点是:

  • 其中所有的元素具有相同的数据类型
  • 一旦创建,不能改变大小
  • 数组中的元素在内存中是连续依次排列的

eg.        int a[0]

  • 一个int数组
  • 10个单元:a[0],a[1],a[2],…,a[9]
  • 每个单元就是一个int类型的变量
  • 可以出现在赋值的左边或右边:a[2]=a[1]+6;(在赋值左边的叫做左值)

数组的单元

数组的每个单元就是数组类型的一个变量

使用数组时放在[]中的数字叫做下标或索引,下标从0开始计数

有效的下标范围

编译器和运行环境都不会检查数组下标是否越界,无论是对数组单元做读还是写

一旦程序运行,越界的数组访问可能造成问题,导致程序崩溃(segmentation fault)

有效下标值:[0,数组的大小-1]

解决方案

①在读数过程中,做个技术,当越界后,就不能再读数了

②利用C99的特性:如果先让用户输入有多少数字要计算,可以用C99的新功能

例题:统计个数


输入数量不确定的[0,9]范围内的整数,统计每一种数字出现的次数,输入-1表示结束

#include <stdio.h>

int main()
{
    int x;
    int count[10];
    int i;

    for( i=0; i<10; i++){
        count[i] = 0;
    }
    scanf("%d", &x);
    while (x != -1){
        if( x>=0 && x<=9){
            count[x] ++;
        }
        scanf("%d", &x);
    }
    for ( i=0; i<10; i++){
        printf("%d:%d\n", i, count[i]);
    }

    return 0;
}
#include <stdio.h>

int main()
{
    const int number=10;  //数组的大小
    int x;
    int count[number];  //定义数组
    int i;

    for( i=0; i<number; i++){  //初始化数组
        count[i] = 0;
    }
    scanf("%d", &x);
    while (x != -1){
        if( x>=0 && x<=9){
            count[x] ++;  //数组参与运算
        }
        scanf("%d", &x);
    }
    for ( i=0; i<number; i++){  //遍历数组输出
        printf("%d:%d\n", i, count[i]);
    }

    return 0;
}
举报

相关推荐

0 条评论