1
#include <stdio.h>
void critic(int *ubits);
int main(void)
{
int units;
printf("How many?\n");
scanf("%d",&units);
while(units != 56)
critic(&units);
printf("You must have looked it up!\n");
return 0;
}
void critic(int *units)
{
printf("No luck,chummy.Try again.\n");
scanf("%d",units);//此处不用再加&了,应为units本身就是一个指针地址
}
2
pe12-2a.c
//pe12-2a.c
#include <stdio.h>
#include <stdlib.h>
//模式
int mode;
//距离
double distance;
//消耗的燃料
double fuel;
void set_mode(int modes)
{
//extern int mode = modes;//both `extern' and initializer 必须先声明再赋值
extern int mode;
mode = modes;
}
void get_info(void)
{
extern int mode;
extern double distance;
if(mode != 1 && mode != 0)
{
printf("Invalid mode specified.");
if(1-mode > 0-mode)
{
mode = 0;
printf("Mode 0 (EN) used.\n");
}
else
{
mode = 1;
printf("Mode 1 (EN) used.\n");
}
}
if(mode == 0)
{
printf("Enter distance traveled in kilometers:");
}
else if (mode == 1)
{
printf("Enter distance traveled in miles:");
}
scanf("%lf",&distance);
getchar();
if(mode == 0)
{
printf("Enter fuel consumed in liters:");
}
else if (mode == 1)
{
printf("Enter fuel consumed in gallons:");
}
scanf("%lf",&fuel);
getchar();
}
void show_info(void)
{
extern double distance,fuel;
if(mode == 0)
{
fuel = distance * 0.13;
printf("Fuel consuption is %.2lf liters per 100 km.\n",fuel/distance*100);
}
else if(mode == 1)
{
fuel = distance * 0.029;
printf("Fuel consuption is %.2lf liters per gallon.\n",fuel/distance*100);
}
}
pe12-2b.c
//pe12-2b.c
#include <stdio.h>
//用引号代表让程序去本地寻找文件而不是去标准库
#include "pe12-2a.h"
extern set_mode(int);
extern get_info(void);
extern show_info(void);
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("Hello world!\n");
return 0;
}
3.
//pe12-2a.c
#include <stdio.h>
#include <stdlib.h>
void get_info(int mode,double * distance,double *fuel)
{
if(mode != 1 && mode != 0)
{
printf("Invalid mode specified.");
if(1-mode > 0-mode)
{
mode = 0;
printf("Mode 0 (EN) used.\n");
}
else
{
mode = 1;
printf("Mode 1 (EN) used.\n");
}
}
if(mode == 0)
{
printf("Enter distance traveled in kilometers:");
}
else if (mode == 1)
{
printf("Enter distance traveled in miles:");
}
scanf("%lf",distance);
getchar();
if(mode == 0)
{
printf("Enter fuel consumed in liters:");
}
else if (mode == 1)
{
printf("Enter fuel consumed in gallons:");
}
scanf("%lf",fuel);
getchar();
}
void show_info(int mode,double distance,double fuel)
{
if(mode == 0)
{
fuel = distance * 0.13;
printf("Fuel consuption is %.2lf liters per 100 km.\n",fuel/distance*100);
}
else if(mode == 1)
{
fuel = distance * 0.029;
printf("Fuel consuption is %.2lf liters per gallon.\n",fuel/distance*100);
}
}
//pe12-2b.c
#include <stdio.h>
//用引号代表让程序去本地寻找文件而不是去标准库
#include "pe12-2a.h"
extern void get_info(int mode,double * distance,double *fuel);
extern void show_info(int mode,double distance,double fuel);
int main()
{
//模式
int mode;
//距离
double distance;
//消耗的燃料
double fuel;
printf("Enter 0 for metric mode, 1 for US mode:");
scanf("%d",&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);
}
return 0;
}
4
#include <stdio.h>
#include <stdlib.h>
#define N 20
int times = 0;
int main()
{
int i;
for(i = 0 ;i< N; i++) {
printf("%d\n",call_times());
}
return 0;
}
int call_times() {
return ++times;
}
5
#include <stdio.h>
#include <stdlib.h>
#define N 100
int main()
{
int i,j,temp;
int arr[N];
//随机
for(i = 0 ; i< N; i++)
{
arr[i] = rand()%10+1;
}
//排序
for(i=0; i<N-1; i++)
{
for(j=i+1; j<N; j++)
{
if(arr[i] < arr[j])
{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
//打印
for(i = 0 ; i< N; i++)
{
printf("%d\n",arr[i]);
}
return 0;
}
6
#include <stdio.h>
#include <stdlib.h>
#define N 1000
#define T 11
int main()
{
int i,temp;
int arr[T] = {0,0,0,0,0,0,0,0,0,0,0};
//随机
for(i = 0 ; i< N; i++)
{
arr[rand()%10+1]++;
}
//打印
for(i = 1 ; i< T; i++)
{
printf("%d has %d times\n",i,arr[i]);
}
return 0;
}
7.
//manydice.c -- 多次掷筛子模拟
//与diceroll.c一起编译
#include <stdio.h>
#include <stdlib.h>//为srand函数提供原型
#include <time.h>//为time()提供原型
#include "diceroll.h"
int main(void)
{
int dice,roll,i;
int sets,sides;
srand((unsigned int)time(0));//随机化种子
printf("Enter the number of sets,enter q to stop.\n");
while(scanf("%d",&sets)==1)
{
printf("How many sides and dice?\n");
scanf("%d %d",&sides,&dice);
printf("Here are %d sets of %d %d-sided throws.\n",sets,dice,sides);
for(i=0;i<sets;i++) {
printf("%d ",roll_n_dice(dice,sides));
if((i+1)%15==0)
putchar('\n');
}
printf("\nHow many sides? Enter q to stop.\n");
}
printf("The rollem() function was called %d times.\n",roll_count);//使用外部变量
printf("GOOD FORTURE TO YOU!\n");
return 0;
}
#ifndef DICEROLL_H_INCLUDED
#define DICEROLL_H_INCLUDED
extern int roll_count;
int roll_n_dice(int dice,int sides);
#endif // DICEROLL_H_INCLUDED
/*diceroll.c -- 掷筛子模拟*/
#include "diceroll.h"
#include <stdio.h>
#include <stdlib.h>//为rand函数提供类库
int roll_count = 0;//外部链接
//这个文件的私有函数
static int rollem(int sides)
{
int roll;
roll = rand() % sides + 1;
++roll_count;//计数函数调用
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;
}
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;
int size;
int value;
printf("Enter the number if 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>):");
}
printf("Done.\n");
return 0;
}
int * make_array(int elem,int val)
{
int i;
int *p = (int *)malloc(elem * sizeof(int));
for(i = 0; i < elem; i++)
{
p[i] = val;
}
return p;
}
void show_array(const int ar[],int n)
{
int i;
for(i = 0; i < n; i++)
{
printf("%d ",ar[i]);
if((i+1)%8 ==0)
{
putchar('\n');
}
}
putchar('\n');
}