【2018.3.4】实验修正
1 #include<iostream> 2 #include<stdlib.h> 3 using namespace std; 4 int sort(int *score,int count); //函数间传递数组:int score[]/int *score 5 int ave(int *score,int count); 6 int main() 7 { 8 int count; 9 cout << "请输入成绩个数:"; 10 cin >> count; 11 cout << endl; 12 if(count<=0) 13 cout << "error!"; 14 else 15 { 16 int *point; 17 point=new int[count]; 18 if(point==NULL) 19 { 20 cout << "动态分配内存空间失败!"; 21 exit(0); 22 return NULL; 23 } 24 cout << "请输入成绩:"; 25 for(int i=0;i<count;i++) //注意输入和输出! 26 cin >> point[i]; 27 cout << endl; 28 int average=ave(point,count); 29 cout << "平均分为:"<<average<<endl; 30 sort(point,count); 31 cout << "排序后成绩为:"; 32 for(int i=0;i<count;i++,point++) 33 cout << *point<<" "; 34 } 35 return 0; 36 } 37 38 39 int sort(int *score,int count) 40 { 41 int i,j,tem; 42 for(i=0;i<count;i++) 43 { 44 for(j=i+1;j<count;j++) 45 { 46 if(score[j]>score[i]) 47 { 48 tem=score[j]; 49 score[j]=score[i]; 50 score[i]=tem; 51 } 52 } 53 } 54 } 55 56 int ave(int *score,int count) 57 { 58 int i,sum=0; 59 float ave; 60 for(i=0;i<count;i++) 61 { 62 sum+=score[i]; 63 } 64 ave=sum/count; 65 return ave; 66 }
总算改对了一个。
1 #include<iostream> 2 #include<stdlib.h> 3 using namespace std; 4 int* space(int count); 5 int sort(int *score,int count); 6 int ave(int *socre,int count); 7 int main() 8 { 9 int count; 10 cout << "请输入成绩个数:"; 11 cin >> count; 12 cout << endl; 13 if(count<=0) 14 cout << "error!"; 15 else 16 { 17 int point[count]; 18 *point=*space(count); 19 cout << "请输入成绩:"; 20 for(int i=0;i<count;i++) 21 cin >> point[i]; 22 cout << endl; 23 int average=ave(point,count); 24 cout << "平均分为:"<<average<<endl; 25 sort(point,count); 26 cout << "排序后成绩为:"; 27 for(int i=0;i<count;i++) 28 cout << point[i]<<" "; 29 } 30 return 0; 31 } 32 33 int *space(int count) 34 { 35 int *dyn; 36 dyn=new int [count]; 37 if(dyn==NULL) 38 { 39 cout << "动态分配内存空间失败!"; 40 exit(0); 41 return NULL; 42 } 43 return dyn; //返回空间地址 44 } 45 46 int sort(int *score,int count) 47 { 48 int i,j,tem; 49 for(i=0;i<count;i++) 50 { 51 for(j=i+1;j<count;j++) //注意排序方式! 52 { 53 if(score[j]>score[i]) 54 { 55 tem=score[j]; 56 score[j]=score[i]; 57 score[i]=tem; 58 } 59 } 60 } 61 } 62 63 int ave(int *score,int count) 64 { 65 int i,sum=0; 66 float ave; 67 for(i=0;i<count;i++) 68 { 69 sum+=score[i]; 70 } 71 ave=sum/count; 72 return ave; 73 }
1 //******************************************************** 2 //*程序作者:兔至 3 //*完成日期:2018年3月2日 4 //*章 节:第一章 5 //*题 号:习题4 6 //*题 目:学生成绩统计 7 // 从键盘输入一个班(全班最多不超过30人)学生某门课 8 // 的成绩,当输入成绩为负值时,输入结束,分别实现下列功能: 9 // (1)统计不及格人数并打印不及格学生名单; 10 // (2)统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单; 11 // (3)统计各分数段的学生人数及所占的百分比。 12 // 注:将成绩分为六个分数段, 13 // 60分以下为第0段, 14 // 60~69为第1段, 15 // 70~79为第2段, 16 // 80~89为第3段, 17 // 90~99为第4段, 18 // 100分为第5段。 19 // 编程要求: 20 // (1).较好的用户输入输出提示信息 21 // (2).使用子函数来实现上述各个功能 22 // (3).最好不要使用全局变量 23 //******************************************************** 24 25 #include<iostream> 26 #include<string> 27 using namespace std; 28 struct score 29 { 30 string name; 31 float point; 32 }; 33 void fail(score Score[]); //结构数组在函数间的传递和普通数组相同 34 void exce(score Score[]); 35 void per(score Score[]); 36 int main() 37 { 38 score Score[30]; 39 int i; 40 char code; 41 for(i=0;Score[i].point >0;i++) //string类型下不可以用来判定,比如”!=“同时,此类型下也不会出现”\0“。 42 { 43 cout << "请输入学生姓名:"; 44 cin >> Score[i].name; 45 cout << endl; 46 cout << "请输入学生成绩:"; 47 cin >> Score[i].point; 48 cout << endl; 49 } 50 cout << endl; 51 cout << "A、统计不及格人数并打印不及格学生名单\nB、统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单\nC、统计各分数段的学生人数及所占的百分比\n请输入您想进行的操作代号:"; 52 cin >> code; 53 switch(code) 54 { 55 case('A'):fail(Score);break; 56 case('B'):exce(Score);break; 57 case('C'):per(Score);break; 58 } 59 cout << endl; 60 while(1) 61 { 62 cout << endl; 63 cout << "请问您还需要进行什么操作吗?(需要请输入“y”,不需要请输入“n”)"<<endl; 64 char ch; 65 cin >> ch; 66 if(ch == 'y') 67 { 68 cout << "请输入:"; 69 cin >> code; 70 switch(code) 71 { 72 case('A'):fail(Score);break; 73 case('B'):exce(Score);break; 74 case('C'):per(Score);break; 75 } 76 } 77 else 78 break; 79 } 80 return 0; 81 } 82 83 void fail(score Score[]) 84 { 85 int i,count=0; 86 cout << "不及格的学生为:"; 87 for(i=0;Score[i].point >0;i++) 88 { 89 if(Score[i].point<60) 90 { 91 count++; 92 cout << Score[i].name<<" "; 93 } 94 } 95 cout << endl; 96 cout << "不及格的人数为:"<<count; 97 } 98 99 void exce(score Score[]) 100 { 101 float ave; 102 int sum=0,count=0,i,Count=0; 103 for(i=0;Score[i].point>0;i++) 104 { 105 count++; 106 sum+=Score[i].point; 107 } 108 ave=sum/count; 109 cout << "成绩在平均分及其上的学生为:"; 110 for(i=0;Score[i].point>=0;i++) 111 { 112 if(Score[i].point>=ave) 113 { 114 cout << Score[i].name<<" "; 115 Count++; 116 } 117 } 118 cout << endl; 119 cout << "成绩在平均分及其上的学生人数为:"<<Count<<endl; 120 } 121 122 void per(score Score[]) 123 { 124 float count=0,count_0=0,count_1=0,count_2=0,count_3=0,count_4=0,count_5=0; 125 int i; 126 float per0,per1,per2,per3,per4,per5; 127 for(i=0;Score[i].point>0;i++) 128 { 129 count++; 130 if(Score[i].point<60) 131 count_0++; 132 else if(Score[i].point>=60&&Score[i].point<=69) 133 count_1++; 134 else if(Score[i].point>=70&&Score[i].point<=79) 135 count_2++; 136 else if(Score[i].point>=80&&Score[i].point<=89) 137 count_3++; 138 else if(Score[i].point>=90&&Score[i].point<=99) 139 count_4++; 140 else if(Score[i].point==100) 141 count_5++; 142 } 143 per0=100*count_0/count; //除法要尤其注意整型和浮点型,整型下求百分比为0. 144 per1=100*count_1/count; 145 per2=100*count_2/count; 146 per3=100*count_3/count; 147 per4=100*count_4/count; 148 per5=100*count_5/count; 149 cout << "各分数段的学生人数及所占的百分比:\n"; 150 cout << "第0段:" <<per0<<"%"<<endl; 151 cout << "第1段:" <<per1<<"%"<<endl; 152 cout << "第2段:" <<per2<<"%"<<endl; 153 cout << "第3段:" <<per3<<"%"<<endl; 154 cout << "第4段:" <<per4<<"%"<<endl; 155 cout << "第5段:" <<per5<<"%"<<endl; 156 }
挣扎了好几天,可算没bug了……
------------------
有为,有守,有趣。
------------------