看完C prime plus(第五版)第十二章,随带完成了后面的习题。

1.不使用全局变量,重写程序清单12.4的程序。

先贴出12.4的程序,方便对照;

 /* global.c  --- 使用外部变量  */
#include <stdio.h>
int units = ; //一个外部变量
void critic(void);
int main(void)
{
extern int units; printf ("How many pounds to a firkin of butter?\n");
scanf("%d", &units);
while(units != )
critic(); printf("You must have looked it up!\n");
return ;
} void critic(void){
printf("No luck, chummy, Try again in.\n");
scanf("%d", &units);
}

first-text

以下是我的答案:

 #include "stdio.h"

 void critic(void);

 int main(void){
int num;
printf("How many pounds to a firkin of butter?\n");
while(scanf("%d", &num) == && num != ){
critic();
} printf("You must have looked it up!\n"); return ;
} void critic(void){
puts("Not lucky, Try again!");
}

first-case

2.在美国通常以英里每加仑来计算油耗,在欧洲是以升每百公里来计算。下面是某程序的一部分,该程序让用户选择一个模式(公制的或美制的),然后收集数据来计算油耗。

 #include "stdio.h"

 void set_mode(int get);            //设置模式
void get_info(void); //获取行驶公里、消耗油量,计算
void show_info(void); //展示计算结果 static int mode;
static double loss = 0.0,
distance = 0.0; void set_mode(int get){
switch(get){
case :
mode = ;
break;
case :
default:
mode = ;
break;
}
} void get_info(void){
extern double loss, distance;
switch(mode){
case :
puts("输入你所形式的公里数:");
scanf("%lf", &distance);
puts("损耗的油(单位:加仑):");
scanf("%lf", &loss);
break;
case :
puts("输入你所形式的英里数:");
scanf("%lf", &distance);
puts("损耗的油(单位:加仑):");
scanf("%lf", &loss);
break;
default:
puts("你选择的模式不正确!默认使用英里模式!");
puts("输入你所形式的英里数:");
scanf("%lf", &distance);
puts("损耗的油(单位:加仑):");
scanf("%lf", &loss);
break;
}
} void show_info(void){
switch(mode){
case :
printf("平均每公里损耗%0.2lf加仑油!\n", distance / loss);
break;
case :
default:
printf("平均每英里损耗%0.2lf加仑油!\n", distance / loss);
break;
}
}

second-case-pe12-2a.h

 #include "stdio.h"
#include "pe12-2a.h" //函数要求写在pe12-2a.h中 int main(void){
int mode;
printf("Enter 0 for metric mode, 1 for US mode:");
scanf("%d", &mode);
while(mode >= ){
set_mode(mode);
get_info();
show_info();
printf("Enter 0 for metric mode, 1 for US mode.");
printf("(-1 to quit)");
scnaf("%d", &mode);
}
printf("Done \n"); return ;
}

second-case-pe12--2.c

3.重新设计习题2中的程序,使它仅使用自动变量。(使用不同的函数)

 //pe12-3a.h
#include "stdio.h"
#define MET 0
#define US 1 void set_mode(int *); //获取用户输入的信息,设置模式
void get_info(const int mode, double *distance, double *loss); //获取用户的信息
void show_info(const int mode, const double distance, const double loss); //计算平均油耗,输出结果 void set_mode(int *get){
if((*get != US) && (*get > US)){
*get = US;
}
} void get_info(const int mode, double *distance, double *loss){
switch(mode){
case :
puts("输入你所形式的公里数:");
scanf("%lf", distance);
puts("损耗的油(单位:加仑):");
scanf("%lf", loss);
break;
case :
puts("输入你所形式的英里数:");
scanf("%lf", distance);
puts("损耗的油(单位:加仑):");
scanf("%lf", loss);
break;
default:
puts("你选择的模式不正确!默认使用英里模式!");
puts("输入你所形式的英里数:");
scanf("%lf", distance);
puts("损耗的油(单位:加仑):");
scanf("%lf", loss);
break;
}
} void show_info(const int mode, const double distance, const double loss){
switch(mode){
case :
printf("平均每公里损耗%0.2lf加仑油!\n", distance / loss);
break;
case :
default:
printf("平均每英里损耗%0.2lf加仑油!\n", distance / loss);
break;
}
}

third-case-pe12-3a.h

 //12-3b.c
#include "stdio.h"
#include "12-3a.h" int main(){
int mode;
double distance = 0.0,
loss = 0.0;
printf("输入0选择公尺单位,输入1选择英尺单位");
scanf("%d", &mode);
while(mode >= ){
set_mode(&mode);
get_info(mode, &distance, &loss);
show_info(mode, distance, loss);
printf("输入0选择公尺单位,输入1选择英尺单位");
scanf("%d", &mode);
} puts("Done");
return ;
}

