成绩结构体 #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<stdio.h>
#include<string.h>
#include<stdlib.h>
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!=&a[0];pa--,pb--)
{
if(*pa!=*pb)
{
printf("%s没有出现在%s的末尾",a,b);
exit(0);
}
}
printf("%s出现在%s的末尾",a,b);
}
----------------解决方案--------------------------------------------------------
学生信息
#include<stdio.h>
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<10;i++)
{
printf("输入第%d名学生的学号:",i+1);
scanf("%d",&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",&students[i].year);
}
printf("您可以:1.按年份查找学生资料\n2.按学号查找学生资料\n(输入1或2)");
scanf("%d",&j);
if(j==1)
{
do
{
printf("请输入入学年份:(输入a退出)");
scanf("%d",&Y);
for(i=0;i<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",&H);
for(i=0;i<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<stdio.h>
void main()
{
int a[5][5],b[5][5],c[5][5],i,j;
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
printf("输入a[%d][%d]:",i,j);
scanf("%d",&a[i][j]);
}
}
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
printf("输入b[%d][%d]:",i,j);
scanf("%d",&b[i][j]);
}
}
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
c[i][j]=a[i][j]+b[i][j];
printf("相加后的数组c[%d][%d]=%d\n",i,j,c[i][j]);
}
}
}
----------------解决方案--------------------------------------------------------
#include<stdio.h>
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<3;i++)
{
for(j=0;j<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<3;i++,pa++,pb++,pc++)
{
for(j=0;j<3;j++)
{
*(*pc+j)=*(*pa+j)+*(*pb+j);
printf("c[%d][%d]=%d ",i,j,(*pc)[j]);
}
printf("\n");
}
}
----------------解决方案--------------------------------------------------------
#include<stdio.h>
void main()
{
int i,n,z1[10],z2[10];
for(i=0;i<10;i++)//接受第一组数
{
printf("请输入第一组数的第%d个数",i+1);
scanf("%d",&z1[i]);
}
for(i=9,n=0;(i>=0)&&(n<10);i--,n++)//把第一组的数逆循环给z2
{
z2[n]=z1[i];
}
for(n=0;n<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<stdio.h>
void main()
{
int a,b;
void cj(int x,int y);
printf("请输入两个数字:");
scanf("%d%",&a);
scanf("%d",&b);
cj(a,b);
}
void cj(int x,int y)
{
if(x*y==1000)
printf("***a*b=1000***\n");
else if(x*y>1000)
printf("***a*b>1000***\n");
else
printf("******这不关我的事,a*b<1000哦!!!******\n");
}
----------------解决方案--------------------------------------------------------