结构体基础例题

这里写目录标题

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

感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接
🐒🐒🐒 个人主页
🥸🥸🥸 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.mzph.cn/news/232185.shtml

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

相关文章

Elasticsearch——快速入门

从零基础的内容开始介绍Elasticsearch&#xff0c;主要包含以下内容&#xff1a; Elasticsearch的定义、优点&#xff0c;以及典型的业务场景。Elasticsearch中重要的概念。Elasticsearch典型的接入方式。安装Elasticsearch。使用Kibana调试Elasticsearch。Elasticsearch节点的…

何为内存泄漏?如何监测并防止内存泄漏事故发生?

内存泄漏会严重影响计算机的性能&#xff0c;但它们到底是什么&#xff0c;为什么会发生&#xff1f;如何检测和防止内存泄漏呢&#xff1f; 本文需要解决的关键要点&#xff1a; 1&#xff09;当应用程序无法返回分配的内存时&#xff0c;就会发生内存泄漏&#xff0c;逐渐消…

JavaEE:线程池精讲

目录 一.什么是线程池 二.线程池的实现原理 &#x1f388;为什么要有工厂模式&#xff1f; 三.线程池的构造方法解读 &#x1f388;线程池的拒绝策略 四.自己实现一个线程池 一.什么是线程池 简单来说&#xff0c;线程池就好比一块鱼塘&#xff0c;鱼塘中的每条鱼就是一个线程…

如何在Eclipse中安装WindowBuilder插件,详解过程

第一步&#xff1a;找到自己安装eclipse的版本&#xff0c;在Help-关于eclipse里面&#xff0c;即Version 第二步&#xff1a;去下面这个网站找到对应的 link&#xff08;Update Site&#xff09;&#xff0c;这一步很重要&#xff0c;不然版本下载错了之后还得删除WindowBuil…

常用的Webstrom插件

Active Tab Highlighter 高亮选中的tab Atom Material Icons 图标&#xff0c;个人觉得还是挺好看&#xff0c;各类分拣也能区分的很明显 Code Remark 代码标记 Gitmoji Plus git提交时候的小图标 GitToolBox git工具&#xff0c;免费版本就支持鼠标在哪一行就显示提交的信…

Scala多线程爬虫程序的数据可视化与分析实践

一、Scala简介 Scala是一种多种类型的编程语言&#xff0c;结合了针对对象编程和函数式编程的功能。它运行在Java虚拟机上&#xff0c;具有强大的运算能力和丰富的库支持。Scala常用于大数据处理、并发编程和Web应用程序开发。其灵活性和高效性编程成为编写多线程爬虫程序的理…

Python开发GUI常用库PyQt6和PySide6介绍之一:概述

Python开发GUI常用库PyQt6和PySide6介绍之一&#xff1a;概述 Python开发GUI有许多选择&#xff0c;下面是常见的选择&#xff1a; Tkinter&#xff1a;Tkinter是Python标准库中的一个GUI工具包&#xff0c;易于学习和使用。它提供了丰富的组件和布局选项&#xff0c;适用于简…

企业办公加密系统中——全透明加密和半透明加密的区别

PC端访问地址&#xff1a; www.drhchina.com 天锐绿盾数据防泄密系统中的全透明加密和半透明加密的区别如下&#xff1a; 全透明加密是采用驱动层动态加解密技术&#xff0c;对企业内部所有涉密文档进行强制加密处理&#xff0c;从文件创建开始即可自动加密保护。加密文档在加…

STM32 CAN多节点组网项目实操 挖坑与填坑记录2

系列文章&#xff0c;持续探索CAN多节点通讯&#xff0c; 上一篇文章链接&#xff1a; STM32 CAN多节点组网项目实操 挖坑与填坑记录-CSDN博客文章浏览阅读120次。CAN线性组网项目开发过程中遇到的数据丢包问题&#xff0c;并尝试解决的记录和推测分析。开发了一个多节点线性…

实战 | OpenCV传统方法实现密集圆形分割与计数(详细步骤 + y源码)

