本文目錄一覽:
- 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);
==================================
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/245119.html