c语言问题求解
c语言问题求解这程序看不明白,能否有高手一部部解释这个程序怎么运行??为什么x同时赋给amin和amax??...
c语言问题求解这程序看不明白,能否有高手一部部解释这个程序怎么运行??为什么x同时赋给amin和amax??
展开
2018-08-04
展开全部
答案
①x>=0 ②x < amin
为什么x同时赋给amin和amax?
并不是同时赋给amin和amax,每次只能执行一个if分支。对于每一次循环只能是要么执行amax=x,要么执行amin=x。只不过是一个while循环判断输入的这个数字是不是最大值或者最小值而已,这样一次循环办能两个事情,方便。不可能出现一个数既比最大值要大还比最小值最小。不明白可以往下看。
解析
这个题让找出所输入的一组数据中的最大值和最小值。这个题的思路是使用了打擂台算法。打擂台算法就是可以解决最大值和最小值问题。算法思路:默认设置所输入的第一个数字就是最大值。其后,对于每次输入的数字都和最大值进行比较,如果说当前值都比最大值都大了,那么这个值就新的最大值。最小值也一样:设置第一个数为最小值,对其后的每一个数字都和这个默认最小值进行比较,如果当前值都比最小值都还小了,那么这个值就是新的最小值。所以会有这两条语句:
if(x > amax) amax = x;
上面就是比较语句,对于所输入的数值,和amax最大值比较,如果比最大值要大,就把当前值x赋予给amax,此时最大值被更新了。第二如果x比最小值都要小,就把当前x赋予给amin,此时最小值被更新了。所以这里并不是说x同时赋给了amax和amin,这个两个if语句每次循环只能走一个。如果还不明白自己可以拿笔拿纸画一画,一画就明白。
if(x < amin) amin = x;
展开全部
1.无正确答案,可能把逗号打成分号了
main(int
argc,char
*argv[]
);
2.选C
3.选B
4.选B
5.选D
6.暂不讨论,后面给出
7.选D
8.选C
9.选C
10.选B
下面给出几个有异议的题目的分析
6.题目分析如下:
int
*p1,*p2,m=5,n;
A、p1=&m;p2=&p1;//p1本身就是个指针,&p1则是取这个指针的地址
实际上,p1是int*类型的,而&p1是int**类型的,至于这个,你看看指向指针的指针就明白了
也就是说,这条赋值语句是将int**类型的值赋给int*类型,而编译器不能执行这种转换,所以错误
B.p1=&m;p2=&n;*p1=*p2;
//这个会涉及到你的n是在主函数里还是在主函数外定义的,如果在主函数外定义,也就是说它具有全局作用域,则n是被默认初始化为0,那么,两个指针p1和p2都进行了初始化,就是正确的,而如果n是在主函数内定义的,那么n是未被初始化的,那么你引用n(即*p2)则引用的是一块不确定的内存空间,这个是运行时错误.这里,p2是未被初始化的,它是个悬挂指针或者说是野指针
C.p1=&m;p2=p1;
//这个没啥说的.p1和p2都初始化为指向同一个变量m的指针,所以正确
D.p1=&m;*p2=*p1;
//p2是未被初始化的,也就是说,它是悬挂指针或野指针,你用*p2引用的将是一块不确定的内存空间,你通过赋值语句,将会改写你的*p2所引用的这块内存空间所存放的内容,如果这块内存空间恰好是某个其他应用程序的,那么你改写了它的内容,可能会导致这个应用程序不能正常运行.
10.题目也有异议,分析一下
楼上有个选A的,我来说下为什么你的错了
就一句话,你没考虑指针的移动,即这条语句,可能被你无意忽视了
p+=3;
PS;至于其他的,就没啥好说的了
main(int
argc,char
*argv[]
);
2.选C
3.选B
4.选B
5.选D
6.暂不讨论,后面给出
7.选D
8.选C
9.选C
10.选B
下面给出几个有异议的题目的分析
6.题目分析如下:
int
*p1,*p2,m=5,n;
A、p1=&m;p2=&p1;//p1本身就是个指针,&p1则是取这个指针的地址
实际上,p1是int*类型的,而&p1是int**类型的,至于这个,你看看指向指针的指针就明白了
也就是说,这条赋值语句是将int**类型的值赋给int*类型,而编译器不能执行这种转换,所以错误
B.p1=&m;p2=&n;*p1=*p2;
//这个会涉及到你的n是在主函数里还是在主函数外定义的,如果在主函数外定义,也就是说它具有全局作用域,则n是被默认初始化为0,那么,两个指针p1和p2都进行了初始化,就是正确的,而如果n是在主函数内定义的,那么n是未被初始化的,那么你引用n(即*p2)则引用的是一块不确定的内存空间,这个是运行时错误.这里,p2是未被初始化的,它是个悬挂指针或者说是野指针
C.p1=&m;p2=p1;
//这个没啥说的.p1和p2都初始化为指向同一个变量m的指针,所以正确
D.p1=&m;*p2=*p1;
//p2是未被初始化的,也就是说,它是悬挂指针或野指针,你用*p2引用的将是一块不确定的内存空间,你通过赋值语句,将会改写你的*p2所引用的这块内存空间所存放的内容,如果这块内存空间恰好是某个其他应用程序的,那么你改写了它的内容,可能会导致这个应用程序不能正常运行.
10.题目也有异议,分析一下
楼上有个选A的,我来说下为什么你的错了
就一句话,你没考虑指针的移动,即这条语句,可能被你无意忽视了
p+=3;
PS;至于其他的,就没啥好说的了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
最小成绩和最大成绩都需要一个初始值,这样后续输入更多数字的时候才能和原值比较。
C语言的话,初值最好是输入的第一个数。
然后输入的所有数每个都和amin和amax比较一次,得到当前最小和最大的值,如此反复。
举个例子:
先输入5,所以amin和amax都是5.
然后输入8,8比amin大,所以不对amin赋值;然而8大于amax,则8为当前最大值。
然后输入4,4比amin小,所以amin是4,4是当前最小值;4小于amax所以不对amax赋值。
不懂可以追问
C语言的话,初值最好是输入的第一个数。
然后输入的所有数每个都和amin和amax比较一次,得到当前最小和最大的值,如此反复。
举个例子:
先输入5,所以amin和amax都是5.
然后输入8,8比amin大,所以不对amin赋值;然而8大于amax,则8为当前最大值。
然后输入4,4比amin小,所以amin是4,4是当前最小值;4小于amax所以不对amax赋值。
不懂可以追问
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
当形参为&x这种形式时传递参数a,你可以理解为x是a的别名或者也就是给a取个绰号叫x,你对x的任何操作实际就是对a的操作。而形参直接为x,当传递参数a,它是将a中的内容复制了一份放到x中,你对x的操作自然就不会影响到a了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1.赋值给amin和amax是输入第一个数时,最大值和最小值都是同一个数。
2. 后面的循环是,每新增一个数就与最大值对比,比最大值大就是新最大值,比最小值小就是新最小值。
2. 后面的循环是,每新增一个数就与最大值对比,比最大值大就是新最大值,比最小值小就是新最小值。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询