C语言编程,高手请指教。

来源:百度知道 编辑:UC知道 时间:2024/05/10 11:34:42
下面程序是实现三个字符串由大到小排序的,但有错误,请指教如何改。
#include<stdio.h>
#define N 100
void big(char *o,char *p,char *q)
{
int i;
for(i=0;i<N;i++)
{
if(*(o+i)>*(p+i))
{
if(*(q+i)>*(o+i))
printf("%s\n%s\n%s",*q,*o,*p);break;
if(*(q+i)>*(p+i))
printf("%s\n%s\n%s",*o,*q,*p);break;
if(*(q+i)<*(p+i))
printf("%s\n%s\n%s",*o,*p,*q);break;
}
else
{
if(*(q+i)>*(p+i))
printf("%s\n%s\n%s",*q,*p,*o);break;
if(*(q+i)>*(o+i))
printf("%s\n%s\n%s",*p,*q,*p);break;
if(*(q+i)<*(o+i))
printf("%s\n%s\n%s",*q,*o,*p);break;
}
}
}
void main()
{
char a[100],b[100],c[100];
printf("请输入三串字符");
g

如果你希望比较象"jimmyi"和"howdy"这样的字符的大小,按照你的算法是遍历其中的每一个字符并比较其ASCⅡ码的大小然后将对应的"字符"打出,如:
h j
i o
m w
d m
......
这种方法有个问题是如果某3个字符串的所含可见字符的数量不同呢?这种方法的话你就必须把输入3个大小相同的字符串,而且每个字符串的大小都和SIZE相同,否则空着的地方就会打出乱码。
如果是这样,我编的代码如下:

#include<stdio.h>
#define SIZE 10
void big(char *o,char *p,char *q){
int i;
char temp_max;
char temp_nor;
char temp_min;
for(i = 0; i < SIZE; ++i){
temp_max = (o[i] > p[i] ? (o[i] > q[i] ? o[i] : q[i]) : (p[i] > q[i] ? p[i] : q[i]));
temp_min = (o[i] <= p[i] ? (o[i] <= q[i] ? o[i] : q[i]) : (p[i] <= q[i] ? p[i] : q[i]));
temp_nor = (temp_max == o[i] ? (temp_min == p[i] ? q[i] : p[i]) : (temp_max == p[i] ?
(temp_min == q[i] ? o[i] : q[i] ) : (temp_min == p[i] ? q[i]: p[i])));

printf("%c %c %c\n",temp_max,temp_nor,temp_min);
}
}
int main()
{
char a[SIZE],b[