PTR运算符有何功能?

题目
问答题
PTR运算符有何功能?
如果没有搜索结果或未解决您的问题,请直接 联系老师 获取答案。
相似问题和答案

第1题:

试题四(共 15 分)

阅读以下说明和 C 函数,将应填入 (n) 处的字句写在答题纸的对应栏内。

[说明]

计算机在处理算术表达式时,首先将其转换为后缀表达式。例如,表达式

“46+5*(120-37)”的后缀表达式形式为“46 5 120 37 - * +” 。

计算后缀表达式时,从左至右扫描后缀表达式:若遇到运算对象,则压入栈中;遇到运算符,则从栈中弹出相关运算对象进行计算,并将运算结果压入栈中,重复以上过程,直到后缀表达式扫描结束。例如,后缀表达式“46 5 120 37 - * +”的计算过程为:

a. 依次将 46、5、120、37 压入栈中;

b. 遇到“-”,取出 37、120,计算 120–37,得 83,将其压入栈中;

c. 遇到“*”,取出 83、5,计算 5*83,得 415,将其压入栈中;

d. 遇到“+”,取出 415、46,计算 46+415,得 461,将其压入栈中;

e. 表达式结束,则计算过程完成。

函数 computing(char expr[],int *result)的功能是基于栈计算后缀形式的表达式(以串形式存入字符数组 expr)的值,并通过参数 result 返回该值。函数的返回值为-1/0 分别表示表达式有/无错误。假设表达式中仅包含数字、空格和算术运算符号,其中所有项均以空格分隔,且运算符仅包含加(“+”)、减(“-”)、乘(“*”)、除(“\”)。

函数 computing 中所用栈的基本操作的函数原型说明如下:

void InitStack(STACK *s):初始化栈。

void Push(STACK *s, int e): 将一个整数压栈,栈中元素数目增 1。

void Pop(STACK *s):栈顶元素出栈,栈中元素数目减 1。

int Top(STACK s):返回非空栈的栈顶元素值,栈中元素数目不变。

int IsEmpty(STACK s):若s 是空栈,则返回1 否则返回 0。

[C 函数]

int computing(char expr[], int *result)

{

STACK s; int tnum, a,b; char *ptr;

InitStack(&s);

ptr = expr; /*字符指针指向后缀表达式串的第一个字符*/

while (*ptr!='\0') {

if (*ptr==' ') { /*当前字符是空格*/

(1) ; /*字符指针指向下一字符*/

continue;

}

else

if (isdigit(*ptr)) {

/*当前字符是数字,则将该数字开始的数字串转换为数值*/

tnum = (2) ;

while (*ptr>=’0’ && *ptr <=’9’) {

tnum = tnum * 10 + (3) ;

ptr++;

}

Push( (4) );

}

else /*当前字符是运算符或其他符号*/

if (*ptr=='+'||*ptr=='-'||*ptr =='*'||*ptr =='/'){

if (!IsEmpty(s)) {

a = Top(s); Pop(&s); /*取运算符的第二个运算数*/

if (!IsEmpty(s)) {

b = Top(s); Pop(&s); /*取运算符的第一个运算数*/

}

else return -1;

}

else return -1;

switch (*ptr) {

case '+': Push(&s,b+a); break;

case '-': Push(&s,b-a); break;

case '*': Push(&s,b*a); break;

case '/': Push(&s,b/a); break;

}

}

else

return -1;

ptr++; /*字符指针指向下一字符*/

} /* while */

if (IsEmpty(s)) return -1;

else {

(5) = Top(s); Pop(&s); /*取运算结果*/

if (!IsEmpty(s)) return -1;

return 0;

}

}


正确答案:


第2题:

用于机检的逻辑运算符有几种,各自的功能是什么?


参考答案:逻辑与的功能:它是一种用于交叉概念和限定关系的组配,它可以缩小检索范围,有利于提高查准率。凡是用and的检索式,其两侧的检索词必须同时出现在同一条记录中,该记录才算命中。逻辑或得功能:是一种用于并列关系的组配。它可以扩大检索范围,防止漏洞,有利于提高查全率。凡是用or的检索式,or两侧的检索词只要有一个在一条记录中出现,该记录就算命中。逻辑非得功能:是一种相互排斥关系的组配。用来从原来的检索范围中排出不需要的概念或影响检索结果的概念,有利于提高查准率。凡是用not的检索式,not前面的检索词必须在记录中出现而后面的检索词一定不能出现,记录才算命中。

第3题:

已知类A有公用数据成员a,并重载了一运算符,且有A obj2;const A*ptr=new A;则下列语句错误的是( )。

A.ptr->a=100;

B.ptr=&obj2;

C.ptr++;

D.obj2=*ptr;


正确答案:A

本题考察const修饰符的作用。注意:const位置不同,其修饰的部分也是不同的。本题中const修饰的是ptr所指的对象本身,所以,ptr是可以重新指向新的对象,而ptr->a则无法被更新。

第4题:

按照运算符的功能划分,运算符二二属于( )。

A.扩展赋值运算符

B.二元运算符

C.算术运算符

D.关系运算符


正确答案:D
解析:题目给出的分类条件是运算符的功能,因此选项B首先排除;选项C也容易排除;选项A看上去是正确的答案,其实是不正确的,运算符=虽然在形式上很像扩展赋值运算符,但它是关系运算符。

第5题:

已有定义“int k=2;int*ptr1, *ptr2;”,且ptr1和ptr2均已指向变量k,下面不能正确执行的语句是______。

A.k=*ptr1+*ptr2;

B.ptr2=k;

C.ptr1=ptr2;

D.K=*ptr1*(*ptr2);


正确答案:B

第6题:

已知类A有公用数据成员a,且有A obj2;A*const ptr=new A;则下列语句正确的是

A.ptr->a=100;

B.ptr=&obj2;

C.ptr++;

D.ptr=obj2;


正确答案:A
本题主要考察const的使用const根据其位置的不同修饰不同的成份从而表现出灵活的特性考生容易混淆。此处const修饰的是指针即指针本身不能改变故选项B、C和D都是错误的。但是指针指向的地址里面的值确实可以改变的因此选项A是正确答案。

第7题:

按照运算符功能划分,运算符!=属于()。

A.三元运算符

B.二元运算符

C.算术运算符

D.关系运算符


正确答案:D

第8题:

已知类A有公用数据成员a,且有A ohj2;A*const ptr-new A;则下列语句正确的是( )。

A)ptr->a=100;

B)ptr=&obj2;

C)ptr++;

D)ptr=obj2;


正确答案:A

本题主要考察const的使用,const根据其位置的不同修饰不同的成份,从而表现出灵 活的特性,考生容易混淆。此处const修饰的是指针,即指针本身不能改变.故选项BCD都是 错误的。但是指针指向的地址里面的值确实可以改变的,因此选项A是正确答案。 

第9题:

下列有关指针的用法中错误的是( )。

A.int i;int *ptr=&i;

B.inti;int *ptr;i=*ptr;

C.int *ptr;ptr=0;

D.int i=5;int *ptr;*ptr&i;


正确答案:B

第10题:

下面函数的功能是______。 exchange(int*ptr1,*ptr2) { int*ptr; ptr=-ptr1; ptr1=ptr2; ptr2=ptr; }

A.交换*ptr1和*ptr2的值

B.无法改变*ptr1和*ptr2的值

C.可能造成系统故障,因为使用了空指针

D.交换*ptr1和*pb2的地址


正确答案:B
解析:函数中将指针变量ptr1和ptr2中的值交换,而不是交换指针ptr1和ptr2所指变量中的值。