third-case-pe12-3b.c

4.编写一个函数,返回函数自身被调用的次数;

 #include "stdio.h"

 int test_call(void);

 int main(void){
int temp, num;
while(scanf("%d", &temp) == ){
for(; temp > ; temp--){
num = test_call();
}
printf("这次一共调用了%d次函数\n", num);
printf("输入调用次数:");
} return ;
} int test_call(void){
static int num = ;
return ++num;
}

fourth-case-pe12-4a.c

5.编写产生100个1到10范围内的随机数的程序,并且以降序排序;

 #include "stdio.h"
#include "stdlib.h"
#define LEN 100 void set_num(int *); //产生随机数
void show_num(int *); //排序后输出 int main(void){
int arr[LEN],
temp = ; set_num(arr);
show_num(arr); return ;
} void set_num(int *arr){
int temp = ;
for(; temp < LEN; temp++){
arr[temp] = rand() % + ; //rand() % 10 产生一个个位数,为了避免是0,所以加1.
}
} void show_num(int *arr){
int temp = ,
loop1 = , //用于循环而创建的变量
loop2 = ; //进行排序
for(; loop1 < LEN; loop1++){
for(loop2 = loop1; loop2 < LEN; loop2++){
if(arr[loop1] < arr[loop2]){ //注意降序排列
temp = arr[loop1];
arr[loop1] = arr[loop2];
arr[loop2] = temp;
}
}
} for(temp = ; temp < LEN; temp++){
printf("%3d", arr[temp]);
if((temp + ) % == )
putchar('\n');
}
}

fifth-case-12pe-5a.c

6.编写一个程序,产生1000个范围在1到10的数字,不必存储他们,只需要计算每个数出现的次数;

 #include "stdio.h"
#include "stdlib.h"
#define LEN 1000 static number[];
//计算数字出现的次数
void get_thousand(int );
//输出每个数字出现的次数
void show_thousand(void); int main(void){
int temp = ,
arr[LEN];
for(; temp < LEN; temp++){
//生成一个随机数
get_thousand(arr[temp] = rand() % + );
} show_thousand(); return ;
} void get_thousand(int num){
static temp = ;
switch(num){
case :
number[--num]++;
break;
case :
number[--num]++;
break;
case :
number[--num]++;
break;
case :
number[--num]++;
break;
case :
number[--num]++;
break;
case :
number[--num]++;
break;
case :
number[--num]++;
break;
case :
number[--num]++;
break;
case :
number[--num]++;
break;
case :
number[--num]++;
break;
default:
puts("产生了一个不在1-10范围内的数字!");
break;
}
++temp;
} void show_thousand(void){
int temp = ,
sum = ;
for(; temp < ; temp++){
printf("%d出现了%d次!\n", temp + , number[temp]);
sum += number[temp];
}
printf("一共产生了%d个数!\n", sum);
}

sixth-case-pe12-6a.c

7.编程程序,与程序清单12.13的输出之后所讨论的修改版程序具有相同的表现;

//这题空缺

8.给出函数make_array(),show_array().其中ma接受两个参数,第一个是int数组的元素个数,第二个是赋给每个元素的值。函数使用malloc()创建一个适当大小得数组,将每个元素设定为指定的值并且返回一个指针,函数sh以8个数一行的格式显示数组内容;

 #include "stdio.h"
#include "stdlib.h" int * make_array(int elem, int val);
void show_array(const int ar[], int n); int main(void){
int *pa,
size,
value; printf("输入数字:");
scanf("%d", &size); while(size > ){
printf("输入初始值:");
scanf("%d", &value);
pa = make_array(size, value);
if(pa){
show_array(pa, size);
free(pa);
}
printf("输入数字:");
scanf("%d", &size);
} puts("Done");
return ;
} int * make_array(int elem, int val){
int *ptr = (int *) malloc(elem * sizeof(int)),
temp;
for(temp = ; temp < elem; temp++)
ptr[temp] = val; return ptr;
} void show_array(const int ar[], int n){
int temp = ;
for(; temp < n; temp++){
printf("%5d", ar[temp]);
if((temp + ) % == )
putchar('\n');
}
if(n % != )
putchar('\n');
}

eighth-case-pe12-8a.c

