文档介绍:该【华中科技大学c++第4次上机作业 】是由【简爱】上传分享,文档一共【16】页,该文档可以免费在线阅读,需要了解更多关于【华中科技大学c++第4次上机作业 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。工程施工资料
工程施工资料
工程施工资料
华中科技大学
《计算机基础与程序设计(C++)》
实验报告
实验名称:第四次上机实验实验学时:4
姓名:学号:班级:电气
实验日期:2017。:
一、实验目的
掌握一维数组的定义、输入、输出和基本操作.
掌握二维数组的定义、输入、输出和基本操作。
掌握字符串的存储和访问.
使用数组处理解决实际问题的能力。
动态数组的访问
二、实验内容
1)#include〈iostream>
#include〈cmath>
usingnamespacestd;
intmain()
{intn=5;
inti,a[n];
for(i=0;i〈n;i++)
{cin〉>a[i];
cout<<a[i];
}
return0;
}
运行上述的程序,改正其中的错误,并解释错误原因。
错误:。
。
修改后的程序:
#include〈iostream〉
#include<cmath〉
工程施工资料
工程施工资料
工程施工资料
usingnamespacestd;
intmain()
{intn=5;
inti,a[5];
for(i=0;i<n;i++)
{cin>〉a[i];
cout〈〈a[i];
}
return0;
}
2)#include<iostream〉
#include<cmath〉
usingnamespacestd;
intmain()
{inti,a[5]={0,1,2,3,4};
for(i=0;i<=5;i++)
cout〈<a[i];
return0;}
运行上述的程序,其结果是否正确,如不确请修改正确,并解释原因。
错误:1。定义变量时的逗号为中文。
。
正确的程序:
#include<iostream〉
#include<cmath〉
usingnamespacestd;
intmain()
{inti,a[5]={0,1,2,3,4};
for(i=0;i<=4;i++)
cout〈〈a[i];
return0;}
3)#include<iostream〉
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:”<〈dstr〈<endl;
return0;
}
上述程序的功能是将字符串rstr复制到目标串dstr中,运行该程序结果是否正确,如不正确请修改正确,并解释原因。
不正确.
原因:在dstr[10]数组中,未说明在何时dstr[10]输出结束
程序默认输出到最后,导致出现问题.
修改后的程序:
#include<iostream>
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:”<〈dstr<<endl;
return0;
}
程序截图:
4)#include<iostream〉
usingnamespacestd;
intmain()
{
charname1[]={'a’,’b’,'c’,’d’};
charname2[]=”abcd”;
for(i=0;i〈4;i++)
cout<<name1[i];
cout<<endl;
工程施工资料
工程施工资料
工程施工资料
cout<<name1<〈endl;
cout<<name2<<endl;
return0;
}
运行上述程序,比较三种输出的异同,并解释原因。
①程序存在错误未定义i的类型.
②原因:
第一个输出:输出了数组的前四个字符,即abcd。
第二个输出:输出了数组的前四个字符后没有结束的标志故继续输出后续的内容,由于未进行定义故输出的为如图所示
第三个输出:name2[]在定义时前四个字符为abcd,第五个字符为\0结束标志,如图所示
故输出全部时只会输出结束标志之前的内容。
5)#include<iostream>
usingnamespacestd;
intmain()
{inta=10,b=20,*p=&a,*q;
cout<〈a〈<endl;
cout〈〈*p〈〈endl;
*p=b;
cout〈〈a<〈endl;
cout〈〈*p〈〈endl;
*q=b;
cout<〈b<〈endl;
cout<<*q<〈endl;
return0;
}
编译调试上述程序,如有错误请修改,并解释原因。
编译未出现错误但程序会终止
原因:
工程施工资料
工程施工资料
工程施工资料
*q初始时未定义其位置,所以*q可能为程序关键位置,修改后会导致程序异常,只能执行这个语句之前的语句。
改正后的程序:
#include〈iostream〉
usingnamespacestd;
intmain()
{inta=10,b=20,c,*p=&a,*q=&c;
cout<〈a<〈endl;
cout〈〈*p〈〈endl;
*p=b;
cout〈〈a<<endl;
cout〈〈*p〈<endl;
*q=b;
cout<〈b〈〈endl;
cout<〈*q<<endl;
return0;
}
5)inta[5]={1,2,3,4,5};
int*p=a;
在上述语句的基础上,
#include<iostream>
usingnamespacestd;
intmain()
{inta[5]={1,2,3,4,5};
int*p=a,i;
for(i=0;i<=4;i++)
{
cout〈<a[i];
}
cout<<endl;
for(i=0;i〈=4;i++)
工程施工资料
工程施工资料
工程施工资料
cout〈〈*(p+i);
cout<<endl;
for(i=0;i<=4;i++)
cout<〈*(a+i);
cout<<endl;
for(i=0;i〈=4;i++)
cout<〈p[i];
cout〈〈endl;
for(i=0;i<=4;i++)
cout〈<*(p++);
cout〈<endl;
return0;
}
编程题
1)定义包含10个元素的一维数组,输入输出各元素的值,然后求出最大值将其与第一个数交换位置后再输出。
要求:
程序原代码。(直接粘贴在此)
#include<iostream>
usingnamespacestd;
intmain()
{
inta[10],i,j,c,flag;
cout〈〈"请输入数组的各个元素的值”<<endl;
for(i=0;i〈=9;i++)
cin〉〉a[i];
cout〈<endl;
for(i=0;i<=9;i++)
cout<〈a[i]<<’’;
cout<<endl;
for(i=0;i〈=9;i++)
{flag=1;
工程施工资料
工程施工资料
工程施工资料
for(j=0;j〈=9;j++)
{
if(a[i]〈a[j])
flag=0;
}
if(flag)
{ c=a[0];
a[0]=a[i];
a[i]=c;
}
}
for(i=0;i<=9;i++)
cout〈<a[i]<<’’;
cout<〈endl;
}
解决本题的算法思路描述
定义数组,输入输出数组。
通过for循环找出最大的数并进行交换
输出交换后的数组
调试过程的记载(包括出现的错误,以及修改过程)
寻找最大的数值时出现错误
通过借助一个flag变量最终解决
归纳本题应用的知识点或算法
For循环
一维数组
2)编写一个程序,定义5行4列二维数组,并对前4行4列的元素赋值,计算二维数组前4行各列之和,且将每列之和放于各列最后一行的位置,然后输出该二维数组(按行列的格式输出).
要求:
程序原代码.(直接粘贴在此)
#include〈iostream〉
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<<a[i][j]〈<’’;
if(j==3)
cout〈〈endl;
}
return0;
}
解决本题的算法思路描述
定义二维数组
求各个列的和
输出二维数组的结果
调试过程的记载(包括出现的错误,以及修改?)
for语句循环条件错误
归纳本题应用的知识点或算法
For循环
二维数组
3)编程输出10行的杨辉三角形。(使用二维数组并利用每个系数等于其上两系数之和,要求按等腰三角形的格式输出)
要求:
程序原代码。(直接粘贴在此)
#include<iostream>
#include<iomanip>
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<i;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<<setw(4)〈〈a[i][j];
}
cout〈〈endl;
}
return0;
}
解决本题的算法思路描述
定义二维数组
把值为1的数字确定
运用杨辉三角的相关规律进行计算
调整输出格式
调试过程的记载(包括出现的错误,以及修改)
最开始输出格式不对,调整输出的空格数量后正常
归纳本题应用的知识点或算法
二维数组
For语句循环
Setw()的用法
4)编程将一个字符串插入另一个字符串的指定位置。(位置由用户输入)
要求:
程序原代码。(直接粘贴在此)
#include〈iostream〉
usingnamespacestd;
intmain()
{
charaa[100],bb[100],c[100],g;
intd,e,f;
工程施工资料
工程施工资料
工程施工资料
cout<〈"请输入字符串”〈<endl;
(aa,100);
cout<<"请输入需要插入的字符串"〈<endl;
cin〉〉bb;
cout<<"请输入需要插入的位置”<<endl;
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〈<bb[0]〈<endl;
for(;e〈=100;e++,f++)
{
aa[e]=c[f];
}
cout〈<aa;
return0;
}
解决本题的算法思路描述
定义字符串数组
在所给的位置,将其以后的部分赋值给另外一个数组c
将要插入的数组与原数组从给定位置连接
连接完的数组与数组c再连接得出结果
调试过程的记载(包括出现的错误,以及修改)
归纳本题应用的知识点或算法
字符数组的应用
For语句循环
编程产生10个互不相同的100~200范围内的随机数。
要求:
程序原代码.(直接粘贴在此)