刷c语言练习题3(牛客网)

1、下列程序段的功能是判断字符串是否对称,对称返回1,不对称返回0,请将缺失处处缺失程序补充完整。

1

2

3

4

5

6

bool fun(string str) {

    int i=0,j=0;

    j = ____;

    for (j--; i < j && str[i]==str[j]; i++, j--);

    return i >= j;

}

A、i+1

B、i

C、strlen(str)

D、str.size()

答案:D

解析:根据题目给出的功能描述,结合当前给出的代码,得出str[j]初始应该在字符串的末尾,所以j大小应该等于字符串的长度,首先排除选项A和选项D。C选项中使用了strlen()函数,但strlen是 C 语言中用于计算字符串长度的函数,根据代码中的字符串类型发现代码是用 C++ 编写的。在 C++ 中,应使用std::string类的成员函数size()来获取字符串的长度。所以选项C错误,选项D正确。

2、 下列函数定义中,有语法错误的是()

A、void fun(int x, int y){x = *y;}

B、int * fun(int *x, int y){return x += y;}

C、void fun(int *x, int y){*x += y;}

D、void fun(int x, int y){*x = *y;}

答案:AD

解析:选项A中传入参数为两个整数变量,*y是不合法的,错误。选项D中也是同选项A一样的问题,错误。选项B想表达的意思可能是指针的偏移,选项C操作是在把指针x指向的目标加上y。

3、 设有语句

1

2

int a = 5, b;

b = a > 3 && 0, a++;

执行后变量 b 的值为__________()

A、5

B、6

C、0

D、1

答案:C

解析:让我们来分析一下第二行代码的执行过程,首先执行判断a>3结果为ture,执行ture&&0结果为0,执行b=0,最后执行a++,但并不会将这个值赋给任何变量。最后b的值为0,选择选项C。

4、 以下逗号表达式的值为()

1

(x=4*5, x*5), x+25

A、25

B、20

C、100

D、45

答案:D

解析:根据运算符的优先级,()的优先级最高,在括号中会先计算4*5并把它赋给x,所以x现在为20。然后计算x*5为100,作为整个括号的返回值,但它没有被任何变量接收。所以最后计算x+25时还是20+25,结果是45,选择选项D。

5、假设编译器规定int 和 short 类型长度分别为 32 位和 16 位,若有下列 C 语言语句:

1

2

unsigned short x = 65530;

unsigned int y = x; 

得到y 的机器数为( )。

A、0000 7FFAH

B、0000 FFFAH

C、FFFF 7FFAH

D、FFFF FFFAH

答案:B

解析:已知一个无符号短整型变量x,结合它类型长度为16位,所以它可以存的最大的数为65535,这里赋值一个65530,无溢出。65530的二进制表示为1111 1111 1111 1010,将其赋给一个无符号的整型变量y,前面要补16个零,所以y的机器码为0000 FFFAH(H代表十六进制),选择选项B。

6、下面的类型声明中正确是()

A、int & a[4];

B、int &=p;

C、int &&q;

D、int i,*p=&i;

答案:D

解析:C++中不能建立引用数组、指向引用的指针、引用的引用。所以选项ABC错误,选项D正确。

7、 以下程序段的输出结果是()

1

2

char s[] = "\\141\141abc\t";

printf ("%d\n"strlen(s));

A、9

B、12

C、13

D、14

答案:A

解析:"\\141\141abc\t",前两个\\标志一个反斜杠字符,长度为1,141是三个字符,长度为3,\141中\将后面连续三个数字转为八进制,长度为1,abc是三个字符,长度为3,\t是水平制表符,长度为1。综上,总的有效长度为9,选择选项A。

8、 有以下程序

1

2

3

4

5

main() {

    char *a = "How are you?", b[20];

    ______________________________

    printf("%s %s\n", a, b);

}

请为横线处选择适当的输入语句使得( )
程序运行时从键盘输入:How are you?<回车>
得到的输出结果为How are you? How

A、gets(b);

B、scanf("%s", b);

C、b=getchar();

D、while(b=getchar()!="\0");

答案:B

解析:本题考查的是,scanf的接收终止条件,scanf遇到输入中的空格、回车、tab、特殊字符会终止接收。所以题目中使用scanf输入时,输入到How和空格后,就停止接收了。所以本题选择选项B。

9、 int i,j,a[2][3];按照数组a的元素在内存的排列次序,不能将数1、2、3、4、5、6存入a数组的是( )

A、for(i=0;i<2;i++)for(j=0;j<3;j++)a[i][j]=i*3+j+1;

B、for(i=0;i<3;i++)for(j=0;j<2;j++)a[j][i]=j*3+i+1;

C、for(i=0;i<6;i++)a[i/3][i%3]=i+1;

D、for(i=1;i<=6;i++)a[i][i]=i;

答案:D

解析:本题很好得出答案为D,选项D中循环到后面已经在越界存储了。记录一下的原因是觉得选项C这种存入方法很巧妙。

10、char * const p, char const * p, const char *p 上述三个的区别,说法错误的是?

A、char * const p; p的值不可以修改

B、char const * p;p指向的值为只读

C、const char *p;p的值不可以改变

答案:C

解析:根据const的位置区分是常量化指针还是常量化指针目标,一个小技巧就是看const右面只有p还是有*p。如果const右边只有p,如选项A,证明是常量化指针,所以指针的值不可以修改(即指针的指向不可以修改)。如果const右边有*p,如选项C,证明是常量化指针目标,则不能通过指针来修改指针目标的值。所以本题选择选项C。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值