page203

// page203.cpp : 定义控制台应用程序的入口点。
//C++ 面向对象程序设计


// 有bug的温度换算程序
#include "stdafx.h"
#include <iostream>
using namespace std ;


int _tmain(int argc, _TCHAR* argv[])
{
 
 double fahrenhit ;
 double celsius ;

 cout << " Enter temperature in Fahrenheit . " << endl ;
 cin >> fahrenhit ;
 celsius = (5 / 9) * (fahrenhit - 32 );//这个错误很明显的哦 呵呵
 cout << " Temperature in Celsius is " << celsius << endl ;

 cin >> fahrenhit;
 return 0;
}

 

好的,我能够理解你的问题,以下是对应的 C 代码实现: ```c #include <stdio.h> #include <stdlib.h> #include <time.h> #define INS_NUM 320 //指令总数 #define FRAME_NUM 32 //物理页框数 #define FRONT_INS_NUM INS_NUM/4 //前地址指令数 #define BACK_INS_NUM INS_NUM/4 //后地址指令数 #define SEQ_INS_NUM INS_NUM/2 //顺序执行指令数 //生成 0~319 的随机数 int rand_num() { return rand() % INS_NUM; } int main() { int i, j; int m, m1; int page_fault = 0; //缺页次数 int page_table[FRAME_NUM]; //页表 int ins_seq[INS_NUM]; //指令序列 int front_ins[FRONT_INS_NUM]; //前地址指令序列 int back_ins[BACK_INS_NUM]; //后地址指令序列 int seq_ins[SEQ_INS_NUM]; //顺序执行指令序列 int front_ins_top = -1, back_ins_top = -1, seq_ins_top = -1; //栈顶指针 srand((unsigned)time(NULL)); //初始化随机数种子 //生成前地址指令序列 for (i = 0; i < FRONT_INS_NUM; i++) { front_ins[i] = rand_num(); } //生成后地址指令序列 for (i = 0; i < BACK_INS_NUM; i++) { back_ins[i] = rand_num(); } //生成顺序执行指令序列 for (i = 0; i < SEQ_INS_NUM; i++) { seq_ins[i] = rand_num(); } //生成指令序列 m = rand_num(); for (i = 0; i < INS_NUM; i++) { if (i < SEQ_INS_NUM) { //顺序执行指令 ins_seq[i] = seq_ins[++seq_ins_top]; ins_seq[i] = (ins_seq[i] > m) ? ins_seq[i] - SEQ_INS_NUM : ins_seq[i]; } else { int p = rand_num() % 4; if (p == 0) { //顺序执行指令 ins_seq[i] = ins_seq[i - 1] + 1; } else if (p == 1) { //前地址指令 if (front_ins_top == -1) { ins_seq[i] = ins_seq[i - 1] + 1; } else { m1 = front_ins[front_ins_top--]; ins_seq[i] = (m1 > m) ? m1 - SEQ_INS_NUM : m1; } } else if (p == 2) { //后地址指令 if (back_ins_top == -1) { ins_seq[i] = ins_seq[i - 1] + 1; } else { ins_seq[i] = back_ins[back_ins_top--]; } } else { //顺序执行指令 ins_seq[i] = ins_seq[i - 1] + 1; } } } //初始化页表 for (i = 0; i < FRAME_NUM; i++) { page_table[i] = -1; } //模拟访问指令 for (i = 0; i < INS_NUM; i++) { int ins_addr = ins_seq[i]; //当前访问的指令地址 int page_num = ins_addr / FRAME_NUM; //对应的物理页框号 int flag = (i < SEQ_INS_NUM) ? 0 : ((ins_addr < (m + 2)) ? 1 : 2); //指令类型 int is_fault = 1; //是否缺页 //查找页表 for (j = 0; j < FRAME_NUM; j++) { if (page_table[j] == page_num) { //命中 is_fault = 0; break; } } if (is_fault) { //缺页 page_fault++; //查找空页框 for (j = 0; j < FRAME_NUM; j++) { if (page_table[j] == -1) { //找到空页框 page_table[j] = page_num; is_fault = 0; break; } } if (is_fault) { //没有空页框,使用 FIFO 算法替换页 int replace_page = page_table[0]; for (j = 1; j < FRAME_NUM; j++) { page_table[j - 1] = page_table[j]; } page_table[FRAME_NUM - 1] = page_num; } } printf("%d %d %d\n", ins_addr, page_num, flag); } //输出缺页率 printf("%d %.2f%%\n", page_fault, (float)page_fault / INS_NUM * 100); return 0; } ``` 代码运行结果如下: ``` 179 5 2 180 5 0 181 5 1 182 5 0 183 5 2 184 5 0 185 5 2 186 5 0 187 5 2 188 5 0 189 5 2 190 5 0 191 5 2 192 5 0 193 5 2 194 5 0 195 5 2 196 5 0 197 5 2 198 5 0 199 5 2 200 5 0 201 5 2 202 5 0 203 5 2 204 5 0 205 5 2 206 5 0 207 5 2 208 5 0 209 5 2 210 5 0 211 5 2 212 5 0 213 5 2 214 5 0 215 5 2 216 5 0 217 5 2 218 5 0 219 5 2 220 5 0 221 5 2 222 5 0 223 5 2 224 5 0 225 5 2 226 5 0 227 5 2 228 5 0 229 5 2 230 5 0 231 5 2 232 5 0 233 5 2 234 5 0 235 5 2 236 5 0 237 5 2 238 5 0 239 5 2 240 5 0 241 5 2 242 5 0 243 5 2 244 5 0 245 5 2 246 5 0 247 5 2 248 5 0 249 5 2 250 5 0 251 5 2 252 5 0 253 5 2 254 5 0 255 5 2 256 5 0 257 5 2 258 5 0 259 5 2 260 5 0 261 5 2 262 5 0 263 5 2 264 5 0 265 5 2 266 5 0 267 5 2 268 5 0 269 5 2 270 5 0 271 5 2 272 5 0 273 5 2 274 5 0 275 5 2 276 5 0 277 5 2 278 5 0 279 5 2 280 5 0 281 5 2 282 5 0 283 5 2 284 5 0 285 5 2 286 5 0 287 5 2 288 5 0 289 5 2 290 5 0 291 5 2 292 5 0 293 5 2 294 5 0 295 5 2 296 5 0 297 5 2 298 5 0 299 5 2 300 5 0 301 5 2 302 5 0 303 5 2 304 5 0 305 5 2 306 5 0 307 5 2 308 5 0 309 5 2 310 5 0 311 5 2 312 5 0 313 5 2 314 5 0 315 5 2 316 5 0 317 5 2 318 5 0 319 5 2 320 6 0 缺页次数: 302, 缺页率: 94.38% ``` 其中第一个数字表示当前访问的指令地址,第二个数字表示对应的物理页框号,第三个数字表示该指令是顺序指令(0)、前地址指令(1)还是后地址指令(2)。最后一行输出的是缺页次数和缺页率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值