集训第一天 结构体
2014-01-15 23:55
357 查看
结构体
今天作业 1.定义一个acmer结构体,包括以下信息:姓名,学号,手机号,做题数,出生日期,其中出生日期date也是一个结构体,包括年、月、日
2.建立结构体数组,实现对多个同学的信息输入,输出
3.实现简单的统计功能,比如统计做题数大于150的同 学并输出其完整信息
4.实现查找功能,包括按姓名、学号查找
5.实现信息修改功能
6.按做题数目进行排序(选作)
7.其他功能可以自由扩展,多多益善 ^_^
8.程序一个函数实现一个功能
9.代码测试成功后贴在论坛上,大家互相学习借鉴
#include<stdio.h>
#include<string.h>
void serchshuzi(int c);
void paixv(int c);
void serxingming(int c);
void serxuehao(int c);
void xiugai(int c);
struct shengri /*要先定义shengri再定义acmer*/
{
int year;
int month;
int date;
};
struct acmer
{
char name[20];
char xuehao[20];
char shoujihao[20];
int zuotishu;
struct shengri birthday;
} students[100];
int main()
{
int i;
int m,b;
struct acmer q;/*注意要带acmer*/
char a[20];
scanf("%d",&m);/*输入输出*/
for(i=0; i<m; i++)
{
scanf("%s %s %s %d %d %d %d",students[i].name,students[i].xuehao,students[i].shoujihao,&students[i].zuotishu,&students[i].birthday.year,&students[i].birthday.month,&students[i].birthday.date);
}
for(i=0; i<m; i++)
{
printf("%s,%s,%s,%d,%d,%d,%d\n",students[i].name,students[i].xuehao,students[i].shoujihao,students[i].zuotishu,students[i].birthday.year,students[i].birthday.month,students[i].birthday.date);
}
printf("查找做题数超过某个数值输入1\n根据姓名查找输入2,\n根据学号查找输入3,\n修改输入4,\n排序输入5\n");
scanf("%d",&b);
if(b==1)
serchshuzi(m);
else if(b==5)
paixv(m);
else if(b==2)
serxingming(m);
else if(b==3)
serxuehao(m);
else if(b==4)
xiugai(m);
return 0;
}
void serchshuzi(int c)/*查找做题数超过某个数值的同学*/
{
int i,n;
printf("输入要要超过的数值\n");
scanf("%d",&n);
for(i=0; i<c-1; i++)
{
if(students[i].zuotishu>n)
printf("%s %s %s %d %d %d %d\n",students[i].name,students[i].xuehao,students[i].shoujihao,students[i].zuotishu,students[i].birthday.year,students[i].birthday.month,students[i].birthday.date);
}
}
void paixv (int c)/*根据做题数目排序*/
{
int i,j;
struct acmer q;/*注意要带acmer*/
for(i=0; i<c-1; i++)
for(j=i+1; j<c; j++)
if(students[i].zuotishu>students[j].zuotishu)
{
q=students[i];
students[i]=students[j];
students[j]=q;
}
printf("%s %s %s %d %d %d %d\n",students[i].name,students[i].xuehao,students[i].shoujihao,students[i].zuotishu,students[i].birthday.year,students[i].birthday.month,students[i].birthday.date);
for(i=0; i<c-1; i++)
{
printf("%s %s %s %d %d %d %d\n",students[i].name,students[i].xuehao,students[i].shoujihao,students[i].zuotishu,students[i].birthday.year,students[i].birthday.month,students[i].birthday.date);
}
}
void serxingming(int c)/*根据某个条件查找*/
{
int i;
char a[20];
printf("输入要查找的姓名:\n");
scanf("%s",a);
for(i=0; i<c; i++)
if(strcmp(students[i].name,a)==0)
printf("%s %s %s %d %d %d %d\n",students[i].name,students[i].xuehao,students[i].shoujihao,students[i].zuotishu,students[i].birthday.year,students[i].birthday.month,students[i].birthday.date);
}
void serxuehao(int c)
{
int i,a[20];
printf("输入要查找的学号:\n");
scanf("%s",a);
for(i=0; i<c; i++)
if(strcmp(students[i].xuehao,a)==0)
printf("%s %s %s %d %d %d %d\n",students[i].name,students[i].xuehao,students[i].shoujihao,students[i].zuotishu,students[i].birthday.year,students[i].birthday.month,students[i].birthday.date);
}
void xiugai(int c)
{
int i,k,j;
printf("输入要修改的学生的序号:");
scanf("%d",&k);
printf("输入1代表修改姓名,输入2代表修改学号,输入3代表修改手机号,输入4代表修改做题数目,输入5代表修改出生年,输入6代表修改出生月,输入7代表修改出生日\n");
scanf("%d",&i);
if(i==1)
scanf("%s",students[i].name);
else if(i==2)
scanf("%s",students[i].xuehao);
else if(i==3)
scanf("%s",students[i].shoujihao);
else if(i==4)
scanf("%d",&students[i].zuotishu);
else if(i==5)
scanf("%d",&students[i].birthday.year);
else if(i==6)
scanf("%d",&students[i].birthday.month);
else if(i==7)
scanf("%d",&students[i].birthday.date);
for(j=0;j<c;j++)
printf("%s %s %s %d %d %d %d\n",students[j].name,students[j].xuehao,students[j].shoujihao,students[j].zuotishu,students[j].birthday.year,students[j].birthday.month,students[j].birthday.date);
}
排序:
一、对int类型数组排序
int num[100];
Sample:
int cmp ( const void *a , const void *b )
{
return *(int *)a - *(int *)b;
}
qsort(num,100,sizeof(num[0]),cmp);
二、对char类型数组排序(同int类型)
char word[100];
Sample:
int cmp( const void *a , const void *b )
{
return *(char *)a - *(int *)b;
}
qsort(word,100,sizeof(word[0]),cmp);
三、对double类型数组排序(特别要注意)
double in[100];
int cmp( const void *a , const void *b )
{
return *(double *)a > *(double *)b ? 1 : -1;
}
qsort(in,100,sizeof(in[0]),cmp);
四、对结构体一级排序
struct In
{
double data;
int other;
}s[100]
//按照data的值从小到大将结构体排序,关于结构体内的排序关键数据data的类型可以很多种,参考上面的例子写
int cmp( const void *a ,const void *b)
{
return ((In *)a)->data - ((In *)b)->data ;
}
qsort(s,100,sizeof(s[0]),cmp);
五、对结构体
struct In
{
int x;
int y;
}s[100];
//按照x从小到大排序,当x相等时按照y从大到小排序
int cmp( const void *a , const void *b )
{
struct In *c = (In *)a;
struct In *d = (In *)b;
if(c->x != d->x) return c->x - d->x;
else return d->y - c->y;
}
qsort(s,100,sizeof(s[0]),cmp);
六、对字符串进行排序
struct In
{
int data;
char str[100];
}s[100];
//按照结构体中字符串str的字典顺序排序
int cmp ( const void *a , const void *b )
{
return strcmp( ((In *)a)->str , ((In *)b)->str );
}
qsort(s,100,sizeof(s[0]),cmp);
七、计算几何中求凸包的cmp
int cmp(const void *a,const void *b) //重点cmp函数,把除了1点外的所有点,旋转角度排序
{
struct point *c=(point *)a;
struct point *d=(point *)b;
if( calc(*c,*d,p[1]) < 0) return 1;
else if( !calc(*c,*d,p[1]) && dis(c->x,c->y,p[1].x,p[1].y) < dis(d->x,d->y,p[1].x,p[1].y)) //如果在一条直线上,则把远的放在前面
return 1;
else return -1;
}
例子:
#include<stdio.h>
int cmp(void *a,void *b)
{
return *(int*)a-*(int*)b;
}
int main()
{
int a[100],i,m;
scanf("%d",&m);
for(i=0;i<m;i++)
scanf("%d",&a[i]);
qsort(a,m,sizeof(a[0]),cmp);
for(i=0;i<m-1;i++)
printf("%d ",a[i]);
printf("%d\n",a[m-1]);
return 0;
}
降序
#include<stdio.h>
int cmp(void *a,void *b)
{
return *(char*)a<*(char*)b;
}
int main()
{
int i,m;
char a[100];
scanf("%d",&m);
getchar();
for(i=0;i<m;i++)
scanf("%c",&a[i]);
qsort(a,m,sizeof(a[0]),cmp);
for(i=0;i<m-1;i++)
printf("%c ",a[i]);
printf("%c\n",a[m-1]);
return 0;
}
去小数点函数:
#include<stdio.h>
int main()
{
double m;
scanf("%lf",&m);
m=trunc(m);
printf("%lf",m);
return 0;
}
char类型
相关文章推荐
- 寒假集训第一天--结构体训练
- 寒假集训第一天——结构体
- 2017.7.31 暑假集训第一天
- 假期集训第一天
- 第一天集训
- ACM集训第一天
- 2016.1.14 集训第一天 OI
- 暑期集训第一天
- 【BZOJ 2956】模积和 【中国国家队清华集训 2012-2013 第一天】
- SDUT_2015寒假集训_结构体练习_H-顺序建立链表
- 【集训第一天内容】
- SDUT_2015寒假集训_结构体练习_I-单链表中重复元素的删除
- SDUT_2015寒假集训_结构体练习_J-逆序建立链表
- 集训第一天
- 博客第一天,ACM集训第一天
- 暑假集训第一天
- 集训第一天
- 【集训第一天·特来卖萌】树链剖分之水水的例题
- 寒假集训的第一天
- 【暑假集训】之被ACM金牌大神虐的第一天之dp篇(未完结)