首页 > 代码库 > 第八次作业

第八次作业

三、实验总结

1.a[N]是从a[0]开始的不是从a[1]开始的;

2.输入一串数字时用char型变量来读取,不用int;

3.两个=是等于一个=是赋值。

 

二、知识点总结

1.数组应先定义后使用: 数据类型 数组名【常量表达式】

数组中的每一种元素属于同一数据类型,元素在内存中是连续以此排列的;

只能逐个引用数组元素,不能一次引用整个数组;

2.不允许动态定义数组,数组一但创建,便不能改变长度大小,最好使用宏定义,

即#define N 10

      int a[N]

3.数组里的元素 如果不赋初值,默认是随机数,然而只要有部分赋了初值,其他部分就会默认是0。

4.当全部数组元素赋初值时,可以不定制数组长度,系统会默认给出。

5.下标是从零开始的,而非是一;如果要使用下标是1~10,应定义数组长度为11,使下标为零的数组元素被系统默认为零。

6.数组变量本身(数组名)不能被复制,它只代表一个地址。

7.C语言不会对数组下标做越界检查,所以元素数应该小于等于数组长度。

8.对数组数据的访问一定是跟循环结构分不开的,一般情况下,循环变量的值随数组元素的下标变化。

 

 

 

 

一、实验内容

1.输入若干名学生的成绩(输入人数或用负数结束均可),求其平均分,最高分和最低分,并指出最高分和最低分的学生(给出下标即可),输入一个成绩,说明是第几个学生的成绩。

#include<stdio.h>
#define N 100
int main()
{
    int score[N],n,i,sum,max,min,maxindex[N],minindex[N],grade,grades[N],a=1,b=1,c;
    double average;
    printf("请输入学生的数量。\n");
    scanf("%d",&n);
    sum=0;
    for(i=1;i<=n;i++)
    {
        printf("请输入第%d个学生的成绩。\n",i);
        scanf("%d",&score[i]);
        sum=sum+score[i];
    }
    average=(double)sum/n;
    printf("平均成绩为%.2lf\n",average);
    max=score[1];
    min=score[1];
    for(i=1;i<=n;i++)
    {
        if(score[i]==max)
        {
            maxindex[a++]=i;
        }
        else if(score[i]>max)
        {
            max=score[i];
            a=1;
            maxindex[a++]=i;
        }
        if(score[i]==min)
        {
            minindex[b++]=i;
        }
        else if(score[i]<min)
        {
            min=score[i];
            b=1;
            minindex[b++]=i;
        }
    }
    printf("成绩最高的同学有:");
    for(i=1;i<a;i++)
    {
        printf("第%d名学生  ",maxindex[i]);
    }
    printf("\n");
    printf("成绩最低的同学有:");
    for(i=1;i<b;i++)
    {
        printf("第%d名学生  ",minindex[i]);
    }
    printf("\n");
    printf("请输入你想查找的成绩。\n");
    scanf("%d",&grade);
    c=1;
    for(i=1;i<=n;i++)
    {
        if(score[i]==grade)
        {
            grades[c]=i;
            c++;
        }
    }
    if(c==1)
    printf("你所查找的成绩不存在。\n"); 
    else
    {
        printf("符合你所查找成绩的学生有:");
        for(i=1;i<c;i++)
        printf("第%d名学生  ",grades[i]);
        printf("\n总共有%d名学生。",c-1);
    }
    return 0;
}

 技术分享

3.用数组实现火柴棍等式

#include<stdio.h>
int main()
{
    int a,b,c,huochai[10]={6,2,5,5,4,5,6,3,7,6};
    for(a=0;a<=9;a++)
    for(b=0;b<=9;b++)
    {
        c=a+b;
        if(c>9)
        break;
        if(huochai[a]+huochai[b]+huochai[c]==12)
        {
            printf("%d+%d=%d\n",a,b,c);
        }
    }
    return 0;
}

技术分享

2.现有一个有序正整数数组(从小到大排序),输入一个数,插入到数组中,要求插入后的数组仍然有序。对插入到最前、最后、中间位置三种情况进行验证。

技术分享

#include<stdio.h>
#define N 11
int main()
{
    int numbers[N]={1,2,3,4,5,6,7,8,9,10},number,i,n,a=1;
    printf("请输入你想插入的数。\n");
    scanf("%d",&number);
    for(i=0;i<N-1;i++)
    {   
        if(number<=numbers[i])
        {   a=0;
            for(n=N-2;n>=i;n--)
            {
                numbers[n+1]=numbers[n];
              
            }
            numbers[i]=number;
            break;
        }
    }
    if(a)
    {
        numbers[N-1]=number;
    }
    for(i=0;i<N;i++)
    {
        printf("%d ",numbers[i]);
    }
    return 0;
}

第八次作业