C语言 | 第十六章 | 共用体 家庭收支软件-1
P 151 结构体定义三种形式 2023/3/15
一、创建结构体和结构体变量
- 方式1-先定义结构体,然后再创建结构体变量。
struct Stu{
char *name; //姓名
int num; //学号
int age; //年龄
char group; //所在学习小组
float score; //成绩
};
struct Stu stu1, stu2;
//定义了两个变量 stu1 和 stu2,它们都是 Stu 类型,都由 5 个成员组成
//注意关键字struct不能少
- 方式2-在定义结构体的同时定义结构体变量。
struct Stu{
char *name; //姓名
int num; //学号
int age; //年龄
char group; //所在学习小组
float score; //成绩
} stu1, stu2;
//在定义结构体Stu 的同时,创建了两个结构体变量 stu1 和 stu2
- 方式3-如果只需要 stu1、stu2 两个变量,后面不需要再使用结构体数据类型,定义其他变量,在定义时也可以不给出结构体名。
struct { //没有写 Stu
char *name; //姓名
int num; //学号
int age; //年龄
char group; //所在学习小组
float score; //成绩
} stu1, stu2;
stu1.name = "tom"; stu1.num = 100;.... // 使用直接赋值
//1. 该结构体数据类型,没有名, 匿名结构体
//2. stu1 和 stu2 就是 该结构体的两个变量
二、成员的获取和赋值
基本说明:结构体和数组类似,也是一组数据的集合,整体使用没有太大的意义。数组使用下标[ ]获取单个元素,结构体使用点号.获取单个成员。获取结构体成员的一般格式为结构体变量名.成员名
;
案例一:赋值1
struct{char *name; //姓名int num; //学号int age; //年龄char group; //所在小组float score; //成绩
} stu1;
stu1.name = "jack"; // 上面使用的方法
printf("%s", stu1.name)
案例二:赋值2
#include<stdio.h>
void main(){struct Student{char *name; //姓名int num; //学号int age; //年龄char group; //所在小组float score; //成绩} stu1 = {"贾宝玉", 11, 18, 'B', 90.50}, stu2 = { "林黛玉", 12, 16, 'A', 100 };// 也可以在定义的时候直接赋值,按顺序依次来就可以了struct Student stu3 = {"林黛玉3", 12, 16, 'A', 100};// 这样再次赋值也是可以的;但是每个元素的对应关系需要一一对应struct Student stu4;// stu4= {"林黛玉3", 12, 16, 'A', 100}; 这样是不允许的,只允许在定义的时候赋值,因为后面是一个整体printf("\n stu3.name=%s",stu3.name); printf("\n stu1.name=%s",stu1.name); // 输出也是同上输出getchar();
}
P 152 结构体应用实例 2023/3/17
一、基本步骤
- 声明(定义)结构体,确定结构体名
- 编写结构体的成员
- 编写处理结构体的函数
二、应用实例
-
案例一:
-
编写一个Dog结构体,包含name(char[10])、age(int)、weight(double)属性。
-
编写一个say函数,返回字符串,信息中包含所有成员值。
-
在main方法中,创建Dog结构体变量,调用say函数,将调用结果打印输出。
-
#include<stdio.h>/*编写一个Dog结构体,包含name(char[10])、age(int)、weight(double)属性编写一个say函数,返回字符串,信息中包含所有成员值。在main方法中,创建Dog结构体变量,调用say函数,将调用结果打印输出*/// 定义一个Dog结构体struct Dog {char * name;int age;double weight;};//say函数, 返回字符串,信息中包含所有成员值char * say (struct Dog dog){// 将这个信息放入到一个字符串(字符数组)static char info[50]; // 最后返回的就是它,是局部静态变量sprintf(info,"name=%s age=%d weight=%.2f",dog.name,dog.age,dog.weight);// spintf 将值打印到字符串中return info;}void main(){struct Dog dog;char * info = NULL;dog.name = "小黄";dog.age = 1;dog.weight = 3.4;info = say(dog); // 结构体默认是值传递// 函数中修改不会影响到函数外的值printf("\n 小狗的信息=%s",info);getchar();
}
-
案例二:
-
编程创建一个Box结构体,在其中定义三个成员表示一个立方体的长、宽和高,长宽高可以通过控制台输入。
-
定义一个函数获取立方体的体积(volume)。
-
创建一个结构体,打印给定尺寸的立方体的体积。
-
思路
struct Box {
double len;
double width;
double height;
double volumn;//体积
}
-
#include<stdio.h>struct Box {int length;int width;int height;
};int total(struct Box box){static int volume;return volume=box.height * box.length * box.width;
}void main(){struct Box box;int volume;// 输入长printf("\n请输入box的长");scanf("%d",&box.length);// 输入宽printf("\n请输入box的宽");scanf("%d",&box.width);// 输入高printf("\n请输入box的高");scanf("%d",&box.height);volume = total(box);printf("\nbox的体积为%d",volume);getchar();getchar();
}
- 案例三:景区门票案例
- 一个景区根据游人的年龄收取不同价格的门票。
- 请编写游人结构体(Visitor),根据年龄段决定能够购买的门票价格并输出。
- 规则:年龄>18 , 门票为20元,其它情况免费。
- 可以循环从控制台输入名字和年龄,打印门票收费情况, 如果名字输入 n ,则退出程序。
#include<stdio.h>
#include<string.h>/*
1)一个景区根据游人的年龄收取不同价格的门票。
2) 请编写游人结构体(Visitor),根据年龄段决定能够购买的门票价格并输出
3) 规则:年龄>18 , 门票为20元,其它情况免费。
4) 可以循环从控制台输入名字和年龄,打印门票收费情况, 如果名字输入 n ,则退出程序*/// 定义个结构体
struct Visitor{char name[10];int age;double pay; // 应付门票
};// 编写函数处理业务
//说明: 因为结构体默认是值传递,会拷贝一份完整的数据,效率就低
// 因此,为了提高效率,我们直接接收一个地址(指针)
void ticket(struct Visitor * visitor){// 判断if((*visitor).age > 18){ // 这里我们用的指针,需要使用取值符*(*visitor).pay = 20;}else{(*visitor).pay = 0;}
}void main(){// 测试// 创建结构体变量(创建一个游客)struct Visitor visitor;// 循环的输入名字和年龄while(1){printf("\n 请输入游客名字");scanf("%s",visitor.name); // 数组不需要加地址符// 如果名字输入 n ,则退出程序if(!strcmp("n",visitor.name)){ // 这里可以取反,非0为真就进入if执行break;也可以strcmp("n",visitor.name)==0break;}printf("\n 请输入游客年龄");scanf("%d",&visitor.age);// 调用函数ticket,获取应付的票价ticket(&visitor); // 因为形参是指针,这里需要传一个地址;// 这样在函数里面操作visitor就是操作的main函数里面的visitorprintf("\n 该游客应付票价=%.2f",visitor.pay);} printf("退出程序");getchar();getchar();
}
P 153 共用体介绍和快速入门 2023/3/17
一、需求引入
引入:现有一张关于学生信息和教师信息的表格。学生信息包括姓名、编号、性别、职业、分数,教师的信息包括姓名、编号、性别、职业、教学科目。请看下面的表格:
- 传统方式解决:
- 定义结构体,根据人员的职业,使用对应的成员变量。
struct Person{
char name[20];
int num;
char sex;
char profession;
float score; // 学生使用 score
char course[20]; // 老师使用course
} ;
- 传统方式的问题分析
- 会造成 空间的浪费 , 比如学生只使用 score ,但是 也占用了course 成员的20个字节。
- 做 struct Stu 和 struct Teacher [但如果职业很多,就会对应多个结构体类型, 不利于管理]。
- 使用共用体。
二、基本介绍
- 共用体(Union)属于 构造类型,它可以包含多个类型不同的成员。和结构体非常类似, 但是也有不同的地方。
- 共用体有时也被称为联合或者联合体, 定义格式为
union 共用体名{
成员列表
};
- 结构体和共用体的区别在于:结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。
三、快速入门
- 定义共用体类型和共用体变量的三种方式(和结构体一样)。
- 案例演示:
#include<stdio.h>union data{ // data就是一个共用体,包含三个成员,共用数据空间,该空间的大小以占用最大的成员变量为准int n; // 4字节char ch; // 1字节short m; // 2字节 };void main(){union data a; // 定义了一个共用体变量 aprintf("%d, %d\n", sizeof(a), sizeof(union data) ); // 4,4 a.n = 0x40; // 十六进制printf("%d, %c, %d\n", a.n, a.ch, a.m); // 修改了一个成员的值,发现其他成员也有一个值a.ch = '9';printf("%d, %c, %d\n", a.n, a.ch, a.m);a.m = 0x2059;printf("%d, %c, %d\n", a.n, a.ch, a.m);a.n = 0x3E25AD54;printf("%d, %c, %d\n", a.n, a.ch, a.m);getchar();}
P 154 共用体的内存布局 2023/3/17
一、内存布局
- 案例同上一节:
#include<stdio.h>union data{ // data就是一个共用体,包含三个成员,共用数据空间,该空间的大小以占用最大的成员变量为准int n; // 4字节char ch; // 1字节short m; // 2字节 };void main(){union data a; // 定义了一个共用体变量 aprintf("%d, %d\n", sizeof(a), sizeof(union data) ); // 4,4 a.n = 0x40; // 十六进制 // int 4 字节,char 1字节,short 2字节// 根据内存图判断: (最低位到最高位是从右到左)printf("%d, %c, %d\n", a.n, a.ch, a.m); // 这里第一位输出0x40的十进制64,第二位输出64对应的ASCII码@符,第三位同样64a.ch = '9';printf("%d, %c, %d\n", a.n, a.ch, a.m);// 第一位 字符9对应的ACSII码十进制为57,第二位对应字符为9,第三位为57a.m = 0x2059;printf("%d, %c, %d\n", a.n, a.ch, a.m);// 以下与上面同理:a.n = 0x3E25AD54;printf("%d, %c, %d\n", a.n, a.ch, a.m);getchar();}
二、布局图
P 155 共用体的最佳实践 2023/3/18
一、解决实践问题
#include<stdio.h>
#define TOTAL 2 //人员总数
// 定义了一个结构体person// 1.共用体使用方法一:
union Myunion { // 在下面定义名称float score; char course[20];
};
struct Person{char name[20]; // 姓名int num; // 编号char sex; // 性别char profession; // 职业 s=>学生 t=>老师union Myunion sc;// 2.共用体使用方法二://union{ // 共用体所有成员 公用一段空间所以不会浪费空间// float score; // char course[20]; //} sc; // sc是一个共用体变量
};
void main(){int i;struct Person persons[TOTAL]; // 定义一个结构体数组// 之前定义了TOTAL等于2,相当于两个人,两种信息//输入人员信息for(i=0; i<TOTAL; i++){printf("Input info: ");scanf("%s %d %c %c", persons[i].name, &(persons[i].num), &(persons[i].sex), &(persons[i].profession));if(persons[i].profession == 's'){ //如果是学生printf("请输入该学生成绩");scanf("%f", &persons[i].sc.score);}else{ //如果是老师printf("请输入该老师课程");scanf("%s", persons[i].sc.course);}fflush(stdin); // 刷新;输入,保证数据都写入到结构体里面去了}//输出人员信息//输出人员信息printf("\nName\t\tNum\tSex\tProfession\tScore / Course\n"); // 想按一个表格输出,所以我们使用制表符\tfor(i=0; i<TOTAL; i++){if(persons[i].profession == 's'){ //如果是学生printf("%s\t\t%d\t%c\t%c\t\t%f\n", persons[i].name, persons[i].num, persons[i].sex, persons[i].profession, persons[i].sc.score);}else{ //如果是老师printf("%s\t\t%d\t%c\t%c\t\t%s\n", persons[i].name, persons[i].num, persons[i].sex, persons[i].profession, persons[i].sc.course);}}getchar();getchar();
}
P156 项目-家庭收支软件(1) 2023/3/18
一、需求说明
二、需求实现(1)
#include<stdio.h>
#include<string.h>void main(){// 完成1:显示菜单// 分析:// 1.使用do-while来显示菜单,如果用户输入4表示程序退出 // 完成2:登记收入// 分析:// 1. 需要一个字符串记录收支入情况// 定义相关变量char key = ' '; // 表示用户输入了哪个菜单int loop = 1; // 控制是否退出菜单char details [3000] = "-----------------当前收支明细记录-----------------\n收支\t收支金额\t账户金额\t说 明"; // 记录所有的收入和支出情况char note[20] = ""; // 对收入或者支出的说明char temp[100] = ""; // 是用于格式化每次的收入或者支出,然后拼接到details中去double money = 0.0;double balance = 1000.0; // 账号余额do{printf("\n\n-------家庭收支记账软件-----------");printf("\n 1收支明细");printf("\n 2登记收入"); printf("\n 3登记支出"); printf("\n 4退出"); printf("\n选择(1-4):"); scanf("%c",&key); getchar(); // 过滤回车switch(key) {case '1':printf("%s",details);break;case '2':printf("\n 本次收入金额:");scanf("%lf",&money);getchar(); // 过滤回车balance += money; // 更新余额printf("\n 本次收入说明:");scanf("%s",note);getchar(); // 过滤回车// 将信息拼接到detailssprintf(temp,"\n收入\t%.2f\t\t%.2f\t\t%s",money,balance,note);strcat(details,temp);break; case '3':printf("登记支出");break;case '4':loop = 0;} }while(loop);printf("退出菜单!");getchar();
}
P157 项目-家庭收支软件(2) 2023/3/19
一、需求实现(2)
- 项目代码实现改进
- 用户输入4退出时,给出提示"你确定要退出吗? y/n",必须输入正确的y/n ,否则循环输入指令,直到输入y 或者 n。
- 当没有任何收支明细时,提示 “当前没有收支明细… 来一笔吧!”
- 在支出时,判断余额是否够,并给出相应的提示。
#include<stdio.h>
#include<string.h>
void main(){// 完成1:显示菜单// 分析:// 1.使用do-while来显示菜单,如果用户输入4表示程序退出 // 完成2:登记收入// 分析:// 1. 需要一个字符串记录收支入情况// 完成3:等级支出// 1. 同收入// 完成4:/*用户输入4退出时,给出提示"你确定要退出吗? y/n",必须输入正确的y/n ,否则循环输入指令,直到输入y 或者 n。*/// 完成5:// 当没有任何收支明细时,提示 "当前没有收支明细... 来一笔吧!"// 完成6:// 在支出时要判断余额是否够,并给出相应提示:// 定义相关变量char key = ' '; // 表示用户输入了哪个菜单int loop = 1; // 控制是否退出菜单char details [3000] = "-----------------当前收支明细记录-----------------\n收支\t收支金额\t账户金额\t说 明"; // 记录所有的收入和支出情况char note[20] = ""; // 对收入或者支出的说明char temp[100] = ""; // 是用于格式化每次的收入或者支出,然后拼接到details中去double money = 0.0;double balance = 1000.0; // 账号余额char choice = ' '; // 表示用户选择选择是y/nint flag = 0; // 表示是否有一笔支出或者收入do{printf("\n\n-------家庭收支记账软件-----------");printf("\n 1收支明细");printf("\n 2登记收入"); printf("\n 3登记支出"); printf("\n 4退出"); printf("\n选择(1-4):"); scanf("%c",&key); getchar(); // 过滤回车switch(key) {case '1':if(flag){printf("%s",details);}else{printf("\n当前没有收支明细……,来一笔吧!");}break;case '2':printf("\n 本次收入金额:");scanf("%lf",&money);getchar(); // 过滤回车balance += money; // 更新余额printf("\n 本次收入说明:");scanf("%s",note);getchar(); // 过滤回车// 将信息拼接到detailssprintf(temp,"\n收入\t%.2f\t\t%.2f\t\t%s",money,balance,note);strcat(details,temp);flag = 1;break; case '3':printf("\n 本次支出金额:");scanf("%lf",&money);getchar(); // 过滤回车//判断是否足够支出if(money >balance){ // 不够printf("余额不足……"); break;}balance -= money; // 更新余额printf("\n 本次支出说明:");scanf("%s",note);getchar(); // 过滤回车// 将信息拼接到detailssprintf(temp,"\n支出\t%.2f\t\t%.2f\t\t%s",money,balance,note);strcat(details,temp);flag = 1;break; case '4':printf("\n你确定要退出吗?y/n");do{scanf("%c",&choice);getchar();if(choice == 'y' || choice == 'n'){break;}printf("\n你的输入有误,请重新输入y/n");}while(1);if(choice == 'y'){ // 输出的为y,就将loop赋值为0loop = 0; }} }while(loop);printf("退出菜单!");getchar();
}
P158 项目-家庭收支软件(3) 2023/3/19
一、需求实现(3)
- 改成使用结构体完成 => 并且使用函数来提高项目的模块化编程, 利用今后项目的维护和扩展。
- 这样更容易维护,当需要增加功能的时候,只需要找到对应的函数进行更改。
#include<stdio.h>
#include<string.h>// 定义一个结构体
struct MyFamilyAccount {int flag; // 表示是否有一笔收入或者支出char details[3000]; // 明细double balance; // 余额
} myFamilyAccount;// 下面为全局变量:
char key = ' '; // 表示用户输入了哪个菜单
int loop = 1; // 控制是否退出菜单
char note[20] = ""; // 对收入或者支出的说明
char temp[100] = ""; // 是用于格式化每次的收入或者支出,然后拼接到details中去
double money = 0.0;
char choice = ' '; // 表示用户选择选择是y/n// 使用函数,显示明细
void showDetails(struct MyFamilyAccount * myFamilyAccount){if((* myFamilyAccount).flag){printf("%s",(* myFamilyAccount).details);}else{printf("\n当前没有收支明细……,来一笔吧!");}
}//使用函数,完成一个登记收入
void income(struct MyFamilyAccount * myFamilyAccount){printf("\n 本次收入金额:");scanf("%lf",&money);getchar(); // 过滤回车(* myFamilyAccount).balance += money; // 更新余额printf("\n 本次收入说明:");scanf("%s",note);getchar(); // 过滤回车// 将信息拼接到detailssprintf(temp,"\n收入\t%.2f\t\t%.2f\t\t%s",money,(* myFamilyAccount).balance,note);strcat((* myFamilyAccount).details,temp);(* myFamilyAccount).flag = 1;
}// 使用函数,完成一个登记支出
void pay(struct MyFamilyAccount * myFamilyAccount){printf("\n 本次支出金额:");scanf("%lf",&money);getchar(); // 过滤回车//判断是否足够支出// 这里account是在结构体中了,需要取出来if(money >(*myFamilyAccount).balance){ // 不够printf("余额不足……"); // break; // 这里是break了,不能在函数中使用,函数中自然使用return语句return;}(*myFamilyAccount).balance -= money; // 更新余额printf("\n 本次支出说明:");scanf("%s",note);getchar(); // 过滤回车// 将信息拼接到detailssprintf(temp,"\n支出\t%.2f\t\t%.2f\t\t%s",money,(*myFamilyAccount).balance,note);strcat((*myFamilyAccount).details,temp);(*myFamilyAccount).flag = 1;
}//使用一个函数,完成退出
void myexit(){ // 这里没有使用到结构体,不需要传入printf("\n你确定要退出吗?y/n");do{scanf("%c",&choice);getchar();if(choice == 'y' || choice == 'n'){break;}printf("\n你的输入有误,请重新输入y/n");}while(1);if(choice == 'y'){ // 输出的为y,就将loop赋值为0loop = 0; }
} // 该函数专门用于显示菜单
void mainMenu(struct MyFamilyAccount * myFamilyAccount ){do{printf("\n\n-------家庭收支记账软件-----------");printf("\n 1收支明细");printf("\n 2登记收入"); printf("\n 3登记支出"); printf("\n 4退出"); printf("\n选择(1-4):"); scanf("%c",&key); getchar(); // 过滤回车switch(key) {case '1':showDetails(myFamilyAccount);break;case '2':income(myFamilyAccount);break;case '3':pay(myFamilyAccount);break;case '4':myexit();}}while(loop);
}void main(){// 创建一个结构体变量struct MyFamilyAccount myFamilyAccount;// 初始化myFamilyAccount.flag = 0;myFamilyAccount.balance = 1000.0;// 使用拷贝的方式赋值memset(myFamilyAccount.details,3000,0); // 先要清零strcpy(myFamilyAccount.details,"-----------------当前收支明细记录-----------------\n收支\t收支金额\t账户金额\t说 明");// 调用mainMenu显示菜单mainMenu(&myFamilyAccount);getchar();
}
二、结构示意图
P 159 项目-CRM(1)-程序框架图 2023/3/23
一、项目需求说明
说明:模拟实现基于文本界面的《客户信息管理软件》。该软件能够实现对客户对象的插入、修改和删除(用数组实现),并能够打印客户明细表。
二、程序框架图
作用:描述该项目包含多少个文件,明确文件与文件之间的调用关系。
P 160 项目-CRM(2)-客户结构体 2023/3/23
一、完成Customer结构体
- 思路:
- Customer结构体含有的成员,应该从给出的界面来分析
- 分析出有6个成员,数据类型也可以分析出来
- 编写一个函数,输出的给出的某个Customer变量的信息
#include<stdio.h>// 定义结构体数据类型
struct Customer{int id; // 编号int age; // 年龄char name[10]; // 名字char gender; // f 表示女,m表示男char phone[16]; // 电话号码char email[20]; // 邮箱
};// 显示一个Customer变量的信息
// 这里我们接收的是结构体指针,目的是提高效率
void getCustomerInfo(struct Customer * customer){printf("\n%d\t%s\t%s\t%d\t%c\t%s\t%s",(* customer).id,(* customer).gender,(* customer).name,(* customer).age,(* customer).phone,(* customer).email);
}
相关文章:

C语言 | 第十六章 | 共用体 家庭收支软件-1
P 151 结构体定义三种形式 2023/3/15 一、创建结构体和结构体变量 方式1-先定义结构体,然后再创建结构体变量。 struct Stu{ char *name; //姓名 int num; //学号 int age; //年龄 char group; //所在学习小组 float score; //成绩 }; struct Stu stu1, stu2; //…...

【论文阅读】Learning a Few-shot Embedding Model with Contrastive Learning
使用对比学习来学习小样本嵌入模型 引用:Liu, Chen, et al. “Learning a few-shot embedding model with contrastive learning.” Proceedings of the AAAI conference on artificial intelligence. Vol. 35. No. 10. 2021. 论文地址:下载地址 论文代码…...

OKHTTP 如何处理请求超时和重连机制
😄作者简介: 小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD 如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。 😊 座右铭:不…...

基于Springboot vue的流浪狗领养管理系统设计与实现
博主介绍:专注于Java(springboot ssm 等开发框架) vue .net php python(flask Django) 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找…...

爬虫案例——网易新闻数据的爬取
案例需求: 1.爬取该新闻网站——(网易新闻)的数据,包括标题和链接 2.爬取所有数据(翻页参数) 3.利用jsonpath解析数据 分析: 该网站属于异步加载网站——直接网页中拿不到,需要…...
SpringCloud 2023 Gateway的Filter配置介绍、类型、内置过滤器、自定义全局和单一内置过滤器
目录 1. Filter介绍2. Filter类型3. 内置过滤器3.1 请求头(RequestHeader)相关GatewayFilter Factory3.2 请求参数(RequestParameter)相关GatewayFilter Factory3.3 回应头(ResponseHeader)相关GatewayFilter Factory3.4 前缀和路径相关GatewayFilter Factory3.5 Default Filte…...

从银幕到现实:擎天柱机器人即将改变我们的生活
擎天柱(Optimus)是《变形金刚》系列电影中的主角,如今也成为特斯拉正在开发的通用机器人。2022年10月,特斯拉展示了这一机器人的初始版本,创始人埃隆马斯克表示,希望到2023年能够启动生产。他指出ÿ…...
408算法题leetcode--第33天
509. 斐波那契数 题目地址:509. 斐波那契数 - 力扣(LeetCode) 题解思路:dp 时间复杂度:O(n) 空间复杂度:O(n) 代码: class Solution { public:int fib(int n) {// dp数组含义:dp[i]即i位置…...
OCR模型调研及详细安装
OCR模型调研及详细安装 1 搭建 Tesseract-OCR 环境。 1.1 注意需先手动安装Tesseract-OCR, 下载地址:https://digi.bib.uni-mannheim.de/tesseract/?CM;OD 注意:安装的时候选中中文包(安装时把所有选项都勾上)。 安装磁盘选择…...

C++第六讲:STL--vector的使用及模拟实现
C第六讲:STL--vector的使用及模拟实现 1.vector简介2.vector的常见接口介绍2.1constructor -- 构造2.2destructor -- 析构2.3begin、end2.3.1vector和string的区别、vector<string> 2.4rbegin、rend2.5cbegin、cend2.6crbegin、crend2.7size、max_size、resiz…...
2024年字节抖音前端面经,这次问的很基础!
文章同步在公众号:萌萌哒草头将军,欢迎关注!!! 一面 es6新特性有哪些 新增了let、const关键字替换var声明变量,因为var会导致变量提升,在申明之前可以访问变量。新增了箭头函数,新…...
vscode提交修改Failed to connect to github.com port 443: Timed out
参考内容:timed out 只需3步:设置代理、取消代理、再次提交。👉 2.1 设置代理 $ git config --global https.proxy 1 👉 2.2 取消代理 $ git config --global --unset https.proxy 1之后关闭bash,再去vscode里面pull …...

通过docker镜像安装elasticsearch和kibana
目录 前言安装elasticsearch:7.17.21安装对应版本的kibana 前言 本文主要参考:https://blog.csdn.net/qq_23859799/article/details/138521052,内容基本一致,改动了部分错误 安装elasticsearch:7.17.21 拉取镜像:docker pull d…...

seaCMS v12.9代码审计学习(下半)
文章目录 admin/admin_safe.php任意文件下载CSRF 添加管理员账户CSRF配合XSS弹cookie admin/admin_safe.php任意文件下载 在admin_safe.php文件下有着这么一段代码,他的作用时检查action的值是否为download,如果为download那么将你传入的文件直接打印给…...

麒麟信安CentOS安全加固案例获评中国信通院第三届“鼎新杯”数字化转型应用奖
“鼎新杯”数字化转型应用大赛,由中国通信标准化协会主办、中国信息通信研究院承办,以落实国家“十四五”规划关于“加快数字化发展,建设数字中国”的总体要求为目标,意在打造一批具有产业引领与推广应用效应的企业数字化转型应用…...
Java 中消除 If-else 技巧总结
“过于依赖 if-else 不仅会让代码变得臃肿不堪,还会使维护成本大大增加。其实,if-else 虽然是最基础的条件分支,但它并不是万能的解决方案。简单粗暴的 if-else 很容易让代码可读性差、结构复杂。 今天,我将带大家了解一些取代 i…...

每个平台团队都应该跟踪的API指标
目录 识别关键 API 度量 基础架构/DevOps 应用工程/平台 产品管理 业务/增长 基础架构API指标 正常运行时间 CPU使用率 内存使用率 应用程序API指标 相应时间 平均和最大延迟 吞吐量 可用性 缓存命中率 每分钟错误数 每个业务事务的API调用 如何收集优化API指…...

Windows 11 24H2版本有哪些新功能_Windows 11 24H2十四大新功能介绍
距离上次发布的23H2版本已经过去了一年时间,现在,Win 11的24H2版本终于等到了,微软已经全面公开发布Win11 24H2版本,版本号为26100.1742,此次官宣的版本包括了消费者版、商业版、LTSC 2024版等,各种语言版本…...

渗透测试 之 AD域渗透 【Kerberoasting】 攻击技术讲解 对应得工具详细介绍哟~ 以及相关示例 按照步骤做你也会哟
说明 Kerberoasting 攻击发生在Kerberos协议的TGS_REP阶段,KDC的TGS服务返回一个由服务Hash加密的ST给客户端。由于该ST是用服务Hash进行加密的,因此客户端在拿到该ST后可以用于本地离线爆破。 攻击的过程 攻击者提供一个正常的域用户密码对域进行身份…...

如何在Ubuntu上更改MySQL数据存储路径
文章目录 0 背景1 备份现有数据库数据2 停止 MySQL 服务3 复制现有的 MySQL 数据到新目录4 修改 MySQL 配置文件5 更新 AppArmor 或 SELinux 配置(如有启用)6. 修改 MySQL 系统文件中的 datadir7. 启动 MySQL 服务8. 验证更改参考资料 0 背景 在原先划分…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...

现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能
1. 开发环境准备 安装DevEco Studio 3.1: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK 项目配置: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...

Ubuntu系统复制(U盘-电脑硬盘)
所需环境 电脑自带硬盘:1块 (1T) U盘1:Ubuntu系统引导盘(用于“U盘2”复制到“电脑自带硬盘”) U盘2:Ubuntu系统盘(1T,用于被复制) !!!建议“电脑…...

mac:大模型系列测试
0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何,是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试,是可以跑通文章里面的代码。训练速度也是很快的。 注意…...