练习题:
8.2.1 用rand函数生成[10, 20]之间的随机整数,表达式应该怎么写?
答案: rand()%11 +10
8.3.1 补完本节直方图程序的main函数,以可视化的形式打印直方图。例如上一节统计20个随机数的结果是:
code:
#include <stdio.h> #include <stdlib.h> #define MAX_LEN 20 char randomData[MAX_LEN] = {0}; int data_num[10] = {0}; int max_num=0x00; //产生0~9随机数 void gen_randon(void) { int i; for(i=0; i<MAX_LEN; i++){ randomData[i] = rand() % 10; } } //打印产生的随机数数组 void print_random_data(void) { int i; printf("the random data is:\n"); for(i=0x00; i<MAX_LEN; i++){ if(i!=0 && i%10 ==0) printf("\n"); printf("%d ", randomData[i]); } printf("\n"); } //计算0~9随机数出现的次数 void count_num(void) { int i; for(i=0; i<MAX_LEN; i++){ data_num[randomData[i]]++; } printf("the num count is:\n"); for(i=0x00; i<10; i++){ printf("%d ", data_num[i]); } printf("\n"); } //求取0~9随机数出现的最大次数 void get_max_num(void) { int i; for(i=0x00; i<10; i++){ if(data_num[i] > max_num) max_num = data_num[i]; } printf("the max_num = %d\n", max_num); } //打印0~9随机数的次数显示柱状图 void print_histogram(void) { int i, j; for(i=0x00; i<10; i++){ printf("%d ", i); } printf("\n"); for(i=0x01; i<=max_num; i++){ for(j=0x00; j<10; j++){ if(data_num[j] >= i){ printf("* "); }else{ printf(" "); } } printf("\n"); } } int main(int argc, char *agrv[]) { gen_randon(); print_random_data(); count_num(); get_max_num(); print_histogram(); }
运行结果: