日常刷题 (1)

牛客刷题

1.有关类的说法不正确的是( D  )

A.类是一种用户自定义的数据类型

B类中的成员函数可以存取类中的私有数据

C在类中,如果不作特别说明,所有的数据均为私有类型

D在类中,如果不作特别说明,所有的成员函数均为公有类型

解析:在C++中,类默认的方式时private,不管是继承方式还是成员。

2.在gcc编译器下,针对以下代码,
const char str1[] = "abc";        
const char str2[] = "abc";
const char *p1 = "abc";
const char *p2 = "abc";

那么针对printf("%d %d %d %d\n",str1, str2,p1,p2)的结果, 正确的说法是:输出的前两个数不同,输出的后两个数相同。

解析:前两个是字符数组,定义在栈上,明显地址不同字符串常量定义在静态区,仅有一份拷贝,所以后面两个指针指向的地址相同。(这道题在于数组和指针变量的地址存储区域,回去再研究研究)

3.有以下程序

#include <stdio.h>
#define SQR( X ) X * X
main( )
{
    int a=10, k=2, m=1;
    a / = SQR( k+m )/SQR( k+m );
    printf( "%d\n" ,a );
}

程序运行后的输出结果是1.

解析:这道题的坑在于“/”,表达式写出来之后是k+m*k+m/k+m*k+m。

4.下列程序的运行结果是YY,78,96,请为横线处选择合适的程序(答案是:*a,或者a[])

#include <stdio.h>
#include <string.h>
typedef struct
{
    char name[9];
    float score[2];
}STU;
void f(STU   _______)
{
    STU b={"YY",78,96};
    int i;
    strcpy(a->name,b.name);
    for(i=0;i<2;i++)
        a->score[i]=b.score[i];
}
main()
{
    STU c={"LL",90,80};
    f(&c);
    printf("%s,%.0f,%.0f\n",c.name,c.score[0],c.score[1]);
}

解析:由a->name知a为指针,那么A肯定正确,D说的是数组作为函数的参数会退化成指针,所以D也是正确的。

其中有个选项是&a,错误的原因是变量的引用是别名而不是指针,所以后文肯定不能是a->score[i] ,引用的话后文应该是a.score[i],例程如图:




猜你喜欢

转载自blog.csdn.net/buknow/article/details/79462637