本文目录一览:
- 1、谁有C语言计算机模拟器的源代码加注释。709232876@qq.com
- 2、怎么用C语言编程测试计算机的MIPS或MFLOPS值
- 3、编写一个C语言程序,模拟一个计算器。要求:
- 4、用C语言编程模拟处理机调度(实现一种算法)
谁有C语言计算机模拟器的源代码加注释。709232876@qq.com
/*/////////////////////////////////////////////////////////////
* 功能:实现一个计算器程序 改一下输入输出,,,把头文件换了就行了饿我的是C++写的
* 作者: 曾胜 mayi_qiong 我拿的我同学的题目修改的,,已经很完美了,,要求完全一样
* 时间:
*////////////////////////////////////////////////////////////*/
#includeiostream
#includestring
#include stdlib.h
#include conio.h
#includevector
static int i;
using namespace std;
class calculator
{
private:
char ch;
double a[10],b[10]; //定义数组
double s[10];
char c;
public:
int Show()
{
cout"请输入等式:"endl;
for( i=0;i10;i++)
{ cout"请输入'数字','符号','数字'字符处理请按'0'"endl;
cina[i]; if(a[i]==0) goto kk;
cinc;
cinb[i];
system("pause");
kk:
if(a[i]==0)
{ cout "清除全部按A,清除上一个按C,输出以上按算式及结果按S"endl;
char ch;
cinch;
switch(ch)
{ case 'a' :
case 'A' :
system("cls"); i=-1; cout"数据完全清除任意键继续"endl; system("pause"); break;
case 'C':
case 'c':
system("cls");
aa();
break;
case 'S' :
case 's' :
show_all(); system("pause"); break;
} cin.clear();//清掉cin,因为cin会导致死循环
}
else
switch(c)
{
case '+':
s[i]=a[i]+b[i];
break;
case '-':
s[i]=a[i]-b[i];
break;
case'*':
s[i]=a[i]*b[i];
break;
case'/':
s[i]=a[i]/b[i];
break;
}
system("cls");
cin.clear();//清掉cin,因为cin会导致死循环
}
return 0;
}
void show_all()
{
for(int j=0;ji;j++)
{ couta[j]cb[j]"="s[j]endl; } }
void aa(){ do{ i--; for(int j=0;j=i-1;j++)
{ couta[j]cb[j]"="s[j]endl;
}
cout"继续请按C,其他退出"endl;
cinch;
}while(ch=='C'||ch=='c'); }
void show(){
system("cls");
cout"\n\n\n\n\n\n\n";
cout"==============================================================================="endl;
cout"\n\n";
cout" 作者: 曾胜"endl;
cout"\n\n";
cout" 学号:"XXXXXXXendl;
cout"\n\n";
cout" 专业:软件工程"endl;
cout"\n\n";
cout" 学院:软件学院"endl;
cout"\n\n";
cout" 指导老师:李祥"endl;
cout"\n\n";
cout"================================================================================"endl;
coutendl;
}
};
int main()
{
system("color 0A");
calculator s;//实例化对象
s.show();
getch();//暂停
system("cls");
s.Show();
return main();
return 0;
}
怎么用C语言编程测试计算机的MIPS或MFLOPS值
准确测试cpu的mips或者mflops一般是设计体系结构时候用cpu模拟器或者verilog前仿得到的。对于用C语言比较准确的测试mips或者mflops,你可以用一个程序读取系统时间,然后执行第二个程序,第二个程序执行完成后再记录执行的时间,然后反汇编第二个程序,统计第二个程序中执行的指令条数,通常第二个程序中执行的指令数是确定的,(分支和循环的次数是可确定的)。mips和mflops在risc cpu的评价中比较有价值,感觉cisc稍差一些。
编写一个C语言程序,模拟一个计算器。要求:
支持
加减乘除括号负数开根乘方
#includestdio.h
#includemath.h
#includemalloc.h
double
jisuan(char
a[])
{
int
i=1,j,k,m,cnt=0,t1=0,t2=0,t3=0;
char
nibo[50],zhan2[50];
double
x,n,l,z=0,zhan3[50];
typedef
struct
{
double
d1;
int
d2;
}dd;
typedef
struct
{
dd
data[50];
int
top;
}zhan1;
zhan1
*shu;
shu=(zhan1
*)malloc(sizeof(zhan1));
shu-top=0;
while(a[i]!='\0')
{
if(a[i]='0'a[i]='9')
{
z=0;
j=i+1;
while(a[j]='0'a[j]='9')
{j++;}
j--;
for(k=i;k=j;k++)
{
z=z*10+a[k]-'0';
}
j=j+1;
x=z;
if(a[j]=='.')
{
l=1;
i=j+1;
j=i+1;
while(a[j]='0'a[j]='9')
{j++;}
j--;
for(k=i;k=j;k++)
{
n=pow(0.1,l);
l=l+1;
x=x+n*(a[k]-'0');
}
i=j+1;
}
else
i=j;
shu-data[++shu-top].d1=x;
shu-data[shu-top].d2=++cnt;
nibo[++t1]='0'+shu-data[shu-top].d2;
nibo[t1+1]='\0';
}
else
if(a[i]=='(')
{
zhan2[++t2]=a[i];
i++;
}
else
if(a[i]==')')
{
j=t2;
while(zhan2[j]!='(')
{
nibo[++t1]=zhan2[j];
nibo[t1+1]='\0';
j--;
}
t2=j-1;
i++;
}
else
if(a[i]=='+')
{
while(t20zhan2[t2]!='(')
{
nibo[++t1]=zhan2[t2];
nibo[t1+1]='\0';
t2--;
}
zhan2[++t2]=a[i];
i++;
}
else
if(a[i]=='-')
{
if(a[i-1]=='$')
{
a[0]='0';
i=0;
}
else
if(a[i-1]=='(')
{
a[i-1]='0';
a[i-2]='(';
i=i-2;
t2--;
}
else
{
while(t20zhan2[t2]!='(')
{
nibo[++t1]=zhan2[t2];
nibo[t1+1]='\0';
t2--;
}
zhan2[++t2]=a[i];
i++;
}
}
else
if(a[i]=='*'||a[i]=='/')
{
while(zhan2[t2]=='*'||zhan2[t2]=='/'||zhan2[t2]=='^'||zhan2[t2]=='#')
{
nibo[++t1]=zhan2[t2];
nibo[t1+1]='\0';
t2--;
}
zhan2[++t2]=a[i];
i++;
}
else
if(a[i]=='^'||a[i]=='#')
{
while(zhan2[t2]=='^'||zhan2[t2]=='#')
{
nibo[++t1]=zhan2[t2];
nibo[t1+1]='\0';
t2--;
}
zhan2[++t2]=a[i];
i++;
}
}
while(t20)
{
nibo[++t1]=zhan2[t2];
nibo[t1+1]='\0';
t2--;
}
j=1;t3=0;
while(j=t1)
{
if(nibo[j]='0'nibo[j]!='^'nibo[j]!='#')//
{
for(i=1;i=shu-top;i++)
{
if((int)(nibo[j]-'0')==shu-data[i].d2)
{
m=i;
break;
}
}
zhan3[++t3]=shu-data[m].d1;
}
else
if(nibo[j]=='+')
{
zhan3[t3-1]=zhan3[t3-1]+zhan3[t3];
t3--;
}
else
if(nibo[j]=='-')
{
zhan3[t3-1]=zhan3[t3-1]-zhan3[t3];
t3--;
}
else
if(nibo[j]=='*')
{
zhan3[t3-1]=zhan3[t3-1]*zhan3[t3];
t3--;
}
else
if(nibo[j]=='/')
{
zhan3[t3-1]=zhan3[t3-1]/zhan3[t3];
t3--;
}
else
if(nibo[j]=='^')
{
zhan3[t3-1]=pow(zhan3[t3-1],zhan3[t3]);
t3--;
}
else
if(nibo[j]=='#')
{
zhan3[t3]=sqrt(zhan3[t3]);
}
j++;
}
return
zhan3[t3];
}
void
main()
{
for(;;)
{
char
x,a[50];
double
jieguo;
int
i=0;
a[0]='$';
printf("#表示开方,^表示乘方(支持负数)\n");
printf("请输入表达式,退出请输入q:\n\n");
scanf("%c",x);
if(x=='q')
break;
while(x!='\n')
{
a[++i]=x;
scanf("%c",x);
}
a[i+1]='\0';
jieguo=jisuan(a);
printf("\n");
printf("结果为:%lf",jieguo);
printf("\n\n\n\n\n");
}
}
用C语言编程模拟处理机调度(实现一种算法)
#include stdlib.h
#include conio.h
#define getpch(type) (type*)malloc(sizeof(type))
#define NULL 0
struct pcb { /* 定义进程控制块PCB */
char name[10];
char state;
int super;
int ntime;
int rtime;
struct pcb* link;
}*ready=NULL,*p;
typedef struct pcb PCB;
void sort() /* 建立对进程进行优先级排列函数*/
{
PCB *first, *second;
int insert=0;
if((ready==NULL)||((p-super)(ready-super))) /*优先级最大者,插入队首*/
{
p-link=ready;
ready=p;
}
else /* 进程比较优先级,插入适当的位置中*/
{
first=ready;
second=first-link;
while(second!=NULL)
{
if((p-super)(second-super)) /*若插入进程比当前进程优先数大,*/
{ /*插入到当前进程前面*/
p-link=second;
first-link=p;
second=NULL;
insert=1;
}
else /* 插入进程优先数最低,则插入到队尾*/
{
first=first-link;
second=second-link;
}
}
if(insert==0) first-link=p;
}
}
void input() /* 建立进程控制块函数*/
{
int i,num;
system("cls"); /*清屏*/
printf("\n 请输入进程数: ");
scanf("%d",num);
for(i=1;i=num;i++)
{
printf("\n 进程号No.%d:\n",i);
p=getpch(PCB);
printf("\n 输入进程名:");
scanf("%s",p-name);
printf("\n 输入进程优先数:");
scanf("%d",p-super);
printf("\n 输入进程运行时间:");
scanf("%d",p-ntime);
printf("\n");
p-rtime=0;p-state='W';
p-link=NULL;
sort(); /* 调用sort函数*/
}
}
int space()
{
int l=0;
PCB* pr=ready;
while(pr!=NULL)
{
l++;
pr=pr-link;
}
return(l);
}
void disp(PCB * pr) /*建立进程显示函数,用于显示当前进程*/
{
printf("\n 进程名\t 状态\t 优先数\t 需要运行时间\t 已经运行时间\n");
printf("|%s\t",pr-name);
printf("|%c\t",pr-state);
printf("|%d\t",pr-super);
printf("|%d\t\t",pr-ntime);
printf("|%d\t",pr-rtime);
printf("\n");
}
void check() /* 建立进程查看函数 */
{
PCB* pr;
printf("\n **** 当前正在运行的进程是:\n"); /*显示当前运行进程*/
disp(p);
pr=ready;
printf("\n **** 当前就绪队列状态为:\n"); /*显示就绪队列状态*/
while(pr!=NULL)
{
disp(pr);
pr=pr-link;
}
}
void destroy() /*建立进程撤消函数(进程运行结束,撤消进程)*/
{
printf("\n 进程 [%s] 已完成.\n",p-name);
free(p);
}
void running() /* 建立进程就绪函数(进程运行时间到,置就绪状态*/
{
(p-rtime)++;
if(p-rtime==p-ntime)
destroy(); /* 调用destroy函数*/
else
{
(p-super)--;
p-state='W';
sort(); /*调用sort函数*/
}
}
void main() /*主函数*/
{
int len,h=0;
char ch;
input();
len=space();
while((len!=0)(ready!=NULL))
{
ch=getchar();
h++;
printf("-----------------------------------------------------");
printf("\n 现在是第%d次运行: \n",h);
p=ready;
ready=p-link;
p-link=NULL;
p-state='R';
check();
running();
printf("\n 按任意键继续......\n");
}
printf("\n\n 进程已经完成.\n");
}