C Peimer 第12章编程习题

原创 2016年08月30日 18:49:37

今天工作量不太大,终于到了动态内存分配,各种变量类型还是挺让人头疼的。

#include <stdio.h>
#include <stdlib.h>
#include "pe12-2a.h"
#define LENGTH 10


int *make_array(int elem, int val);
void show_array(const int ar[], int n);
int main(void) {
	//1
	/*
	int units[1];
	void critic(int []);
	printf("how many?");
	scanf("%d", units);
	while (*units!=56)
	{
		critic(units);
	}
	printf("you must have a look%d",*units);
	*/

	//2
	/*
	extern int mode;
	printf("Enter 0 for meteric mode,1 for US mode:");
	scanf("%d", &mode);
	while (mode>=0)
	{
		set_mode(mode);
		get_info();
		show_info();
		printf("\nEnter 0 for metric mode,1 for US mode:");
		printf("-1 to quit:");
		scanf("%d",&mode);
	}
	printf("Done.\n");
	*/

	//3
	/*
	void get_info2(double[], int mode);
	void show_info2(double[], int n);
	int mode;
	double info[2];
	printf("Enter 0 for meteric mode,1 for US mode:");
	scanf("%d", &mode);
	while (mode >= 0)
	{
		get_info2(info,mode);
		show_info2(info, mode);
		printf("\nEnter 0 for metric mode,1 for US mode:");
		printf("-1 to quit:");
		scanf("%d", &mode);
	}
	printf("Done.\n");
	*/

	//4
	/*
	int times=0;
	int RunTimes(int times);
	for (int i = 0; i < 10; i++)
	{
		times = RunTimes(times);
	}
	printf("the function has already run %d times!" ,times);
	*/

	//5
	/*
	int randMat[10 * LENGTH];
	void RandNumber100(int[]);
	void SortNumberMy(int randMat[], int length);
	RandNumber100(randMat);
	for (int i = 0; i < 10*LENGTH; i++)
	{
		printf("%2d",randMat[i]);
	}
	SortNumberMy(randMat, 10 * LENGTH);
	printf("\n*********************\n");
	for (int i = 0; i < 10 * LENGTH; i++)
	{
		printf("%2d", randMat[i]);
	}
	*/

	//6
	/*
	void Rand1000Number();
	Rand1000Number();
	*/

	//7
	/*
	int sets;
	int sides;
	int dice;
	int occur;
	printf("enter the number of sets: enter 0 to stop.");
	scanf("%d",&sets);
	while (sets != 0)
	{
		printf("how many sides and dice?");
		scanf("%d%d", &sides, &dice);
		printf("here are %d sets of %d %d-sided throws:\n", sets, dice, sides);
		srand(time(NULL));
		for (int i = 0; i < sets; i++)
		{
			for (int j = 0; j < dice; j++)
			{
				occur = 1 + (rand() % sides);
				printf("%4d", occur);
			}
			printf("\n");
			
		}
		printf("\nenter the number of sets: enter 0 to stop.");
		scanf("%d", &sets);
	}
	*/

	//8
	int *pa;
	int size;
	int value;

	printf("Enter the number of elements:");
	scanf("%d",&size);
	while (size>0)
	{
		printf("Enter the initialization value:");
		scanf("%d",&value);
		pa = make_array(size, value);
		if (pa)
		{
			show_array(pa, size);
			free(pa);
		}
		printf("\nEnter the number of elements(size < 1 to quit):");
		scanf("%d", &size);
	}
	printf("Done!\n");

	return 0;
}

void show_array(const int ar[],int n) {
	for (int i = 0; i < n; i++)
	{
		printf("%2d", *(ar + i));
		if ((i + 1) % 8 == 0 && i > 0) {
			printf("\n");
		}
	}
}
int * make_array(int elem, int val)
{
	int *temp;
	temp = (int*)malloc(elem*sizeof(int));
	for (int i = 0; i < elem; i++)
	{
		*(temp + i) = val;
	}
	return temp;
}
void Rand1000Number() {
	int temp;
	int info[10] = {0};
	srand(time(NULL));
	for (int i = 0; i < 1000 * LENGTH; i++)
	{
		temp = 1 + (rand() % 10);
		for (int j = 0; j < 10; j++)
		{
			if (temp == j+1)
			{
				info[j] += 1;
			}
		}
	}
	for (int i = 0; i < 10; i++)
	{
		printf("%d appears %d times\n", i, info[i]);
	}
}

void SortNumberMy(int randMat[],int length) {
	int temp;
	for (int i = 0; i < length; i++)
	{
		temp = randMat[i];
		for (int j = i + 1; j < length; j++)
		{
			if (temp < randMat[j])
			{
				temp = randMat[j];
				randMat[j] = randMat[i];
				randMat[i] = temp;
			}
		}

	}
}
void RandNumber100(int randMat[]) {
	for (int i = 0; i < 10 * LENGTH; i++)
	{
		*(randMat + i) = ((time() + rand()) % 9) + 1;
	}
}
int RunTimes(int times) {
	times++;
	return times;
}

