C Primer Plus 第6版 编程练习 chapter 16

news2024/11/17 12:36:18

文章目录

  • 1. 第1题
    • 1.1 题目描述
    • 1.2 编程源码
    • 1.3 结果显示
  • 2. 第2题
    • 2.1 题目描述
    • 2.2 编程源码
    • 2.3 结果显示
  • 3. 第3题
    • 3.1 题目描述
    • 3.2 编程源码
    • 3.3 结果显示
  • 4. 第4题
    • 4.1 题目描述
    • 4.2 编程源码
    • 4.3 结果显示
  • 5. 第5题
    • 5.1 题目描述
    • 5.2 编程源码
    • 5.3 结果显示
  • 6. 第6题
    • 6.1 题目描述
    • 6.2 编程源码
    • 6.3 结果显示
  • 7. 第7题
    • 7.1 题目描述
    • 7.2 编程源码
    • 7.3 结果显示

1. 第1题

1.1 题目描述

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

1.2 编程源码

test.c

#include<stdio.h>

#include"diceroll.h"

int main(void){
	printf("%d\n", N);
	return 0;
}

diceroll.h

#ifndef DICEROLL_H_
#define DICEROLL_H_

#define N 30

#endif

1.3 结果显示

结果显示


2. 第2题

2.1 题目描述

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

2.2 编程源码

#include<stdio.h>

#define TIAO(x,y) 1.0/((1.0/(x)+1.0/(y))/2)

int main(void){
	printf("%.2f\n", TIAO(1,2));
	return 0;
}

2.3 结果显示

结果显示


3. 第3题

3.1 题目描述

极坐标向量的模(即向量的长度)和向量相对于X轴逆时针旋转的角度来描述该向量。直角坐标用向量X轴和y轴的做俩来描述向量。编写一个程序,读取向量的模和角度,然后显示x轴坐标和y轴坐标。相关方程如下:
x = r*cos a
y = r *sin a
需要一个函数来完成转换,该函数接受一个包含极坐标的结构,并返回一个包含直角坐标的结构(或返回指向该结构的指针)。

3.2 编程源码

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

struct xy{
	float x;
	float y;
};

struct ra{
	float r;
	float a;
};

struct xy ra2xy(struct ra t){
	struct xy m;
	m.y = t.r*sin(t.a);
	m.x = t.r*cos(t.a);
	
	return m;
}

int main(void){	
	struct ra r ={1,2};
	struct xy m = ra2xy(r);
	printf("%.2f %.2f\n", m.x,m.y);
	return 0;
}

3.3 结果显示

结果显示


4. 第4题

4.1 题目描述

ANSI库这样描述clock函数的特性:
#include <time.h>
clock_t clock(void);
这里,clock_t是定义在time.h中的类型。该函数返回处理器时间,其单位取决于实现(如果处理器时间不可用或无法表示,该函数将返回-1)。然而,CLOCKS_PER_SEC(也定义在time.h中)是每秒处理器时间单位的数量。因此,两个clock返回值的差值除以CLOCKS_PER_SEC得到两次调用之间经过的秒数。在进行除法运算之前,把值的类型强制转换成double类型,可以将时间精确到小数点以后。编写一个函数,接受一个double类型的参数表示时间延迟数,然后这段时间运行一个循环。编写一个简单的程序测试该函数。

4.2 编程源码

#include<stdio.h>
#include<time.h>

void delay(double d){
	clock_t e = clock()+d*CLOCKS_PER_SEC;
	while(clock()<e){
		printf("=");
	}
	
}

int main(void){	
	delay(0.01);
	return 0;
}

4.3 结果显示

结果显示


5. 第5题

5.1 题目描述

编写一个函数接受这些参数:内含int类型元素的数组名、数组的带下和一个代表选取次数的值。该函数从数组中随机选择指定数量的元素,并打印它们。每个元素只能选择一次(模拟抽奖数字或挑选陪审团成员)。另外,如果你的实现有time()或类似的函数,可在srand中使用这个函数的输出来初始化随机数生成器rand()。编写一个简单的程序测试该函数。

5.2 编程源码

#include<stdio.h>
#include<stdlib.h>

void delay(const int *num,int len,int times){
	int a[len];
	int c;
	for(int i=0;i<len;++i) a[i]=0;
	for(int i=0;i<times;++i){
		c = rand()%len;
		while(a[c])
			c = rand()%len;
		a[c]=1;
		printf("%d\n", num[c]);
	}
	
}

int main(void){	
	int num[]={1,2,3,4,5,6,7,8,9,10};
	delay(num,10,9);
	return 0;
}

5.3 结果显示

结果显示


6. 第6题

6.1 题目描述

修改程序清单16.17,使用struct names元素(在程序清单16.17后面的讨论中定义过),而不是double 类型的数组。使用较少的元素,并用选定的名字显式初始化数组。

6.2 编程源码

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

#define	NUM	10

struct names{
	char first[40];
	char last[40];
};

