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

这篇具有很好参考价值的文章主要介绍了C Primer Plus 第6版 编程练习 chapter 16。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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 结果显示

C Primer Plus 第6版 编程练习 chapter 16,C Primer Plus 第六版 编程练习,c语言,算法,开发语言


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 结果显示

C Primer Plus 第6版 编程练习 chapter 16,C Primer Plus 第六版 编程练习,c语言,算法,开发语言


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 结果显示

C Primer Plus 第6版 编程练习 chapter 16,C Primer Plus 第六版 编程练习,c语言,算法,开发语言


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 结果显示

C Primer Plus 第6版 编程练习 chapter 16,C Primer Plus 第六版 编程练习,c语言,算法,开发语言


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 结果显示

C Primer Plus 第6版 编程练习 chapter 16,C Primer Plus 第六版 编程练习,c语言,算法,开发语言


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 结果显示

C Primer Plus 第6版 编程练习 chapter 16,C Primer Plus 第六版 编程练习,c语言,算法,开发语言


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 结果显示

C Primer Plus 第6版 编程练习 chapter 16,C Primer Plus 第六版 编程练习,c语言,算法,开发语言文章来源地址https://www.toymoban.com/news/detail-806050.html


到了这里,关于C Primer Plus 第6版 编程练习 chapter 16的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C Primer Plus(第六版)13.11 编程练习 第11题

    /* 编写一个程序,接受两个命令行参数。第1个参数是一个字符串,第2个参数是一个文件名。然 后该程序查找该文件,打印文件中包含该字符串的所有行。因为该任务是面向行而不是面向字符 的,所以要使用fgets()而不是getc()。使用标准C库函数strstr() (11.5.7节简要介绍过) 在每

    2024年01月24日
    浏览(39)
  • C Primer Plus(第六版)13.11 编程练习 第10题

    /* 编写一个程序打开一个文本文件,通过交互方式获得文件名。通过一个循环,提示用户输入一个 文件位置。然后该程序打印从该位置开始到下一个换行符之前的内容。用户输入负数或非数值字 符可以结束输入循环。 */ //13.11-10.txt #include stdio.h #include stdlib.h #define MAX 41 int

    2024年01月24日
    浏览(38)
  • C Primer Plus(第六版)13.11 编程练习 第7题

    #include stdio.h #include stdlib.h   #include string.h  #define LEN 40 //abc-1.txt abc-2.txt int main() {     FILE  *in, *in1;        int ch1,ch2,i;     char name[LEN];     char name1[LEN];          fprintf(stdout, \\\"input your filename,name1 name2:\\\");     scanf(\\\"%s %s\\\",name,name1) ;     if ((in = fopen(name, \\\"r\\\")) == NULL)     {    

    2024年01月23日
    浏览(46)
  • C Primer Plus(第六版)11.13 编程练习 第6题

    #includestdio.h #define SIZE 40 int is_within(char ch,char str[]); int main(void) {         int i = 0;       char *p;     char ch;     char store[SIZE] = \\\"abcd\\\";          while(ch!=\\\'q\\\')     {         printf(\\\"q to quitn\\\");         scanf(\\\"%c\\\",ch);          while (getchar() != \\\'n\\\')                continue;

    2024年01月17日
    浏览(41)
  • C Primer Plus 第6版 编程练习 chapter 16

    开发一个包含你需要的预处理定义的头文件。 test.c diceroll.h 两个数的调和平均数这样计算:先得到两数的倒数,然后计算两个倒数的平均值,最后取计算结果的倒数。使用#define指令定义一个宏函数,,执行该运算。编写一个简单的程序测试该宏。 极坐标向量的模(即向量的

    2024年01月19日
    浏览(39)
  • C Primer Plus第六章编程练习答案

    学完C语言之后,我就去阅读《C Primer Plus》这本经典的C语言书籍,对每一章的编程练习题都做了相关的解答,仅仅代表着我个人的解答思路,如有错误,请各位大佬帮忙点出! 1.编写一个程序,创建一个包含26个元素的数组,并在其中储存26个小 写字母。然后打印数组的所有

    2024年02月06日
    浏览(43)
  • C Primer Plus(第六版)13.10 复习题 第5题

    #include stdio.h #include stdlib.h #include string.h #define SIZE 256 int main (int argc, char *argv[] ) {     int i=0;     char ch;     char str[SIZE];     FILE *fp;     if (argc != 3)         exit(EXIT_FAILURE);     else     {         if ((fp = fopen (argv[2],\\\"r\\\")) == NULL)             exit(EXIT_FAILURE) ;      

    2024年01月22日
    浏览(41)
  • C++ Primer Plus第五章编程练习答案

    答案仅供参考,实际运行效果取决于运行平台和运行软件 1.编写一个要求用户输入两个整数的程序。该程序将计算并输出这两个整数之间包括这两个整数)所有整数的和。这里假设先输入较小的整数。例如,如果用户输入的是2和则程序将出29之间所有整数的和为44 2.使用array对

    2024年02月09日
    浏览(49)
  • C Primer Plus第九章编程练习答案

    学完C语言之后,我就去阅读《C Primer Plus》这本经典的C语言书籍,对每一章的编程练习题都做了相关的解答,仅仅代表着我个人的解答思路,如有错误,请各位大佬帮忙点出! 1.设计一个函数min(x, y),返回两个double类型值的较小值。在一个简单 的驱动程序中测试该函数。 2

    2024年02月06日
    浏览(39)
  • C++ primer plus第七章编程练习答案

    1.编写一个程序,不断要求用户输入两个数,直到其中的一个为 0。对于每两个数,程序将使用一个南数来计算它们的调和平均数,并将结果返回给 main(),而后者将报告结果。调和平均数指的是倒数平均值的倒数,计算公式如下: 调和平均数=2.0*xy/(x + y) 2.编写一个程序,要求用

    2024年02月10日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包