软考知识点巩固 -程序语言基础

面向对象方法

1、 面向对象开发方法的基本思想是尽可能按照人类认识客观世界的方法来分析和解决问题,(JackSon)方法不属于面向对象方法。
A Booch B Coad C OMT D JackSon

解析:面向对象开发方法的基本思想是尽可能按照人类认识客观世界的方法来分析和解决问题,包括:Booch方法、Coad方法和OMT方法。Jackson方法是一种面向数据结构的开发方法。

汇编语言

汇编语言中的CMP比较指令所设置标志位的不同状态,代表着两个操作数的不同关系。当两个无符号数进行比较,则在比较指令之后,可以根据CF标志位的状态来判断两个数的大小,如在“CMP AX,BX”中,当CF标志位置位时,则表示(AX<BX)

解析:汇编中的CMP指令是一条比较指令,对比两个操作数的大小,但是计算机并不理解大小,它只是对两个操作数进行了一次减法操作,然后对一些标志位进行了一些逻辑运算来判断哪个数大,涉及的标志位有如下一些:

  CF:Carry  Flag,是否有进位或者借位,结果的最高位产生了进位,则CF=1,否则CF=0
  ZF:0标志位,就是结果是否为0,如果比较结果为0,则ZF=1,否则ZF=0
  OF:溢出标志位,是否计算机结果溢出了,如果符号位的变化与运算结果的符号位不一致,则OF=1,否则OF=0。
  SF:负标志位,如果结果为负,则SF=1,否则SF=0。
  
  AF:辅助进位标志位,我也不知道干嘛的
  PF:奇偶标志位,这个好判断呀,看最后一位是0是1就行了
  
  CMP指令的格式为 CMP op1 op2 用到的标志位有CF,ZF,OF,SF四个,对于两个无符号数的情况,两数相减不可能溢出了,看CF和ZF标志位就可以,如果ZF为1,说明结果是0,那不用说,两数相等了(有符号数也是这样),如果ZF为0,则如果CF为1,表示有借位,op1<op2,否则op1>op2。

  对于有符号数,就要看符号标志位SF和溢出标志位OF了,如果是两个两个同号的数,两数相减也是不可能溢出的,OF一定为0,此时,如果SF为1,则表示op1<op2,否则op1>op2,如果是两个异号的数相减,不溢出的情况跟上面的一样(OF==0,SF==1?op1<op2:op1>op2)。

  如果溢出了,则要分析一下,此时OF=1表示溢出,如果SF也为1,表示结果为负数,假设op1为负数,op2正数,相减的结果为负数,没溢出,假设不成立,op1是正数,op2是负数,所以op1>op2,SF为0的情况可以同样分析可得op1<op2。

在这里插入图片描述

自动机

下图所示的有限自动机中,0是初始状态,3是终止状态,该自动机可以识别(aaaa)
在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/186c99cf21bb4c0fa9757198094922b8.png
A abab
B aaaa
C bbbb
D abba

解析:在题目中,0是初始状态,3是终止状态,通过选项中的字符串可以从初始状态到达终止状态,则说明该字符串能被题目中的自动机识别。也可以理解为依次输入选项中的字符串,可以在该自动机中找到相应的路径。
对于选项A的字符串abab,通过ab可以达到终止状态,然后输入a任然可以有路径,但再输入b时,没有路径与其对应。因此A不可被该自动机识别。同样的道理,我们可以找到字符串aaaa能被该自动机识别。

编译程序

编译程序分析源程序的阶段依次是(词法分析、语法分析、语义分析)
解析
编译过程分为6个阶段分别是:词法分析、语法分析、语义分析、中间代码产生、优化、目标代码生成。
在这里插入图片描述

Cookie

在ASP的内置对象中,( response )对象可以修改cookie中的值。
A.request
B.application
C.response
D.session

解析:在ASP的内置对象中。能修改cookie中的值的是response,它还可以创建cookie,而request可以访问cookie中的参数。

VHDL

1、硬件描述语言一般包括VHDL、Verilog、Superlog、SystemC等,在VHDL设计中,一个完整的设计单元应当包含5部分,下面不属于这5部分的是(赋值)

A.实体
B.结构体
C.赋值
D.配置

解析:硬件描述语言一般包括VHDL、Verilog、Superlog、SystemC等,在VHDL设计中一个完整的设计单元应当包含5部分,分别是:实体(Entity)、结构体(Architecture)、库(Library)、包集合(Package)和配置(Configuration)。

硬件描述语言(hardware description language,HDL)是用来描述电子电路的语言,特别是可以在寄存器传输级上对数字电路逻辑功能进行行为、数据流方面的描述。

随着自动化逻辑综合工具的发展,硬件描述语言可以被这些工具识别,并自动转换到逻辑门级网表,使得硬件描述语言可以被用来进行电路系统设计,并能通过逻辑-仿真的形式验证器件功能。

设计完成后,可以使用逻辑综合工具生成低抽象级别(门级)的网表(即连线表)。一个VHDL语言程序通常包含实体(Entity)、结构体(Architecture)、库(Library)、包集合(Package)和配置(Configuration)五个部分组成。
1)实体用于描述所设计的电路系统的外部接口信号;
2)结构体用于描述电路系统内部的结构和行为;
3)库是存放已经编译的实体、结构体、包集合和配置;
4)包集合存放各种设计模块都能共享的数据类型、常数和子程序等;
5)配置用于从库中选取所需要的单元来组成不同电路系统。

