C++问题,高手来

2024-05-16 12:29

1. C++问题,高手来

A。逗号表达式,最后的值是5
B。算术运算符>赋值运算符(优先级)
C。因为a,b都是int型,赋值表达式中a=a&&b,最后的值是a的值,逻辑运算符&&没有用到。
D。连续赋值,即a=4,b=4。
选C。不是赋值表达式。
这是我的理解。

C++问题,高手来

2. C++问题,高手来

C语言提供一种特殊的运算符——逗号运算符。用它将两个表达式连接起来。如:

  3+5,6+8

称为逗号表达式,又称为“顺序求值运算符”。逗号表达式的一般形式为

         表达式1,表达式2

逗号表达式的求解过程是:先求解表达式1,再求解表达式2。整个逗号表达式的值是表达式2的值。例如,上面的逗号表达式“3+5,6+8”的值为14。又如,逗号表达式
  a=3*5,a*4
对此表达式的求解,读者可能会有两种不同的理解:一种认为“3*5,a*4” 是一个逗号表达式,先求出此逗号表达式的值, 如果a的原值为3,则逗号表达式的值为12,将12赋给a, 因此最后a的值为12。另一种认为:“a=3*5”是一个赋值表达式”,“a*4”是另一个表达式,二者用逗号相连,构成一个逗号表达式。这两者哪一个对呢?赋值运算符的优先级别高于逗号运算符, 因此应先求解a=3*5(也就是把“a=3*5”作为一个表达式)。经计算和赋值后得到a的值为15,然后求解a*4,得60。整个逗号表达式的值为60。
  一个逗号表达式又可以与另一个表达式组成一个新的逗号表达式,如(a=3*5,a*4),a+5 先计算出a的值等于15,再进行a*4的运算得60(但a值未变,仍为15),再进行a+5得20,即整个表达式的值为20。
  逗号表达式的一般形式可以扩展为

    表达式1,表达式2,表达式3……表达式n

它的值为表达式n的值。

  逗号运算符是所有运算符中级别最低的。因此,下面两个表达式的作用是不同的:

  ① x=(a=3,6*3)
  ② x=a=3,6*a

  第①个是一个赋值表达式,将一个逗号表达式的值赋给x,x的值等于18。第②个是逗号表达式,它包括一个赋值表达式和一个算术表达式,x的值为3。

  其实,逗号表达式无非是把若干个表达式“串联”起来。在许多情况下,使用逗号表达式的目的只是想分别得到各个表达式的值,而并非一定需要得到和使用整个逗号表达式的值,逗号表达式最常用于循环语句(for语句)中.

  请注意并不是任何地方出现的逗号都是作为逗号运算符。例如函数参数也是用逗号来间隔的。如

  printf("%d,%d,%d",a,b,c);

  上一行中的“a,b,c”并不是一个逗号表达式,它是printf函数的3个参数,参数间用逗号间隔。
如果改写为

  printf("%d,%d,%d",(a,b,c),b,c);

则“(a,b,c)”是一个逗号表达式,它的值等于c的值。括弧内的逗号不是参数间的分隔符而是逗号运算符。括弧中的内容是一个整体,作为printf函数的一个参数。
C语言表达能力强,其中一个重要方面就在于它的表达式类型丰富,运算符功能强,因而c使用灵活,适应性强

3. C++问题,高手来

执行(a>0)?a:-a;这个表达式的值为3,但他并没有对对a赋值啊。
若执行a=(a>0)?a:-a;计算表达式(a>0)?a:-a的值为3,将值通过a=(a>0)?a:-a赋予给a后,a的值就为3。

C++问题,高手来

4. C++问题,高手来

选b。表达式1?表达式2:表达式3。这个语句表达的意思是如果表达式1为真,则以表达式2的值作为整个条件表达式的值。否则以表达式3为整个条件表达式的值。所以原表达式可以进一步简化为:
1?2:1。1为真所以整个表达式的值为2。
满意请给最佳,谢谢

5. C++问题,高手来

首先 7 + 8 > 2  返回真(姑且 叫做a) 。然后 25 % 5 = 0  返回假(姑且叫做b) 。最后真和假做或运算(a && b)运算规则是有一个假 则 整个 就为假 ;所以这个结果是假 ,也就是 0 ;

C++问题,高手来

6. C++高手请进,求解惑

这里的关键是创建对象数组,有两种做法:
采用Student *s = new Student[2]创建,这需要Student有默认的构造方法,因为这里的name和score并非每个Student对象都一样,而是各自不同的四个变量。调用方法的时候,可以用s[0].getName()。析构的时候,需要用delete[](s)。不过这显然不符合这个Student类的设计,若要这样做,需要增加Student类的无参构造方法,且需要加上set方法,故暂且不用。
采用Student *s[2]创建,创建后对s[0]和s[1]可以分别调用Student类的带参构造方法创建对象,即s[0] = new Student(n1, a1)。调用方法是,由于是指针数组,需要用s[0]->getName()方式调用。析构时,由于s本身是指针数组,而数组的每个元素是new出来的,需要单独析构每个元素,即delete(s[0])和delete(s[1])。这种方法符合Student类的设计,可取。
所以实现代码如下(仅列出Student数组相关代码):
Student *s[2];s[0] = new Student(n1, a1);s[1] = new Student(n2, a2);cout getName() getScore() getName() getScore() << endl;delete(s[0]);delete(s[1]);

