华中科技大学c++第4次上机作业.docx

上传人:b****5 文档编号:8232821 上传时间:2023-01-30 格式:DOCX 页数:21 大小:93.07KB
下载 相关 举报
华中科技大学c++第4次上机作业.docx_第1页
第1页 / 共21页
华中科技大学c++第4次上机作业.docx_第2页
第2页 / 共21页
华中科技大学c++第4次上机作业.docx_第3页
第3页 / 共21页
华中科技大学c++第4次上机作业.docx_第4页
第4页 / 共21页
华中科技大学c++第4次上机作业.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

华中科技大学c++第4次上机作业.docx

《华中科技大学c++第4次上机作业.docx》由会员分享,可在线阅读,更多相关《华中科技大学c++第4次上机作业.docx(21页珍藏版)》请在冰豆网上搜索。

华中科技大学c++第4次上机作业.docx

华中科技大学c++第4次上机作业

华中科技大学

《计算机基础与程序设计(C++)》

实验报告

实验名称:

第四次上机实验实验学时:

4

姓名:

学号:

班级:

电气

实验日期:

2017.4.13教师批阅签字:

一、实验目的

●掌握一维数组的定义、输入、输出和基本操作。

●掌握二维数组的定义、输入、输出和基本操作。

●掌握字符串的存储和访问。

●使用数组处理解决实际问题的能力。

●动态数组的访问

二、实验内容

1.阅读程序

1)#include

#include

usingnamespacestd;

intmain()

{intn=5;

inti,a[n];

for(i=0;i

{cin>>a[i];

cout<

}

return0;

}

运行上述的程序,改正其中的错误,并解释错误原因。

错误:

1.i后面的逗号为中文。

2.数组长度不能用变量表示。

修改后的程序:

#include

#include

usingnamespacestd;

intmain()

{intn=5;

inti,a[5];

for(i=0;i

{cin>>a[i];

cout<

}

return0;

}

2)#include

#include

usingnamespacestd;

intmain()

{inti,a[5]={0,1,2,3,4};

for(i=0;i<=5;i++)

cout<

return0;}

运行上述的程序,其结果是否正确,如不确请修改正确,并解释原因。

错误:

1.定义变量时的逗号为中文。

2.i最大值为4。

正确的程序:

#include

#include

usingnamespacestd;

intmain()

{inti,a[5]={0,1,2,3,4};

for(i=0;i<=4;i++)

cout<

return0;}

3)#include

usingnamespacestd;

intmain()

{

charrstr[10]="abcdefgh",dstr[10];

inti;

for(i=0;rstr[i]!

='\0';i++)//循环条件可以写成rstr[i]!

=0;或rstr

dstr[i]=rstr[i];

cout<<"输出字符串dstr:

"<

return0;

}

上述程序的功能是将字符串rstr复制到目标串dstr中,运行该程序结果是否正确,如不正确请修改正确,并解释原因。

不正确。

原因:

在dstr[10]数组中,未说明在何时dstr[10]输出结束

程序默认输出到最后,导致出现问题。

修改后的程序:

#include

usingnamespacestd;

intmain()

{

charrstr[10]="abcdefgh",dstr[10];

inti;

for(i=0;rstr[i]!

='\0';i++)

dstr[i]=rstr[i];

dstr[i+1]='\0';

cout<<"输出字符串dstr:

"<

return0;

}

程序截图:

 

4)#include

usingnamespacestd;

intmain()

{

charname1[]={'a','b','c','d'};

charname2[]=”abcd”;

for(i=0;i<4;i++)

cout<

cout<

cout<

cout<

return0;

}

运行上述程序,比较三种输出的异同,并解释原因。

①程序存在错误未定义i的类型。

②原因:

第一个输出:

输出了数组的前四个字符,即abcd.

第二个输出:

输出了数组的前四个字符后没有结束的标志故继续输出后续的内容,由于未进行定义故输出的为如图所示

