首页 > 试题广场 >

编写一个程序,让用户输入三次40码跑的成绩(如果您愿意,也可

[问答题]
编写一个程序,让用户输入三次40码跑的成绩(如果您愿意,也可让用户输入40米跑的成绩),并显示次数和平均成绩。请使用一个array对象来存储数据(如果编译器不支持array类,请使用数组)。
#include <iostream>
using namespace std;
int sum(int *array, int size); 
void input(int *array, int size);
void print(int *array, int size);
int main() 
{    
    int frequence = 3;
    int a[frequence];
    input(a, frequence);
    print(a, frequence);
    // 变量转换(当使用两个int类型,想要得到一个float类型的变量,如何做,为什么这么做)
    // 自动转换和强制转换
    // 自动转换
    // 1.为保证精度,转换按照数据长度增加方向进行转换。如int和long进行运算,需要转换为long再进行运算
    // 2.char和short参与运算的时候必须转化为int型
    // 3.参与运算的类型不同,需要提前转化成相同类型
    // 4.赋值操作是,=左右类型不同时,右边类型会自动转换成左边类型,如果右边类型长度>左边类型数据长度,则会降低精度
    // 强制转换
    // (符号类型名称)变量名 (符号类型名称)(表达式) 
    float average = (float)sum(a, frequence) / frequence;
    cout<<"跑步次数是:"<<frequence;
    cout<<"平均成绩是:"<<average;
}
void input(int *array, int size) 
{
    for(int i=0;i < size; i++) 
    {
        cin >> *(array + i);
    }
}
int sum(int *array, int size) 
{
    int result = 0;
    // int result;
    // 局部变量未初始化的到的结果是错误的 为什么
    // 栈内存是反复使用的(脏的,上次用完没清零的),所以说使用栈来实现的局部变量定义时如果不显式初始化,值就是脏的。
    // 栈区(stack)-由编译器自动分配释放,存放函数的参数值,局部变量等,他的内存是连续分配的
    // 所分配的内存是在一块连续的区间内,当我们声明变量时,编译器会自动接着当前栈区的末尾来分配内存
    // 堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式类似于链表,在内存中的分布不是连续的,它们是不同区域的内存块通过指针链接起来的.一旦某一节点从链中断开,我们要人为的把所断开的节点从内存中释放。 
    // 3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放 
    // 4、文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放
    // 5、程序代码区—存放函数体的二进制代码。
    cout << "初始化result:" << result << endl;
    for(int i=0; i<size; i++) 
    {
        result += *(array+i);
        cout << "result:" << result << endl;
    }
    return result;
}
void print(int *array, int size)
{
    for(int i=0;i < size; i++) 
    {
        cout << *(array + i);
    }
    cout << endl;
}

发表于 2020-03-10 12:33:22 回复(0)