C语言 )输入3个整数,按由小到大的顺序输出,然后将程序改为输入3个字符串,按由小到大的顺序输出;
#include
#include
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("
please input three strings:");
scanf("%s%s%s",&a, &b, &c);
CompareChar(a1, b1, c1);//?
return 0;
}
strcmp(a,b)的返回值有三种可能:-1,0,1。分别表示比较的字符串ab(这里的符号表示字符串的字典顺序)。所以(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字节的记录。
参考资料来源:百度百科-顺序输入
if是可以没有else的,这样的情况下如果if的条件符合,则执行if语句,否则不执行,直接到下一个if。也就是说,如果a不大于b,也就是a小于b,那么就像刚刚说的,不执行这个if就是了,计算机会往下阅读程序,也就是去判断下一个if,记住一句话“if条件不符合就不执行”。else只是相当于if不符合的话其他情况下执行什么,如果没有else,那就表示,if不符合,程序保持不动。
这个程序给你举个实例讲解也许你就明白了
假设输入为1,3,4,2
1不大于3,第一个if不执行,目前顺序为1,3,4,2
1不大于4,第二个if不执行,目前顺序为1,3,4,2
1不大于2,第三个if不执行,目前顺序为1,3,4,2
3不大于4,第四个if不执行,目前顺序为1,3,4,2
3大于2,第五个if执行,实现交换,目前顺序为1,2,4,3
4大于3,第六个if执行,实现交换,最后顺序为1,2,3,4
其实你仔细想想,如果第一个if执行,实现交换,那么第二个if中的a已经是交换过后的那个较小的数。第三个同理。也就是说,前3个if执行完以后确保了第1个数是4个数字中最小的,第四第五确保第二个数在剩下的3个数中是最小的(也就是4个数字中第二小的),第6个if确保第三个数小于第四个数。这样子就实现了整个结构的排序。希望能帮到你。
#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("
please 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字节的记录。
参考资料来源:百度百科-顺序输入
你定义的swap有3个参数,但是使用的时候只写了两个
进宣洁身: 方法如下:1.从控制台读入三个数; 2.实现三个数从小到大排序: (1)将第一个数作为最小数,依次和第二,三个数进行比较.两次比较重如果有任意一个比第一个小,则将两个数交换 ; (2)在(1)步后,得到第一个数为最小数.再将第二个数与第三个数比较大小后即可实现三个数从小到大排序. 拓展资料 两种常用排序方法: 1.选择排序法:从一列数中,选择第一个作为最小数,依次和后面的数进行比较.如有比第一个数小的数,则交换两个数.最后排到该列数都倒数第二个时,这列数就从小到大排好了顺序. 2.冒泡排序法:思路与选择排序法一致.不同的是,冒泡排序将第一个作为最大数,然后再和该数后的数进行比较.
商都县19747275406: C语言:::::.对于输入的任意三个整数,将它们按从小到大的顺序输出. - ?
进宣洁身: 1 读入三个数. 2 循环比较大小,令三个数从小到大排序. 3 输出结果. 代码: #include int main() {int a,b,c,t;#define swap(m,n){t = m; m = n; n = t;}//交换值宏.scanf("%d%d%d",&a,&b,&c);//输入三个数.if(a>b) swap(a,b);if(a>c)swap(a,c);//经过以上两步,a为最小值.if(b>c)swap(b,c);//b比c小.printf("%d %d %d\n", a,b,c);//输出结果.return 0; }
商都县19747275406: c语言编写程序从键盘输入3个整数,按由小到大输出 - ?
进宣洁身: #include <stdio.h>#define swap(a, b) { t = a; a = b; b = t; } int main() {int a, b, c, t;scanf("%d%d%d", &a,&b,&c);if(a < b) swap(a, b);if(a < c) swap(a, c);if(b < c) swap(b, c);printf("%d %d %d\n", a,b,c); }
商都县19747275406: 用C语言描述对于输入的任意三个整数,将它们按从小到大的顺序输出? - ?
进宣洁身: 1、输入三个整数x,y,z,请把这三个数由小到大输出. 2、所需要的开头代码,#include "stdio.h"#include "conio.h",预处理命令,表示程序包含conio.h库文件conio.h库文件定义了通过控制台进行数据输入和数据输出的函数. 3、下面...
商都县19747275406: 用C语言输入3个整数,怎么按从小到大的顺序输出? - ?
进宣洁身: #includevoid f(int* x,int* y,int* z) { int sum=*x+*y+*z; //三个数之和 //求最大数 int tmp=(*x>*y)?*x:*y; int max=(tmp>*z)?tmp:*z; //求最小数 tmp=(*xint min=(tmp//中间的数为sum减去最大数和最小数 int mid=sum-max-min //按从小到大重新赋值 *x=min; *y=mid; *z=max }int main() { int a=10,b=-50,c=20;f(&a,&b,&c);printf("%d %d %d\n",a,b,c);return 0; }
商都县19747275406: C语言如何从键盘输入任意3个数,按从小到大的顺序输出? - ?
进宣洁身: 代码1. // 输入3个数,要求按从小到大顺序输出#include int main() { int a,b,c,t; printf("请输入三个数:"); scanf("%d%d%d",&a,&b,&c); if(a > b) { t = a; a = b; b = t; } if(a > c) { t = a; a = c; c = t; } if(b > c) { t = b; b = c; c = t; } printf("从小到大...
商都县19747275406: C语言编写程序,将任意3个数按照从小到大的顺序排序. - ?
进宣洁身: #include<stdio.h> int main() {int i,j,m;double temp;double a[3];for(m=0;m<3;m++) //输入三个数{scanf("%lf",&a[m]);}for(i=0;i<3;i++) //完成排序{for(j=i;j<3;j++){if(a[j]<a[i]){temp=a[i];a[i]=a[j];a[j]=temp;}}printf("%lf\t",a[i]);//打印结果}printf("\n");return 0; }
商都县19747275406: C语言程序设计 如何编写将三个数从小到大的程序? - ?
进宣洁身: #include<stdio.h> int main() {float a,b,c,t;printf("请输入三个数(用逗号隔开):");scanf("%f,%f,%f",&a,&b,&c);if(a>b){t=a;a=b;b=t;}//借助t,实现a和b的互换,互换后,a小于或等于bif(a>c){t=a;a=c;c=t;}//借助t,实现a和c的互换...
商都县19747275406: 用C语言编程 : 从键盘输入3个数,按从小到大输出 - ?
进宣洁身: 如果只是3个数的话 一:如果是从大到小输出的话 #includevoid main() { int x,y,z,t; scanf("%d%d%d",&x,&y,&z); if (x>y) {t=x;x=y;y=t;} /*交换x,y的值*/ if(x>z) {t=z;z=x;x=t;}/*交换x,z的值*/ if(y>z) {t=y;y=z;z=t;}/*交换z,y的值*/ printf("small to big: %...
商都县19747275406: 从键盘输入三个整数,要求从小到大输出这三个整数 .用C语言,谢了 - ?
进宣洁身: void main() {int a,b,c;printf("input 3 nums:\n");scanf("%d%d%d",&a,&b,&c); int temp;if (a>b){temp = a;a = b;b = temp;}if (b>c){temp = c;c = b;b = temp;if (b<a){temp = a;a = b;b = temp;}}printf("result:%d %d %d",a,b,c); }