1、定义一个结构体Object,包括用户id及name信息。实现让用户在控制台输入id和name,并打印显示出结果(知识点:结构体的定义,结构体数组访问成员变量的方法)
示例:
输入ID: 1235
输入名字: hello
result: ID: 1235, 名字: hello

#include<stdio.h>
#include<string.h>struct Object
{int id;char name[32];
};int main()
{Object obj;printf("please input ID:");scanf_s("%d", &obj.id,sizeof(obj.id));//在使用scanf_s是要指定边界值printf("please input Name:");scanf_s("%s", &obj.name,sizeof(obj.name));printf("result:ID: %d,name:%s \n", obj.id, obj.name);return 0;
}

2、定义一个结构体类型,表示银行账户信息: 每个帐户包含账号,用户身份证号码,用户姓名,用户地址,账户金额。 然后,从控制台输入各个字段的值,保存到结构体变量中。

#include<stdio.h>
#include<string.h>struct User
{int id;int card;char name[32];char address[128];int money;
};int main()
{User obj;printf("please input id:");scanf_s("%d",&obj.id,sizeof(obj.id));printf("please input card:");scanf_s("%d", &obj.card, sizeof(obj.card));printf("please input name:");scanf_s("%s", &obj.name, sizeof(obj.name));printf("please input adress:");scanf_s("%s", &obj.address, sizeof(obj.address));printf("please input money:");scanf_s("%d", &obj.money, sizeof(obj.money));printf("id:%d\n card:%d\n name:%s\n address:%s\n money:%d\n",obj.id, obj.card, obj.name, obj.address, obj.money);return 0;
}

