陕西建设工程合同备案网站,建设工程交易网站,中山模板网站建设,单位公众网站建设要求在实际问题中#xff0c;一组数据往往具有不同的数据类型。例如#xff0c;人口大普查时#xff0c;我们需要记录每一位公民的姓名#xff0c;年龄#xff0c;性别#xff0c;住址#xff0c;身份证号码。这些信息分别要用整型#xff0c;字符型#xff0c;字符串型来…在实际问题中一组数据往往具有不同的数据类型。例如人口大普查时我们需要记录每一位公民的姓名年龄性别住址身份证号码。这些信息分别要用整型字符型字符串型来记录。为了解决问题C语言给出了另一种构造数据类型——“结构体”它在数据存储方面相当于其他高级语言中的记录但它有着面向对象的优势。
一、结构体定义和操作 1. 定义结构体及结构体变量 结构体变量的定义有两种方式 定义结构体的同时定义结构体变量 struct 结构体名 { //其中 struct 是关键字 成员表 //可以有多个成员 成员函数 //可以有多个成员函数也可以没有 } 结构体变量表 //可以同时定义多个结构体变量 结构体变量名列表的各个变量用“”隔开。 例如 struct DATA{ int a[2]; //成员为一个数组 int c; }data_a,data_b; 当然我们也可以先定义结构体再定义结构体变量 struct 结构体名 成员表 成员函数 结构体名 结构体变量表//同样可以同时定义多个结构体变量 例如 struct DATA{ int a[2]; int c; } DATA data_a,data_b;//这种定义方式与上一种方式的效果是相同的 在定义结构体变量时注意结构体变量名和结构体名不能相同。在定义结构体时系统对之不分配实际内存。只有定义结构体变量时系统才为其分配内存。 2.成员调用 结构体变量与各个成员之间引用的一般形式为 结构体变量名. 成员名 对于上面定义的结构体变量我们可以这样操作 cindata_a.a[0]data_a.a[1]; //一般情况下不能写 cindata_a; int adata_a.a[0]data_a.a[1]; //就像用整形变量一样用a[0]、a[1] data_bdata_a; //结构体之间的相互赋值是合法的 data_a.c0; //就如同给整形变量赋值 实际上结构体成员的操作与该成员类型所具有的操作是一致的。
成员运算符“.”在存取成员数值时使用其优先级最高并具有左结合性。在处理包含结构体的结构体时可记作 strua. strub. membb 这说名结构体变量 strua 有结构体成员 strub结构体变量 strub 有成员 membb。 3.成员函数调用 结构体成员函数调用的一般形式为 结构体变量名. 成员函数 结构体成员函数默认将结构体变量作为引用参数。
二、结构体操作实例 现在我们先定义一个简单的结构体这个结构体将用来记录一个学生的大致情况所以它的成员应该有学号、姓名、性别、年龄、成绩、家庭住址等。 #includeiostream using namespace std; struct student{ int num; //学号 char name[21]; //姓名 char sex; //性别 int age; //年龄 float score; //成绩 char address[51]; //家庭住址 }; //此处不可忽略分号 struct student a,b; int main() { cina.numa.namea.sexa.agea.scorea.address; cinb.numb.nameb.sexb.ageb.scoreb.address; couta.num a.name a.sex a.age a.score a.addressendl; coutb.num b.name b.sex b.age b.score b.addressendl; return 0; } 学生信息 查看测评数据信息 输入一个学生的信息包括姓名、性别、年龄、体重再输出这些信息。要求使用结构体 输入格式 一行依次是学生的姓名、性别、年龄、体重。 输出格式 一行依次是学生的姓名、性别、年龄、体重体重保留一位小数。 输入/输出例子1 输入 wangshuting f 12 70.69 输出 wangshuting f 12 70.7 #includebits/stdc.h
using namespace std;
struct stu{string name;char x;int a;double b;
}n;
int main(){cinn.namen.xn.an.b;coutn.name n.x n.a ;printf(%.1lf,n.b);return 0;
} 成绩排名次 查看测评数据信息 输入N个学生的姓名和语文成绩按语文成绩高低排出名次并且从大到小输出每个学生的姓名。 输入格式 输入第一行N表示N个学生。( 0 n 60 ) 第二到第N1行两个变量A姓名B学生成绩保证成绩没有相同。学生的姓名不超过20个字符。 输出格式 输出N行按学生成绩由高到低输出。 每行输出学生名次、姓名和成绩中间用空格隔开。 输入/输出例子1 输入 3 xiaofang 89 xiaotian 100 chenhao 60 输出 1 xiaotian 100 2 xiaofang 89 3 chenhao 60 #includebits/stdc.h
using namespace std;
struct stu{string name;int a;
}m[1005];
int n;
int main(){cinn;for(int i1;in;i){cinm[i].namem[i].a;}for(int i1;in;i){for(int ji1;jn;j){if(m[i].am[j].a)swap(m[i].name,m[j].name),swap(m[i].a,m[j].a);}}for(int i1;in;i){couti m[i].name m[i].aendl;}return 0;
} 身高问题 查看测评数据信息 输入 n 个学生的信息每个学生信息包括姓名、身高、学号。编程输出身高最高的学生的信息。 输入格式 第 1 行一个正整数 n表示学生个数n≤100。 以下 n 行每一行依次输入学生的姓名、身高、学号。 输出格式 输出最高的学生信息如存在身高一样的请输出学号小的那个同学。 输入/输出例子1 输入 5 John 172 20160302 David 173 20160306 Jason 168 20160309 Jack 152 20160311 Kitty 147 20160319 输出 David 173 20160306 #includebits/stdc.h
using namespace std;
struct a{string name;int sg;int xh;
}x[105];
int n;
bool cmp(a x,a y){if(x.sg!y.sg)return x.sgy.sg;else return x.xhy.xh;
}
int main(){int n;cinn;for(int i1;in;i)cinx[i].namex[i].sgx[i].xh;sort(x1,xn1,cmp);coutx[1].name x[1].sg x[1].xh;return 0;
} 乐乐的礼物xx10nhoi 查看测评数据信息 圣诞节到了乐乐所在的班准备搞一个圣诞晚会晚会的其中一个环节是全班同学互送礼物。已知每个同学都准备了一些钱来送礼物而这些钱将会被平均分给那些将收到他的礼物的人。有些人准备了较多的钱有些人准备了较少的钱。现在乐乐想知道晚会结束后哪些同学收到的礼物的总价值最大包含无法送出的钱。 输入格式 第1行一个整数n表示乐乐所在的班的人数2≤n≤100 第2至n1行n行按班里的学号顺序给出每个同学的姓名。姓名只包含大写或小写字母姓名的长度不超过10个字母 第n2至2*n2行n行按学号顺序给出每个同学送礼物的信息第一个是整数m(0≤m≤5000)表示该同学准备用来送礼的钱第二个是整数k(0≤k≤20)表示该同学准备把钱平均分给k个好朋友给每个朋友的钱都是整数并尽量全部用完剩下无办法再分的钱自己保留接着是k个姓名每个姓名之间用一个空格分开表示要分给哪k个朋友。 输出格式 输出文件有n行按最后的钱数从大到小的顺序输出每个同学的姓名和钱数。如果钱数相同的按学号顺序从小到大输出。 输入/输出例子1 输入 5 Dave laura owen vick amr 200 3 laura owen vick 500 1 Dave 150 2 vick laura 600 1 amr 0 0 输出 amr 600 Dave 502 laura 141 vick 141 owen 66 样例解释 Dave的200元分给了3人每人66元剩下2元还收到了2号给他的500元因此他最后有502元。 laura的500元给了同学收到1号给他的66元和3号给他的75元他最后有141元。 owen的150元给了2人每人75元收到1号给他的66元他最后有66元。 vick的600元给了同学收到1号给他的66元和3号给他的75元他最后有141元。 amr没钱给人收到5号给他的600元他最后有600元。 #includebits/stdc.h
using namespace std;
struct pp{string name;int mon,id;
}a[105];
int n;
bool cmp(pp x,pp y){if(x.mon!y.mon)return x.mony.mon;else return x.idy.id;
}
int main(){cinn;for(int i1;in;i){cina[i].name;a[i].idi;}int m,k;for(int i1;in;i){cinmk;if(k0){a[i].mona[i].monm;continue;}int pjm/k;a[i].mona[i].monm%k;string s;for(int j1;jk;j){cins;for(int h1;hn;h){if(a[h].names){a[h].monpj;}}}}sort(a1,an1,cmp);for(int i1;in;i){couta[i].name a[i].monendl;}return 0;
}
考试成绩 查看测评数据信息 在一次考试中每个学生的成绩都不相同现知道了每个学生的学号和成绩求考第k名学生的学号和成绩。 输入格式 第一行有两个整数分别是学生的人数n1≤n≤100和求第k名学生的 k1≤k≤n。 其后有n行数据每行包括一个学号整数和一个成绩浮点数中间用一个空格分隔。 输出格式 输出第k名学生的学号和成绩中间用空格分隔。注请用%g输出成绩 输入/输出例子1 输入 5 3 90788001 67.8 90788002 90.3 90788003 61 90788004 68.4 90788005 73.9 输出 90788004 68.4 #includebits/stdc.h
using namespace std;
struct a{int xh;double cj;
}x[1005];
int n,k;
bool cmp(a x,a y){if(x.xh!y.xh)return x.cjy.cj;else return x.xhy.xh;
}
int main(){cinnk;for(int i1;in;i){cinx[i].xhx[i].cj;}sort(x1,xn1,cmp);printf(%d %g,x[k].xh,x[k].cj);return 0;
} 谁获得了最高奖学金 查看测评数据信息 某校的惯例是在每学期的期末考试之后发放奖学金。发放的奖学金共有五种获取的条件各自不同 1) 院士奖学金每人8000元期末平均成绩高于80分80并且在本学期内发表1篇或1篇以上论文的学生均可获得 2) 五四奖学金每人4000元期末平均成绩高于85分85并且班级评议成绩高于80分80的学生均可获得 3) 成绩优秀奖每人2000元期末平均成绩高于90分90的学生均可获得 4) 西部奖学金每人1000元期末平均成绩高于85分85的西部省份学生均可获得 5) 班级贡献奖每人850元班级评议成绩高于80分80的学生干部均可获得 只要符合条件就可以得奖每项奖学金的获奖人数没有限制每名学生也可以同时获得多项奖学金。例如姚林的期末平均成绩是87分班级评议成绩82分同时他还是一位学生干部那么他可以同时获得五四奖学金和班级贡献奖奖金总数是4850元。 现在给出若干学生的相关数据请计算哪些同学获得的奖金总数最高假设总有同学能满足获得奖学金的条件。 输入格式 第一行输入数据N表示学生的总数( 0 N 100 ),。接下来的n行每行是一位学生的数据从左向右依次是姓名期末平均成绩班级评议成绩是否是学生干部是否是西部省份学生以及发表的论文数。姓名是由大小写英文字母组成的长度不超过20的字符串不含空格期末平均成绩和班级评议成绩都是0到100之间的整数包括0和100是否是学生干部和是否是西部省份学生分别用一个字符表示Y表示是N表示不是发表的论文数是0到10的整数包括0和10。每两个相邻数据项之间用一个空格分隔。 输出格式 输出包括三行第一行是获得最多奖金的学生的姓名第二行是这名学生获得的奖金总数。如果有两位或两位以上的学生获得的奖金最多输出他们之中在输入文件中出现最早的学生的姓名。第三行是这n个学生获得的奖学金的总数。 输入/输出例子1 输入 4 YaoLin 87 82 Y N 0 ChenRuiyi 88 78 N Y 1 LiXin 92 88 N N 0 ZhangQin 83 87 Y N 1 输出 ChenRuiyi 9000 28700 #includebits/stdc.h
using namespace std;
struct node{string xm;int qm,bj;char bgb,xb;int lw,ans,sum;
}a[101];
int n,tot0;
bool cmp(node x,node y){if(x.ansy.ans)return x.sumy.sum;else return x.ansy.ans;
}
int main(){scanf(%d,n);for(int i1;in;i){cina[i].xma[i].qma[i].bja[i].bgba[i].xba[i].lw;if(a[i].qm80a[i].lw1)a[i].ans8000;if(a[i].qm85a[i].bj80)a[i].ans4000;if(a[i].qm90)a[i].ans2000;if(a[i].xbYa[i].qm85)a[i].ans1000;if(a[i].bj80a[i].bgbY)a[i].ans850; a[i].sumi; tota[i].ans;}sort(a1,an1,cmp);couta[1].xmendla[1].ansendltot;return 0;
}