第三个输出:

name2[]在定义时前四个字符为abcd,第五个字符为\0结束标志,如图所示

故输出全部时只会输出结束标志之前的内容。

5)#include

usingnamespacestd;

intmain()

{inta=10,b=20,*p=&a,*q;

cout<

cout<<*p<

*p=b;

cout<

cout<<*p<

*q=b;

cout<

cout<<*q<

return0;

}

编译调试上述程序,如有错误请修改,并解释原因。

编译未出现错误但程序会终止

原因:

*q初始时未定义其位置,所以*q可能为程序关键位置,修改后会导致程序异常,只能执行这个语句之前的语句。

改正后的程序:

#include

usingnamespacestd;

intmain()

{inta=10,b=20,c,*p=&a,*q=&c;

cout<

cout<<*p<

*p=b;

cout<

cout<<*p<

*q=b;

cout<

cout<<*q<

return0;

}

 

5)inta[5]={1,2,3,4,5};

int*p=a;

在上述语句的基础上,请用5种方式输出数组a的各元素。

参考教材P142页

#include

usingnamespacestd;

intmain()

{inta[5]={1,2,3,4,5};

int*p=a,i;

for(i=0;i<=4;i++)

{

cout<

}

cout<

for(i=0;i<=4;i++)

cout<<*(p+i);

cout<

for(i=0;i<=4;i++)

cout<<*(a+i);

cout<

for(i=0;i<=4;i++)

cout<

cout<

for(i=0;i<=4;i++)

cout<<*(p++);

cout<

return0;

}

 

2.编程题

1)定义包含10个元素的一维数组,输入输出各元素的值,然后求出最大值将其与第一个数交换位置后再输出。

要求:

●程序原代码。

(直接粘贴在此)

#include

usingnamespacestd;

intmain()

{

inta[10],i,j,c,flag;

cout<<"请输入数组的各个元素的值"<

for(i=0;i<=9;i++)

cin>>a[i];

cout<

for(i=0;i<=9;i++)

cout<

cout<

for(i=0;i<=9;i++)

{flag=1;

for(j=0;j<=9;j++)

{

if(a[i]

flag=0;

}

if(flag)

{c=a[0];

a[0]=a[i];

a[i]=c;

}

}

for(i=0;i<=9;i++)

cout<

cout<

 

}

●解决本题的算法思路描述

定义数组,输入输出数组。

通过for循环找出最大的数并进行交换

输出交换后的数组

●调试过程的记载(包括出现的错误,以及修改过程)

寻找最大的数值时出现错误

通过借助一个flag变量最终解决

●归纳本题应用的知识点或算法

For循环

一维数组

2)编写一个程序,定义5行4列二维数组,并对前4行4列的元素赋值,计算二维数组前4行各列之和,且将每列之和放于各列最后一行的位置,然后输出该二维数组(按行列的格式输出)。

要求:

●程序原代码。

(直接粘贴在此)

#include

usingnamespacestd;

intmain()

{

inta[5][4],i,j;

for(i=0;i<=3;i++)

for(j=0;j<=3;j++)

cin>>a[i][j];

for(j=0;j<=3;j++)

a[4][j]=a[0][j]+a[1][j]+a[2][j]+a[3][j];

for(i=0;i<=4;i++)

for(j=0;j<=3;j++)

{

cout<

if(j==3)

cout<

}

return0;

}

●解决本题的算法思路描述

定义二维数组

求各个列的和

输出二维数组的结果

●调试过程的记载(包括出现的错误,以及修改?

for语句循环条件错误

●归纳本题应用的知识点或算法

For循环

二维数组

3)编程输出10行的杨辉三角形。

(使用二维数组并利用每个系数等于其上两系数之和,要求按等腰三角形的格式输出)

要求:

●程序原代码。

(直接粘贴在此)

#include

#include

usingnamespacestd;

intmain()

