C语言 DLUT 作业九

该博客介绍了三个C语言程序实现:一是处理竞赛成绩,包括排序、有效评分计算和平均分排除最高最低分;二是字符串查找函数,包括计算子串出现次数和获取子串起始位置;三是字符串连接与比较,实现了字符串拼接和字符级比较。这些程序展示了C语言在数据处理和字符串操作方面的基本应用。
摘要由CSDN通过智能技术生成

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]);
    }
}*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

残夜.寒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值