C语言错题本之<结构体>

  1. 以下叙述中正确的是________.
  • A)预处理命令行必须位于源文件的开头
  • B)在源文件的一行上可以有多条预处理命令
  • C)宏名必须用大写字母表示
  • D)宏替换不占用程序的运行时间

答案:D
解析:
A:在C、C++等编程语言中,预处理指令(如#include、#define、#if等)
通常被放在源文件的开头,但这并不是强制性的
B:在C和C++等编程语言中,通常不建议在一行上放置多条预处理命令,
因为这样做可能会导致编译器解析错误或意外的行为
C:宏名并不必须用大写字母表示。在C和C++等编程语言中,
宏名(通过#define指令定义的)可以使用任何有效的标识符名称
D:宏替换(Macro Substitution)是在编译器的预处理阶段进行的,
而不是在程序运行时。因此,宏替换本身不占用程序的运行时间。

  1. 若指针p已正确定义,要使p指向两个连续的整型动态存储单元,不正确的语句是______.
  • A) p = 2 * ( int* ) malloc( sizeof ( int ) );
  • B) p = ( int* ) malloc ( 2 * sizeof ( int ) );
  • C) p = ( int* ) malloc ( 2 * 4 );
  • D) p = ( int* ) calloc ( 2 , sizeof ( int ) );

答案:A
解析:
void *calloc(size_t num, size_t size);
num:类型的数量
size:类型的大小

  1. 请读程序:
#include <stdio.h>
void  fun(float *p1,float *p2,float *s)
{  
	s = (float *)calloc( 1, sizeof(float));
    *s = *p1 + *(p2++);
}
int main()
{  
	float a[2] = {1.1, 2.2},b[2] = {10.0, 20.0},*s  =  a;
    fun(a, b, s);    
    printf("%f\n",*s);
}

上面程序的输出结果是_______.
○ A) 11.100000
○ B) 12.100000
○ C) 21.100000
○ D) 1.100000

答案:D
解析:fun函数中的’*s’是形参,对main函数中的实参没有影响,所以*s的值还是a的第一个元素。

  1. 以下程序的输出结果是______.
#include <stdio.h>
#  define  FUDGE(y)  2.84  +  y
#  define  PR(a)  printf("%d",(int)(a))
#  define  PRINT1(a) PR(a); putchar('\n');

int main()
{
	int  x  =  2;  
    PRINT1(FUDGE(5)*x);  
}  
  ○  A)  11
  ○  B)  12
  ○  C)  13
  ○  D)  15

答案:B
解析:PRINT1(FUDGE(5)*x);
=>PR(FUDGE(5)*x); putchar(‘\n’);
=>printf(“%d”,(int)(FUDGE(5)*x)); putchar(‘\n’);
=>printf(“%d”,(int)(2.84+5*x)); putchar(‘\n’);
所以最后打印的值是(int)(12.84)=12.

  1. 有以下程序段
    typedef struct NODE
    {
    int num;
    struct NODE *next;
    } OLD;
    以下叙述中正确的是 [单选题] [必答题]
    ○ A)以上的说明形式非法
    ○ B)NODE是一个结构体类型
    ○ C)OLD是一个结构体类型
    ○ D)OLD是一个结构体变量

答案:C
解析:struct NODE才是结构体类型

  1. 有以下程序
#include <stdio.h>
#include <string.h>

struct  STU  
{  
	char name[10];    
    int num;  
};

void  f(char *name,int num)
{  
    struct STU s[2] = {{"SunDan",20044},{"Penghua",20045}};
	num = s[0].num;
	strcpy(name, s[0].name);
}

int main()
{ 
	struct STU s[2] = {{"YangSan",20041},{"LiSiGuo",20042}},*p;
    p = &s[1];      
    f(p-> name, p->num);
    printf("%s %d\n", p-> name, p-> num);
}

程序运行后的输出结果是 [单选题] [必答题]
○ A)SunDan 20042
○ B)SunDan 20044
○ C)LiSiGuo 20042
○ D)YangSan 20041

答案:A
解析:向函数f()传参数时,第一个参数是一个指针类型,第二个参数是int型;
因此可以根据指针找到main函数中的结构体s[1].name的内存位置;
但是int的形参无法影响到实参。
在这里插入图片描述

  1. 若有以下说明和定义
