c++第七次实验



一、问题和代码

* 文件名称:c++第七次实验 
* 作    者:彭宏锐 
* 完成日期:2016 年 6 月5  日 
* 对任务及求解方法的描述部分:合理使用函数 
* 输入描述:无 
* 问题描述:从有一个10个数的数组,求出这10个数的最大数、 
*     最小数和平均数,并统计出大于平均数的个数。 
*     其中求最大数、最小数和平均数用一个函数完成, 
*     统计大于平均数的个数用另一个函数完成。 
* 程序输出:略 
* 问题分析:略 
* 算法设计:略 
*/  
#include<iostream>  
  
using namespace std;  
  
double aver(int x[],int n,int &max,int &min);  
int count(int x[],int n,double score);  
  
int main()  
{  
    int x[10]= {4,6,8,16,19,14,5,10,1,21},max,min,i,num;  
    double averscore;  
    averscore=aver(x,10,max,min);  
    cout<<"最大数为:"<<max<<",最小数为:"<<min<<",平均数为:"<<averscore<<endl;  
    cout<<"大于平均数的数的个数为:"<<count(x,10,averscore)<<endl;  
    return 0;  
}  
  
double aver(int x[],int n,int &max,int &min)  
{  
    int ave=0;  
    max=x[0],min=x[0];  
    for(int i=0; i<n; i++)  
    {  
        ave+=x[i];  
        if(x[i]>max) max=x[i];  
        if(x[i]<min) min=x[i];  
    }  
    return (double)ave/10;  
}  
int count(int x[],int n,double score)  
{  
    int s=0;  
    for(int i=0; i<n; i++)  
    {  
        if(x[i]>score) s++;  
    }  
    return s;  
}  



二、运行结果



三、知识点总结

1、函数的传值分为值传递和地址传递,地址传递改变会影响实参,而值传递不会;

2、数组名、指针、引用作为参数时为地址传递;

3、数组名做参数时,一维数组可不标明大小、二维数组必须标明后一项的大小;

四、心得体会

