结构体基础例题

这里写目录标题

  • 例题一
    • 例题解析
    • 答案
  • 例题二
    • 例题解析
    • 答案
  • 例题三
    • 例题解析
    • 答案
  • 例题四
    • 例题解析
    • 答案
  • 例题五
    • 例题解析及答案
  • 例题六
    • 例题解析及答案

感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接
🐒🐒🐒 个人主页
🥸🥸🥸 C语言
🐿️🐿️🐿️ C语言例题
🐣🐓🏀 python

以下是后面例题所涉及到的文章,如果有不会的可以点击查看
自定义类型结构体(上)
自定义类型结构体(中)
自定义类型结构体(下)

例题一

struct student
{int num;char name[32];float score;
}stu;

A.struct 是结构体类型的关键字
B.struct student 是用户定义的结构体类型
C.num, score 都是结构体成员名
D.stu 是用户定义的结构体类型名

例题解析

struct student是一个独一无二的结构体类型,而每个结构体都必须要有一个struct来作为一个关键字

结构体的成员就是结构体括号内num score(name[32]是结构体变量)

对于用户定义的结构体类型名,我们需要用到typedef,这里的stu其实是定义的结构体的类型变量

答案

答案 D

例题二

结构体访问成员的操作符不包含:( )
A. . 操作符
B -> 操作符
C * 解引用操作符
D sizeof

例题解析

注意这里是结构体访问成员的操作付,是访问成员

.操作符是结构体类型变量访问结构体中成员时

->操作符是指向结构体类型变量的指针访问结构体中成员时,就是通过找到地址去访问

指向结构体类型变量的指针也可以通过.方式访问成员,只不过要先通过*对该指针解引用

对于sizeof虽然是操作符,但是并不是访问成员的操作符

答案

答案 D

例题三

下面程序要求输出结构体中成员a的数据,以下不能填入横线处的内容是( )

#include < stdio.h >
struct S
{ int a;int b; 
};
int main( )
{ struct S a1, *p=&a1;a1.a = 99;printf( "%d\n", __________);return 0;
}

A.a1.a
B.*p.a
C.p->a
D.(*p).a

例题解析

这道题关键就是在于符号的优先级,下面是关于优先级顺序的图片
在这里插入图片描述
在这里插入图片描述
对于a1.a,a1是结构体类型变量,因此a1.a其实就是结构体成员a

对于*p.a,这里就需要用到优先级了,*操作符的优先级是低于.操作符的,所以 * p.a其实可以这样写成 * (p.a),显然是有问题的

p->a就是通过找到地址去访问结构体成员a

(*p).a其实就是等价于(a1).a

答案

答案 B

例题四

下面程序的输出结果是:( )

struct stu
{int num;char name[10];int age;
};void fun(struct stu *p)
{printf("%s\n",(*p).name);return;
}int main()
{struct stu students[3] = {{9801,"zhang",20},{9802,"wang",19},{9803,"zhao",18}};fun(students + 1);return 0;
}

A.zhang
B.zhao
C.wang
D.18

例题解析

这道题有点类似于二维数组,如果对二维数组不是很理解的可以看一下我之前写的一篇文章C语言深入理解指针(非常详细)(四)

struct stu
{int num;char name[10];int age;
};

结构体成员包括以下成员,int num,char name[10],int age

int main()
{struct stu students[3] = {{9801,"zhang",20},{9802,"wang",19},{9803,"zhao",18}};fun(students + 1);return 0;
}

这里的struct stu students[3]就是将结构体看成一个二维数组,二维数组的第一行为{9801,“zhang”,20},第二行为{9802,“wang”,19},第三行为{9803,“zhao”,18}

每一行有三个元素,我们以第一行为例,第一行的第一个结构体成员为int类型的9801,第二个结构体成员为一个字符数组的字符串"zhang",第三个结构体成员为int类型的20

fun(students+1)的students是这个二维数组的数组名,也就是首元素的地址,students+1就是第二行的地址,也就是{9802,“wang”,19}