union  dt
{
	int a;      
    char b;    
    double c;
}data;

以下叙述中错误的是______.

  • A)data的每个成员起始地址都相同
  • B)变量data所占内存字节数与成员c所占字节数相等
  • C)程序段:data.a=5;printf(“%f\n”,data.c);输出结果为5.000000
  • D)data可以作为函数的实参

答案:C
解析:int 类型通常只占用4个字节,而 double 类型需要8个字节。因此,将 5 赋值给 data.a 时,只有前4个字节被设置,而 double 类型的其余字节(在 union 内的剩余内存空间)可能包含不确定的值(通常是之前内存中的“垃圾”数据)。
当尝试以 %f 格式打印 data.c 时,printf 函数会尝试解释这8个字节作为 double 类型的值。但是,由于这些字节中的大部分并不表示一个有效的 double,所以结果将是未定义的,并且很可能不是 5.000000。

  1. 有以下程序
#include <stdio.h>
#include <stdlib.h>

struct  NODE
{
	int num;
	struct NODE *next;
};
int main()
{  
	struct NODE *p, *q, *r;
    int  sum  =  0;
    p =(struct NODE*)malloc(sizeof(struct  NODE));
    q =(struct NODE*)malloc(sizeof(struct  NODE));
    r =(struct NODE*)malloc(sizeof(struct  NODE));
    p-> num = 1;
    q-> num = 2;
    r-> num = 3;
    p-> next = q;
    q-> next = r;
    r-> next = NULL;
    sum += q-> next-> num;
    sum += p-> num;
    printf("%d\n",  sum);
}

执行后的输出结果是_______.

  • A) 3
  • B) 4
  • C) 5
  • D) 6

答案:B
解析:
*p={1,q}
*q={2,r}
*r={3,NULL}
sum += q-> next-> num; => sum+=r->num;=>sum+=3;
sum += p-> num;=>sum+=1=4
在这里插入图片描述

  1. 若有下面的说明和定义:
struct  test
{  
	int ml;
    char m2;   
    float m3;
    union uu  
    {  
    	char ul[5];  
        int u2[2];  
    }ua;
}myaa;

则sizeof(struct test)的值是 [单选题] [必答题]

  • A) 20
  • B) 16
  • C) 14
  • D) 17

答案:A
解析:
首先int占四个字节,对齐数4,放在地址0处
然后放char一个字节,对齐数1,紧挨int放,位于地址4处
接着float占四个字节,对齐数4,从地址8处开始放
共用体占成员中内存最大的字节数,即4*2个字节,从地址12处开始放
4+4+4+8=20

  1. 以下程序的输出结果是
struct  HAR
{  
	int x, y;  
    struct HAR *p;
}h[2];

int main()
{  
	h[0].x = 1;
    h[0].y = 2;
    h[1].x = 3;
    h[1].y = 4;
    h[0].p = h[1].p = h;
    printf("%d%d\n",(h[0].p)-> x , (h[1].p)-> y);
}  
  • A) 12
  • B) 23
  • C) 14
  • D) 32

答案:A
解析:
h[2]={{1,2,h},{3,4,h}}
h是结构体数组,指向结构体的第一个元素
在这里插入图片描述

  1. 以下程序的输出是
struct  st
{  
	int x;    
    int *y;
}*p;

int  dt[4]={10,20,30,40 };
struct st aa[4] = {50, &dt[0], 60, &dt[0], 60, &dt[0], 60, &dt[0],};

int main()
{  
	p = aa;
    printf("%d\n",++(p->x));
} 
  • A) 10
  • B) 11
  • C) 51
  • D) 60

答案:C
解析:p首先指向结构体数组aa的第一个元素,所以p->x=50,再自加1
在这里插入图片描述

  1. 在C语言中,函数的隐含存储类别是
  • A auto
  • B static
  • C extern
  • D 无存储类别

