当前位置: 首页 > news >正文

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

1、

1

2

3

4

5

6

7

8

char* getmemory(void){

    char p[]= " hello world";

    return p;

}

void test(void){

    char *str=NULL;

    str=getmemory(); printf(str);

}

请问运行Test 函数会有什么样的结果?

A、出错

B、输出"hello world"

C、输出空""

D、输出乱码

答案:D

解析:函数getmemory返回的是一个局部变量的地址,这个地址在本函数结束后就会被销毁,返回的是无效地址,p指向的内容就会不确定。所以程序输出的是乱码,选择选项D。

2、 函数fun计算prod=1*2*3*…*n,并返回计算结果值。但当n=100时,程序不正确。要找出该程序的错误,正确的调试方法是( )。

1

2

3

4

5

6

7

int fun(int n) {

    int prod, i;

    prod = 1;

    for (i = 1; i <= n; i++)

        prod *= i;

    return prod;

}

A、监视变量prod的值,在prod *= i;行处设置断点,然后单步运行,直到发现错误原因

B、监视变量prod的值,在return prod;行处设置断点,程序中断后,即可发现错误原因

C、在prod=1;处设置断点,然后在函数调用堆栈中即可发现错误原因

D、监视变量i的值,在for (i=1; i<=n; i++)行处设置断点,然后单步运行,直到发现错误原因

答案:A

解析:观察代码发现这是一个求阶乘的过程。由于输入的数为100,导致结果产生溢出,但这个溢出不会报错,最后输出时只会输出不正常的值。所以要对每次计算得到的阶乘进行监视,所以选择选项A。

3、 算法一般用类C语言之类的伪码来描述,如果用C语言等高级语言来描述,则算法实际上就是程序了。

A、对

B、错

答案:B

解析:程序 = 算法+数据结构。

4、设有定义语句

1

int x[6] = {2, 4, 6, 8, 5, 7}, *p = x, i;

要求依次输出x数组6个元素中的值,不能完成此操作的语句是()

A、for(i=0;i<6;i++) printf("%2d",*(p++));

B、for(i=0;i<6;i++) printf("%2d",*(p+i));

C、for(i=0;i<6;i++) printf("%2d",*p++);

D、for(i=0;i<6;i++) printf("%2d",(*p)++);

答案:D

解析:A选项中,*(p++)的p先返回当前值与*结合,然后进行p++指向下一个位置,输出正确。B选项中,*(p+i)等价于p[i],在当前条件下又等价于a[i],输出正确。C选项中,*p++的p先和*结合输出当前值,然后进行p++指向下一个位置,输出正确。D选项中,(*p)++的p先与*结合返回当前值,然后进行的时(*p)++,改变当前p指向的值,又p的指向一直没有改变,所以输出为 2 3 4 5 6 7,不符合题目条件,选择选项D。

5、C语言中,关于malloc,下列说法正确的是()

A、malloc需要头文件stdlib.h

B、malloc的返回值是一个指针

C、使用malloc时需要强制类型转换

D、malloc有两个参数

答案:AB

解析:malloc函数的使用需要引入头文件<stdlib.h>,函数的原型为void *malloc(size_t size)可以看出返回值是一个void *类型的指针,参数只有一个,代表申请空间的字节大小。在C语言中使用malloc时不需要强制类型转换,从void *到其他类型的指针是自动隐式转换的,在C++中使用malloc时必须要进行强制类型转换。综上,选择选项AB。

6、 有转义字符如下:
'\0X41'、'\0x41'、'\X41'、'\x41'、'\a'、'\b'、'\c'、'\r'
其中错误的转义字符个数是()

A、0个

B、2个

C、4个

D、6个

答案:C

解析:\ddd(d为0~7的整数)代表将ddd当作三位八进制数。\xhh(h为0~f间的值)代表将hh当作两位十六进制数。常见的转义字符有:\0--空字符、\n--换行符、\t--制表符、\\--反斜杠、\"--双引号、\'--单引号、\a--警示音、\b--退格符、\f换页符、\r回车符、\v垂直制表符。

'\0X41'和'\0x41'中\0已经是一个完整的转义序列,'\X41'中X为大写,由于C语言严格区分大小写,所以写法错误,'\c'不是一个有效的转义字符。综上,错误的转义字符个数为4,选择选项C。