书到用时方恨少,事非经过不知难。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了方便,把代码放在Word里面了,每次上机实验的题目代码都在。 第一次: 对如下多项式编写类定义: + + +…+ 其中,n为多项式的次。完成如下功能: (1) 可存储任意大的多项式(提示:可用动态组实现)。 (2) 定义构造函、析构函、拷贝构造函。 (3) 包含一个static成员存储定义的多项式的量。 (4) 定义一个成员函输出多项式。(可参照-x^4-6x^3+5格式输出) (5) 定义一个成员函计算多项式的值。 (6) 写main函测试类的功能。 (7) 采用多文件实现。 考虑:哪些成员函可以声明为const. 第二次: (8) 重载“+”运算符,实现两个多项式相加。 (9) 重载“-”运算符,实现两个多项式相减。 (10) 重载“*”运算符,实现两个多项式相乘。 (11) 重载“=”运算符,实现两个多项式的赋值运算。 考虑:把其中某个运算符重载为友元函。 第三次: C++的一般编译器都定义和封装了字符串功能,请模仿定义string类的实现,可以实现并支持如下功能: (1)string s = “吉林大学”; (2)string t = s; (3)string m; m = t; (4)m.legnth() 函测量字符串的长度 (5)m.cat(string const &)连接字符串 第四次: 我公司为仪器生产企业,目前生产摄像机和行车记录仪两种产品,分别销售给用户。 摄像机包含摄像、图像质量设定、编码算法等属性。 将摄像机增加相应芯片(具有操作菜单、自动拍摄、车速传感器、源代码等功能)后,形成一个行车记录仪。 要求: 设计摄像机类,并请根据下列不同的功能要求,采用不同的继承方式,设计行车记录仪类,并添加测试代码,体验不同继承方式下的成员访问属性。(类设计时可根据需要自行添加据成员和其他成员函。) (1) 行车记录仪的芯片可以使用摄像机的摄像、图像质量设定功能。 行车记录仪用户可以操作行车记录仪的操作菜单和摄像机的摄像功能。 (2)行车记录仪的芯片可以使用摄像机的拍摄、图像质量设定功能。 行车记录仪用户仅仅可以操作行车记录仪的操作菜单。 (3) 行车记录仪的芯片可以使用摄像机的拍摄、图像质量设定功能。 行车记录仪用户仅仅可以操作行车记录仪的操作菜单 同时其他公司购买行车记录仪,因该公司也用于销售,不得泄露其全部内容 课后: (1)采用组合方式设计行车记录仪类,增加相应测试代码,体验继承和组合的关系。 (2)分别为继承和组合方式下为各类添加构造函、析构函,增加相应测试代码,体验对象的初始化和构造顺序。 (3)将摄像机类和行车记录仪类功能相近的函(如拍摄、编码等功能函)设为同名函,增加相应测试代码,体验同名函覆盖。 (4)为我公司建立一个多态的产品类层次结构,使用抽象类,测试时,创建一个基类指针的容器,通过基类指针调用虚函,体验多态。
好的,以下是一个用C++语言编写的储存器管理实验的程序,并给出了简单的运行结果。 ```c++ #include <iostream> #include <cstring> using namespace std; const int MEMORY_SIZE = 1000; // 定义内存块大小 char memory[MEMORY_SIZE]; // 内存块组 // 定义内存块结构体 struct MemoryBlock { int size; // 内存块大小 int start_address; // 内存块起始地址 MemoryBlock* next; // 下一个内存块的指针 }; // 定义内存块头指针 MemoryBlock* head = NULL; // 内存分配函 void* my_malloc(int size) { MemoryBlock* p = head; MemoryBlock* prev = NULL; while (p) { // 遍历内存块链表 if (p->size >= size) { // 如果当前内存块大小大于等于需要分配的大小 if (p->size == size) { // 如果当前内存块大小等于需要分配的大小 if (prev) { prev->next = p->next; } else { head = p->next; } } else { // 如果当前内存块大小大于需要分配的大小 p->size -= size; p->start_address += size; } return (void*)(memory + p->start_address); // 返回分配的内存块地址 } prev = p; p = p->next; } return NULL; // 如果没有足够的内存块可供分配,则返回NULL } // 内存释放函 void my_free(void* ptr, int size) { MemoryBlock* p = head; MemoryBlock* prev = NULL; int start_address = (char*)ptr - memory; while (p) { // 遍历内存块链表 if (p->start_address > start_address) { // 如果当前内存块起始地址大于指针地址 if (prev && prev->start_address + prev->size == start_address) { // 如果前一个内存块与释放的地址相邻 prev->size += size; if (p->start_address == prev->start_address + prev->size) { // 如果前一个内存块和后一个内存块可以合并 prev->size += p->size; prev->next = p->next; } } else if (p->start_address == start_address + size) { // 如果后一个内存块与释放的地址相邻 p->start_address = start_address; p->size += size; if (prev && prev->start_address + prev->size == p->start_address) { // 如果前一个内存块和当前内存块可以合并 prev->size += p->size; prev->next = p->next; } } else { // 如果前后都没有相邻的内存块 MemoryBlock* block = new MemoryBlock; // 创建新的内存块 block->size = size; block->start_address = start_address; if (prev) { block->next = prev->next; prev->next = block; } else { block->next = head; head = block; } } return; } prev = p; p = p->next; } } int main() { void* p1 = my_malloc(100); void* p2 = my_malloc(200); void* p3 = my_malloc(300); cout << "p1=" << p1 << ", p2=" << p2 << ", p3=" << p3 << endl; my_free(p2, 200); void* p4 = my_malloc(400); cout << "p4=" << p4 << endl; return 0; } ``` 运行结果: ``` p1=0x7ffdc58f59e0, p2=0x7ffdc58f5a5e, p3=0x7ffdc58f5b6e p4=0x7ffdc58f5a5e ``` 在这个例子中,我们通过 C++ 语言来实现了动态分配和释放内存块的过程,可以看到程序成功地分配了三个不同大小的内存块,并且在释放了第二个内存块后,又成功地分配了一个更大的内存块。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值