答案:C
解析:在C语言中,如果函数定义中没有明确指定存储类别,那么该函数的隐含存储类别是extern。这意味着该函数可以在其他文件中被调用,具有全局访问性。如果函数前面加上static关键字,则该函数只能被定义它的源文件中的其他代码访问,即它具有文件作用域,而不是外部链接。

  1. 在32位操作系统下,有下面的的结构体定义,则sizeof(struct Test)的值为( )
struct Test{
	char a;
	int b;
	char c;
	short d;
	char e;
	char f;
};
  • A 10
  • B 12
  • C 16
  • D 14

答案:C
解析:首先0地址存入一个char型,对齐数1
接着再4地址处存入一个int型,对齐数4
8地址处存入一个char型,
10地址处存入一个short型,对齐数2
11地址处存入一个char型
12地址处存入一个char型
因此最大对齐数是4,因此该结构体占16个字节。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/627098.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【PB案例学习笔记】-02 目录浏览器

写在前面 这是PB案例学习笔记系列文章的第二篇&#xff0c;该系列文章适合具有一定PB基础的读者&#xff0c; 通过一个个由浅入深的编程实战案例学习&#xff0c;提高编程技巧&#xff0c;以保证小伙伴们能应付公司的各种开发需求。 文章中设计到的源码&#xff0c;小凡都上…

RS编码和卷积码总结

RS编码 简要介绍RS编码及其原理 1. RS编码简介 Reed-Solomon编码&#xff08;RS编码&#xff09;是一种强大的纠错码&#xff0c;广泛应用于数据存储和传输中。RS编码由Irving S. Reed和Gustave Solomon于1960年提出&#xff0c;属于BCH码的一种&#xff0c;是基于有限域&am…

杨校老师项目之基于单片机STC89C52的智能环境监测系统【嵌入式】

获取全套资料&#xff1a; 有偿获取&#xff1a;mryang511688 技术&#xff1a;C语言、单片机等 摘要&#xff1a; 此设计可分为三个主要部分。此中的温度和湿度的检测功能&#xff0c;通过操纵单总线型温湿度传感器DHT11以数字形式显示&#xff0c;实现了切确测得温湿度的功能…

五分钟“手撕”时间复杂度与空间复杂度

目录 一、算法效率 什么是算法 如何衡量一个算法的好坏 算法效率 二、时间复杂度 时间复杂度的概念 大O的渐进表示法 推导大O阶方法 常见时间复杂度计算举例 三、空间复杂度 常见时间复杂度计算举例 一、算法效率 什么是算法 算法(Algorithm)&#xff1a;就是定…

蓝桥杯单片机之模块代码《串口发数据》

过往历程 历程1&#xff1a;秒表 历程2&#xff1a;按键显示时钟 历程3&#xff1a;列矩阵按键显示时钟 历程4&#xff1a;行矩阵按键显示时钟 历程5&#xff1a;新DS1302 历程6&#xff1a;小数点精确后两位ds18b20 历程7&#xff1a;35定时器测量频率 历程8&#xff…

队列的讲解

队列的概念 队列:只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头 一端进另一端出 也就是可以做到&#xff0c;先…

[BJDCTF 2020]easy_md5、[HNCTF 2022 Week1]Interesting_include、[GDOUCTF 2023]泄露的伪装

目录 [BJDCTF 2020]easy_md5 ffifdyop [SWPUCTF 2021 新生赛]crypto8 [HNCTF 2022 Week1]Interesting_include php://filter协议 [GDOUCTF 2023]泄露的伪装 [BJDCTF 2020]easy_md5 尝试输入一个1&#xff0c;发现输入的内容会通过get传递但是没有其他回显 观察一下响应…

数据结构与算法-排序算法3-插入排序

目录 1.插入排序&#xff1a; 1.介绍&#xff1a; 2.动态图解 3.举例 4.小结插入排序规则 5.插入排序代码 6.运行时间 代码&#xff1a; 运行结果&#xff1a; 1.插入排序&#xff1a; 1.介绍&#xff1a; 数组中n个元素&#xff0c;把这n个待排序元素看成一个有序序…

深度学习:光流估计新范式

0.概述 在这篇文章中&#xff0c;我们将讨论两种基于深度学习的光流运动估计方法。FlowNet是第一个用于计算光流的CNN方法&#xff0c;RAFT是当前最先进的估计光流的方法。我们还将看到如何使用作者提供的经过训练的模型来使用PyTorch对新数据进行推断。 1. FlowNet FlowNet…

