C++综合实验三.docx
- 文档编号:11737422
- 上传时间:2023-06-02
- 格式:DOCX
- 页数:31
- 大小:401.14KB
C++综合实验三.docx
《C++综合实验三.docx》由会员分享,可在线阅读,更多相关《C++综合实验三.docx(31页珍藏版)》请在冰点文库上搜索。
C++综合实验三
《程序设计语言》实验报告
实验序号:
03 实验项目名称:
指针、引用和结构体
学 号
专业、班
实验地点
文波楼219
指导教师
时间
2012/11/20
一、实验目的及要求
1.掌握指针和引用的概念,学会定义和使用指针变量和引用
2.掌握结构体、共用体和枚举等数据类型的定义和使用
3.学习使用指针数组和指向数组的指针
4.学习使用指向字符串的指针
5.学习使用指针函数
6.学习用指针和引用给函数传递参数
7.学习函数指针的定义和使用
8.学习使用new和delete
9.学习指针的比较与运算
二、实验设备(环境)及要求
1.软件需求:
VisualC++6.0
2.硬件需求:
PentiumIII450以上的CPU处理器,64MB以上的内存,200MB的自由硬盘空间
三、实验内容与步骤
1.以下程序通过指针实现两个数相加,并输出结果,指出错误的地方。
#include
usingnamespacestd;
intmain()
{
inta=3;
doubleb=4.7;
int*pa,pb;
pa=&a;
pb=&b;
cout<<*pa+*pb< return0; } 2.阅读下列程序,判断程序是否正确,如果不正确,说明错误原因,并将程序修改正确后给出程序的执行结果。 (1) #include usingnamespacestd; intmain() { inta[]={1,2,3}; int*b; b=a; a=b; cout< cout< cout< cout< cout< *(a+1)=100; cout< cout<<*(a+1)< return0; } (2) #include usingnamespacestd; intmain() { chara[]="abc"; char*b="ABC"; cout< cout< a[0]='A'; b[0]='x'; cout< cout< cout<<&a<<'\t'<<(int)&a< cout<<&b<<'\t'<<(int)&b< cout<<*a<<'\t'<<(int)*a< cout<<*b<<'\t'<<(int)*b< return0; } 3.读程序,写结果。 (1) #include usingnamespacestd; voidf1(intx[]); voidf2(intx[20]); voidf3(intx[],intn); voidprint(int*x,intn); intmain() { inta[]={0,1,2,3,4,5,6,7,8,9}; intn=sizeof(a)/sizeof(int); f1(a); cout<<"f1()执行完后,数组值为: \n"; print(a,n); f2(a); cout<<"f2()执行完后,数组值为: \n"; print(a,n); f3(a,n); cout<<"f3()执行完后,数组值为: \n"; print(a,n); return0; } voidf1(intx[]) { cout< for(inti=0;i x[i]+=1; } voidf2(intx[20]) { cout< for(inti=0;i x[i]+=10; } voidf3(intx[],intn) { cout< for(inti=0;i x[i]+=100; } voidprint(int*x,intn) {for(inti=0;i cout< cout< } (2) #include usingnamespacestd; voidf1(charx[]); voidf2(charx[20]); voidf3(charx[],intn); intmain() { chara[]="abcdefg"; intn=strlen(a); f1(a); cout<<"f1()执行完后,数组值为: \n"; cout< f2(a); cout<<"f2()执行完后,数组值为: \n"; cout< f3(a,n); cout<<"f3()执行完后,数组值为: \n"; cout< return0; } voidf1(charx[]) { cout< for(inti=0;i x[i]+=1; } voidf2(charx[20]) { cout< for(inti=0;i x[i]-='a'-'A'; } voidf3(charx[],intn) { cout< for(inti=0;i x[i]+=1; } 4.编写程序,使用指针p把一个整型数组a[n](n和a[n]均由键盘输入)所有元素设为原来的一倍并输出。 程序中除了变量p、a和n的定义之外,再不能定义其它任何变量。 5.编写程序,在被调函数中删去一维数组中所有相邻且相同的数,使之只剩相邻数字不重复的序列。 例如: 原数组: 2223445666677899101010;删除后: 2345678910。 被调函数返回删除后数组中数据的个数。 主函数中一维数组的个数和元素值均由键盘输入,调用函数后输出新的数组。 6.编写函数,对于形参传入的3个实数求出最大和最小数后,再通过形参传回主调函数。 要求用2种方法分别编写2个函数,在主函数中调用它们并分别输出求得的最大值和最小值,要求实数输出2位有效数字。 7.用字符指针实现字符串拼接函数strcate(char*s1,char*s2),在s1串后面添加一个空格,然后将s2串拼接到s1串的后面,并返回s1串的首地址。 编写主函数调用并查看函数结果是否正确,主函数中字符数组s1和s2的可存放字符的最大个数,以及字符串内容均由键盘输入。 8.编写函数,求出一个字符串(只包含a,b,*三个字符)中连续的a或连续的b、或连续的*出现的最大次数。 在主函数中从键盘输入长度不超过100的字符串(只包含a,b,*三个字符),调用函数并输出结果。 例如: 输入abbbaaa***ab***bbbaaaab,输出: 4,a;输入*abbbaab**aaabbbb*****abb,输出: 5,*。 9.编写一个程序,在主函数中定义m×n的二维数组,m和n及数组元素值均由键盘输入,在被调函数中求出该二维数组的所有鞍点,被调函数返回鞍点的个数。 鞍点定义为二维数组中某个元素,在它所在的行最大,但在它所在的列最小。 在主函数中输出所有的鞍点。 (设输入的数组每行只有一个最大)。 例如: 输入: 33 123456789 输出: a[0][3]=3。 10.编写一个函数,对输入的三个字符串s1,s2,s3进行排序,使最小的字符串存放在s1中,中间的存放在s2中,最大的存放在s3中。 在主函数中调用函数后输出排序后的结果,主函数中的三个字符串定义为形如chara[30]的字符数组,值通过键盘输入。 11.编写程序,在主函数中定义含有12个指针的指针数组,使它的12个元素分别指向由月份组成的字符串常量。 设计一个循环,根据键盘输入的数字月份(1-12),输出相应的月份字符串。 输入0时循环结束,同时整个程序结束。 12.编写函数,给奇数阶幻方矩阵赋值。 N阶幻方阵是指在N×N方阵中填充1~N2这N2个不同的数,使方阵的每一行,每一列和对角线上元素之和均相等。 在主函数中设计一个循环,从键盘输入的幻方阵阶数N,如果输入N为偶数,提示错误,重新输入。 当输入为0时,循环结束,同时整个程序结束。 如果N为奇数,则动态定义二维数组,调用函数magic求幻方阵,并在主函数中编写函数print输出幻方矩阵,编写并调用函数checking验证你求得的矩阵是否满足幻方矩阵的定义。 例如: 输入: 3 输出: 816 357 492 幻方通过了验证。 输入: 5 输出: 17241815 23571416 46132022 101219213 11182529 幻方通过了验证。 提示: 魔方阵的赋值规律如下: (a)将1放在第一行最中间的列;(b)从2开始直到N2为止的各数填在前一个数的右上方;(c)如果该位置超出最上行,则改填在最下行的对应列的位置;(d)如果该位置超出最右列,则改填在最左列的对应行的位置;(e)如果该位置既超出最上行又超出最右列,则改填在前一个数的下面;(f)如果右上角的位置上已经填了其他数据,则改填在前一个数的下面。 13.定义并初始化一个结构体数组存放本班不超过10个人的信息(学号、姓名、年龄、性别、成绩),设计一个循环,通过键盘输入字段名称和字段值,在结构体数组中查找并输出其对应的全部学生的信息,如果找不到,则输出这一字段值没有学生信息。 如果输入字段有误,则提示重新输入。 当输入0时程序结束,同时整个程序结束。 例如: 输入: 学号120003 输出: 120003胡兰女1998 输入: 学号220003 输出: 该学号没有学生信息。 输入: 姓名赵云 输出: 120005赵云男1896 输入: 姓民赵云 输出: 不存在该字段,请检查后重新输入。 (以上输出形式仅供参考,实际以你设定的学生信息为准。 ) 四、实验结果与数据处理 第一题 定义指针pb时,类型不应该是int型而应该是double型,因为后面pb指向的是double型的b。 修改后如下: //文件名: shiyan //功能: 求和 //完成时间: 2012-11-20 #include usingnamespacestd; intmain() { inta=3; doubleb=4.7; int*pa; double*pb; pa=&a; pb=&b; cout<<*pa+*pb< return0; } 第二题 (1)a是数组名,b是指针,b=a表示b是指向数组a的指针,而a=b这一表达式错误。 修改后如下: //文件名: 02 //功能: 指针定义 //完成时间: 2012-11-21 #include usingnamespacestd; intmain() { inta[]={1,2,3}; int*b; b=a; cout< cout< cout< cout< cout< *(a+1)=100; cout< cout<<*(a+1)< return0; } 五、分析与讨论 (2)b是指针变量,“ABC”是常量,定义时的表示是“ABC”是全局串常量,不允许被改动,所以应该先定义一个数组存放字符,在定义一个指针指向数组,此时的值可被修改。 //文件名: shiyan //功能: 指针与数组 //完成时间: 2012-11-22 #include usingnamespacestd; intmain() { chara[]="abc"; charc[]="ABC"; char*b=c; cout< cout< a[0]='A'; b[0]='x'; cout< cout< cout<<&a<<'\t'<<(int)&a< cout<<&b<<'\t'<<(int)&b< cout<<*a<<'\t'<<(int)*a< cout<<*b<<'\t'<<(int)*b< return0; } 第三题 (1)结果是 4 f1<>执行完后,数组值为: 1123456789 4 f2<>执行完后,数组值为: 11111213456789 4 f3<>执行完后,数组值为: 111111112113104105106107108109 (2)结果是 4 f1<>执行完后,数组值为: bcdefgh 4 f1<>执行完后,数组值为: BCDEFGH 4 f1<>执行完后,数组值为: CDEFGHI 第四题 //文件名: 4 //功能: 使用指针p把一个整型数组a[n](n和a[n]均由键盘输入)所有元素设为原来的一倍并输出 //完成时间: 2012-11-22 #include usingnamespacestd; intmain() { intn; cout<<"pleaseinputanumber"; cin>>n; int*a=newint[n],*p; while(a==NULL) { cout<<"error"< return0; } for(p=a;p { cin>>*p; *p=*p*2; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 综合 实验
![提示](https://static.bingdoc.com/images/bang_tan.gif)