帮忙看看程序!!!等待诸位指点啊~~~~~~~~~~~~~~~~~~

wj_yhl 2006-07-24 10:09:44
程序一:
#include<iostream.h>
#include<stdio.h>
class Table
{
//**1**
int x;
int y;
int z;
public:
void print(int x,int y,int z);
};
void Table::print (int x,int y,int z)
{
//**2**
printf("%d*%d=%d",x,y,z);
if(z<10) printf(" "); ////////////A
}
class Table9:public Table
{
public:
void print();
};
void Table9::print()
{
//**3**
int i,j;
int x,y,z;
for (i=1;i<10;i++)
{
for(j=1;j<i+1;j++)
{
x=i;
y=j;
z=i*j;
Table::print(y,x,z);
}
printf("\n");
}
}
main()
{
//**4**
Table9 temp;
temp.print();
return 0;
问题是在将标为A的地方改为cout<<" ";为什么就起不到控制格式的效果了呢?
程序2:
#include<iostream.h>
#include<string.h>
#include<conio.h>
#include<fstream.h>
#define N 10
typedef struct ss
{char num[10];
int s;
} STU;
void fun(STU a[],STU *s)
{
static ss temp=a[0];
for(int i=1;i<N;i++)
if(temp.s>a[i].s)
temp=a[i];
*s=temp; /////////B
}
void main( )
{
STU a[N]={{"A01",81},{"A02",89},{"A03",66},{"A04",87},{"A05",77},{"A06",90},{"A07",79},{"A08",61},{"A09",80},{"A10",71}},m;
fun(a,&m);
cout<<"***** The original date *****"<<endl;
cout<<"The lowest :"<<m.num<<m.s<<endl;
/**************************/
ofstream fin("out1.dat");
fun(a,&m);
fin<<m.num<<m.s<<endl;
fin.close();
/**************************/
}
问题是将标为B的地方改为s=&temp;就会出现乱码,这又是为什么呢?
希望诸位指点啊????
...全文
169 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
tailzhou 2006-07-25
  • 打赏
  • 举报
回复
没看仔细看temp的定义,原来temp是静态的,那么temp不在栈,也不在堆;

不过结果是一样的:s跟m是两个不同的变量,只是指向同一地址,也就是值相同而已;

*s=temp;
这里修改的是s所指向的地址的值(因为m也指向该地址,所以m能反映出变化),s本身并没有改变,s跟m还是指向同一内存空间;
s=&temp;
这里修改的是s本身的值,s指向了a,不再跟m指向同一内存空间;对s的修改不会反映到m.


wj_yhl 2006-07-25
  • 打赏
  • 举报
回复
对了那个if(z<10)是答案提供的,不是我自己写的。
wj_yhl 2006-07-25
  • 打赏
  • 举报
回复
temp是静态的,他应该是在堆区啊!!!
着两道其实是二级上机考试的题。只允许在函数或注释后改动程序。
tailzhou 2006-07-24
  • 打赏
  • 举报
回复
*s=temp;
这里修改的是s所指向的地址的值,s本身并没有改变,s跟m还是指向同一内存空间;
s=&temp;
这里修改的是s本身的值,s指向了a,一个栈上的地址,不再跟m指向同一内存空间;对s的修改不会反映到m.
tailzhou 2006-07-24
  • 打赏
  • 举报
回复
问题是将标为B的地方改为s=&temp;就会出现乱码,这又是为什么呢?

s=&temp只是修改了fun函数内的局部变量s,并不能将修改反映到main函数内的m,m仍旧是未初始化的,所以就会出现乱码

pyrophile 2006-07-24
  • 打赏
  • 举报
回复
同意楼上所说的,你把m赋初值,就不会出现乱码了,不过那样函数fun(STU a[],STU *s)就没有用了。
Dong 2006-07-24
  • 打赏
  • 举报
回复
楼主,还还是先把程序一再运行一次看看吧,本来你的程序输出就是有问题,

Dong 2006-07-24
  • 打赏
  • 举报
回复
*s=temp;
--------------------------------
其中定义STU *s
那么*s的类型是STU,

又其中定义:static ss temp=a[0];


我先说明一下结构提:
typedef struct ss
{char num[10];
int s;
} STU;
结构提的定义相当于:
struct ss
{char num[10];
int s;
} ;
typedef ss STU;

可见,STU和ss是同一类型。
那么static ss temp=a[0];也就是static STU temp = ;不要被其它影响

我们知道,*s的类型是STU,temp 的类型是STU,如果你使用&temp那就是引用temp的地址了,当然会乱码了
wj_yhl 2006-07-24
  • 打赏
  • 举报
回复
诸位老大
注意看清问题啊
Dong 2006-07-24
  • 打赏
  • 举报
回复
程序一:
if(z<10) printf(" "); ////////////A
---------------------------------------------------
改为:
if(y<10) printf(" "); ////////////A
乘法口诀

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