读人工智能时代与人类未来笔记03_演变

1. 演变 1.1. 每个社会都找到了属于自己的一套适应世界的方法 1.1.1. 适应的核心&#xff0c;是有关人类心智与现实之间关系的概念 1.1.2. 人类认识周围环境的能力 1.1.2.1. 这种能力通过知识获得&#xff0c;同时也受到知识…

CentOS 安装 SeaweedFS

1. SeaweedFS 介绍 SeaweedFS 是一个简单且高度可扩展的分布式文件系统。有两个目标&#xff1a; to store billions of files! (存储数十亿个文件&#xff01;)to serve the files fast! (快速提供文件&#xff01;) Seaweedfs的中心节点&#xff08;center master&#xff09…

电容笔记汇总

电容 一、电容理论基础 1、电容的本质 两个相互靠近的导体&#xff0c;中间夹一层不导电的绝缘介质&#xff0c;这就构成了电容器。当电容器的两个极板之间加上电压时&#xff0c;电容器就会储存电荷。 两个相互靠近的金属板中间夹一层绝缘介质组成的器件&#xff0c;当两端…

JeeSite Vue3:前端开发页面如何动态设置菜单展示模式?

推荐阅读&#xff1a; JeeSite Vue3&#xff1a;前端开发的未来之路(更新版) 随着技术的飞速发展&#xff0c;前端开发技术日新月异。在这个背景下&#xff0c;JeeSite Vue3 作为一个基于 Vue3、Vite、Ant-Design-Vue、TypeScript 和 Vue Vben Admin 的前端框架&#xff0c;引…

研发管理之认识DevOps

文章目录 一、什么是DevOps二、DevOps的背景和起源三、DevOps的特点和价值1、特点&#xff1a;2、价值&#xff1a; 四、DevOps如何帮助提高软件交付速度和质量 一、什么是DevOps DevOps&#xff08;Development和Operations的组合词&#xff09;是一组过程、方法与系统的统称…

Sketch总结

sketch禁用了lineGap https://www.sketch.com/docs/designing/text/ http://www.sketchcn.com/sketch-chinese-user-manual.html https://github.com/sketch-hq/sketch-document https://developer.sketch.com/file-format/ https://animaapp.github.io/sketch-web-viewer/ htt…

Python | Leetcode Python题解之第89题格雷编码

题目&#xff1a; 题解&#xff1a; class Solution:def grayCode(self, n: int) -> List[int]:ans [0] * (1 << n)for i in range(1 << n):ans[i] (i >> 1) ^ ireturn ans

C++基础与深度解析 | 表达式 | 操作符

文章目录 一、表达式基础1.表达式的值类别2.表达式的类型转换 二、表达式详述1.算术操作符2.逻辑与关系操作符3.位操作符4.赋值操作符5.自增与自减运算符6.其他操作符三、C17对表达式的求值顺序的限定 一、表达式基础 表达式由一到多个操作数组成&#xff0c;可以求值并 ( 通常…

2024年5月面试准备

2024年5月面试准备 资料来源Java基础泛型注解异常反射SPI机制Java集合CollectionMap 并发基础线程并发关键字并发集合Lock核心类并发集合核心类原子类核心类线程池核心类ScheduledThreadPoolExecutorForkJoinPoolFokJoinTask JUC原子类: CAS, Unsafe和原子类详解JUC 工具类 Jav…

Nginx 生产环境部署的最佳实践

你好呀&#xff0c;我是赵兴晨&#xff0c;文科程序员。 最近一段时间&#xff0c;我一直在和大家一起探讨Nginx的相关话题。期间&#xff0c;我收到了很多小伙伴的私信&#xff0c;他们好奇地问我&#xff1a;在生产环境中&#xff0c;Nginx应该如何配置&#xff1f; 他们在…

LeetCode题练习与总结:不同的二叉搜索树--96

一、题目描述 给你一个整数 n &#xff0c;求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种&#xff1f;返回满足题意的二叉搜索树的种数。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;5示例 2&#xff1a; 输入&#xff1a;n 1 输出&…