给位大佬能帮我看看findLowerst这个function有没有更加简便的写法,
#include <iostream>using namespace std;
void getScore(int &score);
void calcAverage(int, int, int, int, int);
int findLowest(int, int, int, int, int);
int main()
{
int a, b, c, d, e;
getScore(a);
getScore(b);
getScore(c);
getScore(d);
getScore(e);
calcAverage(a, b, c, d, e);
}
void getScore(int &score)
{
cout << "Enter a test score: ";
cin >> score;
while (score < 0 || score > 100)
{
cout << "Do not accept test scores"
<<"lower thana 0 or higher than 100\n";
cout << "Enter a test score: ";
cin >> score;
}
}
void calcAverage(int a, int b, int c, int d, int e)
{
double result5, result4, result;
result5 = (a+b+c+d+e);
result4 = findLowest(a, b, c, d, e);
result = (result5 - result4) / 4;
cout << "the average is " << result << endl;
}
int findLowest(int q, int w, int e, int r, int t)
{
if (q < w && q < e && q < r && q < t) // if else if 有没有更加简便的写法
return q;
else if (w < q && w < e && w < r && w < t)
return w;
else if (e < q && e < w && e < r && e < t)
return e;
else if (r < q && r < w && r < e && r < t)
return r;
else if (t < q && t < w && t < e && t < r)
return t;
} 本帖最后由 Croper 于 2019-4-14 03:40 编辑
int findLowest(int q, int w, int e, int r, int t)
{
__int64 *p=&q; //栈是8字节对齐;
int i;
for (i=1;i<5;++i)
if (q>(int)p) q=(int)p;
return q;
} 其实一个函数如果传入参数过多的话,用数组来代替会更简洁一些吧
我不会楼上的栈指令...但是感觉原理上是一样的;
不过,刚才我用sizeof(int)却得到不到想要的答案,调试观察地址变化之后发现改成short int才对
不知道是怎么回事...期待好心人可以帮忙解答一下疑惑...
#include<stdio.h>
int findLowest(int q, int w, int e, int r, int t)
{
int *min;
min = &q;
for(int i = 1;i < 5;i++)
{
//用地址遍历传入的每一个参数值并比较处最小值
*min = *min < *(min + i*sizeof(short int)) ? *min : *(min + i*sizeof(short int));
}
return *min;
}
int main()
{
printf("最小值为:%d",findLowest(54564,154,788967,3555,4547));
return 0;
} 本帖最后由 Croper 于 2019-4-15 01:27 编辑
82457097 发表于 2019-4-14 23:59
其实一个函数如果传入参数过多的话,用数组来代替会更简洁一些吧
我不会楼上的栈指令...但是感觉原理上 ...
因为指针与整数相加的意义和下标运算完全一样,这个整数并不是偏离的字节数
换句话说,*(min+i*sizeof(short int)其实就是min就是min,也就是一个参数偏移8个字节,和我的答案其实是一样的。。
__int64只是一个保证长度为8个字节的整数类型,替换成long long效果是一样的,只是这里使用__int64感觉表达的意思更明确一些
不过这种写法不推荐啦,这种地址对齐并不能保证在所有环境下都正确,建议楼主去看看可变参数吧 Croper 发表于 2019-4-15 01:23
因为指针与整数相加的意义和下标运算完全一样,这个整数并不是偏离的字节数
换句话说,*(min+i*size ...
嗯嗯 非常感谢
页:
[1]