c primer plus第十二章编程练习答案(纯手打欢迎指错)

12.1

#include<stdio.h>
int critic(int n);
int main(void)
{
	int units;
	printf("How many pounds to a firkin of butter?\n");
	scanf("%d",&units);
	while(units!=56)
     units=critic(units);
	printf("You must have looked it up!\n");
	return 0;
	
}
int critic(int n)
{
	printf("No luck,chummy.Try again.\n");
	scanf("%d",&n);
	return n;
}
12.2

#include<stdio.h> //第一个文件

#include"pe12-2a.c"
int main(void)
{
	int mode;
	
	printf("Enter 0 for metric mode,1 for US mode:");
	scanf("%d",&mode);
	while(mode>=0)
	{
		set_mode(mode);
		get_info();
		show_info();
		printf("Enter 0 for metric mode,1 for US mode:");
		printf("(-1 to quit):");
		scanf("%d",&mode);
	}
	printf("Done!\n");
	return 0;
} 
#include<stdio.h>//第二个文件
#include"pe12-2a.h"
static double distance;
static double fuel;
static int type;
void set_mode(int n)
{	
if(n==1||n==0)
	type=n;
	else
	{
	type=1;
	printf("Invalid mode specified.Mode1(US)used.\n");
	}
	
}
/
void get_info(void)
{
	if(type==0)
	{
	printf("Enter distance traveled in kilometers:");
	scanf("%lf",&distance);
	printf("Enter fuel consumed in liters:");
	scanf("%lf",&fuel);
	}
	if(type==1)
	{
	printf("Enter distance traveled in miles:");
	scanf("%lf",&distance);
	printf("Enter fuel consumed in gallons:");
	scanf("%lf",&fuel);
	}
}
/
void show_info(void)
{
	if(type==0)
	printf("Fuel consumpation is %.2lf liters per 100km.\n ",fuel/distance*100);
	if(type==1)
	printf("Fuel consumpation is %.2lf per gallon.\n",distance/fuel);
	
}
void set_mode(int n);//第三个是头文件。
void get_info(void);
void show_info(void);
12.3
#include<stdio.h> //1

#include"pe12-2a.c"
int main(void)
{
	int mode;
	
	printf("Enter 0 for metric mode,1 for US mode:");
	scanf("%d",&mode);
	while(mode>=0)
	{
		
		
		show_info(get_info(set_mode(mode),mode),set_mode(mode));
		printf("Enter 0 for metric mode,1 for US mode:");
		printf("(-1 to quit):");
		scanf("%d",&mode);
	}
	printf("Done!\n");
	return 0;
} 

#include<stdio.h>//2
#include"pe12-2a.h"
int set_mode(int n)
{	
int type;
if(n==1||n==0)
	type=n;
else
type=1;

	
	return type;
}
/
double get_info(int n,int m)
{
 double distance;
 double fuel;
	
	if(m!=0&&m!=1)
		printf("Invalid mode specified.Mode1(US)used.\n");
	if(n==0)
	{
	printf("Enter distance traveled in kilometers:");
	scanf("%lf",&distance);
	printf("Enter fuel consumed in liters:");
	scanf("%lf",&fuel);
	return fuel/distance*100;
	}
	if(n==1)
	{
	printf("Enter distance traveled in miles:");
	scanf("%lf",&distance);
	printf("Enter fuel consumed in gallons:");
	scanf("%lf",&fuel);
	
	return distance/fuel;
	}

		printf("Invalid mode specified.Mode1(US)used.\n");
	
}
/
void show_info(double ans,int type)
{
	if(type==0)
	printf("Fuel consumpation is %.2lf liters per 100km.\n ",ans);
	if(type==1)
	printf("Fuel consumpation is %.2lf per gallon.\n",ans);
	
}

int set_mode(int n);//3
double get_info(int n,int m);
void show_info(double ans,int type);
12.4

#include<stdio.h>//不知道题意是不是这样啊
static int count=0;
int count_f();
int main(void)
{
	int n;
	count_f();
	count_f();
	count_f();
	count_f();
	count_f();
  n=count_f();

	
	printf("%d",n);
	
}
int count_f()
{
	count++;
	
return count;
}

12.5

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int main(void)
{
	srand(time(0));
	int num[100];
	int number;
	int i;
	for(i=0;i<100;i++)
	{
		number=rand()%10+1;
		num[i]=number;
		printf("%d\n",num[i]);
	}
	int j,temp;
	for(i=0;i<100;i++)
	 for(j=i+1;j<100;j++)
	   if(num[i]<num[j])
	 	{
	 		temp=num[i];
	 		num[i]=num[j];
	 		num[j]=temp;
	 	}
	 
	 for(i=0;i<100;i++)
	 printf("%5d",num[i]);
} 

12.6

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int main(void)
{
	srand(time(0));
	int num[1000];
	int number;
	int i;
	int one=0,two=0,three=0,four=0,five=0,six=0,seven=0,eight=0,nine=0,ten=0;
	for(i=0;i<1000;i++)
	{
		number=rand()%10+1;
		num[i]=number;
		switch(number)
		{
			case 1:one++;
			break;
			case 2:two++;
			break;
			case 3:three++;
			break;
			case 4:four++;
			break;
			case 5:five++;
			break;
			case 6:six++;
			break;
			case 7:seven++;
			break;
			case 8:eight++;
			break;
			case 9:nine++;
			break;
			case 10:ten++;
			break;
		}

	}
	
	 
	 printf("1=%-6d2=%-6d3=%-6d4=%-6d5=%-6d6=%-6d7=%-6d8=%-6d9=%-6d10=%-6d\n",one,two,three,four,five,six,seven,eight,nine,ten);
} 

12.7

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int rollem(int sides);
int roll_n_dice(int dice,int sides);
int main(void)
{
	int sets;
	int dice,sides;
	srand(time(0));
	
	printf("Enter the number of sets;enter q to stop.");
	while(scanf("%d",&sets)==1&&sets>0)
	{
		printf("How many sides and how many dice?");
		scanf("%d%d",&sides,&dice);
		printf("Here are 18 sets of %d %d-sided throws.",dice,sides);
		for(int i=0;i<sets;i++)
		printf("%-5d",roll_n_dice(dice,sides));
		printf("\nHow many sets?Enter q to stop");
	} 
}
int rollem(int sides)
{
	int roll;
	roll=rand()%sides+1;
	return roll;
}

int roll_n_dice(int dice,int sides)
{
	int d;
	int total=0;
	if(sides<2)
	{
		printf("Need at least 2 sides.\n");
		return -2;
	}
	if(dice<1)
	{
		printf("Need at least 1 die.\n");
		return -1;
	}

	for(d=0;d<dice;d++)
	total+=rollem(sides);
	
	return total;
}

12.8

#include<stdio.h>
int*make_array(int elem,int val);
void show_array(const int ar[],int n);
int main(void)
{
	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("Enter the number of elements(<1 to quit.)");
		scanf("%d",&size);
	}
	printf("Done.\n");
	return 0;
}
int*make_array(int elem,int val)
{
	int *ar;
	ar=(int*)malloc(elem*sizeof(int));
	for(int i=0;i<elem;i++)
	ar[i]=val;
	
	return ar;
}
void show_array(const int ar[],int n)
{
	int count=0;
	
	for(int i=0;i<n;i++)
	{
	printf("%d   ",ar[i]);
	count++;
	if(count%8==0)
	printf("\n");
	
	}
	
	
}






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值