随机数函数和静态变量

/* r_drive0.c---测试rand0()函数 */
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
extern unsigned int rand0(void);int main(void)
{int count;for (count = 0; count < 5; count++) {printf("%d\n", rand0());}return 0;
}
/* rand0.c --生成随机数*/
static unsigned long int next = 1; /* 种子 */unsigned int rand0(void)
{/* 生成伪随机数的魔术公式 */next = next * 1103515245 + 12345;return (unsigned int)(next / 65536) % 32768;
}

/* r_drive1.c */
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
extern int rand1(void);
extern void srand1(unsigned int x);int main(void)
{int count;unsigned seed;printf("Please enter your choice for seed.\n");while (scanf("%u", &seed) == 1) {srand1(seed);for (count = 0; count < 5; count++) {printf("%d\n", rand1());}printf("Please enter next seed (q to quit):\n");}printf("Done\n");return 0;
}
/* s_and_r.c */
static unsigned long int next = 1;/* 种子 */int rand1(void)
{/* 生成伪随机数的魔术公式 */next = next * 1103515245 + 12345;return (unsigned int)(next / 65536) % 32768;
}void srand1(unsigned int seed)
{next = seed;
}

掷骰子

/* diceroll.c--掷骰子模拟程序*/
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <time.h>
#include "diceroll.h"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;
}
/* diceroll.h */
#pragma once
extern int roll_count;int roll_n_dice(int dice, int sides);
/* manydice.c--一起编译 */
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <time.h>
#include "diceroll.h"         /* 为roll_n_dice()提供原型,为roll_count变量提供声明 */int main(void)
{int dice, roll;int sides;int status;srand((unsigned int)time(0));                          /* 随机种子 */printf("Enter the number of sides per die, 0 to stop.\n");while (scanf("%d", &sides) == 1 && sides > 0) {printf("How many dices?\n");if (status = scanf("%d", &dice) != 1) {if (status == EOF) {break;                                       /* 退出循环 */}else {printf("You should have entered an integer.");printf(" Let's begin again.\n");while (getchar() != '\n') {continue;                             /* 处理错误的输入 */}printf("How many sides? Enter 0 to stop.\n");continue;                                  /* 进入循环的下一次迭代 */}}roll = roll_n_dice(dice, sides);printf("You have rolled a %d using %d %d-sided dice.\n",roll, dice, sides);}printf("The rollem() function was called %d times.\n",roll_count);                                       /* 使用外部变量 */printf("GOOD FORTUNE TO YOU!\n");return 0;
}

分配内存:malloc()和free()

/* dym_arr.c ---动态分配数组 */
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>int main(void)
{double* ptd;int max;int number;int i = 0;puts("What is the maximum number of type double entries?");if (scanf("%d", &max) != 1) {puts("Number not correct entered -- bye.");exit(EXIT_FAILURE);}ptd = (double*)malloc(max * sizeof(double));if (ptd == NULL) {puts("Memory allocation failed. Goodbye.");exit(EXIT_FAILURE);}/* ptd现在指向有max个元素的数组 */puts("Enter the values (q to quit):");while (i < max && scanf("%lf", &ptd[i]) == 1) {++i;}printf("Here are your %d entries:\n", number = i);for (i = 0; i < number; i++) {printf("%7.2f ", ptd[i]);if (i % 7 == 6) {putchar('\n');}}if (i % 7 != 0) {putchar('\n');}puts("Done.");free(ptd);return 0;
}

