当前位置: 代码迷 >> C语言 >> [讨论]结构体
  详细解决方案

[讨论]结构体

热度:423   发布时间:2005-10-06 19:09:00.0
[讨论]结构体

成绩结构体 #include<stdio.h> struct cat { char name[10]; int cj; };

void c(struct cat a[],int x,int y) { struct cat temp; temp=a[x]; for (;x>y;x--) a[x]=a[x-1]; a[y]=temp; }

void ps(struct cat a[],int n) { int i,j; for (i=1;i<n;i++) { for (j=0;j<i;j++) { if (a[j].cj<a[i].cj) { c(a,i,j); break; } } } }

void display(struct cat a[],int n) { int i; for (i=0;i<n;i++) { printf("第%d名: ",i+1); printf("姓名:%s 成绩:%d\n",a[i].name,a[i].cj); } }

void main() { struct cat sion[50],bb[50]; int i,j,n; FILE *p; //sion[1]=sion[0]; //printf("%s %d",sion[1].name,sion[1].cj); printf("需要输入几个学生成绩?"); scanf("%d",&n); for (i=0;i<n;i++) { printf("第%d个学生的姓名:",i+1); scanf("%s",&sion[i].name); printf("第%d个学生的成绩:",i+1); scanf("%d",&sion[i].cj); printf("\n"); } ps(sion,n); printf("\n成绩排名如下:\n"); display(sion,n); printf("\n写入到文件(jak)中!......\n\n"); p=fopen("jak","wb+"); fwrite (&sion[n],sizeof(struct cat),n,p); fread (&bb[n],sizeof(struct cat),n,p); printf("从文件中读取,并显示!\n\n"); display(sion,n); fclose(p);

}

搜索更多相关的解决方案: 结构体  

----------------解决方案--------------------------------------------------------

字符串排序 #include<stdio.h> #include<string.h> void main() { char a[5][10]; char *temp,*q[5]; int i,j; for (i=0;i<5;i++) { printf("请输入第%d个字符串",i+1); scanf("%s",&a[i]); q[i]=a[i]; } for (i=0;i<4;i++) { for(j=i+1;j<5;j++) if(stricmp(q[i],q[j])>0) { temp=q[i]; q[i]=q[j]; q[j]=temp; } } printf("排序后的字符串(升序)\n"); for(i=0;i<5;i++) { printf("\n字符串%d=%s",i+1,q[i]); } /*for(i=0;i<5;i++) { printf("\n%s",q[j]); }*/

for (i=0;i<4;i++) { for(j=i+1;j<5;j++) if(stricmp(q[i],q[j])<0) { temp=q[i]; q[i]=q[j]; q[j]=temp; } } printf("\n排序后的字符串(降序)"); for(i=0;i<5;i++) { printf("\n字符串%d=%s",i+1,q[i]); } }


----------------解决方案--------------------------------------------------------
字符串的比较
#include&lt;stdio.h&gt;
#include&lt;string.h&gt;
#include&lt;stdlib.h&gt;
void main()
{
char a[10],b[10];
char *pa,*pb;
gets(a);
gets(b);
pa=a;
pb=b;
for(;*pa!='\0';pa++);
pa--;
for(;*pb!='\0';pb++);
pb--;
for(;pa!=&amp;a[0];pa--,pb--)
{
  if(*pa!=*pb)
  {
   printf("%s没有出现在%s的末尾",a,b);
   exit(0);
  }
}
  printf("%s出现在%s的末尾",a,b);
}
----------------解决方案--------------------------------------------------------
学生信息
#include&lt;stdio.h&gt;
void main()
{
struct stu
{
  int h;//学号
  char name[20];//姓名
  char kc[20];//登记的课程
  int year;//入学年份
};
struct stu students[10];
int i,Y,H,j;//i循环变量,Y按年份查找的年,H按学号查找的号
for(i=0;i&lt;10;i++)
{
  printf("输入第%d名学生的学号:",i+1);
  scanf("%d",&amp;students[i].h);
  printf("输入第%d名学生的姓名:",i+1);
  scanf("%s",students[i].name);
  printf("输入第%d名学生登记的课程:",i+1);
  scanf("%s",students[i].kc);
  printf("输入第%d名学生的入学年份:",i+1);
  scanf("%d",&amp;students[i].year);
}
printf("您可以:1.按年份查找学生资料\n2.按学号查找学生资料\n(输入1或2)");
scanf("%d",&amp;j);
if(j==1)
{
  do
  {
   printf("请输入入学年份:(输入a退出)");
   scanf("%d",&amp;Y);
   for(i=0;i&lt;10;i++)
   {
    if(students[i].year==Y)
     printf("学号:%d 姓名:%s 登记的课程:%s 入学年份:%d\n",students[i].h,students[i].name,students[i].kc,students[i].year);
   }
  }while(getchar()!='a');
}
else if(j==2)
{
  do
  {
   printf("请输入入学学号:(输入a退出)");
   scanf("%d",&amp;H);
   for(i=0;i&lt;10;i++)
   {
    if(students[i].h==H)
     printf("学号:%d 姓名:%s 登记的课程:%s 入学年份:%d\n",students[i].h,students[i].name,students[i].kc,students[i].year);
   }
  }while(getchar()!='a');
}
}
----------------解决方案--------------------------------------------------------

