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

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

时间:2024-10-24 23:17:26浏览次数:9  
标签:练习题 选项 12 字节 形参 int char 牛客 函数

1、在上下文和头文件正常的情况下,以下代码输出的值是:

1

2

3

4

5

6

7

8

9

10

11

12

13

int x = 4;

void incre() {

    static int x = 1;

    x *= x + 1;

    printf("%d", x);

}

int _tmain(int argc, _TCHAR *argv[]) {

    int i;

    for (i = 1; i < x; i++) {

        incre();

    }

    return 0;

}

A、2642

B、2

C、4

D、5

答案:A

解析:题目中定义了一个全局变量int x=4,那么在主函数中的循环会执行3次(调用三次incre函数)。在incre函数中,又定义了一个x,这个x被static修饰延长了局部变量的生命周期,那么下次再调用这个函数时,这个局部变量x不会再被初始化,会保留上次调用结束后的值。第一次x = x *(x+1)= 1 * 2 = 2,第二次x = x *(x+1)= 2 * 3 = 6,第三次x = x *(x+1)= 6 * 7 = 42。所以最后的结果为2642,选择选项A。

在看题友讨论中,发现有如下疑问,在这里解释一下。

主函数中的循环表达式2中的x不会随着incre函数中x的变化而变化吗?incre函数中的x是一个局部变量,它的作用域是incre函数的函数体内。被static修饰延长的是生命周期而不是作用域,这是两个不同的概念。

整个代码中有两个变量x,那么在incre函数内部x的值究竟应该等于哪个?在一个函数中,同名的局部变量的值会将全局变量的值覆盖掉,所以函数内部的变量值应该与局部变量的值一致。

2、 若有定义:char s[3][4];

则下列对数组元素s[i][j]的各种引用形式中,正确的是()

A、* (s+i)[j]

B、* (&s[0][0]+4 * i+j)

C、* ((s+i)+j)

D、* ( * (s+i)[j])

答案:B

解析:要对数组的元素进行引用,那么CD首先被排除。对于选项A,()的优先级最高,计算(s+i)结束后由于[ ]的优先级高于*,(s+i)会先与[ ]结合,选项A错误,正确的写法是(*(s+i))[j]。选项B中主要的思想是利用地址的偏移,偏移到目标地址后取*,B正确。

3、 在c语言中,下面能正确进行字符串赋值操作的是()

A、char s[5]={"ABCDE"};

B、char s[5]={‘A’,‘B’,’C’,’D’,’E’};

C、char *s; s="ABCDE";

D、char *s; scanf("%s",s);

答案:C

解析:选项A中字符串"ABCDE"末尾还有一个'\0',但是字符数组大小为5,选项A错误。选项B中赋值了五个字符,但是字符串以'\0'结尾,故选项B只是一个字符数组,但不是一个字符串,选项B错误。选项C和选项D都涉及到了野指针(没有指向的指针),对于一个野指针可以给它一个指向,但是不可以直接用其指向的地址,因为计算机随机赋的地址是不安全的,故选项D错误,选项C正确。

4、 C语言中,执行如下程序代码

1

2

3

4

char chr = 127;

int sum = 200;

chr += 1;

sum += chr;

后,sum的值是()

A、72

B、99

C、328

D、327

答案:A

解析:C语言中,char占一个字节,有符号char的范围是-128~127。所以本题代码中第三行进行加一操作后,会发生溢出(1000 0000),计算机默认数据是有符号的(1000 0000的补码为1 1000 0000),所以加一后的值为-128,最后的结果为72,选择选项A。

5、 下面选项中关于编译预处理的叙述正确的是()

A、预处理命令行必须使用分号结尾

B、凡是以#号开头的行,都被称为编译预处理命令行

C、预处理命令行不能出现在程序的最后一行

D、预处理命令行的作用域是到最近的函数结束处

答案:B

解析:预处理命令不是语句,不能以分号结尾,选项A错误。预处理命令行可以出现在程序的非代码行,可以是最后一行,选项C错误。预处理命令的作用域是从定义开始到整个文件结尾,选项D错误。

6、 在C语言中(以16位PC为例),5种基本数据类型的存储空间长度的排列顺序为()

A、char<int<long int<=float<double

B、char=int<long int<=float<double

C、char<int<long int=float=double

D、char=int=long int<=float<double

答案:A

解析:由下表,选择选项A。

类型16位平台32位平台

64位平台

char1个字节1个字节1个字节
short2个字节2个字节2个字节
int2个字节4个字节4个字节
unsigned int2个字节4个字节4个字节
float4个字节4个字节4个字节
double8个字节8个字节8个字节
long4个字节4个字节8个字节
unsigned long4个字节4个字节8个字节
long long8个字节8个字节8个字节
指针2个字节4个字节8个字节

7、 以下不能对一维数组 a 进行正确初始化的语句是()

A、int a[10] = {0, 0, 0, 0, 0};

B、int a[10] = { };

C、int a[] = {0};

D、int a[10] = {10*a};

答案:D

解析:A选项正确,这是数组的局部初始化,后面五个元素会自动补0。B选项正确,编译器自动将所有元素置零。C选项正确,这是数组的省略初始化,省略的是元素个数,赋几个值就开辟几个值的空间。D选项错误,a是一个数组名,这种写法是非法的。

8、 关于按值传递参数,下列说法中错误的是:

A、按值传递时,实参的值传递给形参,形参发生变化时不会影响实参。

B、实参的个数、类型应与形参一致。

C、定义函数时,会给形参分配存储单元。

D、实参与形参可以同名,此时两者会被分配不同的存储单元。

答案:C

解析:形参和实参是不同的存储单元,所以当按值传递时,形参的变化不会影响实参。定义函数时,不会给形参分配存储单元,只有调用时才会分配。故本题选择选项C。

