c语言一维数组定义?

Python058

c语言一维数组定义?,第1张

数组包含给定类型的一些对象,并将这些对象依次存储在连续的内存空间中。每个独立的对象被称为数组元素(element)。元素的类型可以是任何对象类型,但函数类型或不完整类型不能作为数组元素。

数组本身也是一个对象,其类型由它的元素类型延伸而来。更具体地说,数组的类型由元素的类型和数量所决定。

如果一个数组的元素是 T 类型,那么该数组就称为“T 数组”。例如,如果元素类型为 int,那么该数组的类型就是“int 数组”。然而,int 数组类型是不完整的类型,除非指定了数组元素的数量。如果一个 int 数组有 16 个元素,那么它就是一个完整的对象类型,即“16 个 int 元素数组”。

数组的定义决定了数组名称、元素类型以及元素个数。没有显式初始化操作的数组定义,其语法如下:

类型 名称[元素数量];

C语言程序如下:

#include <stdio.h>

void fun(int a[],int n,int *k)

{

int i,maxxr,j

maxxr=a[0]

for(i=0i<ni++)

{

if(maxxr<a[i])

{

maxxr=a[i]

}

}

for(i=0i<ni++)

{

if(maxxr==a[i]){

j=i

break

}

}

*k=j

}

int main(void)

{

int a[10]={ 876,675,896,101,301,401,980,431,451,777},k

fun(a, 10, &k)

printf("%d,%d", k, a[k])

}

扩展资料:

思路:

1、先定义数组(其数组长度取最大值,题目要求为10),然后通过for循环给数组一个个赋值,即可得到一个数组;

2、找数组的最大值,这一步是最关键的一步,由于所输入的值不确定那个是最大值,故可以先设置另一个一个变量(index)来存储最大值变量的下标。

3、紧接着继续在数组里for循环,逐一跟下标为index的值相比较,如果比下标为index的值大,这时候就将两者中数值大的下标赋值给index。

4、按要求输出。

#include<stdio.h>

#include<malloc.h>

#include<string.h>

typedef char* string   //字符串

//学生结构体

typedef struct Student{

    char    name[16]   //姓名

    int     id         //学号

    float   grade      //成绩

    struct Student *next//下一个学生节点

}Student,*student

//班级结构体

typedef struct Class{

    student list   //学生列表

    int     num    //学生人数

}Class,*class

//创建一个新班级

class newClass()

//销毁一个班级

void destroyClass(class c)

//创建一个新学生

student newStudent(string name,int id,float grade)

//向班级中加入一个学生

void append(class c,student stu)

//统计不及格人数,并打印名单

void showNotPass(class c)

//统计全班平均分及以上的学生人数并打印名单

void showGreaterThanAvg(class c)

//统计各分数段的学生人数及所占百分比

void showGradeRange(class c)

//输出最高分及学号

void showFirst(class c)

//输出班里的所有成员

void output(class c)

int main(){

    char    name[16]

    int     id

    float   grade

    class   myClass = newClass()   //创建一个班级

    printf("输入学生信息\n")

    puts("姓名\t学号\t成绩")

    while(~scanf("%s%d%f",name,&id,&grade) && grade >= 0){  //grade<0结束

        append(myClass,newStudent(name,id,grade))  //向班级中加入一名新学生

    }

    //不及格信息

    showNotPass(myClass)

    //超过平均分的信息

    showGreaterThanAvg(myClass)

    //区间信息

    showGradeRange(myClass)

    //第一名

    showFirst(myClass)

    return 0

}

//创建一个新班级

class newClass(){

    class tmp = (class)malloc(sizeof(Class))

    tmp->num = 0

    tmp->list = NULL

    return tmp

}

//销毁一个班级

void destroyClass(class c){

    if(c == NULL) return

    student list = c->list

    student next = NULL

    while(list!=NULL){

        next = list->next

        free(list) //释放当前节点

        list = next

    }

    free(c)

    c = NULL

}

//创建一个新学生

student newStudent(string name,int id,float grade){

    student tmp = (student)malloc(sizeof(Student))

    strcpy(tmp->name,name)

    tmp->id = id

    tmp->grade = grade

    tmp->next = NULL

    return tmp

}

//向班级中加入一个学生

void append(class c,student stu){

    if(c == NULL || stu == NULL) return

    stu->next = c->list

    c->list = stu

    c->num++

}

//统计不及格人数,并打印名单

void showNotPass(class c){

    if(c == NULL) return

    class tmpClass = newClass()

    student tmp = c->list

    for(tmp != NULLtmp = tmp->next){

        if(tmp->grade < 60){

            student tmpStu = (student)malloc(sizeof(Student))

            memcpy(tmpStu,tmp,sizeof(Student))

            append(tmpClass,tmpStu)

        }

    }

    printf("不及格人数:%d\n",tmpClass->num)

    output(tmpClass)

    destroyClass(tmpClass)

}

//统计全班平均分及以上的学生人数并打印名单

void showGreaterThanAvg(class c){

    if(c == NULL || c->num == 0){

        puts("班级没有人")

        return

    }

    student tmp = c->list

    float sum = 0

    for(tmp != NULLtmp = tmp->next){

        sum+=tmp->grade

    }//统计总分

    float avg = sum / c->num//平均分

    class tmpClass = newClass()

    for(tmp=c->listtmp != NULL tmp = tmp->next){

        if(tmp->grade >= avg){

            student tmpNode = (student)malloc(sizeof(Student)) //一个临时学生节点

            memcpy(tmpNode,tmp,sizeof(Student))

            append(tmpClass,tmpNode)

        }

    }

    printf("平均分及以上的学生人数为:%d\n",tmpClass->num)

    output(tmpClass)

    destroyClass(tmpClass)

}

//统计各分数段的学生人数及所占百分比

void showGradeRange(class c){

    if(c == NULL){

        puts("班级没有人")

        return

    }

    int i

    class container[10]

    for(i = 0 i < 10 i++){    //初始化分数段班级容器

        container[i] = newClass()

    }

    student tmp = c->list

    for( tmp != NULL tmp = tmp->next){

        int index = (int)tmp->grade % 10   //区间

        if(index > 9) index = 9    //大于90的算成一个区间

        student tmpStu = (student)malloc(sizeof(Student))

        memcpy(tmpStu,tmp,sizeof(Student))

        append(container[index],tmpStu)

    }

    for(i = 0 i < 10 i++){

        int num = container[i]->num

        printf("%d~%d的人数:%d,占比:%.6g%%\n",i*10,(i+1)*10,num,(float)(num*100)/c->num)

        destroyClass(container[i])

    }

    puts("")

}

//输出最高分及学号

void showFirst(class c){

    if(c == NULL || c->list == NULL) return

    student max = c->list

    student tmp = max->next

    for(tmp != NULLtmp = tmp->next){

        if(tmp->grade > max->grade) max = tmp

    }

    printf("最高分:%.2g,学号:%d\n",max->grade,max->id)

}

void output(class c){

    if(c == NULL) return

    puts("名单:")

    student tmp = c->list

    for(tmp!=NULLtmp = tmp->next){

        printf("%s\n",tmp->name)

    }

    puts("")

}

代码有点长....