《C Primer Plus》编程练习—第16章

《C Primer Plus》编程练习

第16章

1.exercise1.c

开发一个包含你需要的预处理器定义的头文件。

//exercise16.1
#ifndef LEN   //避免重复包含 
#define LEN 10

#define SIZE 20 //常量 

struct names_st {
    //结构声明 
	char fname[SIZE];
	char lname[SIZE];
};

typedef struct names_st names; //类型定义 

char * s_gets(char * st, int n); //函数原型 

#endif

2.exercise2.c

两数的调和平均数这样计算:先得到两数的倒数,然后计算两个倒数的平均值,最后取计算结果的倒数。使用#define指令定义一个宏“函数”,执行该运算。编写一个简单的程序测试该宏。

//exercise16.2
#include <stdio.h>

#define HAVAR(X, Y) (1 / (((1 / X) + (1 / Y)) / 2))  //函数宏 
int main(void)
{
   
	double x = 5, y = 7, z;
	
	puts("请输入两个数:(输入q退出程序)");
	while (scanf("%lf %lf", &x, &y) == 2)
	{
   
		z = HAVAR(x, y);
		printf("%g和%g的调和平均数是:%g。\n", x, y, z); 
		puts("请输入两个数:(输入q退出程序)");	
	}
	puts("程序结束。");
	
	return 0;
}

输出示例:

请输入两个数:(输入q退出程序)
5 7
57的调和平均数是:5.83333。
请输入两个数:(输入q退出程序)
3 6
36的调和平均数是:4。
请输入两个数:(输入q退出程序)
q
程序结束。

3.exercise3.c

极坐标用向量的模(即向量的长度)和向量相对x轴逆时针旋转的角度来描述该向量。直角坐标用向量的x轴和y轴的坐标来描述该向量(见图16.3)。编写一个程序,读取向量的模和角度(单位:度),然后显示x轴和y轴的坐标。相关方程如下:

x = r * cosA 		y = r * sinA

需要一个函数来完成转换,该函数接受一个包含极坐标的结构,并返回一个包含直角坐标的结构(或返回指向该结构的指针)。

在这里插入图片描述

//exercise16.3
#include <stdio.h>
#include <math.h>

struct pcoordinates {
   //极坐标 
	double length;//模 
	double angle;//角度(直角坐标) 
};
struct ccoordinates {
   //直角坐标 
	double x;
	double y;
};
struct ccoordinates transfer(struct pcoordinates pcoordinate);//极坐标转直角坐标 
int main(void)
{
   
	struct pcoordinates pcoordinate;//初始化结构 
	struct ccoordinates ccoordinate;
	
	puts("请输入向量的模和角度:(输入q退出)");
	while (scanf("%lf %lf", &pcoordinate.length, &pcoordinate.angle) == 2)//输入模和角度 
	{
   
		ccoordinate = transfer(pcoordinate);
		printf("该向量x = %g,y = %g。\n", ccoordinate.x, ccoordinate.y);
		puts("请输入向量的模和角度:(输入q退出)");
	}
	puts("程序结束。");
	
	return 0;
}
struct ccoordinates transfer(struct pcoordinates pcoordinate)
{
   
	struct ccoordinates ccoordinate;
	double degree_rad = 3.1515926 / 180;//直角坐标角度1度等于的弧度 
	
	ccoordinate.x = pcoordinate.length * cos(pcoordinate.angle * degree_rad);
	ccoordinate.y = pcoordinate.length * sin(pcoordinate
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值