C Primer Plus 第12章_存储类别、链接和内存管理_代码和练习题相关推荐

  1. C语言基础笔记之12:存储类别、链接和内存管理

    Tips1: 关键字:auto.extern.static.register.const.volatile.restricted. _Thread_local._Atomic 函数:rand().sr ...

  2. C Primer Plus 第12章 12.6 分配内存:malloc()和free()

    2019独角兽企业重金招聘Python工程师标准>>> 首先,回顾一些有关内存分配的事实.所有的程序都必须留出足够内存来存储它们使用的数据.一些内存分配是自动完成的.例如,可以这样声 ...

  3. 《C++ Primer》第12章 12.3节习题答案

    <C++ Primer>第12章 动态内存 12.3节使用标准库:文本查询程序 习题答案 练习12.27:TextQuery和QueryResult类只使用了我们已经介绍过的语言和标准库特 ...

  4. 第九章 存储类别、链接和内存管理

    文章目录 存储类别 作用域 翻译单元和文件 链接 存储期 5种存储类别 自动变量 寄存器变量 块作用域的静态变量 外部链接的静态变量 内部链接的静态变量 多文件 存储类别说明符 存储类别和函数 随机函 ...

  5. 《C Primer Plus》读书笔记——存储类、链接和内存管理

    背景 距离上次写读书笔记的日子已有半个月了.这段时间一直在做摄像头直立平衡车,也把<C Primer Plus>的中级部分扫了一遍.现在做赛道算法识别遇到瓶颈了,就想把读书笔记补回来.原计 ...

  6. C语言复习-存储类别,链接和内存管理

    存储类 从硬件方面来看,被存储的每个值都占一定的物理内存.C语言把这一块内存称为对象.对象可以存储一个或多个值.一个对象可能并未存储到实际的值,但是它在存储适当的值时一定具有相应的大小. 从软件方面来 ...

  7. SaaS模式、技术与案例详解——第12章 数据存储

    [本章导读语] 不积跬步,无以至千里. ________<荀子.劝学篇> 信任,或是缺乏充分信任,都是妨碍SaaS推广的首要问题.我们可以说,关于产品.客户.雇员.供应商等的数据是商业运营 ...

  8. 第十二章 存储类别、链接和内存管理

    程序清单12.1,hiding.c: // hiding.c -- 块中的变量 #include <stdio.h>int main(void) {int x = 30; // 原始的 x ...

  9. 正点原子的内存管理_正点原子【STM32-F407探索者】第四十二章 内存管理实验

    1)资料下载:点击资料即可下载 2)对正点原子Linux感兴趣的同学可以加群讨论:935446741 3)关注正点原子公众号,获取最新资料更新 上一章,我们学会了使用 STM32F4 驱动外部 SRA ...

最新文章

  1. 图灵直播——听胡阳老师和大家聊聊《Python Web开发者的破局之道》
  2. python学会后月薪-零基础python培训后薪资有多少?
  3. Leetcode题库 798.得分最高的最小轮调(差分数组 C实现)
  4. 《ASP.NET Core 微服务实战》-- 读书笔记(第4章)
  5. 应用filestream设置时存在未知错误_开机黑屏?常见启动黑屏错误的中文解释!学习电脑知识电脑小匠...
  6. python能做什么excel-python能做什么,python自学行吗?
  7. [leetcode]Two Sum @ Python
  8. 微信WAP H5支付功能实现
  9. C陷阱与缺陷-1理解函数申明
  10. 搜索引擎使用技巧详解
  11. 若依项目环境搭建及使用
  12. CentOS6安装rpm时报错“Cannot find a valid baseurl for repo: centos-sclo-rh“的解决办法
  13. Css3中-moz、-ms、-webkit的使用
  14. Linux中进程的退出
  15. css 平移到某个位置_Html基本的动画效果(平移,旋转)
  16. 数据跨域交换成刚需 志翔科技助力企业数据安全合规
  17. JAVA-0基础学习笔记-day01
  18. 每个元音包含偶数次的最长子字符串
  19. 七个常出口国的最新关税要求
  20. 学习Shell的经典好书推荐

热门文章

  1. 详解功率谱密度和频谱
  2. 一文学会使用nRF Sniffer、Wireshark抓蓝牙ble包
  3. python数据可视化——plt.plot()
  4. 抢占消费金融高点,马上金融2020年首期ABS成功发行
  5. 每天赚 597 万美元!34 岁扎克伯格的开挂人生
  6. 学霸712分弃清华选川大,是“任性”还是“现实”?
  7. LINUX桌面模式和文本模式切换
  8. 少儿学python书籍推荐_儿童节,我们从零开始——Python入门资源推荐
  9. webp怎么打开 webp怎么转换成jpg
  10. 【Pandas超实用经验汇总-数据建模分析】