关于\ddd形式的转义序列,因为\将后续的ddd转为三位八进制数字(例如:\123,后续的123是一个八进制数),这个三位数的范围是000~377,因为该数会由八进制数转为对应的十进制数ASCII值来表示字符,377对应ASCII表中的255。如果大于这个数的话会产生溢出,例如:'\541'在编译器中会发生警告,但其对应的十进制ASCII码为353 = 255+1+97,所以这个值被打印会为a。

7、下面代码在64位Linux系统编译执行,输出结果是____。

1

2

3

4

5

6

7

8

9

10

#include <stdint.h>

#include <stdio.h>

void print_size(int32_t array[10]) { printf("%d\n"sizeof(array)); }

int main() {

    int32_t myArray[10];

    printf("%d "sizeof(myArray));

    print_size(myArray);

}

A、20 4

B、40 4

C、80 4

D、40 8

E、80 8

F、以上均不正确

答案:D

解析:在主函数中sizeof(myArray)的myArray代表整个数组,那么该语句求的是整个数组的大小,数组有十个int32_t类型的变量,所以数组的大小为40个字节。数组作为参数进行传递时会变为指针,所以被调函数中,打印的是指针的大小,64位系统下,指针的大小为8。所以本题选择选项D。

8、运行下面这段代码,会出现的情况是:()

1

2

3

4

5

6

7

8

void GetMemory(char *p) { p = (char *)malloc(100); }

void Test(void) {

    char *str = NULL;

    GetMemory(str);

    strcpy(str, "hello world");

    printf(str);

}

A、hello world

B、显示为乱码

C、程序崩溃

D、hello

答案:C

解析:根据题目中代码,目的应该是想让指针str获取到一块有效的地址,然后才能执行函数strcpy并输出。但当前的传递方式为值传递,被调函数中的指针p与主调函数中的指针str开辟的是两块不同的空间地址,所以在被调函数中指针p指向的动态开辟的空间首地址不代表指针str也指向这个地址。当被调函数结束后,指针p被释放,指针str仍指向空地址,所以后续执行strcpy和输出操作时会程序崩溃。选择选项C。

进行如下修改后程序正确:

以指针p的地址作为参数,用二级指针进行接收,为地址传递,被调函数中*p等价于指针str,所以此时得到的地址是有效的。

1

2

3

4

5

6

7

8

void GetMemory(char **p) { *p = (char *)malloc(100); }

void Test(void) {

    char *str = NULL;

    GetMemory(&str);

    strcpy(str, "hello world");

    printf(str);

}

9、 以下程序的运行结果是()

1

2

3

4

5

#include <stdio.h>

int main(void) {

    printf("%s , %5.3s\n""computer""computer");

    return 0;

}

A、computer , puter

B、computer , com

C、computer , computer

D、computer , compu.ter

答案:B

解析:%ms的输出规则,m表示的输出的域宽,如果字符串长度大于规定的域宽,将字符串全部输出,串长小于m,默认左侧补空格。加-改为左对齐,在输出的右侧补空格。%m.ns的输出规则,输出的域宽为m,只取字符串左端的n个字符输出,这个输出默认右对齐。n大于m时相当于字符串长度大于域宽,输出n个字符。


http://www.mrgr.cn/news/53125.html

相关文章:

  • python接口自动化测试框架2.0,让你像Postman一样编写测试用例,支持多环境切换、多业务依赖、数据库断言等
  • 【Python】NumPy(一):数据类型、创建数组及基本操作
  • 别墅优选,约克VRF中央空调为家居增添舒适与幸福感
  • c++ 中虚函数和纯虚函数
  • 中科星图(GVE)——使用随机森林方法进行土地分类
  • Vue2的依赖注入(跨级通信)基本使用
  • ST表 C++
  • LSL常见应用场景及示例<三>
  • pip3安装报error: externally-managed-environment,删除EXTERNALLY-MANAGED即可
  • 成语积累学习
  • PHP-laravel框架
  • 苍穹外卖学习笔记(二十六)
  • Null-text Inversion for Editing Real Images using Guided Diffusion Models
  • AI 自学 Lesson2 - 回归(Regression)
  • Doctype? 严格模式 、混杂模式?
  • 微信小程序用开发工具在本地真机调试可以正常访问摄像头,发布了授权后却无法访问摄像头,解决方案
  • 【热门】智慧果园管理系统解决方案
  • 如何高效规划千人大会?数字化会议管理的实战经验分享!建议收藏!
  • Python 工具库每日推荐【Jinja2 】
  • canvas鼠标点击特效