void fun(struct stu *p)
{printf("%s\n",(*p).name);return;
}

最后这里打印的是(*p).name就是第二行的字符数组的字符串"wang"
在这里插入图片描述

答案

答案 C

例题五

喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以喝多少汽水(编程实现)

例题解析及答案

这道题其实很多人之前应该都听说过,当时记得有人说如果最后只剩一空瓶子就找老板先要一瓶汽水,然后喝完后再把两个空瓶子给他,这样就可以白嫖一瓶汽水

如果是这样的话我们最后需要用到一个if的判断语句,如果最后剩一个空瓶子就先要一瓶汽水,最后再把两个空瓶子还回去

我们从题目中可以很明显的看出这是一个等比数列,假设我们先将全部钱都花光买汽水,最后将汽水都喝完,然后去换,因为是两个空瓶换一瓶汽水,所以只需要对买的汽水总数都除2就行了,然后喝完后又去换,直到最后没有空瓶子

int main()
{int bottle = 20, count=20;while (bottle != 0){if (bottle %2== 1&&bottle!=1){count = count + 1;}if (bottle == 1){count = count + 1;break;}bottle = bottle / 2;count = count + bottle;}printf("%d", count);return 0;
}

if (bottle %2== 1&&bottle!=1)是为了判断空瓶子是奇数还是偶数,如果是奇数并且不等于1的话我们只需要对喝的瓶子总数加1即可,因为整个循环中我们后面会对bottle总数除2,然后count加上bottle剩余的数量
在这里插入图片描述

在这里插入图片描述

例题六

VS开发环境调试下面的代码,画图解释下面代码的问题

#include <stdio.h>
int main()
{int i = 0;int arr[] = {1,2,3,4,5,6,7,8,9,10};for(i=0; i<=12; i++){arr[i] = 0;printf("hello bit\n");}return 0;
}

例题解析及答案

答案解析:
以下代码有两个问题:1. 数组访问越界   2. 死循环以下代码在vs2013下会造成死循环,原因:栈内存:|CC  CC  CC  CC|arr[0]|01  00  00  00|\arr[1]|02  00  00  00| \arr[2]|03  00  00  00|  \arr[3]|04  00  00  00|   \arr[4]|05  00  00  00|    \arr[5]|06  00  00  00|    /  arr的空间arr[6]|07  00  00  00|   /arr[7]|08  00  00  00|  /arr[8]|09  00  00  00| /arr[9]|0A  00  00  00|/|CC  CC  CC  CC||CC  CC  CC  CC||00  00  00  00| i的空间|CC  CC  CC  CC|
for循环中,i的内容是从0,一直增加到12,而数组只有10个空间,因此会越界
每次访问arr数组i号位置时,都会将该位置内容设置为0,当访问到arr[12]时,也会将该位置内容设置为0,而位置恰好为i的位置,即a[12]恰巧将i设置为0,因此造成死循环。

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

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

相关文章

掌握实时数据流:使用Apache Flink消费Kafka数据

导读&#xff1a;使用Flink实时消费Kafka数据的案例是探索实时数据处理领域的绝佳方式。不仅非常实用&#xff0c;而且对于理解现代数据架构和流处理技术具有重要意义。 理解Flink和Kafka Apache Flink Apache Flink 是一个在有界数据流和无界数据流上进行有状态计算分布式处理…

Java智慧工地数字化云平台源码(SaaS模式)

智慧工地是智慧城市理念在建筑工程行业的具体体现&#xff0c;智慧工地解决方案是建立在高度信息化基础上一种支持人事物全面感知、施工技术全面智能、工作互通互联、信息协同共享、决策科学分析、风险智慧预控的新型信息化手段。围绕人、机、料、法、环等关键要素&#xff0c;…

ansible远程操作主机功能和自动化运维

