您的位置:

c语言一维数组结束,c语言能返回一维数组嘛

本文目录一览:

C语言一维数组

main()

{int i,x[10]={2,3,0,3,0,2,3,2,1,3},y[4]={0}; //值定义 x0-x9的值2,3,0,3,0,2,3,2,1,3 y0-y3的值均为0

for(i=0;i10;i++) //循环体开始

y[x[i]]++; //循环体内容

//因为没有大括号,所以循环体结束

printf("%d\n",y[3]);

}

运行10次,y3=4 x[3]=3 然后+1

C语言在输入一维数组时,如果想要用回车停止输入,那么这种写法对吗?

这还真有点小学问,如果是字符数组,if(a[i]!='\n') break;就可以了,但得把不需要的那个'\n'从数组中用a[i]='\0';抹掉并添加了结束符。要是数字数组,比如整数数组呢,上面方法就不凑效了。用下面代码可实现——

C语言 好几个一维的数组 如何结束输入

当读到EOF时结束

Windows采用Ctrl+Z产生一个EOF,*nix采用Ctrl+D产生一个EOF

文件末尾本来就是一个EOF

c语言一维数组

#includestdio.h

#includemalloc.h

#includestring.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){  //grade0结束

        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 != NULL;tmp = 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 != NULL;tmp = tmp-next){

        sum+=tmp-grade;

    }//统计总分

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

    class tmpClass = newClass();

    for(tmp=c-list;tmp != 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 != NULL;tmp = 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!=NULL;tmp = tmp-next){

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

    }

    puts("");

}

代码有点长....

C语言如何判定一个数组结束了。函数参数传过来一个一位整型数组的启示位置。。

C语言的数组类型没有专用的方法,不能直接判断长度。

可以通过sizeof()运算符计算长度!

sizeof(数组名)/sizeof(类型)

---------------------------------------------------

EXP:

int array[18]; char ch[20];

sizeof(array)/sizeof(int);

sizeof(ch)/sizeof(char);

==================================