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

news2025/1/13 17:09:16
  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个字节。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

轻松掌握抖音自动点赞技巧,快速吸粉

在当今这个信息爆炸的时代&#xff0c;抖音作为短视频领域的领头羊&#xff0c;不仅汇聚了庞大的用户群体&#xff0c;也成为了品牌和个人展示自我、吸引粉丝的重要平台。如何在众多内容创作者中脱颖而出&#xff0c;实现高效引流获客&#xff0c;精准推广自己的内容&#xff0…

springboot+vue+mybatis台球俱乐部管理系统的设计与实现+PPT+论文+讲解+售后

随着信息技术在管理上越来越深入而广泛的应用&#xff0c;作为一般的台球厅都会跟上时代的变化&#xff0c;用上计算机来代表重复性的劳动&#xff0c;并且给用户一种新奇的感受&#xff0c;实现台球俱乐部系统 在技术上已成熟。本文介绍了台球俱乐部系统 的开发全过程。通过分…

Jmeter+Grafana+Prometheus搭建压测监控平台

本文不介绍压测的规范与技术指标&#xff0c;本文是演示针对Jmeter如何将压测过程中的数据指标&#xff0c;通过Prometheus采集存储&#xff0c;并在Granfan平台进行仪表盘展示; 介绍 系统压测属于日常项目开发中的一个测试环节&#xff0c;使用测试工具模拟真实用户行为&…

【C++】 C++ 编写 鸡兔同笼程序

文章目录 “鸡兔同笼”问题是一个经典的数学问题&#xff0c;要求根据总头数和总腿数来计算鸡和兔的数量。假设鸡有 2 条腿&#xff0c;兔有 4 条腿。可以通过以下步骤求解这个问题&#xff1a; 1 .设鸡的数量为 x&#xff0c;兔的数量为 y。2.根据题意&#xff0c;我们有以下…

CentOS7中如何docker-compose

在 CentOS 7 上安装 docker-compose 需要几个步骤 步骤 1: 安装 Docker 首先&#xff0c;确保你已经安装了 Docker。如果没有安装&#xff0c;可以通过以下命令安装&#xff1a; sudo yum update -y sudo yum install -y yum-utils sudo yum-config-manager --add-repo http…

老铁,对不住了,没有B端成品界面可售,都是定制化设计

经常有粉丝老铁问我有没有成品的UI图可以出售&#xff0c;实在对不住&#xff0c;我们不销售设计成品。 UI设计图是一种设计稿&#xff0c;它是用来展示和呈现产品的界面设计和交互效果的&#xff0c;而不是一个完整的、可交付的成品。UI设计图通常是以静态的形式呈现&#xf…

基于springboot+vue+Mysql的在线答疑系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

CS144 Checkpoint 4: interoperating in the world(2024)

分析网络路径和性能&#xff1a; mtr命令 mtr 输出的详细分析&#xff1a; mtr 162.105.253.58 命令用于结合 traceroute 和 ping 的功能&#xff0c;实时监测并分析从你的计算机到目标主机&#xff08;IP 地址 162.105.253.58&#xff0c;北京大学计算中心&#xff09;之间…

vscode 之 output 输出中文乱码,终端输出中文正常

# 1. 背景 因为没钱买正版的软件&#xff0c;所以转战 vscode 编译器。 在编译 python 文件时&#xff0c;发现直接右键 runner code&#xff0c;输出中文乱码。 但是在 teiminal 终端 执行py test.py 时&#xff0c;输出正常&#xff0c;中文正常。 output 输出中文样式(中文…

JAVA实验项目(二): 抽象类、接口的定义与使用

实验项目二 抽象类、接口的定义与使用 Tips&#xff1a;"分享是快乐的源泉&#x1f4a7;&#xff0c;在我的博客里&#xff0c;不仅有知识的海洋&#x1f30a;&#xff0c;还有满满的正能量加持&#x1f4aa;&#xff0c;快来和我一起分享这份快乐吧&#x1f60a;&…

