当前位置: 首页 > news >正文

Chapter11

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);  // 输出平均分前5名的学生  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);  }  
}  // 输出平均分前5名的学生  
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];  
}  // 将日期转换为从某个固定日期(如1970年1月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; // 1970年1月1日是第0天,所以要减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; // 闰年2月有29天,所以加1  } else {  return daysBeforeMonth[month];  }  
}  // 计算给定日期是星期几(0代表星期日,1代表星期一,...,6代表星期六)  
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; // 因为元旦是第0天,所以要减1  // 计算星期几(注意:这里firstDayOfYear是从1开始的,而我们的计算是从0开始的,所以要减1)  int weekDay = (totalDays + (firstDayOfYear - 1)) % 7;  if (weekDay < 0) {  weekDay += 7; // 处理负数情况(虽然在这个特定情况下不会发生,但为了代码的健壮性还是加上)  }  // 返回结果(0-6代表星期日到星期六)  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);  // 输入该年元旦是星期几(1-7分别代表星期一到星期日)  printf("请输入该年元旦是星期几(1代表星期一,7代表星期日): ");  scanf("%d", &firstDayOfYear);  if (firstDayOfYear < 1 || firstDayOfYear > 7) {  printf("输入错误!元旦的星期几应在1到7之间。\n");  return 1;  }  // 注意:用户可能输入7代表星期日,但我们的计算是基于0代表星期日的,所以需要进行转换  if (firstDayOfYear == 7) {  firstDayOfYear = 0;  }  // 计算并输出该日期是星期几  int result = week(date, firstDayOfYear);  printWeekDay(result);  return 0;  
}
http://www.lryc.cn/news/463571.html

相关文章:

  • LLAMA2入门(一)-----预训练
  • 使用poi-tl动态写入目录更新问题解决
  • OpenCV高级图形用户界面(9)更改指定窗口的位置函数moveWindow()的使用
  • 华山论剑之Rust的Trait
  • AI 编译器学习笔记之七五 -- pdb 使用方法
  • 15分钟学Go 第8天:控制结构 - 循环
  • 后端接收参数的几种常用注解
  • 如何使用docker在linux中配置C++环境
  • darknet_ros 使用教程
  • 第九课 Vue中的v-bind指令拓展
  • DOIP协议介绍2-Diagnostic power mode information request (0x4003)消息
  • Eclipse 软件:配置 JDBC、连接 MySQL 数据库、导入 jar 包
  • 二叉树中的最长交错路径
  • 高校企业数据可视化平台功能介绍/特色功能
  • RHCE第三次笔记SSH
  • JAVA基础-包装类
  • 复合逻辑运算与复合逻辑门
  • 工厂模式~
  • Elasticsearch基本使用及介绍
  • 10. PH47代码框架文件组织
  • LabVIEW提高开发效率技巧----VI继承与重载
  • 4.8 大数据发展趋势
  • 【无标题】react组件封装
  • git+cmake将Open3D配置到visual studio
  • ArcGIS-CityEngine 2024-新手小白也能试用+入门可视化vga编程--第一篇
  • IntelliJ IDEA 快捷键大全(也适用全家桶其他编辑器)
  • 基于SSM高校普法系统的设计
  • CDN加速流程分享
  • 全网爆火的排队免单模式究竟是如何运作?
  • Excel:vba实现批量修改文件名