但scanf_s对输入有要求,比如遇到空格就自动结束,不能允许输入存在空格。
所以另外一种方法是使用get_s函数(需要加入#include<string.h>)实现读取用户的输入。
gets_s函数只能读取字符串,对于数字型输入要进行转换,使用atoi函数(需要加入#include<stdlib.h>)实现字符串转换为整数。
代码另一版本:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>struct Account
{unsigned int id;char citizen_id[19];char name[32];char address[128];unsigned int balance; // 余额
};// -1, 表示输入有误。0,表示输入正确
int input(Account* acc)
{char buf[128];// 输入IDprintf("ID: ");gets_s(buf);acc->id = atoi(buf); //a to i// 输入身份证号printf("身份证号: ");gets_s(acc->citizen_id);// 有效性检测if (strlen(acc->citizen_id) != 18){printf("请输入18位的身份证号!\n");return -1;}// 输入名称printf("名称: ");gets_s(acc->name);printf("地址: ");gets_s(acc->address);printf("余额: ");gets_s(buf);acc->balance = atoi(buf); //a to ireturn 0;
}int main()
{Account acc;if (input(&acc) == 0){printf("有效的输入!\n");printf(" %d\n %s\n %s\n %s\n %d\n", acc.id, acc.citizen_id, acc.name, acc.address, acc.balance);}else{printf("无效的输入!\n");}return 0;
}

3、定义一个User结构体,含以下字段:
id: 一个数字,每个用户不同的id
email: email地址,一般网站的用户允许以email地址登录
gender: 性别,男or女
QQ: QQ号码
写一个函数,在User数组中查找某个id的User(知识点:结构体数组初始化;指针访问成员变量)
函数描述:
User* find (User* all, int n, int id);
其中,
all: 输入一个User数组
n : 数组长度
id: 待查找的id

#include <stdio.h>
#include <stdlib.h>
#include <string.h>struct User
{int id;char email[16];char gender[5];int qq;
};User* find(User* all, int n, int id)
{for (int i = 0; i < n; i++){if (all[i].id == id){printf("%d   %s   %s   %d \n",all[i].id, all[i].email, all[i].gender, all[i].qq);}}return 0;
}int main()
{User a[3] = {{123,"a@xxx.net","boy",19260909},{124,"b@xxx.net","girl",19260901},{125,"c@xxx.net","boy",19260902}};find(a, 3, 124);return 0;
}

4、定义一个结构体Fraction,表示分数,用于表示 2/3, 5/6这样的分数。
描述:
**(1) 定义Fraction
(2) 完成分数的加法和乘法**
Fraction add (Fraction a, Fraction b);
Fraction mul (Fraction a, Fraction b);

#include <stdio.h>
#include <stdlib.h>
#include <string.h>struct Fraction {int numerator;int denominator;
};Fraction add(Fraction a, Fraction b)
{Fraction result;result.numerator = a.numerator * b.denominator +b.numerator * a.denominator;result.denominator = a.denominator * b.denominator;printf("%d/%d \n", result.numerator,result.denominator);return result;
}Fraction mul(Fraction a, Fraction b)
{Fraction result;result.numerator = a.numerator * b.denominator - b.numerator * a.denominator;result.denominator = a.denominator * b.denominator;printf("%d/%d \n", result.numerator, result.denominator);return result;
}int main()
{Fraction a = { 2,3 };Fraction b = { 3,5 };add(a, b);mul(a, b);return 0;
}

5、根据上4的描述,用输入参数和输出参数来完成函数。
描述:
void add (const Fraction* a, const Fraction* b, Fraction* c );
void mul (const Fraction* a, const Fraction* b, Fraction* c );
其中,a, b为输入参数 , c为输出参数
(知识点:指针结构体访问成员变量)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>struct Fraction {int numerator;int denominator;
};void add(const Fraction* a, const Fraction* b, Fraction* c)
{c->numerator = a->numerator * b->denominator + b->numerator *a->denominator;c->denominator = a->denominator * b->denominator;printf("%d/%d \n", c->numerator, c->denominator);
}void mul(const Fraction* a, const Fraction* b, Fraction* c)
{c->numerator = a->numerator * b->denominator - b->numerator *a->denominator;c->denominator = a->denominator * b->denominator;printf("%d/%d \n", c->numerator, c->denominator);
}int main()
{Fraction a = { 2,3 };Fraction b = { 3,5 };Fraction c;add(&a, &b, &c);mul(&a, &b, &c);return 0;
}

6、根据上4的定义,完成一个函数:该函数用于对分数进行化简
描述:
原型:
void reduce (Fraction* f);
例如,f原为4/6,则reduce之后为2/3

#include <stdio.h>
#include <stdlib.h>
#include <string.h>struct Fraction
{int numerator;int denominator;
};void reduce(Fraction* f)
{//找出分子和分母的最小值int min;min = f->numerator;if (min>f->denominator){min = f->denominator;}//在1-min之间进行分解for (int i = 1; i <= min; i++){if (f->denominator % i == 0 && f->numerator % i == 0){f->numerator = f->numerator / i;f->denominator = f->denominator / i;min = min / i;}}printf("%d/%d \n", f->numerator, f->denominator);}
int main()
{Fraction a = { 24,64 };reduce(&a);return 0;
}

7、定义一个学生Student: 学号ID, 姓名。同时每个学生有一台笔记本电脑Laptop: 型号,颜色,价格(知识点:对象里面包含另一个对象,)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>struct Laptop
{char type[16];char color[16];int value;
};
struct Student {int ID;char name[16];//Laptop computer; 这样定义就意味着每个同学都有笔记本Laptop* computer;  //空指针时表示没有笔记本
};int main()
{//笔记本对象Laptop computer = {"lenovo","red",5000};//学生对象Student student = {2018,"shaofa",&computer //NULL或0时,表示该同学没有笔记本};return 0;
}

8、试定义一个结构体表示:网络编程中的网络地址SocketAddr,包含以下信息:
IP地址:由4个字节组成,每个数界于0-255之间
端口号: 界于0-65535
描述:(1) 定义一个结构体 SockAddress
(2) 完成函数,用于从控制台输入数据
int input(SockAddress* addr);

#include <stdio.h>
#include <stdlib.h>
#include <string.h>struct SockAddress
{int IP[4];int port;
};int input(SockAddress* addr)
{printf("please input four ID:");scanf_s("%d-%d-%d-%d",&addr->IP[0], &addr->IP[1], &addr->IP[2], &addr->IP[3]);printf("please input port:");scanf_s("%d", &addr->port);printf("the ID is %d-%d-%d-%d \n",addr->IP[0], addr->IP[1], addr->IP[2], addr->IP[3]);printf("the port is %d \n", addr->port);return 0;
}int main()
{SockAddress a;input(&a);return 0;
}

9、定义一个坐标点类型Point,每个Point有成员x, y表示其坐标。

设平面上两个点的坐标分别为(x1, y1) (x2, y2) ,其中 x1, y1, x2, y2为整数。
则曼哈顿距离 Manhattan Distance 的定义为: |x1 - x2 | + | y1 -y2|
写一个函数,求两点之间的直线距离Distance 和 曼哈顿距离

#include <stdio.h>
#include <math.h>
#include <string.h>struct Point
{int x;int y;
};int ManhattanDistance(const Point* p1, const Point* p2)
{Point result;result.x = p1->x - p2->y;if (result.x < 0){result.x = (-1) * result.x;}result.y = p1->y - p2->y;if (result.y<0){result.y = (-1) * result.y;}int dis = result.x + result.y;printf("the manhattandistance is %d \n", dis);return dis;
}double Distance(const Point* p1, const Point* p2)
{Point result;result.x = (p1->x - p2->x)*(p1->x - p2->x);result.y = (p1->y - p2->y)*(p1->y - p2->y);double dis =sqrt( result.x + result.y); //调用数学函数,头部添加math.hprintf("the line distance is %.2lf \n", dis);return dis;
}
int main()
{Point a = { 1,2 };Point b = { 8,11 };ManhattanDistance(&a, &b);Distance(&a, &b);return 0;
}

结构体试题就这么多,主要就是熟悉以下知识点:
1、结构体的定义
2、结构体中还含有其他结构体对象的定义
3、结构体中访问成员变量的方法:普通变量与指针变量的区别

代码是小鱼自己写的,如要使用,请注明转载出处;如有问题,请评论区留言,方便相互讨论;如果喜欢,请不要吝啬,点个赞再走哦 ^_^
试题出自afanihao官网,博客不断更新中。。。

C/C++试题集——结构体篇相关推荐

  1. C语言结构体篇 结构体

    在描述一个物体的属性的时候,单一的变量类型是无法完全描述完全的.所以有了灵活的结构体变量. 结构体变量从意义上来讲是不同数据类型的组合,从内存上来讲是在一个空间内进行不同的大小划分. 1.1 结构体类 ...

  2. c语言---指针结构体篇

    [前言]本系列(初阶)适用于初学者课前预习或者课后复习资料,包含了大部分基础知识点梳理与代码例方便看官理解,有问题请指出.本人邮箱地址:p772307283@outlook.com 可爱捏 目录 1. ...

  3. 【C生万物】 结构体篇

     欢迎来到 Claffic 的博客 

  4. C语言结构体和结构体指针的简单用法

    C语言结构体和结构体指针的简单用法 这里总结一下自己的学习笔记,关于C语言当中的结构体指针的用法,以及结构体简单使用. 简单介绍一下今天出场的嘉宾–>结构体和结构体指针 什么是结构体: 1,定义 ...

  5. PAT甲级1114 Family Property:[C++题解]结构体、并查集、测试点3、4、5有问题的进来!!

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 先建边.读入每家的信息,在本人和父母(如果有的话),本人与子女(如果有的话)之间分别建边.边用结构体来存,边记录两个端点. 遍历每条 ...

  6. PAT甲级1013 Battle Over Cities:[C++题解]并查集、结构体存边

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析:并查集题目. 不清楚并查集的小伙伴,请移步并查集原理并查集板子:acwing836. 合并集合. 题意:给定一个连通图,当删掉任意1个 ...

  7. 我的前端工具集(四)树状结构后篇

    我的前端工具集(四)树状结构后篇   liuyuhang原创,未经允许禁止转载 目录 我的前端工具集 上文连接 我的前端工具集(四)树状结构前偏 1.数据组织 在3.2.节有截图 2.树状结构代码 2 ...

  8. C语言试题五十二之学生的记录由学号和成绩组称个,n名大学生得数据已在主函数中放入结构体数组a中,请编写函数fun,它的功能时:按分数的高低排列学生的记录,高分在前。

    1. 题目 请编写一个函数void function(Student a[], int n),其功能时:学生的记录由学号和成绩组称个,n名大学生得数据已在主函数中放入结构体数组a中,请编写函数fun, ...

  9. C语言试题五十一之已知学生的记录是由学号和学习成绩构成,n名学生的数据已存入s结构体数组中。请编写函数fun,该函数的功能是:找出成绩最高的学生记录,通过形参返回主函数(规定只有一个最高分)。

    1. 题目 请编写一个函数void function(Student a[], int n, Student *s),其功能时:已知学生的记录是由学号和学习成绩构成,n名学生的数据已存入s结构体数组中 ...

最新文章

  1. 为什么Java大神,都在看Spring Boot和Spring Cloud的书?
  2. 使用require.js和backbone实现简单单页应用实践
  3. python图片通道分离
  4. 【学无止境】 基于ThinkPHP的OAuth2.0实现 ----OAuth2.0 个人学习笔记 Two
  5. VBS随时监视注册表的变化,记录有变化的值或键等信息(包括一个文件内容比较函数)...
  6. 代码编译突然变缓慢问题解决办法(codeblock)
  7. Tomcat与Gzip与缓存
  8. go 单元测试 testing 打印输出_2020,你需掌握go 单元测试进阶篇
  9. python数据导出excel_【python Excel】如何使用python将大量数据导出到Excel中的小技巧之一...
  10. C++刷屏器(DevCpp-5.10编译通过)
  11. 氚云无代码搭建学习记录
  12. 人工智能基础——知识的概念
  13. C#中,System.ComponentModel.Container详解
  14. NOSQL之Neo4j:Neo4j的简介、安装、使用方法(Neo4j搭配JDK安装的图文教程)之详细攻略
  15. 【转】关于提示can't load package 'xxx.bpl.' 错误问题的解决方法
  16. 微信开发-微信公共账号申请与接入(1)
  17. 古典密码(单表密码,维吉尼亚密码,普莱费尔密码,一次一密)
  18. 经常玩电脑正确的坐姿_告诉你电脑族的最佳坐姿_养生人群_养生之道网
  19. Windows11系统农业银行企业K宝无法正常使用的解决方法
  20. 解决麒麟系统arm环境无法安装pyinstaller的错误:Checking for library z : not found

热门文章

  1. 【论文写作-2】Word中如何创建目录
  2. Linux从0到1:安装Linux操作系统(超级详细版)
  3. VisualVM安装插件报错 总结
  4. 拆装计算机主机,计算机主机拆装实训报告
  5. Linux 指令 关防火墙 挂载
  6. Linux Centos-7开、关防火墙。(临时开、关与永久开、关)
  7. 关于一款游戏的无责任猜想
  8. iPhone爆炸事件又起,为什么苹果官方换电池都不安全?
  9. ChatGPT与安全
  10. python-dev and python3-dev 软件包