导 读 本文主要介绍基于OpenCV传统方法实现密集圆形分割与计数应用,并给详细步骤和代码。 背景介绍 实例图片来源于网络,目标是分割下图中圆形目标并计数。 本文实现效果如下: 实现步骤 【1】灰度转换 + 均值滤波 + 二值化,得到参考背景 img = cv2.imread(src.jpg)c…

基于深度学习的人脸测距&社交距离过近警报系统

1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 研究背景与意义 近年来&#xff0c;随着深度学习技术的快速发展&#xff0c;人脸识别技术在各个领域得到了广泛应用。其中&#xff0c;人脸测距和社交距离过近警报系统成为了人们…

两个月准备信息系统项目管理师来得及吗?

可以尝试加快进度&#xff01;但是时间稍微有些紧迫。当然备考时间也不宜过长&#xff0c;2-3个月时间完全足够。对于没有项目经验的初学者考生们&#xff0c;建议提前做好准备&#xff0c;特别要注意时间安排~ 在备考期间&#xff0c;不要受到外界负面言论的影响&#xff0c;比…

Mysql数据库的基础知识和yum安装步骤

MySQL数据库介绍 什么是数据库DB&#xff1f; DB的全称是database&#xff0c;即数据库的意思。数据库实际上就是一个文件集合&#xff0c;是一个存储数据的仓库&#xff0c;数据库是按照特定的格式把数据存储起来&#xff0c;用户可以对存储的数据进行增删改查操作&#xff1…

[C++] 多态(下) -- 多态原理 -- 动静态绑定

文章目录 1、多态原理2、动态绑定和静态绑定3、单继承和多继承关系的虚函数表3.1 单继承中的虚函数表5.2 多继承中的虚函数表 上一篇文章我们了解了虚函数表&#xff0c;虚函数表指针&#xff0c;本篇文章我们来了解多态的底层原理&#xff0c;更好的理解多态的机制。 [C] 多态…

数据分析场景下,企业大模型选型的思路与建议

来源/作者&#xff1a;爱分析 随着大模型带来能力突破&#xff0c;让AI与数据分析相互结合&#xff0c;使分析结果更好支撑业务&#xff0c;促进企业内部数据价值释放&#xff0c;成为了当下企业用户尤为关注的话题。本次分享主要围绕数据分析场景下大模型底座的选型思路&#…

opencv 入门一(显示一张图片)

头文件添加如下&#xff1a; 库目录添加如下&#xff1a; 依赖的库如下&#xff1a; #include <iostream> #include "opencv2/opencv.hpp" int main(int argc,char ** argv) { cv::Mat img cv::imread(argv[1], -1); if (img.empty()) return -1; …

sourcetree 无效的源路径 细节提示:系统找不到指定的文件

工具–>选项–>git 直接下拉到底 点击红框&#xff0c;重新下载一个内嵌git就可以了 我感觉是因为改变了原有git安装路径的问题

MFC 窗口创建过程与消息处理

目录 钩子简介 代码编写 窗口创建过程分析 消息处理 钩子简介 介绍几个钩子函数&#xff0c;因为它们与窗口创建工程有关 安装钩子函数 HHOOK SetWindowsHookExA([in] int idHook,[in] HOOKPROC lpfn,[in] HINSTANCE hmod,[in] DWORD dwThreadId ); 参数说明…

深度学习笔记_7经典网络模型LSTM解决FashionMNIST分类问题

1、 调用模型库&#xff0c;定义参数&#xff0c;做数据预处理 import numpy as np import torch from torchvision.datasets import FashionMNIST import torchvision.transforms as transforms from torch.utils.data import DataLoader import torch.nn.functional as F im…

是什么导致了我孩子的听力损失?

是什么导致了我孩子的听力损失&#xff1f; 有些婴儿天生就有听力损失&#xff0c;这被称为先天性听力损失。许多不同的因素都可能导致这种类型的听力损失&#xff0c;但并不总是能够确定确切的原因。在大约一半的病例中&#xff0c;原因是遗传的&#xff0c;也就是说&#xff…