码迷,mamicode.com
首页 > 编程语言 > 详细

明解C语言 入门篇 第十二章答案

时间:2019-11-27 01:00:45      阅读:100      评论:0      收藏:0      [点我收藏+]

标签:define   struct   switch   car   sele   奖学金   height   while   temp   

练习12-1

/*
    用表示学生的结构体来显示高尾的信息
*/

#include <stdio.h>

#define NAME_LEN    64        /* 姓名的字符数 */

/*=== 表示学生的结构体 ===*/
struct student {
    char  name[NAME_LEN];    /* 姓名 */
    int   height;            /* 身高 */
    float weight;            /* 体重 */
    long  schols;            /* 奖学金 */
};

int main(void)
{
    struct student takao = { "Takao", 173, 86.2 };

    printf("姓名 = %s,%p\n", takao.name, &takao.name);
    printf("身高 = %d,%p\n", takao.height,&takao.height);
    printf("体重 = %.1f,%p\n", takao.weight, &takao.weight);
    printf("奖学金 = %ld,%p\n", takao.schols, &takao.schols);

    return 0;
}

练习12-2

/*
    拥有超能力的洋子(在结构体中引入typedef名)
*/

#include <stdio.h>

#define NAME_LEN    64        /* 姓名的字符数 */

/*=== 表示学生的结构体 ===*/
typedef struct student {
    char  name[NAME_LEN];    /* 姓名 */
    int   height;            /* 身高 */
    float weight;            /* 体重 */
    long  schols;            /* 奖学金 */
} Student;

/*--- 将std指向的学生的身高变为180cm,体重变为80kg ---*/
void hiroko(Student* std)
{
    if (std->height < 180) std->height = 180;
    if (std->weight > 80) std->weight = 80;
}

int main(void)
{
    int height, weight, schols;
    printf("身高是:体重是:奖学金是:");
    scanf("%d%d%d", &height, &weight, &schols);
    Student sanaka = { "Sanaka", height, weight, schols };

    hiroko(&sanaka);

    printf("姓名 = %s\n", sanaka.name);
    printf("身高 = %d\n", sanaka.height);
    printf("体重 = %.1f\n", sanaka.weight);
    printf("奖学金 = %ld\n", sanaka.schols);

    return 0;
}

练习12-3

/*
    返回结构体的函数
*/

#include <stdio.h>

/*=== xyz结构体 ===*/
struct xyz {
    int    x;
    long   y;
    double z;
};

/*--- 返回具有{x,y,z}的值的结构体xyz ---*/
struct xyz scan_xyz()
{
    int x;
    long y;
    double z;
    struct xyz temp;
    printf("x=,y=,z=");
    scanf("%d%ld%lf", &x, &y, &z);
    temp.x = x;
    temp.y = y;
    temp.z = z;
    return temp;
    
}

int main(void)
{
    struct xyz s = { 0, 0, 0 };
    s = scan_xyz();

    printf("xyz.x = %d\n", s.x);
    printf("xyz.y = %ld\n", s.y);
    printf("xyz.z = %f\n", s.z);

    return 0;
}

练习12-4

/*
    将5名学生的身高按升序排列
*/

#include <stdio.h>
#include <string.h>

#define NUMBER        5        /* 学生人数 */
#define NAME_LEN    64        /* 姓名的字符数 */

/*=== 表示学生的结构体 ===*/
typedef struct {
    char  name[NAME_LEN];    /* 姓名 */
    int   height;            /* 身高 */
    double weight;            /* 体重 */
    int   schols;            /* 奖学金 */
} Student;

/*--- 将x和y指向的学生进行交换 ---*/
void swap_Student(Student* x, Student* y)
{
    Student temp = *x;
    *x = *y;
    *y = temp;
}

/*--- 将学生数组a的前n个元素按身高进行升序排列 ---*/
void sort_by_height(Student a[], int n)
{
    int i, j;

    for (i = 0; i < n - 1; i++) {
        for (j = n - 1; j > i; j--)
            if (a[j - 1].height > a[j].height)
                swap_Student(&a[j - 1], &a[j]);
    }
}

int main(void)
{
    int i;


    Student std[] = { {0 }, { 0 }, { 0 }, { 0 }, { 0 },
    };
    

    for (i = 0; i < NUMBER; i++) {
    
        printf("姓名 身高 体重 奖学金\n ");
        scanf("%s %i %lf %d", &std[i].name, &std[i].height,& std[i].weight, &std[i].schols);
    }
    

    for (i = 0; i < NUMBER; i++)
        printf("%-8s %6d %6.1f %7ld \n",
            std[i].name, std[i].height, std[i].weight, std[i].schols);

    sort_by_height(std, NUMBER);    /* 按身高进行升序排列 */

    int choice;
    printf("是否按身高排列,是->1,否->0\n");
    scanf("%d", &choice);

    if (choice == 1) {
        puts("\n按身高排序。");
        for (i = 0; i < NUMBER; i++)
            printf("%-8s %6d%6.1f%7ld\n",
                std[i].name, std[i].height, std[i].weight, std[i].schols);
    }
    return 0;
}

练习12-5

#include <math.h>
#include <stdio.h>

#define sqr(n)  ((n) * (n))

typedef struct {
    double x;    /* X坐标 */
    double y;    /* Y坐标 */
} Point;

typedef struct {
    Point  pt;        /* 当前位置 */
    double fuel;    /* 剩余燃料 */
} Car;

double distance_of(Point pa, Point pb)
{
    return sqrt(sqr(pa.x - pb.x) + sqr(pa.y - pb.y));
}

void put_info(Car c)
{
    printf("当前位置:(%.2f, %.2f)\n", c.pt.x, c.pt.y);
    printf("剩余燃料:%.2f升\n", c.fuel);
}

int move(Car* c, Point dest)
{
    double d = distance_of(c->pt, dest);    /* 行驶距离 */
    if (d > c->fuel)                        /* 行驶距离超过了燃料 */
        return 0;                            /* 无法行驶 */
    c->pt = dest;        /* 更新当前位置(向dest移动) */
    c->fuel -= d;        /* 更新燃料(减去行驶距离d所消耗的燃料) */
    return 1;                                /* 成功行驶 */
}

int main(void)
{
    Car mycar = { { 0.0, 0.0 }, 90.0 };
    int move_method;
    double x_distance;
    double y_distance;
    while (1) {
        int select;
        Point dest;            /* 目的地的坐标 */

        put_info(mycar);    /* 显示当前位置和剩余燃料 */

        printf("开动汽车吗【Yes···1 / No···0】:");
        scanf("%d", &select);
        if (select != 1) break;

        printf("两种方法,1输入目的地,2输入X方向和Y方向的行驶距离:");
        scanf("%d", &move_method);
        switch (move_method)
        {
        case 1:
            printf("目的地的X坐标:");  scanf("%lf", &dest.x);
            printf("        Y坐标:");  scanf("%lf", &dest.y);
            break;
        case 2:
            printf("X方向行驶距离:"); scanf("%lf", &x_distance);
            printf("Y方向行驶距离:"); scanf("%lf", &y_distance);
            dest.x = x_distance + mycar.pt.x;
            dest.y = y_distance + mycar.pt.y;
            break;
        }
        if (!move(&mycar, dest))
            puts("\a燃料不足无法行驶。");
    }

    return 0;
}

 

明解C语言 入门篇 第十二章答案

标签:define   struct   switch   car   sele   奖学金   height   while   temp   

原文地址:https://www.cnblogs.com/nightswatch-candle/p/11939231.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!