C Primer Plus 第12章_存储类别、链接和内存管理_代码和练习题
随机数函数和静态变量
/* 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章_存储类别、链接和内存管理_代码和练习题相关推荐
- C语言基础笔记之12:存储类别、链接和内存管理
Tips1: 关键字:auto.extern.static.register.const.volatile.restricted. _Thread_local._Atomic 函数:rand().sr ...
- C Primer Plus 第12章 12.6 分配内存:malloc()和free()
2019独角兽企业重金招聘Python工程师标准>>> 首先,回顾一些有关内存分配的事实.所有的程序都必须留出足够内存来存储它们使用的数据.一些内存分配是自动完成的.例如,可以这样声 ...
- 《C++ Primer》第12章 12.3节习题答案
<C++ Primer>第12章 动态内存 12.3节使用标准库:文本查询程序 习题答案 练习12.27:TextQuery和QueryResult类只使用了我们已经介绍过的语言和标准库特 ...
- 第九章 存储类别、链接和内存管理
文章目录 存储类别 作用域 翻译单元和文件 链接 存储期 5种存储类别 自动变量 寄存器变量 块作用域的静态变量 外部链接的静态变量 内部链接的静态变量 多文件 存储类别说明符 存储类别和函数 随机函 ...
- 《C Primer Plus》读书笔记——存储类、链接和内存管理
背景 距离上次写读书笔记的日子已有半个月了.这段时间一直在做摄像头直立平衡车,也把<C Primer Plus>的中级部分扫了一遍.现在做赛道算法识别遇到瓶颈了,就想把读书笔记补回来.原计 ...
- C语言复习-存储类别,链接和内存管理
存储类 从硬件方面来看,被存储的每个值都占一定的物理内存.C语言把这一块内存称为对象.对象可以存储一个或多个值.一个对象可能并未存储到实际的值,但是它在存储适当的值时一定具有相应的大小. 从软件方面来 ...
- SaaS模式、技术与案例详解——第12章 数据存储
[本章导读语] 不积跬步,无以至千里. ________<荀子.劝学篇> 信任,或是缺乏充分信任,都是妨碍SaaS推广的首要问题.我们可以说,关于产品.客户.雇员.供应商等的数据是商业运营 ...
- 第十二章 存储类别、链接和内存管理
程序清单12.1,hiding.c: // hiding.c -- 块中的变量 #include <stdio.h>int main(void) {int x = 30; // 原始的 x ...
- 正点原子的内存管理_正点原子【STM32-F407探索者】第四十二章 内存管理实验
1)资料下载:点击资料即可下载 2)对正点原子Linux感兴趣的同学可以加群讨论:935446741 3)关注正点原子公众号,获取最新资料更新 上一章,我们学会了使用 STM32F4 驱动外部 SRA ...
最新文章
- 图灵直播——听胡阳老师和大家聊聊《Python Web开发者的破局之道》
- python学会后月薪-零基础python培训后薪资有多少?
- Leetcode题库 798.得分最高的最小轮调(差分数组 C实现)
- 《ASP.NET Core 微服务实战》-- 读书笔记(第4章)
- 应用filestream设置时存在未知错误_开机黑屏?常见启动黑屏错误的中文解释!学习电脑知识电脑小匠...
- python能做什么excel-python能做什么,python自学行吗?
- [leetcode]Two Sum @ Python
- 微信WAP H5支付功能实现
- C陷阱与缺陷-1理解函数申明
- 搜索引擎使用技巧详解
- 若依项目环境搭建及使用
- CentOS6安装rpm时报错“Cannot find a valid baseurl for repo: centos-sclo-rh“的解决办法
- Css3中-moz、-ms、-webkit的使用
- Linux中进程的退出
- css 平移到某个位置_Html基本的动画效果(平移,旋转)
- 数据跨域交换成刚需 志翔科技助力企业数据安全合规
- JAVA-0基础学习笔记-day01
- 每个元音包含偶数次的最长子字符串
- 七个常出口国的最新关税要求
- 学习Shell的经典好书推荐
热门文章
- 详解功率谱密度和频谱
- 一文学会使用nRF Sniffer、Wireshark抓蓝牙ble包
- python数据可视化——plt.plot()
- 抢占消费金融高点,马上金融2020年首期ABS成功发行
- 每天赚 597 万美元!34 岁扎克伯格的开挂人生
- 学霸712分弃清华选川大,是“任性”还是“现实”?
- LINUX桌面模式和文本模式切换
- 少儿学python书籍推荐_儿童节,我们从零开始——Python入门资源推荐
- webp怎么打开 webp怎么转换成jpg
- 【Pandas超实用经验汇总-数据建模分析】