void get_info2(double info[],int mode) {
	switch (mode)
	{
	case 0:
		printf("Enter distace:");
		scanf("%lf", info);
		printf("Enter liter:");
		scanf("%lf", (info+1));
		break;
	case 1:
		printf("Enter miles:");
		scanf("%lf", info);
		printf("Enter gallons:");
		scanf("%lf", (info + 1));
	default:
		printf("Invalid mode!");
		break;
	}
}
void show_info2(double info[], int mode) {
	double temp;
	double distance = *info;
	double liter = *(info + 1);
	char *units=NULL;
	switch (mode)
	{
	case 0:
		units = "liters per 100 km";
		break;
	case 1:
		units = "miles per gallon";
		break;
	default:
		break;
	}
	if (mode == 0)
	{
		temp = (liter / distance) * 100;
	}
	else if (mode == 1)
	{
		temp = distance / liter;
	}
	if (mode == 0 || mode == 1)
	{
		printf("fuel consumption is :%.2lf %s", temp, units);
	}
}

void critic(int number[]) {
	printf("try again:");
	scanf("%d",number);
}


在同目录下,另建一个文件,保存以下内容,以完成第2题:

#include <stdio.h>
#include "pe12-2a.h"
#define UNITS 40


double distance;
double liter;
int mode;
static const char *units;
void set_mode(int n) {
	switch (n)
	{
	case 0:
		units = "liters per 100 km";
		break;
	case 1:
		units = "miles per gallon";
		break;
	default:
		break;
	}

}

void get_info() {
	switch (mode)
	{
	case 0:
		printf("Enter distace:");
		scanf("%lf", &distance);
		printf("Enter liter:");
		scanf("%lf", &liter);
		break;
	case 1:
		printf("Enter miles:");
		scanf("%lf", &distance);
		printf("Enter gallons:");
		scanf("%lf", &liter);
	default:
		printf("Invalid mode!");
		break;
	}
	
}

void show_info() {
	double temp;
	if (mode == 0)
	{
		temp = (liter / distance) * 100;
	}
	else if (mode == 1)
	{
		temp = distance / liter;
	}
	if (mode == 0 || mode == 1)
	{
		printf("fuel consumption is :%.2lf %s", temp, units);
	}

}

再以下建立一个头文件pe12-2a.h,保存以下内容:

#pragma once

extern double distance;
extern double liter;
void set_mode(int);
void get_info();
void show_info();


C Peimer 第14章编程习题

大一学struct时并没有学好,现在果然要了命。这11道题摆弄了整整三天,终于完成了,但还是磕磕绊绊,唉…… #include #include #include #include ...
  • u010814231
  • u010814231
  • 2016年09月04日 15:30
  • 530

C Peimer 第13章编程习题

本来以为什么I\o,还不是手到擒来,结果就被人擒了。整整两天时间,都填这上头了。 #include #include #include #include #define BUFSIZE 10...
  • u010814231
  • u010814231
  • 2016年09月01日 14:07
  • 515

C Peimer第11章编程习题

两天时间,15道题,看上去简单,做一下就知道每道都要命,眼睛都要废了…… //answers of the questions in the Peimer at Chapter 11 #inclu...
  • u010814231
  • u010814231
  • 2016年08月29日 12:32
  • 176

C Peimer 第10章编程习题

C Peimer 第10章编程习题。VS2015 支持复合文字,但不支持C99中的变长数组。 #include #define MONTH 12 #define YEAR 5 void s...
  • u010814231
  • u010814231
  • 2016年08月27日 19:43
  • 304

C Peimer 第16章编程习题

宏macro,这部分从前欠缺的也相当厉害,就知道个define与include,条件编译果然强大。最让我佩服的大概就是设计这些编程范式的人了,竟然想到用一个#define NDEBUG等可以截阻测试句...
  • u010814231
  • u010814231
  • 2016年09月05日 14:28
  • 112

【读书笔记】《数字图像处理》(第三版)[刚萨雷斯]-第12章 目标识别

目标识别、分类器、神经网络的基本概念。
  • u014556728
  • u014556728
  • 2016年09月20日 22:26
  • 648

JS DOM 编程艺术(第2版)读书笔记 第12章 综合示例

/** * addLoadEvent */ function addLoadEvent(func) { var oldonload = window.onload; if(type...
  • trr1994917
  • trr1994917
  • 2015年05月17日 10:37
  • 389

c++ primer plus(第6版)中文版 第十二章编程练习答案

第十二章编程练习答案
  • gd275313
  • gd275313
  • 2014年05月18日 17:05
  • 1578

c++ Primer Plus(第六版)第十二章习题,写代码之路

c++ Primer Plus(习题12.1) //12.1头文件 #pragma once #ifndef COW_H #define COW_H #include #include class ...
  • Robot_x
  • Robot_x
  • 2017年01月20日 13:01
  • 488

C Peimer 第17章编程习题(部分)

高级数据结构,先前接触了许多类似的算法,有一些概念,但要说实现的话,其实对个人还是挺难的。本来这是一个机会,能够真正实现一下,以锻炼这点短处,可是每一小段程序都太费时间了,但实现出来收获却又不是特别的...
  • u010814231
  • u010814231
  • 2016年09月06日 20:29
  • 312
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C Peimer 第12章编程习题
举报原因:
原因补充:

(最多只允许输入30个字)