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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

两小时看完花书(深度学习入门篇)

1.深度学习花书前言 机器学习早期的时候十分依赖于已有的知识库和人为的逻辑规则&#xff0c;需要人们花大量的时间去制定合理的逻辑判定&#xff0c;可以说是有多少人工&#xff0c;就有多少智能。后来逐渐发展出一些简单的机器学习方法例如logistic regression、naive bayes等…

【Linux】自动化编译工具——make/makefile(超细图例详解!!)

目录 一、前言 二、make / Makefile背景介绍 &#x1f95d;Makefile是干什么的&#xff1f; &#x1f347;make又是什么&#xff1f; 三、demo实现【见见猪跑&#x1f416;】 四、依赖关系与依赖方法 1、概念理清 2、感性理解【父与子&#x1f468;】 3、深层理解【程序…

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

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

西门子博途WINCC精致触摸屏配方实用一例

我们现场有一台设备&#xff0c;是用来锯切钢坯的&#xff0c;里面有几个重要的参数&#xff0c;一开始投产的时候厂家没有做配方功能&#xff0c;需要操作人员每次换钢坯就需要手动计算然后输入&#xff0c;后来有时间我就做了个这个定尺管理的功能&#xff0c;方便了操作人员…

最新Linux Debian12安装和使用ImageMagick图像处理工具 常见图片png、jpg格式转webp格式

在Linux系统中&#xff0c;使用ImageMagick可以图片格式转换&#xff0c;其中最常用的是通过命令行工具进行。 ImageMagick是一个非常强大的图像处理工具集&#xff0c;它包含了许多用于图像转换的命令。 一、安装ImageMagick&#xff08;如果尚未安装&#xff09;&#xff1…

【研发日记】Matlab/Simulink技能解锁(七)——两种复数移相算法

复数移相&#xff0c;也称为复数相位旋转&#xff0c;就是在原有复数的基础上&#xff0c;不改变模数&#xff0c;只把相位角做一定的偏移。 文章目录 前言 三角函数移相 复数乘法移相 分析和应用 总结 前言 见《【研发日记】Matlab/Simulink技能解锁(二)——在Function编…

NARUTO 复现记录

1 环境配置 下载项目&#xff0c;一定要 git 下载全项目&#xff0c;下载完后要检查third_parities 里面的coslam和neural_slam_eval 文件全不全。 git clone --recursive https://github.com/oppo-us-research/NARUTO.git 环境配置 注意 bash scripts/installation/conda…

为什么使用AI 在游戏中不犯法

使用AI在游戏中本身并不违法&#xff0c;甚至在很多情况下&#xff0c;游戏公司自己也会在游戏中集成AI来提高游戏体验&#xff0c;例如通过AI驱动的非玩家角色&#xff08;NPC&#xff09;来增加游戏的互动性和挑战性。然而&#xff0c;使用AI是否违法取决于AI的使用方式和目的…

项目-坦克大战-让坦克动起来

为什么写这个项目 好玩涉及到java各个方面的技术 1&#xff0c;java面向对象 2&#xff0c;多线程 3&#xff0c;文件i/o操作 4&#xff0c;数据库巩固知识 java绘图坐标体系 坐标体系-介绍 坐标体系-像素 计算机在屏幕上显示的内容都是由屏幕上的每一个像素组成的像素是一…

vue3 element plus el-date-picker组件在日期上做标识

1.先看效果图,带红点的就是我要做标识的日期 2.直接把代码拿出来就可以用 (1)html部分 <el-date-pickerv-model"startTime"type"datetime"placeholder"选择开始日期"format"YYYY-MM-DD HH:mm"value-format"YYYY-MM-DD HH:mm…

centos7安装zabbix-server

zabbixan-server安装 环境安装zabbix安装zabbix配置apachezabbix-UI前端配置修改zabbix为中文语言 环境 准备&#xff1a; centos7系统、mysql数据库/MariaDB数据库 mysql数据库可参照&#xff1a;https://blog.csdn.net/weixin_61367575/article/details/138774428?spm1001.…

CSS2(一):CSS选择器

文章目录 1、CSS基础1.1 CSS简介1.2 CSS编写位置1.2.1 行内样式1.2.2 内部样式1.2.3 外部样式1.2.4 样式优先级 1.2.5 CSS代码风格 2、CSS选择器2.1、基本选择器2.1.1 通配选择器2.1.2 元素选择器2.1.3 类选择器2.1.4 ID选择器2.1.5 总结 2.2、CSS复合选择器2.2.1 交集选择器2.…