C语言 DLUT 作业九
随便做做
1、成绩
#include<stdio.h>
#include<string.h>
void SortName(char *name[], int m);
int ReadScore(int score[], int n);
double MaxMin(int* score, int m, int *max, int *min);
int main()
{
int m,n,i,j;
int cnt=0;
char name[1000][1000];
char *name1[1000];
int score[1000];
double fin[1000];
int max,min;
cansai: printf("请输入参赛选手数(选手数大于3):\n");
scanf("%d",&m);
if (m<3)
{
printf("输入的选手数有误\n");
goto cansai;
}
caipan: printf("请输入评委数(评委数大于3):\n");
scanf("%d",&n);
if (n<3)
{
printf("输入的裁判数有误\n");
goto caipan;
}
printf("请输入每位选手的姓名:\n");
getchar();
while(cnt < m && gets(name[cnt] )!= NULL && name[cnt][0] !='\0')
{
name1[cnt] =name[cnt];
cnt++;
}
SortName(name1,cnt);
printf("接下来请按照参赛顺序输入每位选手的评分\n\n");
for(i=0;i<m;i++)
{
printf("请输入每位裁判给第%d位选手的评分:\n",i+1);
for(j=0;j<n;j++)
{
scanf("%d",&score[j]);
}
int good=ReadScore(score,n);
printf("第%d位选手的有效评分数个数为:%d\n",i+1,good);
fin[i]=MaxMin(score,good,&max,&min);
printf("去掉一个最高分:%d,去掉一个最低分:%d,第%d位选手的得分为:%.2lf\n",max,min,i+1,fin[i]);
}
printf("\n");
for(i=1;i<m;i++)
{
for(j=0;j<m-i;j++)
{
if(fin[j]<fin[j+1])
{
double t=fin[j];
fin[j]=fin[j+1];
fin[j+1]=t;
char *temp = name1[j];
name1[j] = name1[j+1];
name1[j+1]= temp;
}
}
}
printf("最终得分结果为\n");
for(i=0;i<3;i++)
{
printf("第%d名:",i+1);
puts(name1[i]);
printf("分数为:%.2lf\n",fin[i]);
}
}
void SortName(char *name[], int m)
{
char *temp;
int i,j;
for (i=0; i< m-1;i++ )
{
for (j = i+1;j<m;j++)
{
if(strcmp(name[i] ,name[j] ) > 0)
{
temp = name[i];
name[i] = name[j];
name[j]= temp;
}
}
}
printf("选手的参赛顺序为:\n");
for (i=0;i <m ;i++)
{
printf("第%d位参赛选手:",i+1);
puts(name[i]);
}
}
int ReadScore(int score[], int n)
{
int good=0;
int j;
for(j=0;j<n;j++)
{
if(score[j]>=1&&score[j]<=10)
{
score[good]=score[j];
good++;
}
}
return good;
}
double MaxMin(int* score, int m, int *max, int *min)
{
double sum=0.0;
int i,j;
for(i=1;i<m;i++)
{
for(j=0;j<m-i;j++)
{
if(score[j]>score[j+1])
{
int t=score[j];
score[j]=score[j+1];
score[j+1]=t;
}
}
}
*min=score[0];
*max=score[m-1];
for(i=1;i<m-1;i++)
{
sum+=score[i];
}
return sum/(m-2);
}
2、字符串查找实现
#include<stdio.h>
#include<string.h>
int subString(char* pStr,char* pSub)
{
int count=0;
int len=strlen(pSub);
while(*pStr!='\0')
{
if(strncmp(pStr,pSub,len)==0)
{
count++;
pStr=pStr+1;
}
else
{
pStr=pStr+1;
}
}
return count;
}
char* SubString(char* pStr,char* pSub)
{
int len=strlen(pSub);
while(*pStr!='\0')
{
if(strncmp(pStr,pSub,len)==0)
return pStr;
else
{
pStr=pStr+1;
}
}
return NULL;
}
int main()
{
char pStr[100]={0},pSub[100]={0};
printf("please input pStr:\n");
gets(pStr);
printf("please input pSub:\n");
gets(pSub);
printf("子串出现次数为:%d",subString(pStr,pSub));
printf("\n");
printf("第一个子串地址为:%p",SubString(pStr,pSub));
}
3、字符串连接和比较实现
#include<stdio.h>
#include<string.h>
int strConnect(char* pStr1,int n,char* pStr2)
{
int i,j;
int len1=strlen(pStr1);
int len2=strlen(pStr2);
n=len1+len2;
for(i=len1,j=0;i<=n;i++,j++)
{
pStr1[i]=pStr2[j];
}
return n;
}
int strCompare(char* pStr1,char* pStr2)
{
int p=2;
if(pStr1==NULL||pStr2==NULL)
printf("错误");
while(*pStr1!='\0'&&*pStr2!='\0'&&*pStr1==*pStr2)
{
pStr1++;
pStr2++;
}
if((*pStr1!='\0'&&*pStr2=='\0')||(*pStr1>*pStr2))
p=1;
if((*pStr2!='\0'&&*pStr1=='\0')||(*pStr2>*pStr1))
p=-1;
else
p=0;
return p;
}
int main()
{
int n,i,p;
char pStr1[1000],pStr2[1000];
printf("输入字符串1:\n");
scanf("%s",pStr1);
printf("输入字符串2:\n");
scanf("%s",pStr2);
p=strCompare(pStr1,pStr2);
if(p==1)
printf("%s>%s",pStr1,pStr2);
else if(p==-1)
printf("%s<%s",pStr1,pStr2);
else
printf("%s=%s",pStr1,pStr2);
printf("\n");
n=strConnect(pStr1,n,pStr2);
for(i=0;i<n;i++)
{
printf("%c",pStr1[i]);
}
}
/*#include<stdio.h>
#include<string.h>
int strConnect(char* pStr1,int n,char* pStr2)
{
int len1=strlen(pStr1),len2=strlen(pStr2);
int i,j;
n=len1+len2;
for(i=len1,j=0;i<n+1;i++,j++)
{
pStr1[i]=pStr2[j];
}
return n;
}
int main()
{
int n,i;
char pStr1[1000],pStr2[100];
printf("输入字符串1:\n");
scanf("%s",pStr1);
printf("输入字符串2:\n");
scanf("%s",pStr2);
n=strConnect(pStr1,1000,pStr2);
for(i=0;i<n;i++)
{
printf("%c",pStr1[i]);
}
}*/