ansible 两个功能&#xff1a;1、远程操作主机功能 2、自动化运维&#xff08;play 剧本 yaml&#xff09; 简述&#xff1a; 是基于python开发的配置管理和应用部署工具。在自动化运维中&#xff0c;现在是异军突起。 Asible能批量配置&#xff0c;部署&#xff0c;管理上千…

MATLAB - 使用 MPC Designer 线性化 Simulink 模型

系列文章目录 前言 本主题介绍如何使用 MPC Designer 对 Simulink 模型进行线性化。为此&#xff0c;请从包含 MPC 控制器块的 Simulink 模型打开该应用程序。本例中使用 CSTR_ClosedLoop 模型。 open_system(CSTR_ClosedLoop) 在模型窗口中&#xff0c;双击 MPC 控制器模块。…

服务器数据恢复-raid5故障导致上层分区无法访问的数据恢复案例

服务器数据恢复环境&故障&#xff1a; 一台服务器上3块硬盘组建了一组raid5磁盘阵列。服务器运行过程中有一块硬盘的指示灯变为红色&#xff0c;raid5磁盘阵列出现故障&#xff0c;服务器上层操作系统的分区无法识别。 服务器数据恢复过程&#xff1a; 1、将故障服务器上磁…

15、ble_mesh_sensor_model 客户端 传感器

1、初始化流程&#xff0c;存储初始化&#xff0c;nvs擦除&#xff0c; board_init();初始化LED。 2、bluetooth_init();ble协议栈初始化 3、ble_mesh_get_dev_uuid(dev_uuid);//获取16长度设备uuid加载到mac&#xff0c;后两位dev uuid 4、ble_mesh_init();//ble mesh协议栈初…

OpenHarmony - 应用开发入门指南

一、了解OpenHarmony OpenHarmony是由开放原子开源基金会(OpenAtom Foundation)孵化及运营的开源项目, 目标是面向全场景、全连接、全智能时代, 搭建一个智能终端设备操作系统的框架和平台, 促进万物互联产业的繁荣发展。 开放原子开源基金会&#xff1a; 由阿里巴巴、百度、华…

VS Code配置Go语言开发环境

提示&#xff1a;首先这是一个新型语言&#xff0c;最好把vscode更新到最新版。 1&#xff1a;去官网下载Go语言编译器&#xff0c;之后配置到系统环境中&#xff0c;能看到版本就行。 2&#xff1a;创建一个文件夹&#xff0c;存放go的工具文件&#xff0c;我的在D:\GoFile\G…

Leetcod面试经典150题刷题记录 —— 双指针篇

双指针篇 1. 验证回文串Python3 2. 判断子序列Python3双指针 3. 两数之和 II - 输入有序数组Python3 4. 盛最多水的容器Python3双指针 5. 三数之和 1. 验证回文串 题目链接&#xff1a;验证回文串 - leetcode 题目描述&#xff1a; 如果在将所有大写字符转换为小写字符、并移除…

双非大数据

双非本秋招上岸总结 个人简介 学历&#xff1a;双非&#xff1b; 专业&#xff1a;软件工程&#xff1b; 求职岗位&#xff1a;大数据开发工程师&#xff1b; 状态&#xff1a;已上岸 翻车经历 学校以Java后端开发为主流&#xff0c;我从大二开始学习Java&#xff0c;直到大四…

【设计模式--行为型--访问者模式】

设计模式--行为型--访问者模式 访问者模式定义结构案例优缺点使用场景扩展分派动态分派静态分派双分派 访问者模式 定义 封装一些作用于某种数据结构中的各元素的操作&#xff0c;它可以在不改变这个数据结构的前提下定义作用于这些元素的新操作。 结构 抽象访问者角色&…

防雷接地工程的概述与行业应用方案

防雷接地工程是指为了保护建筑物、电力设施、通信设施等免受雷电的危害&#xff0c;而采取的一系列技术措施&#xff0c;主要包括接闪器、引下线、接地体等组成的防雷接地系统&#xff0c;以及与之配套的避雷带、避雷网、避雷针、等电位联结、防雷检测等设施。防雷接地工程的目…