C/PTA —— 14.结构体1(课外实践) 一.函数题 6-1 选队长 6-2 按等级统计学生成绩 6-3 学生成绩比高低 6-4 综合成绩 6-5 利用“选择排序算法“对结构体数组进行排序 6-6 结构体的最值 6-7 复数相乘运算 二.编程题
一.函数题
6-1 选队长
void showCaptain ( TeamMember team[ ] , int n)
{ TeamMember max; max = team[ 0 ] ; for ( int i = 1 ; i < n; i++ ) { if ( max. ability < team[ i] . ability) max = team[ i] ; } printf ( "%d %s %s %s %.2lf" , max. id, max. lastname, max. firstname, max. sex, max. ability) ;
}
6-2 按等级统计学生成绩
int set_grade ( struct student * p, int n)
{ int count = 0 ; for ( int i = 0 ; i < n; i++ ) { if ( p[ i] . score >= 85 && p[ i] . score <= 100 ) p[ i] . grade = 'A' ; if ( p[ i] . score >= 70 && p[ i] . score <= 84 ) p[ i] . grade = 'B' ; if ( p[ i] . score >= 60 && p[ i] . score <= 69 ) p[ i] . grade = 'C' ; if ( p[ i] . score >= 0 && p[ i] . score <= 59 ) { p[ i] . grade = 'D' ; count++ ; } } return count;
}
6-3 学生成绩比高低
int compareScore ( const struct Student * s1, const struct Student * s2)
{ if ( ( s1-> C + s1-> English) > ( s2-> C + s2-> English) ) return 1 ; if ( ( s1-> C + s1-> English) < ( s2-> C + s2-> English) ) return - 1 ; if ( ( s1-> C + s1-> English) == ( s2-> C + s2-> English) ) { if ( s1-> C > s2-> C) return 1 ; if ( s1-> C < s2-> C) return - 1 ; if ( s1-> C == s2-> C) return 0 ; }
}
6-4 综合成绩
double getAverage ( Applicant* a)
{ double sum = 0.0 ; sum = a-> computational * 1.0 * 0.4 + a-> humanistic * 1.0 * 0.5 + a-> logical * 1.0 * 0.3 + a-> presentation * 1.0 * 0.6 + a-> scientific * 1.0 * 0.8 ; return sum;
}
6-5 利用“选择排序算法“对结构体数组进行排序
int min_idx = p1-> score;
for ( p2 = p1 + 1 ; p2 < pData + n; p2++ )
{ if ( p2-> score > min_idx) { min_idx = p2-> score; p = p2; }
}
if ( min_idx != p1-> score)
{ num = p1-> num; score = p1-> score; p1-> num = p-> num; p1-> score = p-> score; p-> num = num; p-> score = score;
}
6-6 结构体的最值
ST* MaxST ( ST d[ ] , int n, int k)
{ ST* max = NULL ; for ( int i = 0 ; i < n; i++ ) { if ( d[ i] . gender == k && ( max == NULL || max-> scored < d[ i] . scored) ) { max = & d[ i] ; } } return max;
}
6-7 复数相乘运算
PLEX multi ( PLEX a, PLEX b)
{ PLEX product; product. re = a. re * b. re - a. im * b. im; product. im = a. re * b. im + a. im * b. re; return product;
}
二.编程题
7-5 一帮一
# include <stdio.h>
# include <string.h> struct student
{ int a; char name[ 20 ] ;
} ; struct student1
{ int b; char name1[ 20 ] ;
} ; int main ( )
{ struct student s1[ 50 ] ; struct student1 s2[ 50 ] ; struct student1 s3[ 50 ] ; int i, n, j = 0 , t = 0 , c, d; scanf ( "%d" , & n) ; for ( i = 0 ; i < n; i++ ) { scanf ( "%d %s" , & s1[ i] . a, s1[ i] . name) ; } for ( i = 0 ; i < n; i++ ) { if ( s1[ i] . a == 1 ) { s2[ j] . b = i; strcpy ( s2[ j] . name1, s1[ i] . name) ; j++ ; } if ( s1[ i] . a == 0 ) { s3[ t] . b = i; strcpy ( s3[ t] . name1, s1[ i] . name) ; t++ ; } } c = n / 2 - 1 , d = n / 2 - 1 ; j = 0 , t = 0 ; for ( i = 0 ; i < n / 2 ; i++ ) { if ( s3[ j] . b < s2[ t] . b) { printf ( "%s %s\n" , s3[ j] . name1, s2[ c] . name1) ; j++ ; c-- ; } else { printf ( "%s %s\n" , s2[ t] . name1, s3[ d] . name1) ; t++ ; d-- ; } } return 0 ;
}
7-6 考试座位号
# include <stdio.h>
struct student
{ char number[ 17 ] ; int s; int k;
} ; int main ( )
{ int N = 0 ; scanf ( "%d" , & N) ; struct student stu[ 1001 ] = { 0 } ; for ( int i = 0 ; i < N; i++ ) { scanf ( "%s %d %d" , stu[ i] . number, & stu[ i] . s, & stu[ i] . k) ; } int n = 0 ; scanf ( "%d" , & n) ; int ret = 0 ; for ( int i = 0 ; i < n; i++ ) { scanf ( "%d" , & ret) ; int j = 0 ; for ( j = 0 ; j < N; j++ ) { if ( ret == stu[ j] . s) { printf ( "%s %d\n" , stu[ j] . number, stu[ j] . k) ; } } } return 0 ;
}