输入三个整数,按由小到大的顺序输出,然后将程序改为:输入三个字符串,按由小到大的顺序输出。

#include <stdio.h>
#include <string.h>
void CompareInt(int* a, int* b, int* c)
{
if( *a >= *b && *a >= *c )
{
if( *b >= *c )
{
printf("%d %d %d", *c, *b, *a);
}
else
{
printf("%d %d %d", *b, *c, *a);
}
}
if( *b >= *a && *b >= *c )
{
if( *a >= *c )
{
printf("%d %d %d", *c, *a, *b);
}
else
{
printf("%d %d %d",*a, *c, *b);
}
}
if( *c >= *a && *c >= *b )
{
if( *a >= *b )
{
printf("%d %d %d",*b, *a, *c);
}
else
{
printf("%d %d %d",*a, *b, *c);
}
}
}
void CompareChar(char* a, char* b, char* c)
{
bool key = false;
if( (strcmp(a,b)==1||strcmp(a,b)==0) && (strcmp(a,c)==1||strcmp(a,c)==0) )//strcmp(a,c)==0?
{
if(strcmp(b,c)==1 || strcmp(b,c)==0)
{
printf("%s %s %s",c, b, a);
key = true;
}
else
{
printf("%s %s %s",b, c, a);
key = true;
}
}
if( (strcmp(b,a)==1||strcmp(b,a)==0) && (strcmp(b,c)==1||strcmp(b,c)==0) )
{
if(key)
{}
else if(strcmp(a,c)==1 || strcmp(a,c)==0)
{
printf("%s %s %s",c,a,b);
key=true;
}
else
{
printf("%s %s %s",a,c,b);
key=true;
}
}
if((strcmp(c,a)==1||strcmp(c,a)==0) && (strcmp(c,b)==1||strcmp(c,b)==0))
{
if(key)
{}
else if(strcmp(a,b)==1||strcmp(a,b)==0)
{
printf("%s %s %s",b,a,c);
}
else
{
printf("%s %s %s",a,b,c);
}
}
}
int main(void)
{
int a = 0, b = 0, c = 0;
printf("please input three number:");
scanf("%d %d %d",&a, &b, &c);
CompareInt(&a, &b, &c);//这一部分以前是注释掉的。
/*char a[20]="frankzjx",b[20]="zjx",c[20]="true";*/
printf("please input three number:");
scanf("%s%s%s",&a, &b, &c);
CompareChar(a, b, c);//?
return 0;
}
这个程序有点小问题,请高手修改下。
还有if( (strcmp(a,b)==1||strcmp(a,b)==0) && (strcmp(a,c)==1||strcmp(a,c)==0) )这句什么意思? (strcmp(a,b)==1|为什么==1,==0?

#include <stdio.h>

#include <string.h>

void CompareInt(int* a, int* b, int* c)

{

if( *a >= *b && *a >= *c )

{

if( *b >= *c )

{

printf("%d %d %d", *c, *b, *a);

}

else

{

printf("%d %d %d", *b, *c, *a);

}

}

if( *b >= *a && *b >= *c )

{

if( *a >= *c )

{

printf("%d %d %d", *c, *a, *b);

}

else

{

printf("%d %d %d",*a, *c, *b);

}

}

if( *c >= *a && *c >= *b )

{

if( *a >= *b )

{

printf("%d %d %d",*b, *a, *c);

}

else

{

printf("%d %d %d",*a, *b, *c);

}

}

}

void CompareChar(char* a, char* b, char* c)

{

bool key = false;

if( (strcmp(a,b)>=0 && strcmp(a,c)>=0) )//strcmp(a,c)==0?

{

if(strcmp(b,c)>=0)

{

printf("%s %s %s",c, b, a);

key = true;

}

else

{

printf("%s %s %s",b, c, a);

key = true;

}

}

if( (strcmp(b,a)>=0) && (strcmp(b,c)>=0) )

{

if(key)

{}

else if(strcmp(a,c)>=0)

{

printf("%s %s %s",c,a,b);

key=true;

}

else

{

printf("%s %s %s",a,c,b);

key=true;

}

}

if((strcmp(c,a)>=0) && (strcmp(c,b)>=0))

{

if(key)

{}

else if(strcmp(a,b)>=0)

{

printf("%s %s %s",b,a,c);

}

else

{

printf("%s %s %s",a,b,c);

}

}

}

int main(void)

{

int a = 0, b = 0, c = 0;

printf("please input three numbers:");

scanf("%d %d %d",&a, &b, &c);

CompareInt(&a, &b, &c);//这一部分以前是注释掉的。

char a1[20],b1[20],c1[20];

printf("\nplease input three strings:");

scanf("%s%s%s",&a, &b, &c);

CompareChar(a1, b1, c1);//?

return 0;

}

strcmp(a,b)的返回值有三种可能:-1,0,1。分别表示比较的字符串a<b,a=b,a>b(这里的符号表示字符串的字典顺序)。所以(strcmp(a,b)==1||strcmp(a,b)==0就相当于整数的a >= b

按照字符串的字典顺序frank<true<zjx,比较的规则是先比第一个字母,如果相同比第二个字母。这几个字符串第一个字母就可以确定顺序 f < t < z

if (key)这个key是一个标志位,如果之前已经比较出来了就设置为true,如果之前的if里已经设置好了,那么后面的if就不会执行任何东西了。这种写法完全没有必要,用if else嵌套一下会更好。

扩展资料:

非格式化顺序I/O处理器假定是128字节的记录,任何非格式化的一个顺序I/O文件的I/O把记录指针定位在128字节物理记录的结束处,如果所读的字节数不同于原来的字节数,就可能产生不希望的结果。

例如:假定几个180字节的记录写入一个非格式化顺序文件。并假定有100个字节是从文件中第180个字节的记录中读,那么,这100个字节的记录被输入并赋值给I/O列表中的元素。记录指针则定位在下一个128字节物理记录的开始。注意,这将导致在随后的读语句中开始读时,读了额外的数据,而不会跳过额外的数据。

避免这种情况发生的最好方法是保持输入记录和输出记录长度一样。如果遵守简单的预防措施,则利用非格式化顺序I/O就可以传输大于128字节的记录。 

参考资料来源:百度百科-顺序输入

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-09-29

已经修改完成:

#include <stdio.h>
#include <string.h>
void CompareInt(int* a, int* b, int* c)
{
if( *a >= *b && *a >= *c )
{
if( *b >= *c )
{
printf("%d %d %d", *c, *b, *a);
}
else
{
printf("%d %d %d", *b, *c, *a);
}
}
if( *b >= *a && *b >= *c )
{
if( *a >= *c )
{
printf("%d %d %d", *c, *a, *b);
}
else
{
printf("%d %d %d",*a, *c, *b);
}
}
if( *c >= *a && *c >= *b )
{
if( *a >= *b )
{
printf("%d %d %d",*b, *a, *c);
}
else
{
printf("%d %d %d",*a, *b, *c);
}
}
}
void CompareChar(char* a, char* b, char* c)
{
bool key = false;
if( (strcmp(a,b)>=0 && strcmp(a,c)>=0) )//strcmp(a,c)==0?
{
if(strcmp(b,c)>=0)
{
printf("%s %s %s",c, b, a);
key = true;
}
else
{
printf("%s %s %s",b, c, a);
key = true;
}
}
if( (strcmp(b,a)>=0) && (strcmp(b,c)>=0) )
{
if(key)
{}
else if(strcmp(a,c)>=0)
{
printf("%s %s %s",c,a,b);
key=true;
}
else
{
printf("%s %s %s",a,c,b);
key=true;
}
}
if((strcmp(c,a)>=0) && (strcmp(c,b)>=0))
{
if(key)
{}
else if(strcmp(a,b)>=0)
{
printf("%s %s %s",b,a,c);
}
else
{
printf("%s %s %s",a,b,c);
}
}
}
int main(void)
{
int a = 0, b = 0, c = 0;
printf("please input three numbers:");
scanf("%d %d %d",&a, &b, &c);
CompareInt(&a, &b, &c);//这一部分以前是注释掉的。
char a1[20],b1[20],c1[20];
printf("\nplease input three strings:");
scanf("%s%s%s",&a, &b, &c);
CompareChar(a1, b1, c1);//?
return 0;
}

本回答被网友采纳
第2个回答  2013-01-23
CompareChar(a, b, c);//?
这个函数CompareChar要求参数是三个char*类型的,abc是整数类型的,当然不行了。像你注释那样定义不就行了么?
/*char a[20]="frankzjx",b[20]="zjx",c[20]="true";*/

主函数改成这样就行了
int main(void)
{
char a[20]="frankzjx",b[20]="zjx",c[20]="true";
printf("please input three number:");
scanf("%s%s%s",&a, &b, &c);
CompareChar(a, b, c);
return 0;
}
你弄清楚strcmp函数的含义就明白是什么意思了:strcmp(a,b)的返回值有三种可能:-1,0,1。分别表示比较的字符串a<b,a=b,a>b(这里的符号表示字符串的字典顺序)。所以(strcmp(a,b)==1||strcmp(a,b)==0就相当于整数的a >= b追问

谢谢你,程序运行了下:
please input three number:frankzjx zjx true a b c
frankzjx true zjx请按任意键继续. . .a>b, a>c, bb, a>c, b<c
结果应是:zjx true frank
please input three number:acbkdf trujdfj abc
abc acbkdf trujdfj请按任意键继续. . .这是对的。咋回事?

追答

你输入什么了?结果是什么?不要粘贴不必要的东西,可以截个图。你的代码就是从小到大排序的,结果应该是对的。

追问

我输入三个字符串:frankzjx  zjx  true,他输出的结果是:frankzjx  true  zjx
我输入:frank  zjx  true,输出的结果是:frank  true  zjx
这两个不是从大到小了吗,所以我认识它不对,问一下你,呵呵。

还有:

if(key)
{}

这一句代码是什么意思?

追答

按照字符串的字典顺序frank<true<zjx,比较的规则是先比第一个字母,如果相同比第二个字母。这几个字符串第一个字母就可以确定顺序 f < t < z
if (key)这个key是一个标志位,如果之前已经比较出来了就设置为true,如果之前的if里已经设置好了,那么后面的if就不会执行任何东西了。这种写法完全没有必要,用if else嵌套一下会更好,你可以自己精简一下这段代码

本回答被提问者采纳

输入三个整数,按由小到大的顺序输出,然后将程序改为:输入三个字符串,按...
include <stdio.h> include <string.h> void CompareInt(int* a, int* b, int* c){ if( *a >= *b && *a >= *c ){ if( *b >= *c ){ printf("%d %d %d", *c, *b, *a);} else { printf("%d %d %d", *b, *c, *a);} } if( *b >= *a && *b >= *c...

C语言 )输入3个整数,按由小到大的顺序输出,然后将程序改为输入3个...
include <stdio.h> include <string.h> void CompareInt(int* a, int* b, int* c){ if( *a >= *b && *a >= *c ){ if( *b >= *c ){ printf("%d %d %d", *c, *b, *a);} else { printf("%d %d %d", *b, *c, *a);} } if( *b >= *a && *b >= *c...

输入3个整数按由大到小的顺序输出输入三个整数按由小到大的顺序输出
1、#includeint max(int x,int y){ int z; z=(x>y)?x:y; return z;}int min(int x,int y){ int z; z=(xy) {temp=x;x=y;y=temp;} if(x>z) {temp=x;x=z;z=temp;} if(y>z) {temp=y;y=z;z=temp;} s=y; return s;}void function(int m[...

...比较它们的大小,并将它们按由小到大的顺序输出,要求用函数,指针实 ...
3、添加main函数。 4、定义x, y, z, t。 5、使用scanf给定义的变量赋值。 6、使用printf输入。 7、运行程序,可以看到输入的3个字符串,比较它们的大小,并将它们按由小到大的顺序输出。 已赞过 已踩过< 你对这个回答的评价是? 评论 收起 推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度...

C语言问题 输入三个字符串,按由小到大的顺序输出
1、修改代码 char temp[100];temp==q1;q1==q2;q2==temp;==换成=,=才是赋值运算符。2、换用其他方法 可以使用三个数组,或者是一个二维数组来存储字符串,同时定义一个指针数组,指向三个字符串的首地址,然后对指针数组进行排序。

...输入的任意三个整数,将它们按从小到大的顺序输出?
1、输入三个整数x,y,z,请把这三个数由小到大输出。2、所需要的开头代码,#include "stdio.h"#include "conio.h",预处理命令,表示程序包含conio.h库文件conio.h库文件定义了通过控制台进行数据输入和数据输出的函数。3、下面这个代码是关键 int x,y,z,t; scanf("%d%d%d",&x,&y,&z)...

输入3个字符串,按由小到大的顺序输出。(用指针方法处理)
首先,程序会提示用户输入三个字符串,然后通过strcmp函数进行比较,如果前一个字符串大于后一个,就使用swap函数交换它们的位置,这个过程重复三次,确保三个字符串的顺序排列。swap函数的作用是临时存储一个字符串,然后将另一个字符串的内容复制到原位置,再将存储的内容复制回去,实现了字符串的交换。...

vb编程,任意输入3个整数,按照由小到大排序输出.(代码纠错)
a = Text1.Text ,这时候VB自动认为你定义了a为字符串变量。所以,当你进行声明 Dim a, b, c As Integer 的时候,就发生了“当前范围内的声明重复”,因为a已经隐式声明过了。b、c也一样。解决办法就是:将声明语句放在变量使用之前。改成这样:Dim a, b, c As Integer a = Text1.Text ...

vb编程,任意输入3个整数,按照由小到大排序输出.(代码纠错)
a = CInt(Text1.Text)b = CInt(Text2.Text)c = CInt(Text3.Text)猜你是想显示排序的结果 d="c,b,a"应该改成 d=c1 & "," & b1 & "," & a1 另外,最后一行 d = Text4.Text 应该改为 Text4.Text=d 还有,不用这么麻烦 可用 a1=workshrrtfunction.max(a,b,c)c1=...

C语言编程实现:利用指针,输入3个整数,按由小到大的顺序输出。
<<"按由小到大顺序输出:"<<'\\n'<<a<<'\\n'<<b<<'\\n'<<c<<'\\n';return0;} 写法二、(交换指针指向的地址):include<iostream> usingnamespacestd;intmain(){ inta,b,c;int*p1,*p2,*p3;int*temp;cout<<"输入3个整数:"<<endl;cin>>a>>b>>c;p1=&a;p2=&b;p3=&c;if...

相似回答