{

inta[10][10];

inti,j,k;

for(i=0;i<10;i++)

{

a[i][0]=1;a[i][i]=1;

}

for(i=2;i<10;i++)

for(j=1;j

a[i][j]=a[i-1][j-1]+a[i-1][j];

for(i=0;i<10;i++)

{

for(k=i;k<=9;k++)

cout<<"";

for(j=0;j<=i;j++)

{

cout<

}

cout<

}

return0;

}

●解决本题的算法思路描述

定义二维数组

把值为1的数字确定

运用杨辉三角的相关规律进行计算

调整输出格式

●调试过程的记载(包括出现的错误,以及修改)

最开始输出格式不对,调整输出的空格数量后正常

●归纳本题应用的知识点或算法

二维数组

For语句循环

Setw()的用法

4)编程将一个字符串插入另一个字符串的指定位置。

(位置由用户输入)

要求:

●程序原代码。

(直接粘贴在此)

#include

usingnamespacestd;

intmain()

{

charaa[100],bb[100],c[100],g;

intd,e,f;

cout<<"请输入字符串"<

cin.getline(aa,100);

cout<<"请输入需要插入的字符串"<

cin>>bb;

cout<<"请输入需要插入的位置"<

cin>>d;

e=d;f=d;

g=bb[0];

for(;d<=100;d++)

{

c[d]=aa[d];

}

aa[e]='\0';

bb[0]=g;

for(d=0;bb[d];e++,d++)

{

aa[e]=bb[d];

}

cout<

for(;e<=100;e++,f++)

{

aa[e]=c[f];

}

cout<

return0;

}

●解决本题的算法思路描述

定义字符串数组

在所给的位置,将其以后的部分赋值给另外一个数组c

将要插入的数组与原数组从给定位置连接

连接完的数组与数组c再连接得出结果

●调试过程的记载(包括出现的错误,以及修改)

●归纳本题应用的知识点或算法

字符数组的应用

For语句循环

5)编程产生10个互不相同的100~200范围内的随机数。

要求:

●程序原代码。

(直接粘贴在此)

#include 

#include 

#include 

using namespace std;

int main( )

{

​int a[10],i,t=0,j;

​srand(time(0));

​a[0]=(rand()%100+100);

​for(i=1;i<10;i++)

​{

​​t=0;

​​a[i]=(rand()%100+100);

​​for(j=0;j

​​​if(a[i]==a[j]) t=1;

​​if(t==1) i--;​

​}

​for(i=0;i<10;i++)

​​cout<

​cout<

return 0;

}

 

●解决本题的算法思路描述

每产生一个随机数,就和原本生成的随机数进行比较.如果不相同,就保留.否则重新生成.

 

●调试过程的记载(包括出现的错误,以及修改)

由于之前已经写过一次未出现错误

●归纳本题应用的知识点或算法

随机数的生成

For循环

If语句

一维数组

6)编程将下列10本书的书名升序排序输出。

("计算机基础","编译原理","算法基础","计算机原理","高等数学","线性代数","离散数学","大学物理","大学英语","大学英语听力")

要求:

●程序原代码。

(直接粘贴在此)

#include

#include

usingnamespacestd;

intmain()

{

intflag,i,j,n;

chara[10][13]={"计算机基础","编译原理","算法基础",

"计算机原理","高等数学","线性代数","离散数学","大学物理","大学英语","大学英语听力"};

charex[13];

for(n=0;n<=9;n++)

for(i=0;i<=9;i++)

{

for(j=i;j<=9;j++)

{

if(strcmp(a[i],a[j])>0)

{

strcpy(ex,a[i]);

strcpy(a[i],a[j]);

strcpy(a[j],ex);

}

}

}

for(i=0;i<=9;i++)

cout<

cout<

return0;

}

●解决本题的算法思路描述

将科目名称存入二维数组

从第一个科目开始与其后面的科目进行比较,如果此科目值较大则两者进行交换

得出升序排列的数组

输出数组

