1,计算、计算模型与计算机的概念
计算:信息的描述和变换的过程。
计算模型:是刻划计算这一概念的形式系统,是指能够对所处理对象的信息进行接收、表示、变换和输出的数学机器。典型代表如图灵机。
计算机:实现计算模型的一种物理装置。
2,何为形式系统?试举一例。
形式系统:用形式化方法对事物及其关系和变化规律进行描述的知识体系。
例:自然数及其运算规则的形成。
3,什么是逻辑变量?什么是逻辑函数?
逻辑:就是因果关系的规律性。一般人们称决定事物的因素(原因)为逻辑变量,而称被决定事物的结果为由逻辑变量表示的逻辑函数。
4,现代电子数字计算机最小的数据单位是什么?比特
5,现代电子数字计算机最基本的运算有哪些?与或非
6,试给出1位全加法器的逻辑表达式。
一位全加器(FA)的逻辑表达式为:
S=A⊕B⊕Cin ; Co=ACin+BCin+AB
其中A,B为要相加的数,Cin为进位输入;S为和,Co是进位输出;
7,试给出2-4译码器的逻辑表达式
由真值表可写出各输出端逻辑表达式:
Y0=E一+X1+X2 Y1=E一+X1+X2一 Y2=E一+X1一+X2 Y3=E一+X1一+X2一8,试给出4-2编码器的逻辑表达式
Y 0=I
I—
1
I
2
I
3
+ I
I
1
I
2
I—
3
;Y
1
=I
I
1
I—
2
I
3
+ I
I
1
I
2
I—
3
;
9,现代电子数字计算机的基本原理是什么?
存储程序和程序控制。
10,现代电子数字计算机体系结构是什么?它的发明人是谁?
计算机包括运算器、存储器、控制器、输入和输出设备五大基本部分。冯.诺依曼(Von Neumann):美藉匈牙利科学家,早期研究数理逻辑,1944年夏天,参加ENIAC的设计,1945年3月,提出第一台存储程序式通用电子计算机──EDVAC 的设计方案,1952年制造成功。
11,现代电子数字计算机是怎样自动运行的?
程序计数器
12,现代电子数字计算机中,怎样表示它能完成的基本功能?
指令系统
13,求模运算中的模是什么意思?它和补码有何关系?
模:一个计量系统的计数范围,、一个负整数(或原码)与其补数(或补
码)相加,和为模。
14,怎样得到二进制负数的补码?为什么?
符号位为1,其余位均为该数绝对值得原码按位取反,然后整体加1.
15,自动寻址功能是计算机能自动运行的关键,试述图灵机的自动寻址功能
一条两端可无限延长的带子,一个读写头,一个控制器,带子由可擦写的小格组成,读写头可左右移动并读写,可写字符集{0,1,b},控制器有有穷个状态,一个开始状态,一个结束状态,控制器的命令为:(状态,符号)(写符号,移动,新状态)
图灵机从开始状态工作直到结束状态停止,带上的内容就是计算结果。
16,通用图灵机对发明现代电子数字计算机的重要意义。
通用图灵机的重要意义:1把程序也作为数据;2存储程序和程序控制。
(1)图灵机存储空间无限,计算机存储空间有限。
(2)、图灵机指令系统不定,计算机指令系统确定。
(3)、图灵机仅是理论模型,计算机是其物理实现。
所以,从理论上讲,图灵机的能力比计算机的能力强。通用图灵机证明了通用计算理论,肯定了计算机实现的可能性,同时给出了计算机应有的主要架构;通用图灵机引入程序的概念,将程序也作为数据,基本原理是存储程序和程序控制,为计算机的发展奠定了基础。
17,计算机模拟了人类的哪些智能?
对记忆功能的仿真——数据和程序的存贮。
对自动处理功能的仿真——程序的自动执行。
18,人工智能的极限是什么?
形式化局部处理。计算机的基本智能:严格形式化的数据存储和程序的自动执行。人类对于信息的存贮与处理是全息式的:
⒈存贮与处理全方位的信息;⒉存贮与处理是同时进行的。
19,给出x+1图灵机的形式描述,画出其有限状态自动机和流程图,并分析它们间的关系:用C语言编写一模拟通用图灵机的程序,用x+1图灵机进行验证。
“x+1”图灵机:输入x,输出x+1,功能固定的一个程序。
图灵机状态集合 {start,add,carry,noncarry,overflow,return,halt};字母表{0,1,*};初始状态s为start;停机状态集合 {halt}。
“x+1”图灵机转换规则集合
#include
void print(int len,char a[100]); char a[100]; char currstate[10]="start"; char newstate[10]="s"; int main(void)
{
int i,length;
printf("计算“x+1”的图灵机工作过程\n");
//printf("请输入二进制的位数:");
//scanf("%d",&length);
printf("请输入二进制数x:");gets(a);
///for(i=0;i //scanf("%c",&a[i]); //int length=i; //for(i=0;i // printf("%c",a[i]); length=strlen(a); i=length-1; a[length]='\0'; //printf("%d",length); while((strcmp(newstate,"h alt"))!=0) { if(!strcmp(currstate,"start") ){ strcpy(newstate,"add"); print(length,a); strcpy(currstate,newstate i--; } if(!strcmp(currstate,"add ")){ if(a[i]=='0'){ a[i]='1'; strcpy(newstate,"noncarry"); print(length,a); strcpy(currstate,newstate); i--; //print(length,a); } else if(a[i]=='1'){ a[i]='0'; strcpy(newstate,"carry"); print(length,a); strcpy(currstate,newstate); i--; //print(length,a); } else {a[i]='*'; strcpy(newstate,"halt"); print(length,a); strcpy(currstate,newstate); i--; //print(length,a); // break; } } if(!strcmp(currstate,"carry")){ if(a[i]=='0'){ a[i]='1'; strcpy(newstate,"noncarry"); print(length,a); strcpy(currstate,newstate); i--; //print(length,a); // break; } else if(a[i]=='1'){ a[i]='0'; strcpy(newstate,"carry"); print(length,a); strcpy(currstate,newstate); i--; //print(); //break; } else {a[i]='1'; strcpy(newstate,"overflow"); print(length,a); strcpy(currstate,newstate); i--; // print(length,a); // break; } } if(!strcmp(currstate,"noncarry") ){ if(a[i]=='0'){ a[i]='0'; strcpy(newstate,"noncarry"); print(length,a); strcpy(currstate,newstate); i--; // print(length,a); // break; } else if(a[i]=='1'){ a[i]='1'; strcpy(newstate,"noncarry"); print(length,a); strcpy(currstate,newstate); i--; //print(length,a); // break; } else { a[i]='*'; strcpy(newstate,"return"); print(length,a); strcpy(currstate,newstate); i--; // print(length,a); // break; } } if(!strcmp(currstate,"ove rflow")){ if((a[i]=='0')||(a[i]=='1')){ a[i]='*'; strcpy(newstate,"return"); print(length,a); strcpy(currstate,newstate); i--; // print(length,a); // break; } } if(!strcmp(currstate,"return" )){ if(a[i]=='0'){ a[i]='0'; strcpy(newstate,"return"); print(length,a); strcpy(currstate,newstate); i-- } else if(a[i]=='1'){ a[i]='1'; strcpy(newstate,"return"); print(length,a); strcpy(currstate,newstate); i--; } else {a[i]='*'; strcpy(newstate,"halt"); print(length,a); //strcpy(currstate,newstate); // print(length,a); //break; } } } return 0; } void print(int len,char a[100]) { int length=len; int j; printf("%10s",currstate); putchar('\t'); putchar('\t'); for(j=0;j<=length-1;j++) { printf("%c",a[j]); putchar('\t');} printf("%10s",newstate); putchar('\n'); } 20,编写一程序,根据考研信息把你们班的同学分成5类:根据你的考研信息把你放入其中分好的类中。 #include #include #include //快速排序函数 int Partition(int A[],int low,int high) { int temp = A[low]; while(low { while(low if(low { A[low]=A[high]; low=low+1; } while(low if(low { A[high]=A[low]; high=high-1; } } A[low] = temp; return low; } void QuickSort(int A[],int low,int high) { if(low int pos = Partition(A,low,high); QuickSort(A,low,pos-1); QuickSort(A,pos+1,high); } } int main() { int A[100],i; int n; int A1[30],A2[30],A3[30],A4[30],A5[3 0]; printf(“请依次输入每个同学的考研成绩”); scanf(“%d”,&n); for(i=0;i scanf(“%d”,&A[i]); } for(i=0;i<100;i++) A[i] = rand(); printf("排序前的成绩为:\n"); for(i=0;i<100;i++) printf("%-8d",A[i]); printf("\n"); printf("排序后的成绩为:\n"); QuickSort(A,0,99);//快速排序 for(i=0;i<100;i++) printf("%-8d",A[i]); printf("\n"); int j = 0; i = 0; while(i>=265&&i<280) { A1[j++] = A[i++]; } j=0; while(i>=280&&i<300) { A2[j++] = A[i++]; } j = 0; while(i>=300&&i<310) { A3[j++] = A[i++]; } j = 0; while(i>=310&&i<320) {A4[j++] = A[i++]; } j = 0; while(i>320) { A5[j++] = A[i++]; } printf("A1类为:\n"); for(i=0;i<20;i++) printf("%-8d",A1[i]); printf("A2类为:\n"); for(i=0;i<20;i++) printf("%-8d",A2[i]); printf("A3类为:\n"); for(i=0;i<20;i++) printf("%-8d",A3[i]); printf("A4类为:\n"); for(i=0;i<20;i++) printf("%-8d",A4[i]); printf("A5类为:\n"); for(i=0;i<20;i++) printf("%-8d",A5[i]); //将r放入各类别数组中 if(r>=265&&r<280) { A1[20] = r; printf("放入后的A1类为:\n"); for(i=0;i<21;i++) printf("%-8d",A1[i]); } else if(r>=280&&r<300) {A2[20] = r; printf("放入后的A2类为:\n"); for(i=0;i<21;i++) printf("%-8d",A2[i]); } else if(r>=300&&r<310) { A3[20] = r; printf("放入后的A3类 为:\n"); for(i=0;i<21;i++) printf("%-8d",A3[i]); } else if(r>=310&&r<320) { A4[20] = r; printf("放入后的A4类为:\n"); for(i=0;i<21;i++) printf("%-8d",A4[i]); } else { A5[20] = r; printf("放入后的A5类为:\n"); for(i=0;i<21;i++) printf("%-8d",A5[i]); } printf("\n"); return 0; }