- 浏览: 284520 次
- 性别:
-
文章分类
最新评论
2.在美国通常是以英里每加仑来计算油耗,在欧洲是以升每百公里来计算。下面是某程序的一部分该程序让用户选择一个模式(公制的或美制的),然后收集数据来计算油耗。
// pe12-2b.c
#include <stdio.h>
#include "pe12-2a.h"
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;
}
下面是一些输出示例:
Enter 0 for metric mode, 1 for US mode: 0
Enter distance traveled in kilometers: 600
Enter fuel consumed in liters: 78.8
Fuel consumption is 13.13 liters per 100 km.
Enter 0 for metric mode, 1 for US mode (-1 to quit): 1
Enter distance traveled in miles: 434
Enter fuel consumed in gallons: 12.7
Fuel consumption is 34.2 miles per gallon.
Enter 0 for metric mode, 1 for US mode (-1 to quit): 3
Invalid mode specified. Mode 1(US) used.
Enter distance traveled in miles: 388
Enter fuel consumed in gallons: 15.3
Fuel consumption is 25.4 miles per gallon.
Enter 0 for metric mode, 1 for US mode (-1 to quit): -1
Done.
如果用户键入了不正确的模式,程序向用户给出提示信息并选取最接近的模式。请提供一个头文件pe12-2a.h和源代码文件pe12-2a.c,来使程序可以运行。源代码文件应定义3个具有文件作用域、内部链接的变量。一个代表模式,一个代表距离,还有一个代表消耗的燃料。函数get_info()根据模式设置提示输入相应的数据,并将用户的回答存入文件作用域变量。函数show_info()根据所选的模式计算并显示燃料消耗值。
程序如下:
//pe12-2a.h extern void set_mode(int mode); extern void get_info(void); extern void show_info();
//pe12-2a.c
#include<stdio.h> int mod = 0; double fuel_consumed; double distance; void set_mode(int mode) { if( mod == -1 ) mod = mode; else if( mode < 0 ) { printf("Ibvalid mode specified.mode 0(us) used"); mod = 0; } else if(mode > 1) { printf("Ibvalid mode specified.mode 1(uk) used"); mod = 1; } else mod = mode; } void get_info(void) { if(mod == 0) { printf("Enter distance traveled in kilometers:"); scanf("%lf",&distance); printf("Enter fuel consumed in liters:"); scanf("%lf",&fuel_consumed); } else { printf("Enter distance traveled in miles:"); scanf("%lf",&distance); printf("Enter fuel consumed in gallons:"); scanf("%lf",&fuel_consumed); } } void show_info() { if(mod == 0) { printf("Fuel consumption is %.2f liters per 100km\n",distance/fuel_consumed); } if(mod == 1) printf("Fuel consumption is %.2f miles per gallon \n",distance/fuel_consumed); }
//pe12-2b.c
#include<stdio.h> #include "pe12-2a.h" 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; }
4.编写—个函数,它返回函数自身被调用的次数,并在一个循环中测试之。
#include<stdio.h> int count = 0; int re_count(void); int main(void) { int cou = 0; for(int i = 0; i < 5; i++) cou = re_count(); printf("the count is %d\n",cou); } int re_count(void) { return ++count; }
5.编写产生100个l到10范围内的随机数的程序,并且以降序排序(可以将11章中的排序算法稍加改动来对整数进行排序。这里,对数字本身进行排序即可)
#include<stdio.h> #include<stdlib.h> #include<time.h> #define COUNT 100 int rand_count[COUNT]; //save rand count void get_count(); //get rand count void sort(void); void display(void); int main(void) { get_count(); sort(); display(); return 0; } void get_count(void) { srand(time(NULL)); for(int i = 0; i < 100; i++) rand_count[i] = rand()%10 + 1; } //冒泡排序 void sort(void) { int temp; for(int i = 0; i < COUNT - 1; i++) for(int j = 0; j < COUNT -1; j++ ) { if(rand_count[j] < rand_count[j+1]) { temp = rand_count[j+1]; rand_count[j+1] = rand_count[j]; rand_count[j] = temp; } } } void display(void) { for(int i = 0; i < COUNT; i++) { printf("%d ",rand_count[i]); if((i+1) % 10 == 0) printf("\n"); } }
6.编写一个产生1000个l到10范围内的随机数的程序。不必保存或打印数字,仅打印每个数被产生了多少次。让程序对10个不同的种子值进行计算。数字出现的次数相同吗?可以使用本章中的函数或ANSIC中的函数rand()和srand(),它们与我们的函数具有相同的形式。这是一个测试特定随机数发生器的随机性的方法。
#include<stdio.h> #include<stdlib.h> #include<time.h> #define COUNT 1000 //1000个随机数 #define NUM 10 //1-10随机数 int rand_count[NUM]; //用于随机数计数 void get_count(); //get rand count void display(void); //显示每个随机数产生的个数 int main(void) { for(int i = 0; i < 10; i++) { get_count(); display(); } return 0; } void get_count(void) { for(int j = 0 ; j < NUM; j++) rand_count[j] = 0; srand(time(NULL)); int temp; for(int i = 0; i < 1000; i++) { temp = rand()%10 + 1; rand_count[temp-1]++; } } void display(void) { printf("1-10出现的次数分别是:\n"); for(int i = 0; i < NUM; i++) { printf("%d ",rand_count[i]); if((i+1) % 10 == 0) printf("\n"); } }
7.编写一个程序,该程序与我们在显示程序清单12.13的输出之后所讨论的修改版程序具有相同表现。也就是说,输出应像下面这样:
Enter the number of sets; enter q to stop.
18
How many sides and how many dice?
6 3
Here are 18 sets of 3 6-sided throws.
12 10 6 9 8 14 8 15 9 14 12 17 11 7 10
13 8 14
How many sets? Enter q to stop.
q
//pe12-7a.c #include<stdio.h> #include<time.h> #include<stdlib.h> int number_of_sets ;//掷筛子次数 int sides ;//每个筛子面数 int dices ; //共有几个筛子 //掷一个筛子得到的点数 int rollem(void) { return rand()% sides + 1; } //一次掷dices个筛子得到的点数和 int get_one_rolls(void) { int total = 0; for(int i = 0; i < dices; i++) total += rollem(); return total; } void display(int * ptr) { printf("here are %d sets of %d %d-sided dice.\n", number_of_sets, dices, sides); for(int i = 0; i < number_of_sets; i++) { printf("%d ",ptr[i]); if((i+1) %10 == 0) puts("\n"); } } // void get_all_rolls(void) { int *pointer; pointer = (int *)malloc(number_of_sets * sizeof(int)); for(int i = 0; i < number_of_sets; i++) pointer[i] = get_one_rolls(); display(pointer); free(pointer); } //pe12-7.h extern int number_of_sets; //掷筛子次数 extern int sides;//每个筛子面数 extern int dices; //共有几个筛子 extern int rollem(void); extern void display(int * ptr); extern void get_all_rolls(void); //pe12-7b.c #include<stdio.h> #include "pe12-7.h" #include<stdlib.h> #include <windows.h> //提供GetTickCount()函数 int main(void) { //srand((unsigned int)time(0));//随机化种子 srand((unsigned int)GetTickCount()); printf("Enter the number of sets, 0 to stop.\n"); while (scanf("%d", &number_of_sets) == 1 && number_of_sets > 0) { printf("How many sides and how many dices?\n"); scanf("%d", &sides); scanf("%d",&dices); get_all_rolls();// printf("\nEnter the number of sets, 0 to stop.\n"); } printf("GOOD FORTUNE TO YOU!\n"); return 0; }
8.下面是某程序的一部分:
// pe12-8.c
#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;
}
给出函数make_array()和show_array()的定义以使程序完整。函数make_array()接受两个参数。第一个是int数组的元素个数,第二个是要赋给每个元素的值。函数使用malloc()来创建一个适当大小的数组,把每个元素设定为指定的值,并返回一个数组指针。函数show_array()以8个数一行的格式显示数组内容。
#include<stdio.h> #include<stdlib.h> //为free()提供类库 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 th initialization vlaue:"); scanf("%d",&value); pa = make_array(size,value); if(pa) { show_array(pa,size); free(pa); } printf("Enter the number of elemnts(<1 to quit):"); scanf("%d",&size); } printf("\n"); return 0; } int * make_array(int elem,int val) { int *ptr; ptr =(int *)malloc(elem * sizeof(int)); for(int i = 0; i < elem ; i++) ptr[i] = val; return ptr; } void show_array(const int ar[],int n) { for(int i = 0; i < n; i++) { printf("%d ",ar[i]); if((i + 1) % 8 == 0)puts("\n"); } puts("\n"); }
相关推荐
第12章 windows消息处理和多线程编程 第三部分 文档视图结构 第13章 菜单、键盘、加速键、多信息 第14章 工具栏和状态栏 第15章 可重用框架窗口基类 第16章 文档与视图的分 离 第17章 文档读写——SDI...
计算机操作系统第四章习题答案 本资源共计13道题,涵盖计算机操作系统的多个方面,包括存储器管理、链接方式、动态分区分配、内存管理等。此资源可以帮助学习者更好地理解计算机操作系统的基本概念和原理。 1. 为...
第12章 链接服务器与分布式事务 12.1 使用链接服务器和分布式数据 12.1.1 使用分布式查询 12.1.2 使用分布式事务 12.1.3 运行分布式事务处理协调器服务 12.2 管理链接服务器 12.2.1 添加链接服务器 12.2.2 配置链接...
最后,第12章可能会涵盖MFC的高级主题,如网络编程、数据库访问或者多线程。MFC提供了对Winsock的支持,可用于实现网络通信功能;ADO(ActiveX Data Objects)库可以帮助开发者轻松连接和操作数据库;同时,MFC也...
书籍目录: 第1章 Windows程序设计基础 1.1 必须了解的内容 1.2 VC++的基本使用 1.3 本书推荐的编程环境 ...第12章 Windows数字图像处理 12.1 编程基础 12.2 CVector2D类 12.3 CGray类的设计
第12章 链接服务器与分布式事务 12.1 使用链接服务器和分布式数据 12.1.1 使用分布式查询 12.1.2 使用分布式事务 12.1.3 运行分布式事务处理协调器服务 12.2 管理链接服务器 12.2.1 添加链接服务器 12.2.2 配置链接...
第12章 链接服务器与分布式事务 12.1 使用链接服务器和分布式数据 12.1.1 使用分布式查询 12.1.2 使用分布式事务 12.1.3 运行分布式事务处理协调器服务 12.2 管理链接服务器 12.2.1 添加链接服务器 12.2.2 配置链接...
数组提供了一种连续的内存空间来存储元素,而链表则通过指针链接各个元素。 栈是一种后进先出(LIFO)的数据结构,常用于执行函数调用、表达式求值等操作。栈有两个基本操作:push和pop。push操作是在栈顶添加元素...
#### 第十讲:JVM性能分析工具 - **VisualVM**: 提供了丰富的可视化界面,可以监控和分析JVM的性能,包括内存使用、CPU负载、线程状态、垃圾回收等。 总结而言,Java内存管理和类加载机制是Java程序执行的基础。...
第1章 安装指南:这部分详细介绍了安装ER Mapper所需的系统配置,包括操作系统、显示器、外设、内存和硬盘空间等。安装过程中需确保具备管理员权限,并提供了不同类型的安装选项,如典型安装、完整安装、最小安装、...
第十二章:位段和枚举 - 位段的定义与使用 - 枚举类型的定义和应用 第十三章:高级话题 - 链表和树等数据结构 - 动态链接库 - 多线程编程简介 通过学习这十三个章节,读者将全面掌握C语言的基础知识,包括基本语法...
**第12章 对话框和对话框类CDialog** 对话框是Windows应用程序中常见的用户交互元素。在MFC中,对话框通常由CDialog类及其派生类表示。本章将讲解如何创建和使用对话框,包括对话框模板、对话框数据交换(DDX)和...
11. **Windows编程基础**:第十二章介绍了Windows编程的基本概念,如消息循环、窗口过程和事件驱动编程。 12. **MFC(Microsoft Foundation Classes)**:第十三章探讨了使用MFC库进行Windows应用程序开发,它简化...
CruiseYoung提供的带有详细书签的电子书籍目录 ... OCPOCA认证考试指南全册:Oracle Database... 第12章 SQL联接 397 12.1 使用同等联接和非同等联接编写SELECT语句访问多个表的数据 398 12.1.1 联接的类型 398 12.1.2 ...
CruiseYoung提供的带有详细书签的电子书籍目录 ... 对应的书籍资料见: OCPOCA认证考试指南全册:Oracle ... 第12章 SQL联接 397 12.1 使用同等联接和非同等联接编写SELECT语句访问多个表的数据 398 12.1.1 联接的类型...
第2章 管理数据存储、对象和容量 2.1 配置数据存储 2.1.1 管理可用空间碎片 2.1.2 聚集可用空间的技术 2.1.3 管理区的碎片 2.1.4 查找接近 MAXEXTENTS 值的 对象 2.1.5 避免数据字典的碎片 2.1.6 本地管理区...
## 第十二章:XControl XControl是LabVIEW的组件编程工具,允许创建可复用的自定义控件,增强程序的模块化。 ## 第十三章:项目管理 项目管理涉及工时估算和LabVIEW工程资源管理器的使用,后者为大型项目提供了更...
第二章数据表示,占据4个学时,重点讲解二进制、八进制、十进制和十六进制之间的转换,以及不同数据类型(如整型、浮点型)在计算机中的表示方式,还包括字符编码如ASCII和Unicode。 第三章程序表示,总计14个学时...
6. **第十一章:数据库基础**: - 数据库系统概念:数据库、数据库管理系统、数据库模式。 - 数据模型:关系模型、实体-关系模型。 - SQL语言基础:数据查询、插入、更新、删除。 - 数据库安全性、完整性和并发...