c语言 这段代码 为什么老是输出最小的数而不是最大的数?

作者&投稿:亓剑 (若有异议请与网页底部的电邮联系)
C语言中,三个数输出最大的数值的程序。有一部分不理解~~~

第一张图:第一步是假设a 为最大值,第二部判断比较b与max的值,如果b>max成立,则把值付给max,否则执行第三部,而第三部是比较c与max的值,如果成立,则把值赋给max,否则不执行,整个程序,max总是取a,b,c中最大的值。

#include
#include
#include

int main()
{
int n=100;
int a[1000],i,j,T,tmp;
srand(unsigned(time(NULL)));
for(i=0;i<n;i++)
a[i]=i;
T=n*10;
while(T--)
{
i=rand()%n;
j=rand()%n;
tmp=a[i];
a[i]=a[j];
a[j]=tmp;
}
for(i=0;i<n;i++)printf("%d ",a[i]);
puts("");
return 0;
}

这段代码不是总是输出最小值,而是总是输出你最先输入的那个数!C语言中,a,b的值是在scanf()语句中赋值的,不能以实参的形式传递给max()函数。你可以用C++中的输入语句,把scanf()语句换成cin>>a>>b;在头文件#include<iostream.h>中。其它不变,我试了,可以的。或者,不用输入语句,直接给a,b赋值,即int a=2,b=6;也可以。

scanf("%d,%d",&a,&b);
输入时要求输入两个整数的中间以逗号间隔,否则无法正确接收数据,相当于没给变量b赋值,最后输出的永远是第一个数。
补充问题:
将求最大数写成函数,方便代码重用。即如果你第二次第三次需要求最大值的话直接调用函数max就可以了,而不用再次写那么多代码。

3,4
4
Press any key to continue
4,3
4
Press any key to continue

#include<stdio.h>
int main()
{
int max(int x,int y);
int a,b,c;
scanf("%d,%d",&a,&b); //记得输入逗号 否则后面的是很小的负数 所以你前面的总是最大
c=max(a,b);
printf("%d\n",c);
return 0;

}
int max(int x,int y)
{
int z;
if(x>y)z=x;
else z=y;
return(z);
}

下面补充的也可以

上面的是用子函数解决

补充里的是在main函数中解决

实际上没什么区别

书上可能想巩固你用子函数和

从子函数返回结果的用法

因此用上面的做例子的

你这样写程序是可以达到目的,只是不优化
书本上那样写可以移植,
C语言的好处就是移植性比较强,
你那样写以后就不好改动不好移植了

这是为了你以后学习风格相适应……
代码模块化,方便大的程序软件编写。


郧西县19863317881: c语言问题这一段代码为什么无论输入多少都输出原值啊 -
袁狭妥布: if(10

郧西县19863317881: c语言,三个数求最大值为什么老是输出第一个数? -
袁狭妥布: 说明你输入的比较逻辑有问题.看看课本,或者查一查这个程序是怎么输的.

郧西县19863317881: 关于C语言的程序为什么总是输出1 程序如下 -
袁狭妥布: 把输入改为scanf("%f%d",&x,&n);在试试 如果不改的话输入的时候就要把两个数之间中加一个”,“

郧西县19863317881: c语言编程,三个数求最大值,总是3129,为什么呢 -
袁狭妥布: scanf(“%d,%d,%d",&a,&b,&c) 四个参数 第一个参数:“%d,%d,%d”指示输入三个整数,中间用逗号隔开 第二个参数:&a,对应第一个%d,表明输入一个整数之后,把它的值赋给a 第三个参数:&b,对应第二个%d,表明输入一个整数之后...

郧西县19863317881: 我的c语言为什么总是输出0.00? -
袁狭妥布: scanf("%lf,%d,%lf", &rate, &year, &capital); 你的代码里输入格式是%lf,%d,%lf,中间有逗号,所以输入的时候也要有逗号 估计你输入的时候没加逗号(注意是西文逗号),而是用空格分隔的,要不加逗号用空格分隔的话,就把%lf,%d,%lf中间的逗号去掉,这样就可以用空格分隔输入了 我试着运行了下: 年化15%,5年翻倍,没错

郧西县19863317881: C语言!!!为什么我输入数字的时候, 输出的总是第一个数?哪里出了问题 -
袁狭妥布: scanf("%d%d",&a,&b); 两个%d中间那个逗号不能要,语法错误了

郧西县19863317881: C语言字符串数组找一个最长的字符串,下面这段代码一直输出第一个,是什么问题 -
袁狭妥布: 哦 char* fun(char (*sq)[M]) { int i; char *sp;sp=sq[0];for(i=0;i<N;i++)if(strlen( sp)<strlen(sq[i]))sp=sq[i] ;return *(sq);//要返回sp不是sq啊...这变量订得这麽像干嘛 }

郧西县19863317881: 关于c语言的输出问题,我的代码为什么一运行就无限输出了? -
袁狭妥布: 输出后需要清空输入流,结束时ctrl+z

郧西县19863317881: c语言循环中可以输出最后就无法输出 -
袁狭妥布: 第一位回答你的朋友已经点出来了,很可能是你这段代码运行到while循环时,因为执行条件成立,所以一直在执行while循环内的输出语句,没有跳出循环执行最后的输出b.你要把while循环执行条件改下以保证跳出循环(EOF是文件末尾标识,例如txt文件,你应该是用键盘输入的,所以检测不到EOF就跳不出循环).

郧西县19863317881: C语言 求三位数的水仙花数,为什么我的程序总是输出一个1000在最后面??在线跪求答案!! -
袁狭妥布: #include main() { int a,b,c,n; for(n=100;n { a=n/100; b=n/10%10; c=n%10; if (n==a*a*a+b*b*b+c*c*c) printf("%d\n",n); } }

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网