编程练习七
来源:互联网 发布:网络综合布线工程师 编辑:程序博客网 时间:2024/06/07 14:45
第12章存储类、链接和内存管理
c primer plus 课本P352中第2、3、4、5、6、7题
第2题:
<span style="font-size:18px;">//Pel2-2a.h:#include <stdio.h>#define METRIC 0#define US 1 void set_mode(int m);void get_info();void show_info();</span>
<span style="font-size:18px;">//Pel2-2a.c:#include <stdio.h>#include "pel2-2a.h" static int mode=METRIC;static int distance;static double fuel;void set_mode(int m){ mode=m; if((m==METRIC)||(m==US)) ; else printf("Invalid mode specified. Mode %s used.\n", m == METRIC ? "0(METRIC)" : "1(US)"); } void get_info(){ if (mode==METRIC) { printf("enter distance traveled in kilometers:"); scanf("%d",&distance); printf("enter fuel consumed in liters:"); scanf("%lf",&fuel); //printf("%f\n",fuel); //printf("%lf\n",fuel); 这里如果使用%lf,会出问题,打印0.000 } else { printf("enter distance traveled in miles:"); scanf("%d",&distance); printf("enter fuel consumed in gallons:"); scanf("%lf",&fuel); }} void show_info(){ // printf("%d\n",distance); //printf("%f\n",fuel); if(mode==METRIC) printf("fuel consumption is %.2f liters per 100 km\n.",(fuel/distance)*100); else printf("fuel consumption is %.2f miles per gallon.\n",distance/fuel);}</span>
<span style="font-size:18px;">//主函数:#include <stdio.h>#include "pel2-2a.h"int main(){ 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;}</span>
第三题:
#include <stdio.h>int set_mode();void get_info(int m,int *d,double *f);void show_info(int m,int d,double f); int main(){ int mode; int distance; double fuel; mode=set_mode(); while (mode>=0) { get_info(mode,&distance,&fuel); show_info(mode,distance,fuel); printf("Enter 0 for metric mode, 1 for US mode"); printf(" (-1 to quit): "); scanf("%d", &mode); } printf("Done.\n"); return 0;} int set_mode(){ int m; printf("Enter 0 for metric mode, 1 for US mode: "); scanf("%d",&m); if (m==0||m==1); else printf("Invaild mode specificed. Mode %s used\n",m == 0 ? "0(METRIC)" : "1(US)"); return m;}void get_info(int m,int *d,double *f){ if(m==0) { printf("enter distance traveled in kilometers:"); scanf("%d",d); printf("enter fuel consumed in liters:"); scanf("%lf",f); } else { printf("enter distance traveled in miles:"); scanf("%d",d); printf("enter fuel consumed in gallons:"); scanf("%lf",f); }}void show_info(int m,int d,double f){ if(m==0) printf("fuel consumption is %.2f liters per 100 km\n.",(f/d*100)); else printf("fuel consumption is %.2f miles per gallon.\n",(d/f));}
4.编写一个函数,返回自身被调用的次数
<span style="font-size:18px;">#include<stdio.h>int n;int fun(){ n++; return n;} int main(){ int i; for(i=1;i<=10;i++) { printf("函数被调用%d次\n",fun()); } return 0;}</span>
5.编写产生100个1到10范围内的随机数的程序,并且以降序排序。
/*编写产生100个1到10范围内的随机数的程序,并且以降序排序*/ #include <stdio.h> void funsort(int *); int main(){ int i; int a[100]; for(i=0; i<100; i++) { a[i]=rand()%10+1; printf("%3d",a[i]); if(i%10==9) printf("\n"); } funsort(&a); printf("\n"); printf("排序后的数组为:\n"); for(i=0; i<100; i++) { printf("%3d",a[i]); if(i%10==9) printf("\n"); } return 0;}void funsort(int *a){ int k,t; int temp; for(k=0; k<100; k++) { for(t=k+1; t<100; t++) { if(a[k]<a[t]) { temp=a[t]; a[t]=a[k]; a[k]=temp; } } }}
6.编写一个产生1000个1到10范围内的随机数的程序。不必保存或打印数字,仅打印数字被产生的次数。
<span style="font-size:18px;">#include <stdio.h> int main(){ int i,j; int a[1000]; int k[11]= {0}; for(i=0; i<1000; i++) { a[i]=rand()%10+1; //printf("%3d",a[i]); k[a[i]]++; if(i%10==9) printf("\n"); } for(j=1; j<11; j++) { printf("%d 被产生了 %d 次\n",j,k[j]); } printf("\n"); return 0;}</span>
7.编写一个程序,输出如下:
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-side 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.
<span style="font-size:18px;">#include <stdio.h>#include <stdlib.h> /* for srand() */#include <time.h> /* for time() */</span>
<span style="font-size:18px;">int rollem(int);</span>
<span style="font-size:18px;">int main(){ int dice, count, roll; int sides; int set, sets; srand((unsigned int) time(0)); /* randomize rand() */ printf("Enter the number of sets; enter q to stop.\n"); while ( scanf("%d", &sets) == 1) { printf("How many sides and how many dice?\n"); scanf("%d %d", &sides, &dice); printf("Here are %d sets of %d %d-sided throws.\n", sets, dice, sides); for (set=0;set<sets;set++) { for (roll=0,count=0;count<dice;count++) roll+=rollem(sides); /* running total of dice pips */ printf("%4d ",roll); if (set%15==14) putchar('\n'); } if (set%15!=0) putchar('\n'); printf("How many sets? Enter q to stop.\n"); } return 0;}</span>
<span style="font-size:18px;">int rollem(int sides){ int roll; roll=rand()%sides+1; return roll;}</span>
0 0
- 编程练习七
- Scala练习(七)
- 听课练习(七)
- Acm练习(七)
- python练习(七)
- (二十二)第二章最后的编程练习答案(七合一版)
- 编程练习
- 编程练习
- 编程练习
- 编程练习
- 编程练习
- 编程练习
- 编程练习
- 编程练习
- 编程练习
- 编程练习
- 编程练习
- 编程练习
- 如何打开Gzjs文件
- 字符串练习题:【CF235C】 Cyclical Quest(SAM )
- 移动开发类图书年度盘点:最值得看的39本
- 虚拟机 Linux 系统增加换页空间
- 基本架构优化
- 编程练习七
- 素数和
- opencv实现车牌识别之字符分割
- mac 连win7 Telnet 登陆
- Apache下禁止特定目录执行PHP,提高安全性
- shell 实现并发操作
- [转载]关于大型网站技术演进的思考
- SQLite3查询表结构
- 单链表逆序