C语言用指针求10行字符串大到小排序 求大神帮我看看代码问题

供稿:hz-xin.com     日期:2025-01-15
C语言编程,输入10个学符串 (1)对这10个字行串排序并输出 (2)找出最大字符串并输出

#include#includeint sort(char s[][999]){int i,j,k;char temp[999];for(i=0;i0){strcpy(temp,s[i]);memset(s[i],0,sizeof(s[i]));strcpy(s[i],s[j]);memset(s[j],0,sizeof(s[j]));strcpy(s[j],temp);}}}return 0;}int max(char s[][999]){int i=0,m=0;for(i=0;i0){m=i;}}return m;}int main(){int i,j,k,m,n;char s[10][999];memset(s,0,sizeof(s));for(i=0;i<10;i++)scanf("%s",s[i]);sort(s);for(i=0;i<10;i++)printf("%s
",s[i]);printf("%s
",s[max(s)]);return 0;}

学生成绩#include #include #define N 10main(){ struct student{long number;char name[10];int score;} num[N];FILE *fp;int i,j,d[N],temp; float sum=0,average;if((fp=fopen("student.txt","r"))==NULL){printf("can not open this file.
");exit(1);}for(i=0;i<N;i++){fscanf(fp,"%ld%s%d",&num[i].number,&num[i].name,&num[i].score);/*printf("%ld %s %d
",num[i].number,num[i].name,num[i].score);*/ d[i]=num[i].score;sum=sum+d[i];}average=sum/N;for(i=0;i<N-1;i++) for(j=i+1;j<N;j++) if(d[i]<d[j]) {temp=d[j];d[j]=d[i];d[i]=temp;};/*for(i=0;i<N;i++)printf("%d ",d[i]);printf("
");*/printf("学生平均分:%3.1f
",average);if (N%2!=0)printf("学生中位数:%d
",d[(N-1)/2]);else printf("学生中位数:%3.1f
",(d[N/2-1]+d[N/2])/2.0);for(i=0;i<N;i++){if(num[i].score==d[0]) printf("分数最高学生记录如下:
%ld %s %d
",num[i].number,num[i].name,num[i].score);if(num[i].score==d[N-1]) printf("分数最低学生记录如下:
%ld %s %d
",num[i].number,num[i].name,num[i].score);}fclose(fp);}

  1. 把void paixu(char *p);改为void paixu(char (*)[10]);。

  2. 把char str[10][10],*p;改为char str[10][10];。

  3. 把p=str[0]; paixu(p);两行改为paixu(str);。

  4. 把void paixu(char *p){...改为void paixu(char (*p)[10]){...。

  5. 把paixu函数中的for(j=i;j<9;j++)改为for(j=0;j<9;j++)。

  6. 把paixu函数中的strcpy(t,p+j); strcpy(p+j,p+j+1); strcpy(p+j+1,t);改为strcpy(t,p[j]); strcpy(p[j],p[j+1]); strcpy(p[j+1],t);。

不过按照“用指针”的要求,我觉得以下写法才比较切合题意——

#include "stdio.h"
#include <string.h>
int main(int argc,char *argv[]){
//void paixu(char *p);//看这里
void paixu(char **p);
printf("用指针方法写一函数对10个字符串按从大到小顺序排序
");
//char str[10][10],*p;//看这里
char str[10][10],*p[10]={str[0],str[1],str[2],str[3],str[4],str[5],str[6],str[7],str[8],str[9]};
int i;
printf("输入10行字符串:
");
for(i=0;i<10;i++)
scanf("%s",str[i]);
//p=str[0];//看这里
//paixu(p);
paixu(p);
printf("
排序后的字符串:
");
for(i=0;i<10;i++){
//printf("%s",str[i]);//看这里
printf("%s",p[i]);
printf("
");
}
return 0;
}
void paixu(char **p){
int i,j;
//char t[10];//看这里
char *pt;
for(i=0;i<9;i++){//外循环9次
for(j=0;j<9;j++){//内循环为j字符串与j后的字符串比较
if(strcmp(p[j],p[j+1])<0){//字符串j<字符串j+1 函数值<0
//strcpy(t,p[j]);strcpy(p[j],p[j+1]);strcpy(p[j+1],t);//交换字符串
pt=p[j];p[j]=p[j+1];p[j+1]=pt;
}
}
}
}

运行样例:



手机上上网

找百度问度娘

C语言编程题: 输入10个字符串,将其从大到小排序后输出。
15];while(~scanf("%c",&n)){ for(int i=0;i<10;i++){ scanf("%d",&a[i]);} getchar();if(n=='A') swap1(a,10);else swap2(a,10);for(int i=0;i<10;i++){ if(i==0)printf("%d",a[i]);else printf(" %d",a[i]);} printf("\\n");} } 运行效果:...

C语言指针变量中用选择法对十个整数按由大到小顺序排序,附加详细讲解...
关键是要把算法告诉你。这十个数,我就自己取值了,不用用户输入了。我没有实验过,实在条件所现。其实我也不知道怎么去详细讲解。下面这个是采用指针变量的,不知道,是不是你想要的,其实跟那个不用指针是同一回事,比如原来用变量s,现在用*ps。#include<stdio.h>main(){int i;int a[10]={2...

c语言对输入字符串字母顺序排序,用指针方法输出已排好序的字符串,字符...
参考代码如下:include<stdio.h> include<string.h> define N 5 define L 50 int main(){ char str[N][L],*p[N],*t;int i,j;for(i=0;i<N;++i){ scanf("%s",str[i]);p[i]=str[i];} for(i=0;i<N-1;++i)for(j=0;j<N-i-1;++j)if(strcmp(p[j],p[j+1])>0)...

用冒泡排序法对10个字符串排序,并按从小到大的顺序输出.需要用c语言...
include "stdio.h"#include "string.h"int main(){ char co[10][20]={0}; char *p[10]={NULL},*tmp=NULL; int i,j; for(i=0;i<10;i++) p[i]=co[i]; printf("请输入10个字符串:\\n"); for(i=0;i<10;i++) gets(co[i]); for(i=0;i<...

C语言:从键盘输入长度为10的字符串,除第一和最后一个字符外按降序排序...
代码文本:include "stdio.h"define N 10 void myf(char *p){ char i,j,k,n;for(n=0;p[n];n++);for(n--,i=1;i<n-1;i++){ for(j=(k=i)+1;j<n;j++)if(p[k]

编写C程序:用指针数组操作,将输入的5个字符串按从小到大的顺序输出
\/*已有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中。特殊要求:任意输入一个数列,先排序由小到大 然后再随意插入一个数,按有小到大排列 思路1:输入数接着存入数组,从新排列。(简单)思路2:排列完大小后插入(复杂)。本程序采用思路1.\/ int a[256];int i = ...

C语言:编写程序,把字符数组中的字母按由小到大 的顺序排列并输出_百 ...
include <stdio.h>#include <stdlib.h>#include <string.h>int cmp(const void *a, const void *b) { return *(char*)a - *(char*)b; \/\/ 这里记住一定要用排序的元素类型的指针做强制装换并且再取指针指向的值。}int main() { char s[] = "kjferu21398dyfkaqpoia"; qs...

急急急!!!求用指向指针的方法对N个字符串排序并输出
也就是相当于是指针在操作了。所以我给个程序,看对你有没有帮助。include<stdio.h> void main(){ char name[5][20];int i;for(i=0;i<5;i++){ printf("请输入一个字符串:");scanf("%s",name[i]);} for(i=0;i<5;i++)printf("%s\\n",name[i]);} 真想用指针数组作操作的...

c语言题目:用指向指针的方法对n个字符串排序并输出
include<stdio.h> include<string.h> int main(){ int n,i,j;char s[100][20],*p[100],*t;scanf("%d",&n);for(i=0;i<n;i++){scanf("%s",s[i]);p[i]=s[i];} for(i=0;i<n-1;i++)for(j=0;j<n-1-i;j++)if(strcmp(p[j],p[j+1])>0){t=p[j];p[j]...

C语言程序设计: 从用户输入10个整数,对其按照从小到大的顺序排序,并输...
\/\/要求任意输入10个数,然后按从小到大顺序输出 include<stdio.h> int main(){ int a[10];int i,j;int temp;printf("请输入10个整数:");for(i=0;i<10;i++){ scanf("%d",&a);} for(i=0;i<9;i++){ for(j=0;j<9-i;j++){ if(a[j]>a[j+1]){ temp=a[j];a[j]...