【算法优选】 动态规划之子数组、子串系列——壹

文章目录 &#x1f38b;前言&#x1f38b;最大子数组和&#x1f6a9;题目描述&#x1f6a9;算法思路&#x1f6a9;代码实现 &#x1f334;环形子数组的最大和&#x1f6a9;题目描述&#x1f6a9;算法思路&#xff1a;&#x1f6a9;代码实现 &#x1f332;乘积最大子数组&#x…

大模型应用的最佳实践Chains, Chain代码剖析、llmchain示例

各种chain的介绍 串联式编排调用链:SequentialChain 流水线 胶水代码逻辑处理具备编排逻辑 串行 one by one的调用上一个chain的输出 作为 下一个chain的输入 超长文本的转换 Transform Chain pdf文件处理提供了套壳的能力 将python处理字符串的能力 套用进来 完成数据的格式化…

C++面向对象程序设计-北京大学-郭炜【课程笔记(八)】

C面向对象程序设计-北京大学-郭炜【课程笔记&#xff08;八&#xff09;】 1、虚函数和多态的基本概念1.1、虚函数1.2、多态多态的表现形式一多态的表现形式二 2、多态实例&#xff1a;魔法门之英雄无敌2.1、**非多态的实现方法&#xff1a;**2.2、**多态的实现方法** 3、多态实…

汇昌联信:拼多多网店该如何开店?

拼多多网店的开设流程并不复杂&#xff0c;但需要细心和耐心去完成每一步。下面将详细阐述如何开设一家拼多多网店。 一、选择商品与定位 开设拼多多网店的第一步是确定你要销售的商品类型&#xff0c;这决定了你的目标客户群体和市场定位。你需要了解这些商品的市场需求、竞争…

MacApp自动化测试之Automator初体验

今天我们继续讲Automator的使用。 初体验 启动Automator程序&#xff0c;选择【工作流程】类型。从资源库区域依次将获取指定的URL、从网页中获得文本、新建文本文件三个操作拖进工作流创建区域。 然后修改内容&#xff0c;将获取指定的URL操作中的URL替换成https://www.cnb…

MATLAB科技绘图与数据分析

大家好&#xff0c;我是爱编程的喵喵。双985硕士毕业&#xff0c;现担任全栈工程师一职&#xff0c;热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。…

Token 计费与计算、tiktoken介绍

Token怎么计算的&#xff1f; 每个模型都具有不同的功能和价格。价格是按照每1000个 Token 计算的。您可以将Token视为单词的组成部分&#xff0c;其中1000个Token 大约相当于750个单词。(这段文字包含35个Token) 可以看到35个颜色块 每个块都有ID 英文、中文 都会有单独的一个…

【C++】学习笔记——继承_2

文章目录 十二、继承5. 继承与友元6. 继承与静态成员7. 复杂的菱形继承及菱形虚拟继承 未完待续 十二、继承 5. 继承与友元 友元关系不能继承&#xff0c;也就是说父类友元不能访问子类私有和保护成员 。除非子类也设置成友元。 6. 继承与静态成员 父类定义了 static 静态成…

【渲染数学-01】如何模拟静态流(上)

文章目录 一、说明二、摘要三、简介四、稳定的纳维-斯托克斯4.1 基本方程4.2 解决方法 一、说明 关于流体物质的仿真和模拟&#xff0c;需要流体理论方面的一般知识。我们这里从基本流体方程入手&#xff0c;详细解释如何实现流体仿真的每一个具体步骤。 二、摘要 构建类似流体…

在React中利用Postman测试代码获取数据

文章目录 概要名词解释1、Postman2、axios 使用Postman测试API在React中获取并展示数据小结 概要 在Web开发中&#xff0c;通过API获取数据是一项常见任务。Postman是一个功能强大的工具&#xff0c;可以帮助开发者测试API&#xff0c;并查看API的响应数据。在本篇博客中&…