
计算机程序运行原理:计算机在运行时,先从内存中取出第一条指令,通过控制器的译码,按指令的要求,从存储器中取出数据进行指定的运算和逻辑 *** 作等加工,然后再按地咐银尘址把结果送到内存中去。接下来,再取出第二条指令,在控制器的指挥下完成衡禅规定 *** 作。
依此进行下去。直至遇到停止指令。程序与数据一样存取,按程序编排的顺序,一步一步地取出指令,自动地完成指令规定的 *** 作是计算机最基本的工作原理,这一原理最初是由美籍匈牙利数学家冯.诺依曼于1945年提出来的,故称为冯.诺依曼原理。
扩展资料:
计算机程序运行:为了一个程序运行,计算机加载程序代码,可能还要加载数据,从而初始化成一个开始状态,然后调用某种启动机制。在最低层上,这些是由一个引导序列开始的。
在大多数计算机中, *** 作系统例如Windows等,加载并且执行很多程序。在这种情况下,一个计算机程序是指一个单独的可执行的映射,而不是当前在这个计算机上运行的全部程序。
参考资料来源:搏顷百度百科-计算机程序
#include <stdio.h>#include <stdlib.h>
#include<string.h>
#define MENU_NUM 7
#define N 3
typedef struct s1
{
char no[11]/*学号由10个字符组成*/
char name[15]/*学生姓名*/
float score[N]/*各门课成绩*/
float sum/*总分*/
float average/*平均分*/
int order/*名次*/
struct s1 *next/*指向后继结点的指答困针*/
}STUDENT/*定义结构体类型*/
STUDENT * head=NULL
void InputData( STUDENT * ptr )
void PrintMenu( )
int Menu_Select( )
void Init( )
void create( )
void print( )
void Delete( )
void append()
void computer()
main()
{
int key
while(1) {
key=Menu_Select()
switch(key)
{
case 0: Init()
//初试化链表。也就是若链表不为空则释放链表中乎握所有数据,将head置为空(NULL)
break
case 1: create()
//创建链表,输入数据
break
case 2: Delete()
//删除一个指定学号的记录数据
break
case 3: print()
//打印链表中所有数据
break
case 4: computer()
//计算链表中所有人的总分和平清顷念均分
break
case 5: append()
//追加一个数据到链表的尾部
break
case 6: Init()
//释放链表
exit(0)
}
}
}
void PrintMenu( )
{
int i
char * menu[]={
"0. Init list",
"1. Enter list",
"2. Delete a record from list",
"3. Print list",
"4. Compute the score",
"5. Insert record to list",
"6. Quit"
}
printf("\n\n")
for (i=0i<MENU_NUMi++)
printf("%s\n",menu[i])
printf("\nEnter your choice(0-6):")
}
int Menu_Select( )
{
int key
PrintMenu( )
scanf("%d",&key)
return key
}
void Init( )//初始化单链表。也就是释放链表中的所有数据
{
STUDENT *p,*ptr//定义两个临时指针变量p,ptr
p=headptr=head//将两个临时变量指向头指针head ;
while(ptr!=NULL)
{
ptr=ptr->next//ptr指向下一个结构数据
free(p)//释放p所指向的结构数据的内存
p=ptr//将p指向ptr所指向的数据
}
head=NULL//将head指向NULL
}
void create( )//创建单链表
{
STUDENT *pt, *pth=NULL//定义两个指针变量:pt指向即将申请新的数据内存,pth指向当前数据
while(1)
{
pt=(STUDENT *)malloc(sizeof(STUDENT))//让pt指向新申请的内存空间
InputData(pt)//输入数据,存放到pt所指向的结构数据。注意让pt的next指向NULL
if (strcmp(pt->no,"@")==0)
{
free(pt)//释放pt所指向的内存空间
break//退出循环
}
else if (head==NULL)
{
pth=pt
head=pt//将头指针head和pth指向pt
}
else
{
pth->next=pt//将pth的next指向pt
pth=pt//将pth指向pt
}
}
}
void print( ) //打印单链表中所有数据
{ int i=0
STUDENT *p//第一个指针p
p=head//将p指向head
printf("\n")
printf("******************************STUDENT******************************\n")
printf("|rec|no| name | sc1| sc2| sc3| sum | ave |order|\n")
printf("|---|----------|----------------|----|----|----|------|-----|-----|\n")
//打印表头
while (p!=NULL)
{
printf("|%3d|%10s|%-16s|%4.1f|%4.1f|%4.1f|%6.2f|%5.1f|%5d|\n",
++i,p->no,p->name,p->score[0],p->score[1],p->score[2],
p->sum,p->average,p->order)//打印p所指向的结构中的所有数据。注意打印数据间的分隔线
p=p->next//将p指向p的下一个结构数据
}
printf("********************************END********************************\n")//打印表尾
}
void Delete( ) //删除一个记录
{
STUDENT *p,*pth//定义两个指针p,pth
char no[11]//定义一个整数no(用来存储输入的学号)
printf("intput delete no\n")
scanf("%s",no)//用输入语句输入一个学号存储到no中
p=headpth=head//将p和pth都指向头指针
if (strcmp(p->no,no)==0) //也就是若头指针指向的数据需要删除
{
head=head->next//将head指针指向head的下一个数据;
free(p)//释放p所指向的数据
}
else
{
p=p->next//将p指向p的下一个数据
while ( p!=NULL)
{
if (strcmp(p->no,no)==0) //找到了要删除的数据
{
pth->next=p->next//将pth的next指向p的next
free(p)//释放p
break//退出循环
}
else
{
pth=pth->next//将pth指向pth的next 或 将pth指向p
p=p->next//将p指向p的next
}
}
}
}
void append()
{
STUDENT *p,*pth//定义两个指针变量p,pth
pth=head//将pth指向head
while ( pth->next!=NULL)
{
pth=pth->next//ptr指向ptr的next
}
p=(STUDENT *)malloc(sizeof(STUDENT))//将p指向新申请的内存空间
InputData(p)p->next=NULL//数据数据存储到p所指向的内存空间,注意将p的next置为NULL
pth->next=p//将ptr的next指向p
}
void InputData( STUDENT *ptr )
{ int i
printf("enter no:")
scanf("%s",ptr->no)
if (strcmp(ptr->no,"@")==0 ) return
printf("enter name:")
scanf("%s",ptr->name)
for(i=0i<3i++)
{
printf("shuru chengji\n")
scanf("%f",&ptr->score[i])
}
ptr->sum=0
ptr->average=0
ptr->order=0
ptr->next=NULL
}
void computer()
{
STUDENT *p
p=head
for(pp=p->next)
{
p->sum=p->score[0]+p->score[1]+p->score[2]
p->average=(p->score[0]+p->score[1]+p->score[2])/3
}
}
是不是C课程设计的题目啊? 呵呵 我这有个希望你能用到。已经证实可以执行。#include <time.h>
#include <stdio.h> /* 调用库函数 */
#include <stdlib.h> /* 调用库函数 */
int le1 /* 变量 表示第一个运算数 */
int le2 /* 第二个运算数 */
int Tresult /* 正确答型橘案 */
int Qcount /* 题目的个数 */
int Upnum /* 升级的分数 */
int Tscore /* 当前得分 */
char op /* 运算符号 */
void TestTen()
void TestHun()
void TestTen() /* 出第一个级别题的函数*/
{
int Userda /* 用户给出的答案 */
int temp /* 临时变量,用于交换两个变量得值 */
int i=0
srand( (unsigned)time( NULL ) )
op=rand()%3+1 /* 产生一个1-4之间的随机数,用于表示+ ,- , * , / */
switch(op) /* 判断运算符是什么 */
{
case 1:/* 加 的情况 */
{
le1=rand()%9+1/* 产生一个0-9之间的随机数 放在第一个运算数 Tha中 */
le2=rand()%9+1 /* 产生一个0-9之间的随机数 放在第二个运算数 Thb中 */
Tresult=le1+le2/* 计算出正确答案 放在 Tresult中*/
break
}
case 2:/* 减 的情况 */
{
le1=rand()%9+1
le2=rand()%9+1
if(le1<le2) /* 减不能的负 所以第一个运算数要比第二个大,如果小,则交换两变量的值 */
{
temp=le1
le1=le2
le2=temp
}/* 交换 */
Tresult=le1-le2 /* 计算出正确答案 放在 Tresult中毁备*/纤租毁
break
}
case 3: /* 乘 的情况 */
{
le1=rand()%9+1
le2=rand()%9+1
Tresult=le1*le2
break
}
case 4:/* 除 的情况*/
{
do /* 循环 保证可以除尽 */
{
do/* 循环保证 除数不为 0 */
{
le1=rand()%9+1
le2=rand()%9+1
if(le1<le2)
{
temp=le1
le1=le2
le2=temp
}
}
while(le2==0) /* 当除数0 的时候继续产生新的随机数 */
}
while((le1%le2)!=0)/* 当不能整除的时候继续产生新的随机数 */
Tresult=le1/le2
break
}
}
switch(op)/* 根据 op的值决定输出 问题*/
{
case 1: {printf("\n%d + %d = ",le1,le2)break}
case 2: {printf("\n%d - %d = ",le1,le2)break}
case 3: {printf("\n%d X %d = ",le1,le2)break}
case 4: {printf("\n%d / %d = ",le1,le2)}
}
scanf("%d",&Userda)/* 用户输入答案 */
while(Userda!=Tresult)/*判断答案是否正确 */
{ i=i+1
printf("\n错误,你的得分为: %d",Tscore) /* 输出错误信息和 当前分数*/
printf("\n 请重新输入: ")/*提示重新输入 */
scanf("%d",&Userda) /* 用户输入答案 */
}
if(i==0)
Tscore=Tscore+10/* 首次答对了 加分 */
printf("\n正确,你的得分为: %d",Tscore) /* */
}
void TestHun() /*出第二个级别题的函数*/
{
int Userda
int temp
op=rand()%3+1
switch (op)
{
case 1:
{
le1=rand()%99+1 /* 产生 10-99 之间的随机数,即两位数 */
le2=rand()%99+1
Tresult=le1+le2
break
}
case 2:
{
le1=rand()%99+1
le2=rand()%99+1
if(le1<le2)
{temp=le1le1=le2le2=temp}
Tresult=le1-le2
break
}
case 3:
{
le1=rand()%99+1
le2=rand()%99+1
Tresult=le1*le2
break
}
case 4:
{
do
{
do
{
le1=rand()%99+1
le2=rand()%99+1
if(le1<le2)
{temp=le1le1=le2le2=temp}
}
while (le2==0)
}
while ((le1%le2)!=0)
Tresult=le1/le2
break
}
}
switch(op)
{
case 1: {printf("\n%d + %d = ",le1,le2)break}
case 2: {printf("\n%d - %d = ",le1,le2)break}
case 3: {printf("\n%d X %d = ",le1,le2)break}
case 4: {printf("\n%d / %d = ",le1,le2)}
}
scanf("%d",&Userda)
while(Userda!=Tresult)
{
if(Tscore>=10)
Tscore=Tscore-10
printf("\n错误,你的得分为: %d",Tscore)
if(Tscore<Upnum) /* 如果分数小于设定的分数则直接推出函数 */
return
printf("\n请重新输入: ")
scanf("%d",&Userda)
}
Tscore=Tscore+10
printf("\n正确,你的得分为: %d",Tscore)
}
void main()
{
int Leiji=0 /* 变量 , 存储 累计答题数目 */
rand()
system("cls") /* 清屏 : 清除屏幕上上次运行的内容,重新开始运行程序*/
system("cls")
printf("\n ------------------欢迎来到小学算术测试系统----------------")
printf("\nTEST START(测试开始):-------------------------------------")
printf("\n 请输入问题个数: ")/* 提示信息 :输入问题个数*/
scanf("%d",&Qcount)/* 用户输入问题个数 */
do
{
printf("\n 请输入升级所需分数(每小题十分) : ")
/* 提示信息 :输入升级分数(10的倍数 ) */
/* 用户输入升级分数*/
scanf("%d",&Upnum)
if(Upnum>=10*Qcount)
printf("\n 请重新输入:")
else
if(Upnum<6*Qcount) /* 如果用户输入的升级分数<10 */
printf("\n 请重新输入:")
else
if(Upnum%10!=0) /* 如果用户输入的升级分数不是10的倍数 :即 整除10 不等于0 */
printf("\n 必须输入十的倍数!")/* */
else
break
}
while(1) /* 不满足条件永远循环 */
printf("\n--------------------------------------------------------")
printf("\n--------------------------------------------------------")
printf("\nTest Start(测试开始):") printf("(注:每小题十分)")
printf("\n--------------------------------------------------------")
printf("\n----------------------------------")
printf("\n Lever 1 Start :")
Begin1:
printf("\n----------------------")
printf("\n Question: %d",Leiji+1) /* 输出 题号*/
TestTen()
Leiji++
if(Leiji==Qcount) /* 如果做题个数 和 事先设定好的问题个数相同 则结束答题! */
{ printf("\n--------------------------------------------------------")
printf("\n--------------------------------------------------------\n")
printf("\n Test Over!!!\n")
printf("\n--------------------------------------------------------")
printf("\n Your Final Score: %d",Tscore)
if(Tscore>=Upnum)
printf("\n Your Final Level: LEVEL 2")
else
{printf("\n Your Final Level: LEVEL 1")
Leiji=0Tscore=0goto Begin1}
goto LastLine
}
if(Tscore<Upnum) /* 分数 小于 升级分数 */
goto Begin1/* 转向到 Begin1 继续作题 */
printf("\n Up To Advance Level!\n Lever2 Start :---------")/* 达到升级分数 升级到 Level2 */
Leiji=0
Begin2:
printf("\n----------------------")
printf("\n Question: %d",Leiji+1)
TestHun()
Leiji++
if(Leiji==Qcount)
{
printf("\n--------------------------------------------------------")
printf("\n--------------------------------------------------------\n")
printf("\n Test Over!!!\n")
printf("\n--------------------------------------------------------")
printf("\n Your Final Score: %d",Tscore)
if(Tscore>=Upnum)
printf("\n Your Final Level: LEVEL 2")
else
printf("\n Your Final Level: LEVEL 1")
goto LastLine
}
if(Tscore<Upnum)
{
printf("\nDown To Normal Level! Lever1 : -------")/* 从Level2答题过程中分数小于升级分数 降级到Level 1 继续答题 */
Leiji=0
goto Begin1}
else
goto Begin2
LastLine:
printf("\n------------------------------------------------")
getchar()getchar() /* 等待用户输入回车结束程序运行 */
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)