11.3
#include <stdio.h>
#include <string.h> #define NUM_STUDENTS 40
#define NUM_SUBJECTS 3
typedef struct { int id; char name[50]; float scores[NUM_SUBJECTS]; float average;
} Student; void inputData(Student students[], int numStudents);
void calculateAverages(Student students[], int numStudents);
void printReport(Student students[], int numStudents);
void printTop5(Student students[], int numStudents); int main() { Student students[NUM_STUDENTS]; inputData(students, NUM_STUDENTS); calculateAverages(students, NUM_STUDENTS); printReport(students, NUM_STUDENTS); printTop5(students, NUM_STUDENTS); return 0;
}
void inputData(Student students[], int numStudents) { for (int i = 0; i < numStudents; i++) { printf("请输入第%d个学生的学号: ", i + 1); scanf("%d", &students[i].id); printf("请输入第%d个学生的姓名: ", i + 1); scanf("%s", students[i].name); for (int j = 0; j < NUM_SUBJECTS; j++) { printf("请输入第%d个学生的第%d门成绩: ", i + 1, j + 1); scanf("%f", &students[i].scores[j]); } }
}
void calculateAverages(Student students[], int numStudents) { for (int i = 0; i < numStudents; i++) { float sum = 0; for (int j = 0; j < NUM_SUBJECTS; j++) { sum += students[i].scores[j]; } students[i].average = sum / NUM_SUBJECTS; }
}
void printReport(Student students[], int numStudents) { printf("\n成绩报表:\n"); printf("学号\t姓名\t成绩1\t成绩2\t成绩3\t平均分\n"); for (int i = 0; i < numStudents; i++) { printf("%d\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n", students[i].id, students[i].name, students[i].scores[0], students[i].scores[1], students[i].scores[2], students[i].average); }
}
void printTop5(Student students[], int numStudents) { for (int i = 0; i < numStudents - 1; i++) { for (int j = 0; j < numStudents - i - 1; j++) { if (students[j].average < students[j + 1].average) { Student temp = students[j]; students[j] = students[j + 1]; students[j + 1] = temp; } } } printf("\n平均分前5名的学生:\n"); printf("姓名\t平均分\n"); for (int i = 0; i < 5 && i < numStudents; i++) { printf("%s\t%.2f\n", students[i].name, students[i].average); }
}
11.4
#include <stdio.h>
#include <string.h> #define MAX_LEN 30 struct member { char no[MAX_LEN]; char name[MAX_LEN]; char phone[20];
}; void strip_newline(char *str) { size_t len = strlen(str); if (len > 0 && str[len - 1] == '\n') { str[len - 1] = '\0'; }
} int main() { struct member members[4]; for (int i = 0; i < 4; i++) { printf("请输入第%d位员工的工作证号: ", i + 1); fgets(members[i].no, MAX_LEN, stdin); strip_newline(members[i].no); printf("请输入第%d位员工的姓名: ", i + 1); fgets(members[i].name, MAX_LEN, stdin); strip_newline(members[i].name); printf("请输入第%d位员工的电话号码: ", i + 1); fgets(members[i].phone, 20, stdin); strip_newline(members[i].phone); printf("\n"); } printf("工作证号\t姓名\t电话号码\n"); for (int j = 0; j < 4; j++) { printf("%29s\t", members[j].no); printf("%29s\t", members[j].name); printf("%s\t", members[j].phone); printf("\n"); } return 0;
}
11.5
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
typedef struct { int year; int month; int day;
} Date;
int is_leap_year(int year) { return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
int days_in_month(int year, int month) { static const int days_per_month[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; if (month == 2 && is_leap_year(year)) { return 29; } return days_per_month[month - 1];
}
long date_to_days(Date date) { long days = 0; for (int year = 1970; year < date.year; year++) { days += is_leap_year(year) ? 366 : 365; } for (int month = 1; month < date.month; month++) { days += days_in_month(date.year, month); } days += date.day - 1; return days;
}
long diff(Date date1, Date date2) { long days1 = date_to_days(date1); long days2 = date_to_days(date2); return abs(days1 - days2);
}
void input_date(Date *date) { printf("请输入年份: "); scanf("%d", &date->year); printf("请输入月份: "); scanf("%d", &date->month); printf("请输入日期: "); scanf("%d", &date->day);
} int main() { Date date1, date2; printf("请输入第一个日期:\n"); input_date(&date1); printf("请输入第二个日期:\n"); input_date(&date2); long days_diff = diff(date1, date2); printf("两个日期之间相隔的天数是: %ld\n", days_diff); return 0;
}
11.6
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct { int id; char name[50]; char gender; float score;
} Student; Student* findTopStudent(Student* students[], int n); int main() { int N; printf("请输入考生人数: "); scanf("%d", &N); Student* students[N]; for (int i = 0; i < N; i++) { students[i] = (Student*)malloc(sizeof(Student)); printf("请输入第%d位考生的信息:\n", i + 1); printf("考生号: "); scanf("%d", &students[i]->id); printf("姓名: "); scanf("%s", students[i]->name); printf("性别 (M/F): "); scanf(" %c", &students[i]->gender); printf("考试成绩: "); scanf("%f", &students[i]->score); } Student* topStudent = findTopStudent(students, N); printf("\n成绩最佳的考生信息如下:\n"); printf("考生号: %d\n", topStudent->id); printf("姓名: %s\n", topStudent->name); printf("性别: %c\n", topStudent->gender); printf("考试成绩: %.2f\n", topStudent->score); for (int i = 0; i < N; i++) { free(students[i]); } return 0;
}
Student* findTopStudent(Student* students[], int n) { Student* best = students[0]; for (int i = 1; i < n; i++) { if (students[i]->score > best->score) { best = students[i]; } } return best;
}
11.7
#include <stdio.h>
typedef struct { int year; int month; int day;
} Date;
int isLeapYear(int year) { return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
int daysInMonth(int year, int month) { static const int daysBeforeMonth[] = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 }; if (isLeapYear(year)) { return daysBeforeMonth[month] + 1; } else { return daysBeforeMonth[month]; }
}
int week(Date date, int firstDayOfYear) { int totalDays = 0; for (int year = 1900; year < date.year; year++) { totalDays += isLeapYear(year) ? 366 : 365; } for (int month = 1; month < date.month; month++) { totalDays += daysInMonth(date.year, month); } totalDays += date.day - 1; int weekDay = (totalDays + (firstDayOfYear - 1)) % 7; if (weekDay < 0) { weekDay += 7; } return weekDay;
}
void printWeekDay(int weekDay) { const char* weekDays[] = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" }; printf("%s\n", weekDays[weekDay]);
} int main() { Date date; int firstDayOfYear; printf("请输入年份: "); scanf("%d", &date.year); printf("请输入月份: "); scanf("%d", &date.month); printf("请输入日期: "); scanf("%d", &date.day); printf("请输入该年元旦是星期几(1代表星期一,7代表星期日): "); scanf("%d", &firstDayOfYear); if (firstDayOfYear < 1 || firstDayOfYear > 7) { printf("输入错误!元旦的星期几应在1到7之间。\n"); return 1; } if (firstDayOfYear == 7) { firstDayOfYear = 0; } int result = week(date, firstDayOfYear); printWeekDay(result); return 0;
}