C语言程序设计(王立柱)第五章答案 结构,联合,枚举

简介: 只有聪明人才能看见的摘要~( ̄▽ ̄~)~

 

1,2,3

//Date.h
#pragma once
#include<stdio.h>
#include<stdlib.h>
typedef struct {
  int year;
  int month;
  int day;
}Date;
const int NoLeapYear[] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
int LeapYear(int y) {
  return(y % 4 == 0 && y % 100 != 0) || (y % 400) == 0;
}
int DateToNum(Date dt) {
  int i;
  int ndays = 0;
  for (i = 1; i < dt.year; i++)
    ndays += LeapYear(i) ? 366 : 365;
  for (i = 1; i < dt.month; i++)
    ndays += NoLeapYear[i - 1];
  if (dt.month > 2 && LeapYear(dt.year))
    ndays++;
  ndays += dt.day;
  return ndays;
}
Date NumToDate(int ndays) {
  Date dt = { 0,0,0 };
  unsigned n;
  if (ndays <= 0) {
    printf("NumToDate: ndays illegal!\n");
    exit(1);
  }
  dt.year = 1;
  n = 365;
  while (ndays > n) {
    ndays -= n;
    dt.year++;
    n = LeapYear(dt.year) ? 366 : 365;
  }
  dt.month = 1;
  n = 31;
  while (ndays > n) {
    ndays -= n;
    dt.month++;
    n = NoLeapYear[dt.month - 1];
    if (dt.month == 2 && LeapYear(dt.year))
      n++;
  }
  dt.day = ndays;
  return dt;
}
//main.c
#include"Date.h"
#include<stdio.h>
int main() {
  printf("计算一个日期加上和减去一个数字所得到的日期:\n");
  printf("输入一个日期(年,月,日)和一个数字:\n");
  Date dt;
  int num;
  Date temp_d;
  int temp_n;
  scanf_s("%d%d%d%d", &dt.year, &dt.month, &dt.day, &num);
  temp_n = DateToNum(dt) - num;
  temp_d = NumToDate(temp_n);
  printf("减去值的日期:%d年%d月%d日\n", temp_d.year, temp_d.month, temp_d.day);
  temp_n = DateToNum(dt) + num;
  temp_d = NumToDate(temp_n);
  printf("加上值的日期:%d年%d月%d日\n", temp_d.year, temp_d.month, temp_d.day);
  Date dt2 = { 2010,1,1 };
  printf("输入一个日期以判断当天打鱼还是晒网(2011年以后):");
  Date dt3;
  int temp1, temp2, temp3;
  scanf_s("%d%d%d", &dt3.year, &dt3.month, &dt3.day);
  temp1 = DateToNum(dt2);
  temp2 = DateToNum(dt3);
  temp3 = temp2 - temp1;
  if (temp3 % 5 == 3 || temp3 % 5 == 4)
    printf("晒网");
  else
    printf("打鱼");
  return 0;
}

image.gif

4

//main.c
#include<stdio.h>
typedef struct {
  int id;
  double score;
}Student;
int IndexOfMax(const Student* p, int n);
void Selection_s(Student* p, int n);
void SwapByAddress(Student* p, int a, int b);
void OutputArray(const Student* p, int n);
int main() {
  Student s[10];
  int i;
  printf("请输入十个学生的学号(两位数)和平均成绩:\n");
  for (i = 0; i < 10; i++)
    scanf_s("%d%lf", &(s[i].id), &(s[i].score));
  //对于scanf函数,double输入使用%lf,float输入使用%f
  //只有printf才可以使用%f输出double和float,因为有自动类型提升
  Selection_s(s, 10);
  OutputArray(s, 10);
  return 0;
}
int IndexOfMax(const Student* p, int n) {
  int i;
  int max = 0;
  for (i = 1; i < n; i++) {
    if (p[max].score < p[i].score)
      max = i;
  }
  return max;
}
void Selection_s(Student* p, int n) {
  int max;
  while (n > 1) {
    max = IndexOfMax(p, n);
    SwapByAddress(p, max, n - 1);
    n--;
  }
}
void SwapByAddress(Student* p, int a, int b) {
  Student temp;
  temp = p[a];
  p[a] = p[b];
  p[b] = temp;
}
void OutputArray(const Student* p, int n) {
  int i;
  for (i = 0; i < n; i++)
  {
    printf("%d\t%f", p[i].id, p[i].score);
    printf("\n");
  }
}

image.gif

目录
相关文章
|
1月前
|
网络协议 编译器 Linux
【C语言】结构体内存对齐:热门面试话题
【C语言】结构体内存对齐:热门面试话题
|
13天前
|
存储 搜索推荐 算法
【数据结构】树型结构详解 + 堆的实现(c语言)(附源码)
本文介绍了树和二叉树的基本概念及结构,重点讲解了堆这一重要的数据结构。堆是一种特殊的完全二叉树,常用于实现优先队列和高效的排序算法(如堆排序)。文章详细描述了堆的性质、存储方式及其实现方法,包括插入、删除和取堆顶数据等操作的具体实现。通过这些内容,读者可以全面了解堆的原理和应用。
56 16
|
1月前
|
存储 编译器 C语言
c语言回顾-联合和枚举
c语言回顾-联合和枚举
28 4
|
1月前
|
存储 C语言 C++
深入C语言,发现多样的数据之枚举和联合体
深入C语言,发现多样的数据之枚举和联合体
深入C语言,发现多样的数据之枚举和联合体
|
1月前
|
编译器 C语言 Python
C语言结构
C语言结构
15 0
|
1月前
|
存储 安全 编译器
深入理解C语言中的枚举
深入理解C语言中的枚举
|
1月前
|
存储 编译器 C语言
【C语言】自定义类型:联合与枚举的简明概述
【C语言】自定义类型:联合与枚举的简明概述
|
2月前
|
存储 算法 C语言
数据结构基础详解(C语言): 二叉树的遍历_线索二叉树_树的存储结构_树与森林详解
本文从二叉树遍历入手,详细介绍了先序、中序和后序遍历方法,并探讨了如何构建二叉树及线索二叉树的概念。接着,文章讲解了树和森林的存储结构,特别是如何将树与森林转换为二叉树形式,以便利用二叉树的遍历方法。最后,讨论了树和森林的遍历算法,包括先根、后根和层次遍历。通过这些内容,读者可以全面了解二叉树及其相关概念。
|
2月前
|
存储 C语言
C语言程序设计核心详解 第十章:位运算和c语言文件操作详解_文件操作函数
本文详细介绍了C语言中的位运算和文件操作。位运算包括按位与、或、异或、取反、左移和右移等六种运算符及其复合赋值运算符,每种运算符的功能和应用场景都有具体说明。文件操作部分则涵盖了文件的概念、分类、文件类型指针、文件的打开与关闭、读写操作及当前读写位置的调整等内容,提供了丰富的示例帮助理解。通过对本文的学习,读者可以全面掌握C语言中的位运算和文件处理技术。
|
2月前
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。