求助C语言问题 急
实践练习2:数组与结构体编程(成绩统计)学生成绩统计(一维数组)从键盘输入一个班(全班最多不超过30人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别实现下列功能:...
实践练习2:数组与结构体编程(成绩统计)
学生成绩统计(一维数组)从键盘输入一个班(全班最多不超过30人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别实现下列功能:
(1)统计不及格人数并打印不及格学生名单;
(2)统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单;
(3)以直方图方式统计各分数段的学生人数及所占的百分比。形式如下:
分段 人数图形
<60 3(10%)***
60-69 8(…)********
70-79 7(…)*******
80-89 8(…)********
>=90 4(…)****
(4)将实践练习2中的第1题利用函数的思想进行修改。要求函数参数中包含数组名。 展开
学生成绩统计(一维数组)从键盘输入一个班(全班最多不超过30人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别实现下列功能:
(1)统计不及格人数并打印不及格学生名单;
(2)统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单;
(3)以直方图方式统计各分数段的学生人数及所占的百分比。形式如下:
分段 人数图形
<60 3(10%)***
60-69 8(…)********
70-79 7(…)*******
80-89 8(…)********
>=90 4(…)****
(4)将实践练习2中的第1题利用函数的思想进行修改。要求函数参数中包含数组名。 展开
2个回答
推荐于2016-03-31
展开全部
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 | // 某班级学生C语言第一次正考的成绩存于数据文件score.dat中,记录了学生学号、姓名和考试成绩,bk.dat文件中记录了补考学生的学号、姓名和补考成绩,编写程序以链式存储结构实现以下要求: // 1、对该班级按成绩降序排序并统计成绩平均分及每个分数段的人数,结果写入到result.dat中。 // 2、再根据补考成绩修改原成绩,修改成绩后仍按成绩降序写在result.dat的后面。成绩修改原则: // 1)补考成绩大于等于60,原成绩以60分记;2)补考成绩小于60,取两次成绩中最高值记。 #include<stdio.h> #include<stdlib.h> #include<string.h> #define MAX 50 typedef struct { int xh; //学生学号、姓名和考试成绩 char na[MAX]; float cj; }datatype; typedef struct Node{ datatype data; struct Node* next; } Seqlist; void print(Seqlist* l); void initList(Seqlist *lp); /*置一个空表*/ void createList(Seqlist *lp, char strname[]); /*建立成绩顺序表 */ void save(Seqlist *lp, char strname[]); /*保存学生顺序表到指定文件*/ void sort_cj(Seqlist *lp); /*降序排序*/ void average(Seqlist *lp); /*算平均分并写入文件 */ void bandscore(Seqlist *lp); /*划分分数段及写入 */ void changescore(Seqlist *lp, Seqlist *bk); /*修改成绩*/ int main() { Seqlist lp, bk; initList(&lp); initList(&bk); createList(&lp, "score.dat" ); createList(&bk, "bk.dat" ); sort_cj(&lp); save(&lp, "result.dat" ); average(&lp); bandscore(&lp); changescore(&lp, &bk); sort_cj(&lp); save(&lp, "result.dat" ); return 0; } /*置一个空表*/ void initList(Seqlist *lp) { lp->next = 0; lp->data.xh =0; lp->data.na[0]= '\0' ; lp->data.cj = 0; } void print(Seqlist*l){ Seqlist* p = l->next; while (p) { printf ( "%d %s %f\n" , p->data.xh, p->data.na,p->data.cj); p = p->next; } } /*建立成绩顺序表 */ void createList(Seqlist *lp, char strname[]) { FILE *fp; int xh; float cj; Seqlist*p,*tail=lp; if ((fp = fopen (strname, "rb" )) == NULL) { printf ( "file open error\r\n" ); exit (0); } while (! feof (fp)) { p = (Seqlist*) malloc ( sizeof (Seqlist)); fscanf (fp, "%d%s%f" , &p->data.xh, p->data.na, &p->data.cj); tail->next = p; tail = p; }tail->next = NULL; print(lp); fclose (fp); } /*降序排序*/ void sort_cj(Seqlist* head) { Seqlist* tail = NULL; while (tail != head->next) { Seqlist* pre = head; Seqlist* cur = pre->next; while (cur != tail && cur->next != tail) { if (cur->data.cj< cur->next->data.cj) { //交换当前节点和后一个节点 pre->next = cur->next; cur->next = cur->next->next; pre->next->next = cur; } pre = pre->next; cur = pre->next; } tail = cur; } } /*保存学生顺序表到文件(追加)*/ void save(Seqlist *l, char strname[]) { FILE *fp; Seqlist *lp= l->next; int i; if ((fp = fopen (strname, "ab" )) == NULL) { printf ( "file open error\r\n" ); exit (0); } while (lp){ fprintf (fp, "%d %s %.2f\r\n" , lp->data.xh, lp->data.na, lp->data.cj); lp = lp->next; } fprintf (fp, "\r\n" ); fclose (fp); } /*算平均分并写入文件 */ void average(Seqlist *l) { FILE *fp; int i,num=0; Seqlist *lp = l->next; float s = 0, a; while (lp){ num++; s += lp->data.cj; lp = lp->next; } if (num) a = s / num; if ((fp = fopen ( "result.dat" , "ab" )) == NULL){ printf ( "file open error\r\n" ); exit (0); } fprintf (fp, "平均分为%.2f\r\n" , a); fprintf (fp, "\r\n" ); fclose (fp); } /*分数段及写入 */ void bandscore(Seqlist *l) { FILE *fp; if ((fp = fopen ( "result.dat" , "ab" )) == NULL){ printf ( "file open error\r\n" ); exit (0); } Seqlist*lp = l->next; int i, a = 0, q = 0, w = 0, e = 0, r = 0, t = 0, y = 0; while (lp){ a = lp->data.cj / 10; lp = lp->next; switch (a) { case 10:q++; break ; case 9:w++; break ; case 8:e++; break ; case 7:r++; break ; case 6:t++; break ; default :y++; break ; } } fprintf (fp, "成绩为100有%d人\r\n" , q); fprintf (fp, "成绩为90~99有%d人\r\n" , w); fprintf (fp, "成绩为80~89有%d人\r\n" , e); fprintf (fp, "成绩为70~79有%d人\r\n" , r); fprintf (fp, "成绩为60~69有%d人\r\n" , t); fprintf (fp, "不及格的有%d人\r\n" , y); fprintf (fp, "\r\n" ); fclose (fp); } /*修改成绩*/ void changescore(Seqlist *lp, Seqlist *bk) { int i, j; Seqlist*la = lp->next, *lb = bk->next; while (lb){ while (la){ if (lb->data.xh == la->data.xh) { if (lb->data.cj >= 60) la->data.cj = 60; else if (lb->data.cj > la->data.cj) la->data.cj = lb->data.cj; break ; } la = la->next; } lb = lb->next; } print(lp); } |
展开全部
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | //#include "stdafx.h"//vc++6.0加上这一行. #include "stdio.h" struct stu{ char name[20]; int score; }; void myfun( struct stu *p, int n){ int i,nopass,x[30]; for (nopass=i=0;i<n;i++) if (p[i].score<60) x[nopass++]=i; printf ( "\nThere were %d didn't pass the exam, As follows:\n" ,nopass); for (i=0;i<nopass; printf ( "%s " ,p[x[i++]].name)); } int main( void ){ struct stu array[30]; int i,j,sum,a[5]={0}; float average; char f[][6]={ " <60" , "60-69" , "70-79" , "80-89" , " >=90" }; char *s= "******************************" ; printf ( "Please input data...\n" ); for (sum=i=0;i<30;i++){ scanf ( "%s%d" ,array[i].name,&array[i].score); if (array[i].score<0) break ; sum+=array[i].score; } myfun(array,i); printf ( "\n\nAbove average(containing) is as follows:\n" ); average=( float )sum/i; for (j=0;j<i;j++){ if (average<=array[j].score) printf ( "%s " ,array[j].name); if (array[j].score<60) a[0]++; else if (60<=array[j].score && array[j].score<70) a[1]++; else if (70<=array[j].score && array[j].score<80) a[2]++; else if (80<=array[j].score && array[j].score<90) a[3]++; else a[4]++; } printf ( "\n\n" ); for (j=0;j<5;j++) printf ( "%s %d(%.1f%%)%*.*s\n" ,f[j],a[j],(a[j]*100.0)/i,1,a[j],s); printf ( "\n" ); return 0; } |
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询