●调试过程的记载(包括出现的错误,以及修改)

最开始时无法将各个科目名字存入数组。

交替数组某两项值时忘记使用strcpy

●归纳本题应用的知识点或算法

7)用数组编程实现将10进制整数转换成2进制数。

要求:

●程序原代码。

(直接粘贴在此)

#include

usingnamespacestd;

voidmain()

{

ints,i=0,j,a,b[100];

cout<<"请输入需要转化的十进制整数"<

cin>>s;

while(s!

=0)

{

a=s/2;

b[i]=s%2;

s=a;

i++;

}

for(j=i-1;j>=0;j--)

cout<

cout<

}

●分别用200,520,1024,2048等数据测试。

将其与第3次上机作业中不用数组做结果有何不同?

并解释原因。

当整数过大时,原程序无法输出正确结果。

Int定义的数据有规定要求,原程序所得二进制结果实际为一个比较大的十进制数,但用数组做所得结果是0与1的组合,故用数组做所得的结果的范围更大

 

8)选做题

从键盘输入2个字符串,判断其中较短的串是否是另一个串的子字符串。

如:

“ab”是”fgabcde”的子串,不是”fgacbdef”的子串

要求:

●程序原代码。

(直接粘贴在此)

#include

usingnamespacestd;

intmain()

{

charname1[100],name2[100];

inti,j,flag;

cout<<"请输入第一个字符串:

"<

cin.getline(name1,100);

cout<<"请输入第二个字符串:

"<

cin.getline(name2,100);

for(j=0;name1[j]!

='\0';j++)

{

if(name2[0]==name1[j])

{

for(i=0;name2[i];i++)

{

flag=1;

if(name2[i]!

=name1[j+i])

{

flag=0;

break;

}

}

}

}

if(flag==0)

cout<<"不是子字符串"<

else

cout<<"是子字符串"<

return0;

}

●解决本题的算法思路描述

 首先需要定义两个字符数组并输入两个字符串,然后用循环从第一个字符数组的元素中查找与第二个字符数组的第一个元素相同的元素,如果相同再继续比较接下来的元素是否相同,以此类推,最后完成第一个字符数组的查找并将结果输出。

●调试过程的记载(包括出现的错误,以及修改?

未出现错误

●归纳本题应用的知识点或算法

For循环

字符数组

合理使用参照量

9)选做题

假设你想发10个拼手气红包,红包总金额由你从键盘输入。

请编程完成此功能。

要求:

●程序原代码。

(直接粘贴在此)

#include

#include

#include

#include

usingnamespacestd;

intmain()

{

inti,everage;

doubletotal,money,min=0.01;

srand(time(0));

cout<<"请输入红包总金额数:

";

cin>>total;

intt=total*100;

for(i=0;i<9;i++)

{

money=rand()%(t-9+i);

if(money==0)

{money=1+money;

}

cout<<"第"<

"<

:

fixed)<

(2)<

t=t-money;

}

cout<<"第10个红包内的金额为"<

:

fixed)<

(2)<

return0;

}

●解决本题的算法思路描述

输入红包金额

随机分出一个金额作为第一个红包(预留出后面九个红包至少为0.01)

以此类推

分出十个红包

●调试过程的记载(包括出现的错误,以及修改?

开始时保留的小数位数不对,通过XX找到了新的函数来解决

程序依然存在一些小问题如红包金额不够平均

●归纳本题应用的知识点或算法

随机数生成

For循环

三、对本次实验内容及方法、手段的改进建议,以及实验心得

实验心得包括:

1)哪些知识点已掌握

对于一维数组和二维数组已经掌握

前面课程所学的知识也没有问题

2)哪些知识点有困难

字符数组有些困难

关于数组的函数有些使用不熟练

如比较大小strcpy这样的函数

3)对讲课的建议

4)对没有掌握知识的补救建议

重新阅读课本

寻找相关的习题加深印象

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 解决方案

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1