void fillarray(struct names ar[],int n){
	for(int i=0;i<n;++i){
		for(int j=0;j<10;++j)ar[i].first[j] = rand()%26 +'A';
		ar[i].first[10] = '\0';
		for(int j=0;j<10;++j)ar[i].last[j] = rand()%26 +'A';
		ar[i].last[10] = '\0';
		printf("%s %s\n", ar[i].last, ar[i].first);
	}
}
void showarray(const struct names ar[],int n){
	for(int i=0;i<n;++i){
		printf("%s %s\n", ar[i].last, ar[i].first);
	}		
}
int mycomp(const void*p1,const void *p2){
	const struct names *ps1 = (const struct names *) p1;
	const struct names *ps2 = (const struct names *) p2;
	
	int res = strcmp(ps1->last,ps2->last);
	if(res!=0) return res;
	else return strcmp(ps1->first,ps2->first);;
}

int main(void){	
	struct names vals[NUM];
	fillarray(vals,NUM);
	puts("Random list:");
	showarray(vals, NUM);
	qsort(vals,NUM,sizeof(struct names),mycomp);
	puts("\nSorted list:");
	showarray(vals,NUM);
	return 0;
}

6.3 结果显示

结果显示


7. 第7题

7.1 题目描述

下面是使用了变参函数的一个程序段:

7.2 编程源码

#include<stdio.h>
#include<stdlib.h>
#include<stdarg.h>

void show_array(const double ar[],int n){
	for(int i=0;i<n;++i){
		printf("%.2lf\t", ar[i]);
		putchar('\n');
	}		
}
double *new_d_array(int n,...){
	double *num = (double*)malloc(sizeof(double)*n);
	va_list ap;
	va_start(ap,n);
	for(int i=0;i<n;++i)num[i] = va_arg(ap,double);
	va_end(ap);
	
	return num;
}

int main(void){	
	double *p1;
	double *p2;
	
	p1 = new_d_array(5,1.2,2.3,3.4,4.5,5.6);
	p2 = new_d_array(4,100.0,20.00,8.08,-1890.0);
	
	show_array(p1,5);
	show_array(p2,4);
	free(p1);
	free(p2);
	
	return 0;
}

7.3 结果显示

结果显示


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1396781.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FPC柔性化机器视觉缺陷检测

FPC(柔性电路板)在电子产品中扮演着至关重要的角色&#xff0c;其质量和可靠性直接影响到产品的性能和安全性。在FPC线路板加工过程中&#xff0c;由于制造工艺的复杂性&#xff0c;很容易产生各种缺陷&#xff0c;如焊锡不良、偏位、漏铜、短路等&#xff0c;因为有太多的环节…

一步一步实现基于COMSOL的单模光纤波导仿真

COMSOL单模光纤波导仿真 &#x1f3a1;导航小助手&#x1f3a1; COMSOL单模光纤波导仿真1.模型向导2.构建几何3.添加完美匹配层&#xff1a;4.添加材料&#xff1a;5.添加散射边界条件&#xff1a;6.定义输入和输出&#xff1a;6.1 输入端定义6.2 输出端定义 7.划分网格7.1光纤…

家校沟通的重要性及意义

在教育的世界里&#xff0c;老师和家长都是孩子成长道路上的重要守护者。但有时&#xff0c;两者之间的沟通仿佛形成了一道难以逾越的鸿沟。那么&#xff0c;为何家校沟通如此重要&#xff1f;它又为教育带来了怎样的影响&#xff1f; 家校沟通有助于建立互信关系。当家长和老…

HarmonyOS SDK,助力开发者打造焕然一新的鸿蒙原生应用

鸿蒙生态千帆启航仪式于1月18日正式启动。从2019年HarmonyOS正式发布到2020年“没有人能够熄灭漫天星光”&#xff0c;今天&#xff0c;满天星光终汇成璀璨星河&#xff0c;HarmonyOS NEXT鸿蒙星河版重磅发布&#xff0c;带来了全新架构、全新体验、全新生态。作为支撑鸿蒙原生…

springboot mybatis-plus swing实现报警监听

通过声音控制报警器&#xff0c;实现声光报警&#xff0c;使用beautyeye_lnf.jar美化界面如下 EnableTransactionManagement(proxyTargetClass true) SpringBootApplication EnableScheduling public class AlarmWarnApplication {public static void main(String[] args) …

51单片机中断系统编程

一.外部中断 1.编程思想 中断准备&#xff1a;中断初始化函数打开中断开关 &#xff0c;选择中断传输方式中断处理&#xff1a;为了便于观察&#xff0c;让我们知道单片机进入中断处理函数&#xff0c;在这里我们选择打开流水灯电路搭建&#xff1a;由于P3^3引脚不便直接接地…

C# ObjectArx 绘制表格并设置单元格合并

第一行默认是标题&#xff0c;可设置行【RowType】进行设置类型 Document doc Application.DocumentManager.MdiActiveDocument;using (Transaction tr doc.TransactionManager.StartOpenCloseTransaction()){BlockTable bt tr.GetObject(doc.Database.BlockTableId, OpenMo…