7. 坐等C++高手,都是一些简单的题,高人帮帮我吧,急用。现在没分了,各位帮帮忙吧。

/**不能保证全对,但是基本都对吧.*/
1.以下选项中合法的用户标识符是(B )。
 A) long     B) _2Test       C) 3Dmax        D) A.dat
2.以下选项中不能作为合法常量的是(  C    )。
A) 1.234e04  B) 1.234e0.4  C) 1.234e+4   D) 1.234e0
3.能正确表示逻辑关系:“x≥5且x≤0”的C语言表达式是(   C   )
A) x>=5 or x=0|x<=5 
        C) x>=5 &&x=5‖x<=0
4.设有如下定义:
   int  a=1,b=2,c=3,d=4,m=2,n=2;
   则执行表达式:(m=a>b)&&(n=c>d)后,n的值为(B  )
      A) 1       B)2      C)3     D)0
5.main()
       { int a=3;
       printf(“%d\n”,(a+=a-=a*a) );}( D )
     A) –6   B)12   C) 0   D) -12
6.语句形式如下:
if()  
例如if(a<b){t=a;a=b;b=t;}
以下错误的if语句是(    C  )。
A) if (x>y);     B) if(x==y) x+=y;
C) if (x!=y)  scanf(“%d”, &x)  
   else  scanf(“%d”,&y);
D) if (x<y) {x++;  y++;}
7.若有以下程序
main()
{ int a=4,b=3,c=5,t=0;
if (a<b) t=a; 
a=b; 
b=t;
if (a<c) t=a;
 a=c; 
c=t;
printf("%d, %d, %d\n", a,b,c);
}
输出结果为:______5,0,3_____
8.main()
    { int a=0,i;
     for(i=0;i<5;i++)
     { switch(i)
     { case 0:
       case 3:a+=2;
       case 1:
      case 2:a+=3;
       default:a+=5;
       }}
       printf("%d\n",a);
        }
  运行结果为(   )// 这个好像答案不正确.应该是15的
    A) 31  B) 13   C) 10   D) 20
   9. main()
    {int x=3,y=6,a=0;
      while(x++!=(y-=1))
     {a+=1;
      if(y<x) break;
     }
     printf(“x=%d,y=%d,a=%d\n”,x,y,a);}
         输出结果为:_____x=4,y=4,a=1_______  
 10. 以下循环体的执行次数是( c)
A) 3   B) 2    C) 1    D) 0
main( )
{ int i,j;
for(i=0,j=1; i<=j+1; i+=2, j--)printf("%d \n",i);
}
11.以下程序运行后的输出结果是 ______1 3 6_____。 
fun(int x)
{ if(x/2>0) fun(x/2);
printf("%d ",x);
}
main()
{ fun(6); }
12.以下不能正确进行字符串赋初值的语句是(  A)   
A) char str[5]="good!"; 
B) char str[]="good!"; 
C) char *str="good!"; 
D) char str[5]={'g','o','o','d'};
13.若有以下定义和语句:     
 char *s1="12345",*s2="1234";    
  printf("%d\n",strlen(strcpy(s1,s2)));
 则输出结果是(  A )    
 A)4              B)5           C)9                     D)10
14.main()
{ char ch[3][5]={"AAAA","BBB","CC"};
  printf("%s\n",ch[1]);
  }
运行结果为( B )
A) "AAAA" B) "BBB" C) "BBBCC" D) "CC"

坐等C++高手,都是一些简单的题,高人帮帮我吧,急用。现在没分了,各位帮帮忙吧。

8. c++问题,高手来

作用域和可见性是不分家的。
myclass p[10]声明得是一个10个元素的对象数组,意思就是数组元素是类的对象。
当p离开作用域的时候,当然要销毁在内存中占用的空间,而p是一个数组指针,所以整个数组的10个元素都会消耗(遇到ASCII码为0的停止),而每个元素又是对象,对象销毁时,自动调用类的析构函数,处理善后工作,如释放delete类对象的指针。

你可能会疑问,为什么p作用域到了的时候,会自动消耗,而对象作用域到了的时候,不会自动消耗。这其实是为何需要析构函数的问题,一个类的对象,声明定义的时候,你无法得知它具体包含多少个数据成员,所以初始化任务需要构造函数。同样地,销毁的时候,不知销毁多少个数据成员(特指指针),这就需要你手动列出需要销毁的指针,比如是销毁一个还是销毁二个。

以上均是拙见,正确性并非百分之百,请自行斟酌。

最好的学习方法是被实践证明过有效的方法。建议你写出示例程序,然后下断,单步跟踪调试一下。