《程序设计基础》
实验报告
学号:2016211990
姓名:王贯东
班级:16-计算机科学与技术-1班
学院:计算机与信息学院
实验五指针
1.实验目的要求
(1)掌握指针的概念,学会定义和使用指针变量。
(2)学会使用数组指针和指向数组的指针变量。
(3)学会使用字符串指针和指向字符串的指针变量。
(4)了解指向指针的指针的概念以及其使用方法。
(5)掌握指针、引用、数组做函数参数的传递机制。
(6)*学会使用指向函数的指针变量。
2.实验设备
Visual C++ 6.0
3.实验内容
(1)阅读下面程序,写出其运行结果。
<1>
#include <iostream.h>
sub ( int x , int y , int *z )
{
*z = y – x ;
}
void main( )
{
int a,b,c;
sub( 10 , 5 , &a ) ;
sub( 7, a, &b ) ;
sub( a, b, &c ) ;
cout << a <<‘,’<< b <<‘,’<< c << endl ; }
解:输出-5,-12,-7
<2>
#include <iostream.h>
#include <string.h>
void main()
{
int stre ( char[ ] ) ;
char str [ 10 ] , *p = str ;
gets ( p ) ;
cout << stre ( p ) << endl ;
}
int stre ( char str[ ] )
{
int num = 0 ;
while( * ( str + num ) != ’\0’ ) num ++ ;
return ( num ) ;
}
解:题目库函数少了<stdio.h> 。
该正后,输入1234,输出4
(2)编写程序实现下列问题的求解。
(1)输入三个整数,按由小到大的顺序输出,然后将程序改为:输入三个字符串,按由小到大的顺序输出。
#include<iostream>
using namespace std;
int turn (int *p1,int *p2)
{ int p;
p=*p1;
*p1=*p2;
*p2=p;
}
int main()
{int *p1,*p2,*p3;
cout<<"请输入三个数"<<endl; int a,b,c;
cin>>a>>b>>c;
p1=&a;
p2=&b;
p3=&c;
if(a>b)
{turn(p1,p2);
}
if(a>c)
{turn(p1,p3);
}
if(b>c)
{turn(p2,p3);
}
cout<<a<<" "<<b<<" "<<c;
}
(2)将一个3*3的矩阵转置,用一个函数实现。
在主函数中用scanf输入以下矩阵元素:{2,4,6,8,10,12,14,16,18}。
将数组名作为函数参数。
函数调用后在主函数中输出已转置的矩阵。
#include<iostream>
using namespace std;
void change(int *p1)
{int i,j,t;
for(i=0;i<3;i++){
for(j=0;j<3;j++){
t=*(p1+3*i+j);
*(p1+3*i+j)=*(p1+3*j+i);
*(p1+3*j+i)=t;}}
}
int main()
{void change(int *p1);
int i,j;
int a[3][3];
int *p;
cout<<"请输入九个数字"<<endl;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
cin>>a[i][j];
p=&a[0][0];
change(p);
cout<<"转置后的矩阵"<<endl;
for(i=0;i<3;i++)
cout<<a[i][0]<<a[i][1]<<a[i][2]<<endl;
cout<<endl;
}
(3)自己写一个strcmp函数,实现两个字符串的比较。
两个字符串s1,s2由main函数输入,strcmp函数的返回值也在main函数中输出。
#include <string>
#include <iostream>
using namespace std;
int stcmp(string s1,string s2)
{
int i=0;
while (s1[i]!=NULL&&s2[i]!=NULL) {
if (s1[i]>s2[i]) {
return 1;
break;
}
if (s1[i]==s2[i]) {
return 0;
break;
}
if (s1[i]<s2[i]) {
return -1;
break;
}
i++;
}
}
int main()
{
int a;
string string1;
string string2;
cout<<"输入两个字符串\n";
cin>>string1;
cin>>string2;
a=stcmp(string1,string2);
cout<<a<<"\n";
return 0;
}
3.思考题
(1)自定义函数完成strcpy、strcat、strlen等字符串函数的功能,比较实验三中实验内容(2)—<5>用数组处理的区别。
(2)用指向指针的指针的方法对n个整数排序并输出。
要求将排序单独写成一个函数。
N和各整数在主函数中输入。
最后在主函数中输出。