vue列表飞入效果

效果 实现代码 <template><div><button click"add">添加</button><TransitionGroup name"list" tag"ul"><div class"list-item" v-for"item in items" :key"item.id">{{ i…

conda 安装, 配置以及使用

文章目录 1. 安装2. 配置2.1 如何配置2.2 快速设置取消自动进入 base 环境conda 添加清华源pip 添加清华源pip 更新为最新版本 3. 使用 conda 是 python 的环境管理工具包&#xff0c;非常好用&#xff0c;特别是 miniconda 相对于 conda 不需要安装其他的工具&#xff0c;而且…

从临床和科研场景分析ChatGPT在医疗健康领域的应用可行性

2023年4月发表在Journal Medical Systems的文献《Evaluating the Feasibility of ChatGPT in Healthcare: An Analysis of Multiple Clinical and Research Scenarios》&#xff08;评估 ChatGPT 在医疗健康领域的可行性&#xff1a;对多种临床和研究场景的分析&#xff09;介绍…

Rust-泄漏

在C中&#xff0c;如果引用计数智能指针出现了循环引用&#xff0c;就会导致内存泄漏。而Rust中也一样存在引用计数智能指针Rc,那么Rust中是否可能制造出内存泄漏呢? 内存泄漏 首先&#xff0c;我们设计一个Node类型&#xff0c;它里面包含一个指针&#xff0c;可以指向其他…

Python的OpenCV模块实现图像转换素描图简单示例

一、示例代码&#xff1a; import cv2img cv2.imread(/home/lijiang/图片/ubuntu_wallpaper/Einstein_2.jpg) # 读取图像grey cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 灰度 invert cv2.bitwise_not(grey)blur_img cv2.GaussianBlur(invert…

Postgresql数据库死锁

死锁报错1 UPDATE deadlock_example SET value value 1 WHERE id 1ERROR: deadlock detected DETAIL: Process 95 waits for ShareLock on transaction 3553457; blocked by process 187. Process 187 waits for ShareLock on transaction 3553458; blocked by process 95.…

串联RLC电路中的增益

在串联RLC电路中&#xff0c;增益又可以叫放大倍数&#xff0c;用M或者G表示 电压增益就是输出电压比输入电压&#xff0c;MVo/Vin 在串联RLC中&#xff0c;VoIr*Rac,VinIr*(sLr1/sCrRac) MRac/(sLr1/sCrRac) 当输入频率fs时&#xff0c;fr为谐振频率 输入频率0<fs<…

贯通用友T+与企企,引领企业数字化转型新篇章!

客户介绍&#xff1a; 某科技有限公司是一家专注于高端芯片研发和制造的高科技企业。自成立以来&#xff0c;该企业始终坚持以科技创新为核心&#xff0c;致力于为全球客户提供高性能、高品质的芯片解决方案。公司拥有一支由业内资深专家和优秀工程师组成的研发团队&#xff0…

带你学C语言-指针(4)

目录 ​编辑 ⚾0.前言 &#x1f3c0;1.回调函数 ⚽2.qsort &#x1f3c9;2.1 qsort函数的模拟实现 &#x1f3be;3.sizeof与strlen对比 &#x1f3be;4.结束语 ⚾0.前言 言C之言&#xff0c;聊C之识&#xff0c;以C会友&#xff0c;共向远方。各位CSDN的各位你们好啊&…

selenium处理下拉框

当想要爬取的数据由下拉框来选择时&#xff0c;应该如何处理&#xff1f; 页面如下&#xff1a; 目的获得电影的详细信息&#xff0c;包括票房&#xff0c;上映日期等。 代码如下&#xff1a; from selenium import webdriver from selenium.webdriver.support.select impor…

28个炫酷的CSS特效动画示例(含源代码)

CSS是网页的三驾马车之一&#xff0c;是对页面布局的总管家&#xff0c;2024年了&#xff0c;这里列出28个超级炫酷的CSS动画示例&#xff0c;让您的网站更加炫目多彩。 文章目录 1. 涌动的弹簧效果2. 超逼真的3D篮球弹跳&#xff0c;含挤压弹起模态3. 鼠标放div上&#xff0c;…

linux磁盘,分区,挂载等等

1. 修改磁盘分区的标签 例如&#xff1a;733be18b-7baf-d84c-879d-ca3db465f179太长了&#xff0c;修改一下。 linuxchenxiao:/media/linux/733be18b-7baf-d84c-879d-ca3db465f179$ 先 sudo blkid sudo blkid 找到你想修改的UUID(唯一标识符) /dev/sda1: UUID"733be…

VBA_MF系列技术资料1-315

MF系列VBA技术资料 为了让广大学员在VBA编程中有切实可行的思路及有效的提高自己的编程技巧&#xff0c;我参考大量的资料&#xff0c;并结合自己的经验总结了这份MF系列VBA技术综合资料&#xff0c;而且开放源码&#xff08;MF04除外&#xff09;&#xff0c;其中MF01-04属于…