10年雇员 #include<stdio.h> #include<string.h> void main() { struct com { int bh;//雇员编号 char name[20];//雇员姓名 float m;//工资 }; struct date { int year; int mouth; int day; }; struct com p[5]; struct date q[5]; int i; for(i=0;i<5;i++) { printf("输入第%d位雇员编号:",i+1); scanf("%d",&p[i].bh); printf("输入第%d位雇员姓名:",i+1); scanf(" %s",p[i].name); printf("输入第%d位雇员工资:",i+1); scanf("%f",&p[i].m); printf("输入第%d位雇员进入公司的日期:(格式为:年/月/日)",i+1); scanf("%d/%d/%d",&q[i].year,&q[i].mouth,&q[i].day); if(p[i].m<=2000) p[i].m=p[i].m*(1+15/100);

else if((p[i].m>2000)&&(p[i].m<=5000)) p[i].m=p[i].m*(1+10/100); } for(i=0;i<5;i++) { if((2004-q[i].year>10)||(2004-q[i].year==10&&4-q[i].mouth>=0)||(2004-q[i].year==10&&4-q[i].mouth==0&&20-q[i].day>=0)) printf("雇员编号:%d\n雇员姓名:%s\n雇员工资:%f\n雇员进入公司的日期:(格式为:年/月/日)%d/%d/%d\n",p[i].bh,p[i].name,p[i].m,q[i].year,q[i].mouth,q[i].day); } }


----------------解决方案--------------------------------------------------------
二维数组相加
#include&lt;stdio.h&gt;
void main()
{
int a[5][5],b[5][5],c[5][5],i,j;
for(i=0;i&lt;5;i++)
{
  for(j=0;j&lt;5;j++)
  {
   printf("输入a[%d][%d]:",i,j);
   scanf("%d",&amp;a[i][j]);
  }
}
for(i=0;i&lt;5;i++)
{
  for(j=0;j&lt;5;j++)
  {
   printf("输入b[%d][%d]:",i,j);
   scanf("%d",&amp;b[i][j]);
  }
}
for(i=0;i&lt;5;i++)
{
  for(j=0;j&lt;5;j++)
  {
   c[i][j]=a[i][j]+b[i][j];
   printf("相加后的数组c[%d][%d]=%d\n",i,j,c[i][j]);
  }
}
}
----------------解决方案--------------------------------------------------------
#include&lt;stdio.h&gt;
void main()
{
int a[3][3],b[3][3],c[3][3];
int (*pa)[3],(*pb)[3],(*pc)[3],i,j;
pa=a;
pb=b;
pc=c;
for(i=0;i&lt;3;i++)
{
  for(j=0;j&lt;3;j++)
  {
   printf("请输入a[%d][%d]的值",i,j);
   scanf("%d",*(pa+i)+j);
   //printf("%d",*(pa+i)+j);
   printf("请输入b[%d][%d]的值",i,j);
   scanf("%d",*(pb+i)+j);
  }
}
for(i=0;i&lt;3;i++,pa++,pb++,pc++)
{
  for(j=0;j&lt;3;j++)
  {
   *(*pc+j)=*(*pa+j)+*(*pb+j);
   printf("c[%d][%d]=%d   ",i,j,(*pc)[j]);
  }
  printf("\n");
}
}
----------------解决方案--------------------------------------------------------
#include&lt;stdio.h&gt;
void main()
{
int i,n,z1[10],z2[10];
for(i=0;i&lt;10;i++)//接受第一组数
{
  printf("请输入第一组数的第%d个数",i+1);
  scanf("%d",&amp;z1[i]);
}
for(i=9,n=0;(i&gt;=0)&amp;&amp;(n&lt;10);i--,n++)//把第一组的数逆循环给z2
{
   z2[n]=z1[i];
}
for(n=0;n&lt;10;n++)//输出转换后的数组
  printf("数组转换后第%d个数:%d\n",n+1,z2[n]);
}
----------------解决方案--------------------------------------------------------

#include<stdio.h> int akk(int r); int(*p)(int r); void main() { int a[3]; int i,z; for(i=0;i<3;i++) { printf("输入数组a的值:",i+1); scanf("%d",&a[i]); } p=akk; z=(*p)(i);

} int akk(int r) { int i,j,num; for(i=0;i<r;i++) { for(j=r;j>0;j--) num=akk[i]; akk[i]=akk[j]; akk[j]=num; } for(i=0;i<r;i++) return akk[i]; }


----------------解决方案--------------------------------------------------------
#include&lt;stdio.h&gt;
void main()
{
int a,b;
void cj(int x,int y);
printf("请输入两个数字:");
scanf("%d%",&amp;a);
scanf("%d",&amp;b);
cj(a,b);
}
void cj(int x,int y)
{
if(x*y==1000)
  printf("***a*b=1000***\n");
else if(x*y&gt;1000)
  printf("***a*b&gt;1000***\n");
else
  printf("******这不关我的事,a*b&lt;1000哦!!!******\n");
}
----------------解决方案--------------------------------------------------------
  相关解决方案