虚拟机0708课程笔记及作业

练习:

使用循环来解决鸡兔同笼问题:

今有雉(鸡)兔同笼,上有三十五头,下有九十四足,问雉兔各几何?

#include <stdio.h>
int main(int argc, char const *  argv[])
{
    for(int i=0;i<=35;i++)
    {
        for(int j=0;j<=35;j++)
        {
            if(i+j==35 && i*2+j*4==94)
            {
                printf("鸡有%d只,兔有%d只\n",i,j);
            }
        }
    }
    return 0;
}

一、数组概述

1.1引入目的

对于之前所学习的内容,都是对单个数据进行操作,只需要定义单个变量,然后对该变量进行处理即可。

但是,如果对于庞大的数据而言,需要定义很多变量来解决,为了批量处理数据,我们引入了数组

所谓数组,就是多个变量的集合。

1.2数组的概念及定义

1>定义:

数组是连续存储多个相同数据类型的变量的集合,数组属于构造数据类型

2>注意:

        1、连续存储,说明这多个变量的地址是连续的

        2、相同数据类型,说明同一个数组中的每个变量的数据类型都是一样的

        3、变量的集合:说明数组定义时不能为空

3>定义格式:

数据类型  数组名[常量];

        1、数据类型:可以是基本数据类型,也可以是构造数据类型、指针类型或者空类型

        2、数组名:标识符,要符合标识符的命名规则

                1) 只能由字母、数字、下划线组成

                2) 不能数字开头

                3) 不能使用关键字

                4) 严格区分大小写

                5) 做到见名知意

        3、中括号:表示这是数组的标识,正在定义一个数组

        4、常量:表示定义的数组长度,或者说是定义的变量的个数

                1) 不能为0

                2) 不能为小数

                3) 不能空着

                5、举个例子: int score[40];

                //上面的语句,定义了一个长度为40的整形数组,数组名为score

                //上面的语句,连续定义了40个整形变量

                //这些变量分别是:score[0]、score[1]、score[2]、....、score[37]、score[38]、score[39]

                //定义数组时,中括号中的数字表示的是数组的长度

                //使用数组元素时,中括号中的数字表示的是该变量在数组中的编号或者说是下标

                //第几个变量和他的下标相差1,原因是,下标是从0开始,到数组长度-1 -----> [0,N-1]

                //数组下标的最小下界为0, 最大上界为 N-1,其余的下标,都属于数组下标越界

                //一个长度为N的数组中,没有下标为N的数组元素

数组的定义

#include<stdio.h>
int main(int argc,const char *argv[])
{
    int arr[5];
    char brr[10];
    double crr[100];
    printf("%ld",sizeof(3.5));
    printf("arr[0]=%d, brr[0]=%c, crr[0]=%lf\n", \
            arr[0],brr[0],crr[0]);
    return 0;
}

4>数组的初始化:

所谓初始化,就是在给变量申请空间时,顺便给定初始值

初始化时,用一对花括号将元素的值包裹起来,多个值之间使用逗号隔开

对于数组的初始化而言,有三种方式

        1、全部初始化:数组的长度为多少,就初始化几个元素的值

        int arr[5] = {520,           1415,          666,           999,        1234};

                          arr[0]          arr[1]          arr[2]         arr[3]         arr[4]

        2、部分初始化:初始化元素的个数,小于数组的长度,此时,默认从前面元素进行初始化,没有初始化的元素用0补齐

        int arr[5] = {520,         1415,        666};        0         0

                          arr[0]        arr[1]       arr[2]      arr[3]     arr[4]

        3、特殊初始化:在定义数组并初始化时,可以不用给定数组的长度,数组的长度由初始化元素个数而定

        int arr[] = {520,          1415,          666,          999,          1234};

                        arr[0]         arr[1]          arr[2]          arr[3]          arr[4]

示例:

#include<stdio.h>
int main(int argc,const char *argv[])
{
    int drr[5]={1,2,3,4,5};
    int err[5]={520,1314,666};
    int frr[5]={7,8,9,1,2};
    printf("sizeof(frr)=%ld\n",sizeof(frr));
    printf("len of frr=%ld\n",sizeof(frr)/4);
    printf("len of frr=%ld\n",sizeof(frr)/sizeof(frr[0]));
    return 0;
}

运行结果:

1.3对数组元素的常规操作

1>输入输出

所谓对数组进行输入输出,其实就是对任意一个元素进行重复性输入输出,重复性的动作我们使用循环解决

注意:C语言不允许对除字符数组外的其他数组整体进行输入输出,只能找到数组元素,对单个元素进行操作

2>求和值、均值

所谓求和值,就是将所有任意值进行累加,需要定义一个变量存储总和,但是要求,在使用之前,必须清零 所谓均值,就是将数据总和除以总个数,均值不需要循环求

3>求最值

套路:将数组中的第一个先设置成当前的最值,然后拿着当前的最值与数组中的任意一个元素进行比较,如果比较过程中,不满足条件,则更新最值,直到所有数据都跟最值比较一遍后,得到最值

4>查找

存在性查找:当数组中出现要查找的数据时,立即结束本次查找

统计性查找:将数组全部元素进行遍历一遍,统计出要查找数据的个数

示例:

#include <stdio.h>
#define MAX 10
int main(int argc, char const *  argv[])
{
    int score[MAX]={0};
        for(int i=0;i<MAX;i++)
        {
        printf("请输入第%d个学生的成绩:",i+1);
        scanf("%d",&score[i]);
        }
    printf("数组中的元素分别是:");
    for(int i=0;i<MAX;i++)
    {
        printf("%d\t",score[i]);
    }
    putchar(10);


    int sum=0;
    double avg=0;
    for(int i=0;i<MAX;i++)
    {
        sum+=score[i];
    }
    avg=1.0*sum/MAX;
    printf("sum=%d, avg=%lf\n",sum,avg);


    int max=0;
    int maxi=0;
    max=score[0];
    maxi=0;
    for(int i=0;i<MAX;i++)
    {
        if(max<score[i])
        {
            max=score[i];
            maxi=i;
        }
    }
    printf("当前数组的最大值为:%d,在数组的第%d个位置\n",max,maxi+1);


    //查找
    int search=0;
    int i=0;
    printf("请输入您要查找的值:");
    scanf("%d",&search);
    for(i=0;i<MAX;i++)
    {
        if(search==score[i])
        {
            break;
        }
    }
    if(i==MAX)
    {
        printf("查找失败\n");
    }
    else
    {
        printf("您要查找的值,存在于数组中\n");
    }

    int count=0;
    for(int i=0;i<MAX;i++)
    {
        if(search==score[i])
        {
            count++;
        }
    }
    if(count==0)
    {
        printf("查找失败\n");
    }
    else
    {
        printf("查找成功,您要查找的值一共出现%d次\n",count);
    }
    return 0;
}

运行结果:

  • 22
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值