本文目录一览:
- 1、C语言一维数组
- 2、C语言在输入一维数组时,如果想要用回车停止输入,那么这种写法对吗?
- 3、C语言 好几个一维的数组 如何结束输入
- 4、c语言一维数组
- 5、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);
==================================