实体是VHDL语言编写的程序基本单元,实体用于描述一个完整的电路系统。简单地基本单元可以是一个门电路,复杂的基本单元可以是一个接口芯片电路、微处理器,不管是简单地基本单元或复杂的基本单元,都是由实体声明和结构体两部分组成。实体声明部分描述设计基本单元的输入和输出,也就是基本单元的引脚。结构体部分描述设计基本单元的行为,也就是电路系统的功能。

2、VHDL中的子程序包含函数和过程两种,下列关于VHDL中的函数和过程的叙述错误的是( B )。

A.函数内部的描述语句不能对函数体外定义的信号或变量赋值
B.函数是不可综合的
C.过程中的变量需要在每次调用时初始化
D.过程语句体中的顺序描述语句可以对过程语句外的信号赋值

解析:
在VHDL语言中,函数和过程统称为子程序。子程序与进程的相同点是:内部包含的都是顺序描述代码,使用相同的顺序描述语句,比如if,case和loop。不同点是:进程可以直接在主代码中调用,子程序一般在建库的时候使用,同时子程序中不能使用wait语句。
一个函数就是一段顺序描述的代码。对于一些经常遇到的具有共性的设计问题都可以使用函数来实现。由于在每次调用函数时,都要首先对其进行初始化,即一次执行结束后再调用需要再次初始化,因此在函数中禁止进行信号声明和元件实例化,函数是可以被综合的。函数中使用return来进行返回,一次只能返回一个值返回值的类型由return后面的数据类型指定。
过程可以具有多个输入、输出、双向模式的参数,可以是信号、变量和常量。对于输入模式的参数,默认为常量,对于输出和双向模式的参数,默认为变量。过程中的变量需要在每次调用时进行处理后,同时其可以对外部的信号进行赋值。

C语言

1、执行下面的一段C程序后,变量result的值应为(0 )。

char chr = 127;
int result = 128;
chr += 1;
result += chr;

A.0
B.1
C.128
D.256

解析:
chr=127;
chr+=1;------chr溢出为-128
result+=chr;------result等于0

2、下面的一段C程序中,循环体语句( D )退出循环。
unsigned char n;
int total;
n=50;
while (n-- >= 0) { total += n; }

A.执行49次后
B.执行50次后
C.执行51次后
D.死循环,不会

解析:unsigned char n; ------n是无符号类型,所以n不会为负数。
在循环语句中n都是大于等于0的整数,不会退出循环,会造成死循环。

3、以下C语言程序的输出结果是( 21 )。
struct S
{
int x, y;
}data[2]={10, 100,20, 200} ;
main ()
{
struct s *p=data;
p++;
printf (“%d\n”,++ (p->x)) ;
}

A.10
B.11
C.20
D.21
解析:
struct s *p=data;-------- p指向了结构体数组data[0]的位置
p++;----------------- p就指向了data[1]的位置
++(p->x);----- p->x就是20,所以打印的值为21。

4、已知:char str[10], *p=str;下面C语言语句中正确的是(B)。

A. str=“ABC”;
B. p=“ABC”;
C. *str==“ABC”;
D. *p="ABC”;
解析:
A——str是常指针,不能指向别处。
B——正确,p是普通指针变量,可以指向另一个字符串。
C——*str是下标为0的元素,赋一个字符串(指针)类型不匹配。
D——与C同。

后面的两个不对,char[] 得用 strcpy

5、执行下面的一段C程序后,变量ret的值为( 11)。
char str[20];
int ret=strlen (strcpy (str, “Hello_World”));

A.0
B.11
C.12
D.20

解析:
char str[20];---------分配20个字节的空间
int ret=strlen (strcpy (str, “Hello_World”));----strcpy是字符串拷贝函数,strlen返回字符串长度为11。

中间代码

将高级语言源程序通过编译或解释方式进行翻译时,可以先生成与源程序等价的某种中间代码。以下关于中间代码的叙述中,正确的是( B)。

A.中间代码常采用符号表来表示
B.后缀式和三地址码是常用的中间代码
C.对中间代码进行优化要依据运行程序的机器特性
D.中间代码不能跨平台

解析:常见的中间代码有后缀式、三地址码、树,符号表是在编译预处理中使用, 中间代码不依赖于硬件平台,可移植性强,可跨平台。

时间复杂度

求解两个长度为n的序列X和Y的一个最长公共子序列(如序列ABCBDAB和BDCABA的一个最长公共子序列为BCBA)可以采用多种计算方法。如可以采用蛮力法,对X的每一个子序列,判断其是否也是Y的子序列,最后求出最长的即可,该方法的时间复杂度为( D )。经分析发现该问题具有最优子结构,可以定义序列长度分别为i和j的两个序列X和Y的最长公共子序列的长度为C[i,j],如下式所示。
在这里插入图片描述
采用自底向上的方法实现该算法,则时间复杂度为(A )。
问题1选项
A.O(n²)
B.O(n²lgn)
C.O(n³)
D.O(n2 n)
问题2选项
A.O(n²)
B.O(n²lgn)
C.O(n³)
D.O(n2 n)

解析:
Cn0+Cn1+Cn2+Cn3+……+Cnn=2的n次方;Cn1+Cn2+Cn3+……+Cnn=2的n次方-1。

Cn1加Cn2加Cn3一直加到Cnn=Cn0+Cn1加Cn2加Cn3一直加到Cnn-Cn0=2^n-1。

从n个不同的元素中,取r个不重复的元素,按次序排列,称为从n个中取r个的无重排列。排列的全体组成的集合用P(n,r)表示。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值