明解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; ...
随机推荐
- 【zibbix自定义监控】zabbix服务自定义监控mysql的状态信息
由于mysql我安装在zabbix_server服务的主机上,所以下面操作在zabbix服务主机上进行,注意服务主机已经安装了监控服务 实现步骤: 1.修改 zabbix_agentd.conf,添加 ...
- 【Linux命令】安装命令(yum,rpm)
安装软件有三种方式,第一种是源码安装(源码安装需要手动安装软件,安装的目录,还需要进行编译之后才能安装),步骤比较繁琐.第二种是RPM安装,rpm安装有点像windows系统的面板,会建立统一的数据库 ...
- 如何将vim改造为python的IDE
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: Jeffrey Wang PS:如有需要Python学习资料的小伙 ...
- Spring Boot的注解,你知道或者不知道的都在这里!
1.1 定义 Annotation(注解),用于为Java代码提供元数据.简单理解注解可以看做是一个个标签,用来标记代码.是一种应用于类.方法.参数.变量.构造器及包的一种特殊修饰符. 1.2 注解的 ...
- hadoop 自定义OutputFormat
1.继承FileOutputFormat,复写getRecordWriter方法 /** * @Description:自定义outputFormat,输出数据到不同的文件 */ public cla ...
- git在idea中的冲突解决(非常重要)
1.什么是冲突 冲突是指当你在提交或者更新代码时被合并的文件与当前文件不一致.读起来有点绕,结合下面的案例理解. 从上面对冲突的定义来看,冲突时发生在同一个文件上的. 2.生产上冲突的场景 常见冲突的 ...
- git commit 新修改的内容 添加到上次提交中 减少提交的日志
有时候提交过一次记录只有,又修改了一次,仅仅是改动一些较少的内容,可以使用git commit --amend. 添加到上次提交过程中: --amend amend previous commit g ...
- Linux--NIS
一. 环境准备 操作系统:CentOS7.6 服务端安装如下软件: 软件名称 功能 ypserv NIS Server端的服务进程 rpcbind 提供RPC服务 客户端安装如下软件: 软件名称 功能 ...
- unbuntu更换软件源
编辑/etc/apt/sources.list文件,将文件中原有的国外源全部注释掉,文件头添加以下内容 ##中科大源 deb https://mirrors.ustc.edu.cn/ubuntu/ b ...
- 01 python的安装
下载3.7.0版本 然后点击 close 关闭 1-==>搜索输入“cmd”输入 “python -V”并回车. 出现版本说明安装成功.2==>>>> 是提示符3=== ...