9、 下面程序段的输出结果是(    )。

1

2

3

4

5

6

7

8

9

10

#include<stdio.h>

void fun(int px, int pa, int *pb){ 

     *pb = pa + px;

     pa = *pb + px;

}

int main(){ 

     int  x = 4, a = 2, b = 2;

     fun(x, a, &b);

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

}

A、2, 2

B、2, 6

C、6, 2

D、6, 6

答案:B

解析:本题中有两种参数传递方式:值传递和地址传递。本题中实参a的传递方式是值传递,在被调函数中的形参会另外开辟空间,所以在被调函数中对应形参的操作不影响实参的值。变量b传递的是地址,那么被调函数中可以对变量b的值进行修改。故选择选项B。

 10、假设数原型和变量说明如下:

void f4(int **p);
int a[4]={1,2,3,4};
int b[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int *q[3]={b[0],b[1],b[2]};

下面调用合法的是()

A、f4(a);

B、f4(b);

C、f4(q);

D、f4(&a);

答案:C

解析:本题主要是要分析每个选项中参数的类型与函数声明的形参类型是否一致。a的类型为int *,b的类型为int (*)[4],q的类型为int **,&a的类型为int (*)[4]。故选择选项C。

标签:练习题,选项,12,字节,形参,int,char,牛客,函数
From: https://blog.csdn.net/a921876874/article/details/143203465

相关文章

  • 每日OJ题_牛客_DP10最大子矩阵_二维前缀和_C++_Java
    目录牛客_DP10最大子矩阵_二维前缀和题目解析C++代码Java代码牛客_DP10最大子矩阵_二维前缀和最大子矩阵_牛客题霸_牛客网(nowcoder.com)描述:        已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵,你的任务是找到最大的非空(大小至少是1*1)子矩......
  • 题解:P3012 [USACO11FEB] Cowlphabet G
    [USACO11FEB]CowlphabetG题意有\(P\)种拼接方式,问由\(U\)个大写字母和\(L\)个小写字母合法组合的方案数。输出方案数对\(97654321\)取模的值。思路动态规划,还没有人写逆推方法,刚好我做的逆推。设\(f[i][j][z]\)表示一共有\(i\)个字母,其中\(j\)个为小写字母,......
  • 代码随想录算法训练营第24天(补第12天)| 递归遍历,迭代遍历,统一迭代
    前置知识二叉树的定义:structBNode{intval;BNode*lchild;BNode*rchild;BNode():lchild(NULL),rchild(NULL){}BNode(intval){val=val;lchild=rchild=NULL;}};递归遍历文章链接:https://programmercarl.com/二叉树的递归遍历.html#思路题目......
  • AI预测体彩排3采取888=3策略+和值012路或胆码测试10月24日升级新模型预测第114弹
             经过100多期的测试,当然有很多彩友也一直在观察我每天发的预测结果,得到了一个非常有价值的信息,那就是9码定位的命中率非常高,已到达90%的命中率,这给喜欢打私菜的朋友提供了极高价值的预测结果~当然了,大部分菜友还是走的正常渠道,因此,得想办法进行缩水,尽可能少的......
  • AI预测福彩3D采取888=3策略+和值012路或胆码测试10月24日新模型预测第120弹
            经过100多期的测试,当然有很多彩友也一直在观察我每天发的预测结果,得到了一个非常有价值的信息,那就是9码定位的命中率非常高,100多期一共只错了12次,这给喜欢打私房菜的朋友提供了极高价值的预测结果~当然了,大部分菜友还是走的正常渠道,因此,得想办法进行缩水,尽可能......
  • [赛记] 多校A层冲刺NOIP2024模拟赛11 && 12
    冒泡排序100pts比较显然的签到题(好久没这么水过了);考虑这个错的冒泡排序,手模一下即可发现这个$+k$有点像以前做过的同余系中求和的问题,于是这个题同理,用set维护每个同余系的排名,最后按顺序输出即可;对于正确性,相当于每次$+k$,则就相当于在一个同余系中排序;时间复杂度:$......
  • 23~24 炼石计划 NOIP 练习题部分题解
    目录目录第1组JOISC2017火车旅行IOI2018会议CF1558FStrangeSortAPIO2018新家CTSC2017密钥CF1748EYetAnotherArrayCountingProblem第2组NOI2016区间LOJ552MIN&MAXIJOISC2023合唱LOJ542序列划分LOJ560Menci的序列P8978中位数第3组USACO20FEBHelpYourse......
  • 12万字的java面试题及答案整理(2024新版)
    前言本来想着给自己放松一下,刷刷博客,慕然回首,final有哪些用法?static都有哪些用法?java的精度算法?java运算逻辑?异常处理?似乎有点模糊了,那就大概看一下Java基础面试题吧。好记性不如烂键盘***12万字的java面试题整理***final有哪些用法?final也是很多面试喜欢问的地方,但我觉得这个......
  • 王爽汇编实验12
    下面是实验十二的代码assumecs:codecodesegmentstart: ;do0的安装程序,只需要安装一次,以后无需此步骤 movax,cs movds,ax movsi,offsetdo0 ;设置ds:si指向do0程序所在位置 movax,0 moves,ax movdi,200h ;设置es:di指向中断......
  • 多校A层冲刺NOIP2024模拟赛12
    多校A层冲刺NOIP2024模拟赛12\(T1\)A.Alice和璀璨花\(65pts/65pts/65pts\)部分分测试点\(1\sim10\):设\(f_{i,j}\)表示前\(i\)位中生长趋势子序列长度为\(j\)时的末尾最小元素,然后进行暴力转移。测试点\(11\sim13\):观察到至多选择\(\left\lceil\log_......