C primer plus 第五版十二章习题的更多相关文章

  1. 《OpenCL异构并行编程实战》补充笔记散点,第五至十二章

    ▶ 第五章,OpenCL 的并发与执行模型 ● 内存对象与上下文相关而不是与设备相关.设备在不同设备之间的移动如下,如果 kernel 在第二个设备上运行,那么在第一个设备上产生的任何数据结果在第二个 ...

  2. C++primer(第五版)读书笔记&习题解答---CHAPTER 3

    C++标准库类型包括:string,vector和迭代器,其中string是可变长的字符序列,vector存放的是某种给定类型对象的可变长序列,迭代器是string和vector的配套类型,常被用于访 ...

  3. C primer plus 读书笔记第十二章

    C的强大功能之一在于它允许我们控制程序的细节.C的内存管理系统正是这种控制能力的例子.它通过让我们决定哪些函数知道哪些变量以及一个变量在程序中存在多长时间来实现这些控制. 1.存储类及其说明符 主要的 ...

  4. C++ Primer(第五版)读书笔记 & 习题解答 --- Chapter 3

    Chapter 3.1 1. using声明具有如下的形式: using namespace::name; Chapter 3.2 1. C++标准一方面对库类型所提供的操作做了规定,另一方面也对库的 ...

  5. C++ Primer(第五版)读书笔记 & 习题解答 --- Chapter 2

    Chapter 2.1 1. 数据类型决定了程序中数据和操作的意义. 2. C++定义了一套基本数据类型,其中包括算术类型和一个名为void的特殊类型.算术类型包含了字符.整型.布尔值以及浮点数.vo ...

  6. C++ Primer(第五版)读书笔记 & 习题解答 --- Chapter 1

    Chapter 1.1 1. 每个C++程序都必须有且只能有一个main函数,main函数的返回类型必须是int.操作系统通过调用main函数来运行C++程序. 2. 一个函数的定义包含四部分:返回类 ...

  7. C Primer Plus(第五版)1

    这是C Primer Plus(第五版)的第一章,上传上来主要是方便我进行做笔记,写注释,还有我会删掉一些“废话”等. 1.1 C语言的起源 贝尔实验室的 Dennis Ritchie 在1972年开 ...

  8. sql 入门经典(第五版) Ryan Stephens 学习笔记 (第六,七,八,九,十章,十一章,十二章)

    第六章: 管理数据库事务 事务 是 由第五章 数据操作语言完成的  DML ,是对数据库锁做的一个操作或者修改. 所有事务都有开始和结束 事务可以被保存和撤销 如果事务在中途失败,事务中的任何部分都不 ...

  9. Gradle 1.12用户指南翻译——第五十二章. Maven 插件

    本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见:http://blog.csdn.net/column/details/gradle-translation.html翻译项目请关注Github上 ...

随机推荐

  1. ajax实现分页

    使用ajax分页原理:第一步:做一个表格 第二步:封装两个方法.第三步:新建个负责显示页面.第四步:做一个纯PHP处理页面处理要显示页的所有数据 首先使用一张数据比较多的数据库中的表格: 首页面加载后 ...

  2. RocketMQ源码 — 二、 NameServer

    NameServer 作用:Producer和Consumer获取Broker的地址 目的:解耦Broker和Producer.Consumer 原理:使用netty作为通信工具,监听指定端口,如果是 ...

  3. Git安装使用

    转载:http://www.open-open.com/lib/view/open1414396787325.html 1.window版地址 https://git-for-windows.gith ...

  4. python 2.7 字符串处理

    python 2 字符串处理小结: 字符替换:new_str = old_str.replace(char_old, char_new)--可用于清除字符串中所有的空格 字符分割(正/反):str_n ...

  5. 2. SpringMVC 上传文件操作

    1.创建java web项目:SpringMVCUploadDownFile 2.在项目的WebRoot下的WEB-INF的lib包下添加如下jar文件 com.springsource.com.mc ...

  6. CSS3学习之——【特殊属性】

    一.CSS3的一些特殊属性 1.1 text-shadow text-shadow曾经在css2中就出现过,但在css2.1版本中又被抛弃了,现在css3.0版本又重新捡回来了.这说明text-sha ...

  7. BitMap - leetcode [位运算]

    136. Single Number 因为A XOR A = 0,且XOR运算是可交换的,于是,对于实例{2,1,4,5,2,4,1}就会有这样的结果: (2^1^4^5^2^4^1) => ( ...

  8. Shell终端收听音乐--豆瓣FM命令行版

    douban.fm Terminal-based douban.fm inspired by douban.fm.该版本版基于Python2.* 安装Python2.* pacman -S pytho ...

  9. python json.load 的奇葩错误

    json.load() 可以参数是文件对象, 但是这种方式会遇到莫名其妙的错误: No JSON object could be decoded 有的朋友说的是utf-8编码有BOM和无BOM造成的. ...

  10. iOS Size Class使用

    iOS8和iPhone6发布已经过去蛮久了,广大的果粉终于迎来了大屏iPhone,再也不用纠结为大屏买三星舍苹果了-但是对于iOS开发人员来说,迎来了和Android开发开发一样的问题->各种屏 ...