首页 > 其他分享 >刷c语言练习题9(牛客网)

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

时间:2024-10-21 23:17:17浏览次数:3  
标签:练习题 输出 malloc 语言 void 牛客 str prod 指针

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个字符。

标签:练习题,输出,malloc,语言,void,牛客,str,prod,指针
From: https://blog.csdn.net/a921876874/article/details/143052412

相关文章

  • c语言小结——使电脑关机,输入正确信息取消关机
    一:代码展示 #include<stdio.h>#include<string.h>#include<stdlib.h>intmain(){charinput[20]={0};system("shutdown-s-t60");agin:printf("请输入:我是帅哥,否则电脑将在1分钟后关机\n");scanf("%s",inpu......
  • C语言实践中的补充知识 Ⅱ
    一、在C语言中,%7.2f是一个格式说明符,通常用于printf或sprintf等函数中,用于控制浮点数的输出格式。这里的%是格式说明符的开始符号。7表示字段宽度。这意味着输出的浮点数将至少占用7个字符的宽度。如果浮点数的实际宽度小于7个字符(包括小数点和小数部分),那么它将在左......
  • Llama Factory :百种以上语言模型的统一高效微调框架
     人工智能咨询培训老师叶梓转载标明出处大模型适应到特定下游任务时,传统的全参数微调方法成本高昂,因此,研究者们一直在探索更高效的微调技术。由北京航空航天大学和北京大学的研究团队提出了一个名为LlamaFactory的统一框架,旨在解决大模型高效微调的问题。该框架整合了一系......
  • C语言学习4
    函数的调用在C语言中,函数是执行特定任务的代码块,它允许代码重用和模块化。函数调用是程序执行过程中的一个重要环节,它涉及到将控制权从一个函数转移到另一个函数。函数的调用时参数的传递方式分为两种1.传值调用:实参的值会被复制给形参。在函数内部对形参的修改不会影响到......
  • C++研发笔记4——C语言程序设计初阶学习笔记2
            从今天开始我们开始第二模块初识C语言的学习,在本模块中我们将会涉及到一下14个内容:什么是C语言、第一个C语言程序、数据类型、变量、常量、字符串+转义字符+注释、选择语句、循环语句、函数、数组、操作符、常见关键字、define定义常量和宏、指针......
  • 函数的力量:掌握C语言的基石
    目录前言标准库:C语言的百宝箱头文件:库函数的藏宝图实例分析:计算平方根的sqrt函数功能描述头文件包含的重要性库函数文档的一般格式自定义函数:释放你的编程创造力函数的语法形式 函数的比喻函数的举例 简化函数定义形参和实参形参实参实参和形参的关系retur......
  • 活体检测API对接php语言方式-人脸静态/动态活体检测免费
    活体检测API是一种用于判断用户是否为真实存在且活跃的技术接口,翔云活体检测分为静默活体与动态视频活体,广泛应用于金融、身份验证、安防等领域。它通过分析用户提供的图像、视频、或者特定动作,确保所提供的生物信息(如面部或指纹)来自于活体,而非静态照片、视频录播或模型。该技......
  • c语言 选票系统 函数封装
    #include<stdio.h>#include<string.h>intfeipiao=0;structxm{ charname[32]; inttickets;};//选民人员输入voidxuanmin(intlen,structxmarr[]){ inti; for(i=0;i<len;i++) { printf("请输入选民的名字:\n"); scanf("%s",arr......
  • 数组的往返(数组来回遍历)C语言版
    文章目录前言题目描述一、数组的往返是什么?二、实现1.具体代码2.完整题解代码总结以及一些疑问前言本篇文章灵感来源于第十三届蓝桥杯省赛C++B组第六题修剪灌木,我的方法是老老实实地走完这个流程得到答案题目描述爱丽丝要完成一项修剪灌木的工作。有N棵灌......
  • Java语言快速实现简单MQ消息队列服务
    目录MQ基础回顾主要角色自定义协议流程顺序项目构建流程具体使用流程代码演示消息处理中心Broker消息处理中心服务BrokerServer客户端MqClient测试MQ小结 MQ基础回顾在上一篇消息通讯之关于消息队列MQ必须了解的相关概念中,我们尽可能地详细的了解......