c++初级问题,求高手帮忙解答!!!!
1、下列程序有何问题?请仔细体会使用指针时应避免出现这个问题。(文件名:sy3-1.cpp)#include<iostream>usingnamespacestd;int...
1、下列程序有何问题?请仔细体会使用指针时应避免出现这个问题。(文件名:sy3-1.cpp)
#include <iostream>
using namespace std;
int main()
{
int *p;
*p=9;
cout<<"The value at p:"<<*p;
return 0;
}
错误原因:指针p没有初始化,也就是没有指向某个确定的内存单元,它指向内存中的一个随机地址,给这个随机地址赋值时非常危险的。
2、声明一个int型变量a,一个int型指针p,一个引用r,通过p把a的值改为10,通过r把a的值改为5。请将程序补充完整。(文件名:sy3-2.cpp)
#include <iostream>
using namespace std;
int main()
{
int a;
int *p= ;
int &r= ;
=10 ;
=5 ;
return 0 ;
}
3、编写一个矩阵转置的函数,矩阵的行、列数在程序中由用户输入。参考运行结果,将程序补充完整。(文件名:sy3-3.cpp)
#include <iostream>
using namespace std;
void move(int *matrix, int n)
{
int i,j,k;
for(i=0;i<n;i++)
for(j=0;j<i;j++)
{
k=*(matrix+i*n+j);
;
;
}
}
int main()
{
int n,i,j;
int *p;
cout<<"请输入矩阵的行、列数:";
;
p= ;
cout<<"输入矩阵的元素"<<endl;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
cout<<"第"<<i+1<<"行第"<<j+1<<"个元素为:";
;
}
cout<<"输入矩阵为:"<<endl;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
;
cout<<endl;
}
;
cout<<"转置后的矩阵为:"<<endl;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
;
cout<<endl;
}
return 0;
}
运行结果示例:
4、选做
声明一个Employee类,其中包括表示姓名、街道地址、城市和邮编等属性,包括change_name()和display()等函数。display()使用cout语句显示姓名、街道地址、城市和邮编等属性;函数change_name()改变对象的姓名属性;实现并测试这个类。(文件名:sy3-4.cpp)
参考程序代码如下,请在有“//”符号的行填写下面一行程序代码的注释。
#include <iostream>
#include <string>
using namespace std;
//
class Employee
{
private:
char name[30];
char street[30];
char city[18];
char zip[6];
public:
//
Employee(char *n,char *str,char *ct,char *z);
//
void change_name(char *n);
void display();
};
//
Employee::Employee(char *n,char *str,char *ct, char *z)
{
strcpy(name,n);
strcpy(street,str);
strcpy(city,ct);
strcpy(zip,z);
}
//
void Employee::change_name(char *n)
{
strcpy(name,n);
}
//
void Employee::display()
{
cout<<name<<" "<<street<<" ";
cout<<city<<" "<<zip;
}
int main()
{
//
Employee el("张三","平安大街3号","北京","100000");
//
el.display();
cout<<endl;
//
el.change_name("李四");
//
el.display();
cout<<endl;
return 0; 展开
#include <iostream>
using namespace std;
int main()
{
int *p;
*p=9;
cout<<"The value at p:"<<*p;
return 0;
}
错误原因:指针p没有初始化,也就是没有指向某个确定的内存单元,它指向内存中的一个随机地址,给这个随机地址赋值时非常危险的。
2、声明一个int型变量a,一个int型指针p,一个引用r,通过p把a的值改为10,通过r把a的值改为5。请将程序补充完整。(文件名:sy3-2.cpp)
#include <iostream>
using namespace std;
int main()
{
int a;
int *p= ;
int &r= ;
=10 ;
=5 ;
return 0 ;
}
3、编写一个矩阵转置的函数,矩阵的行、列数在程序中由用户输入。参考运行结果,将程序补充完整。(文件名:sy3-3.cpp)
#include <iostream>
using namespace std;
void move(int *matrix, int n)
{
int i,j,k;
for(i=0;i<n;i++)
for(j=0;j<i;j++)
{
k=*(matrix+i*n+j);
;
;
}
}
int main()
{
int n,i,j;
int *p;
cout<<"请输入矩阵的行、列数:";
;
p= ;
cout<<"输入矩阵的元素"<<endl;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
cout<<"第"<<i+1<<"行第"<<j+1<<"个元素为:";
;
}
cout<<"输入矩阵为:"<<endl;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
;
cout<<endl;
}
;
cout<<"转置后的矩阵为:"<<endl;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
;
cout<<endl;
}
return 0;
}
运行结果示例:
4、选做
声明一个Employee类,其中包括表示姓名、街道地址、城市和邮编等属性,包括change_name()和display()等函数。display()使用cout语句显示姓名、街道地址、城市和邮编等属性;函数change_name()改变对象的姓名属性;实现并测试这个类。(文件名:sy3-4.cpp)
参考程序代码如下,请在有“//”符号的行填写下面一行程序代码的注释。
#include <iostream>
#include <string>
using namespace std;
//
class Employee
{
private:
char name[30];
char street[30];
char city[18];
char zip[6];
public:
//
Employee(char *n,char *str,char *ct,char *z);
//
void change_name(char *n);
void display();
};
//
Employee::Employee(char *n,char *str,char *ct, char *z)
{
strcpy(name,n);
strcpy(street,str);
strcpy(city,ct);
strcpy(zip,z);
}
//
void Employee::change_name(char *n)
{
strcpy(name,n);
}
//
void Employee::display()
{
cout<<name<<" "<<street<<" ";
cout<<city<<" "<<zip;
}
int main()
{
//
Employee el("张三","平安大街3号","北京","100000");
//
el.display();
cout<<endl;
//
el.change_name("李四");
//
el.display();
cout<<endl;
return 0; 展开
1个回答
展开全部
1、下列程序有何问题?请仔细体会使用指针时应避免出现这个问题。(文件名:sy3-1.cpp)
#include <iostream>
using namespace std;
int main()
{
int *p;
int i;
p=&i; //指定p的地址和i一样,这样就不是随机了。也就安全了。
*p=9;
cout<<"The value at p:"<<*p;
return 0;
}
2、声明
#include <iostream>
using namespace std;
int main()
{
int a;
int *p=&a ;
int &r=a ;
*p =10 ;
r =5 ;
return 0 ;
}
3、编写一个矩阵转置的函数
注意:填出来的程序可以运行。结果也对。但是因为使用了没定义的内存空间,在最後可能会有一个错误提示。
#include <iostream>
using namespace std;
void move(int *matrix, int n)
{
int i,j,k;
for(i=0;i<n;i++)
for(j=0;j<i;j++)
{
k=*(matrix+i*n+j);
*(matrix+i*n+j)=*(matrix+j*n+i) ;
*(matrix+j*n+i)=k ;
}
}
int main()
{
int n,i,j;
int *p;
cout<<"请输入矩阵的行、列数:";
cin>>n ; //从後面可以看出,这里是一个行列相等的矩阵
p=&n+1 ; //这里会使用未定义的内存空间。最好是在前面再定义一个数组,然後使用。
cout<<"输入矩阵的元素"<<endl;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
cout<<"第"<<i+1<<"行第"<<j+1<<"个元素为:";
cin>>*(p+i*n+j) ;
}
cout<<"输入矩阵为:"<<endl;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
cout<<*(p+i*n+j) ;
cout<<endl;
}
move( p, n) ;
cout<<"转置后的矩阵为:"<<endl;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
cout<<*(p+i*n+j) ;
cout<<endl;
}
return 0;
}
4、选做
#include <iostream>
#include <string>
using namespace std;
//定议人员类
class Employee
{
private:
char name[30];
char street[30];
char city[18];
char zip[6];
public:
//定义构造函数
Employee(char *n,char *str,char *ct,char *z);
//定义改名函数
void change_name(char *n);
void display();
};
//实现构造函数
Employee::Employee(char *n,char *str,char *ct, char *z)
{
strcpy(name,n);
strcpy(street,str);
strcpy(city,ct);
strcpy(zip,z);
}
//实现改名函数
void Employee::change_name(char *n)
{
strcpy(name,n);
}
//实际打印函数
void Employee::display()
{
cout<<name<<" "<<street<<" ";
cout<<city<<" "<<zip;
}
int main()
{
//定义一个人员(张三),并且初使化
Employee el("?三","平安大街3?","北京","100000");
//显示
el.display();
cout<<endl;
//把张三改名为李四
el.change_name("李四");
//再次显示
el.display();
cout<<endl;
return 0;
}
建议:
问题最好分开问,一次问一个问题。
如这次的4个问题,分四次问。
方便大家回答,你也可以很快收到答案。
#include <iostream>
using namespace std;
int main()
{
int *p;
int i;
p=&i; //指定p的地址和i一样,这样就不是随机了。也就安全了。
*p=9;
cout<<"The value at p:"<<*p;
return 0;
}
2、声明
#include <iostream>
using namespace std;
int main()
{
int a;
int *p=&a ;
int &r=a ;
*p =10 ;
r =5 ;
return 0 ;
}
3、编写一个矩阵转置的函数
注意:填出来的程序可以运行。结果也对。但是因为使用了没定义的内存空间,在最後可能会有一个错误提示。
#include <iostream>
using namespace std;
void move(int *matrix, int n)
{
int i,j,k;
for(i=0;i<n;i++)
for(j=0;j<i;j++)
{
k=*(matrix+i*n+j);
*(matrix+i*n+j)=*(matrix+j*n+i) ;
*(matrix+j*n+i)=k ;
}
}
int main()
{
int n,i,j;
int *p;
cout<<"请输入矩阵的行、列数:";
cin>>n ; //从後面可以看出,这里是一个行列相等的矩阵
p=&n+1 ; //这里会使用未定义的内存空间。最好是在前面再定义一个数组,然後使用。
cout<<"输入矩阵的元素"<<endl;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
cout<<"第"<<i+1<<"行第"<<j+1<<"个元素为:";
cin>>*(p+i*n+j) ;
}
cout<<"输入矩阵为:"<<endl;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
cout<<*(p+i*n+j) ;
cout<<endl;
}
move( p, n) ;
cout<<"转置后的矩阵为:"<<endl;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
cout<<*(p+i*n+j) ;
cout<<endl;
}
return 0;
}
4、选做
#include <iostream>
#include <string>
using namespace std;
//定议人员类
class Employee
{
private:
char name[30];
char street[30];
char city[18];
char zip[6];
public:
//定义构造函数
Employee(char *n,char *str,char *ct,char *z);
//定义改名函数
void change_name(char *n);
void display();
};
//实现构造函数
Employee::Employee(char *n,char *str,char *ct, char *z)
{
strcpy(name,n);
strcpy(street,str);
strcpy(city,ct);
strcpy(zip,z);
}
//实现改名函数
void Employee::change_name(char *n)
{
strcpy(name,n);
}
//实际打印函数
void Employee::display()
{
cout<<name<<" "<<street<<" ";
cout<<city<<" "<<zip;
}
int main()
{
//定义一个人员(张三),并且初使化
Employee el("?三","平安大街3?","北京","100000");
//显示
el.display();
cout<<endl;
//把张三改名为李四
el.change_name("李四");
//再次显示
el.display();
cout<<endl;
return 0;
}
建议:
问题最好分开问,一次问一个问题。
如这次的4个问题,分四次问。
方便大家回答,你也可以很快收到答案。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |