明解C语言 入门篇 第十二章答案
练习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", , 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 ;
}
练习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 < ) std->height = ;
if (std->weight > ) std->weight = ;
} 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 ;
}
练习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 = { , , };
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 ;
}
练习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 = ; i < n - ; i++) {
for (j = n - ; j > i; j--)
if (a[j - ].height > a[j].height)
swap_Student(&a[j - ], &a[j]);
}
} int main(void)
{
int i; Student std[] = { { }, { }, { }, { }, { },
}; for (i = ; i < NUMBER; i++) { printf("姓名 身高 体重 奖学金\n ");
scanf("%s %i %lf %d", &std[i].name, &std[i].height,& std[i].weight, &std[i].schols);
} for (i = ; 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 == ) {
puts("\n按身高排序。");
for (i = ; i < NUMBER; i++)
printf("%-8s %6d%6.1f%7ld\n",
std[i].name, std[i].height, std[i].weight, std[i].schols);
}
return ;
}
练习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 ; /* 无法行驶 */
c->pt = dest; /* 更新当前位置(向dest移动) */
c->fuel -= d; /* 更新燃料(减去行驶距离d所消耗的燃料) */
return ; /* 成功行驶 */
} int main(void)
{
Car mycar = { { 0.0, 0.0 }, 90.0 };
int move_method;
double x_distance;
double y_distance;
while () {
int select;
Point dest; /* 目的地的坐标 */ put_info(mycar); /* 显示当前位置和剩余燃料 */ printf("开动汽车吗【Yes···1 / No···0】:");
scanf("%d", &select);
if (select != ) break; printf("两种方法,1输入目的地,2输入X方向和Y方向的行驶距离:");
scanf("%d", &move_method);
switch (move_method)
{
case :
printf("目的地的X坐标:"); scanf("%lf", &dest.x);
printf(" Y坐标:"); scanf("%lf", &dest.y);
break;
case :
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 ;
}
明解C语言 入门篇 第十二章答案的更多相关文章
- 明解C语言 入门篇 第五章答案
练习5-1 /* 依次把1.2.3.4.5 赋值给数组的每个元素并显示(使用for语句) */ #include <stdio.h> int main(void) { int i; ]; ...
- 明解C语言 入门篇 第四章答案
练习4-1 #include <stdio.h> int main(void) { int no; int x; do{ printf("请输入一个整数:"); sca ...
- 明解C语言 入门篇 第三章答案
练习3-1 #include <stdio.h> int main() { int x; int y; puts("请输入两个整数."); printf("整 ...
- 明解C语言 入门篇 第二章答案
练习2-1 #include <stdio.h> int main() { int x; int y; int percent; puts("请输入两个整数"); pr ...
- 明解C语言 入门篇 第一章答案
练习1-1 #include <stdio.h> int main() { int a; a = 15; int b; b = 37; int c; c = a - b; printf(& ...
- 明解C语言 入门篇 第八章答案
练习8-1 #include<stdio.h> #define diff(x,y)(x-y) int main() { int x; int y; printf("x=" ...
- 明解C语言 入门篇 第十三章答案
练习13-1 /* 打开与关闭文件 */ #include <stdio.h> int main(void) { ]; FILE* fp; printf("请输入你要打开的文件& ...
- 明解C语言 入门篇 第十一章答案
练习11-1 /* 用指针实现的字符串的改写 */ #include <stdio.h> int main(void) { "; printf("p = \" ...
- 明解C语言 入门篇 第十章答案
练习10-1 #include <stdio.h> void adjust_point(int*n) { ) *n = ; ) *n = 0; } int main() { int x; ...
随机推荐
- hibernate手动设置的id无效的原因与解决方法
在使用Hibernate的过程中,发现手动设置的id(主键)无效,Hibernate仍然会在保存(调用Hibernate提供的merge()方法)的时候自动生成一个随机的id. 经过调试发现问题出在了 ...
- node.js如何批量赋值
1. 数组解析赋值 let a = 1; let b = 2; let c = 3; 等同于 let [a, b, c] = [1, 2, 3]; 默认值 let [a, b = "B&qu ...
- UserControl关闭
直接 Application.Current.Shutdown();关闭程序.
- linux tmux用法
1. 安装工具 Centos : yum install tmux 2. 基本操作 新建会话:tmux new -s session-name 查看会话:tmux ls 进入会话:tmux a -t ...
- PHP面试题2019年京东工程师面试题及答案解析
一.单选题(共28题,每题5分) 1.Apache与Nginx大访问下性能描述正确的是? A.Apache所采用的epoll网络I/O模型非常高效 B.Nginx使用了最新的kqueue和select ...
- DesignPattern系列__09设计模式概述
设计模式介绍 设计模式是程序员在面对同类软件工程设计问题所总结出来的有用的经验,模式不是代码,而是某类问题的通用解决方案, 设计模(Design pattern)代表了最佳的实践.这些解决方案是众多软 ...
- H5 移动端 键盘遮挡焦点元素解决方案
前言 最近在做 webapp,遇到了很多移动端兼容的问题,其中一个问题就是:输入框触发 focus 后,键盘弹出,然后遮住了输入框. 然后在Android和IOS上,这个问题的表现形式不一样,而原生键 ...
- rsync 未授权访问漏洞
rsync rsync,remote synchronize顾名思意就知道它是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限.时间.软硬链接等附加信息. rsync是用 &qu ...
- HC595驱动数码管
74HC595是一个8位串行输入.并行输出的位移缓存器 引脚定义 Q0~Q7:并行输出 Q7':串行输出 SH_CP:移位寄存器时钟输入 ST_CP:存储寄存器时钟输入 DS:串行输入 原理图 举例 ...
- QML调用C++
//Login.h #include <QObject> #include <QDebug> class Login : public QObject { Q_OBJECT p ...