
C语言难题?
在某次大学生演讲比赛中,有N名选手,每名选手的信息包括:编号、姓名、得分。编写一个程序,首先定义一个结构体数组记录选手信息(选手信息从键盘输入),然后将该结构体数组信息保...
在某次大学生演讲比赛中,有N名选手,每名选手的信息包括:编号、姓名、得分。编写一个程序,首先定义一个结构体数组记录选手信息(选手信息从键盘输入),然后将该结构体数组信息保存至一个文本文件中(文件命名规则同实验1,每行存储一名选手信息,空格分隔)。提示:使用fwrite函数实现。
形如: 展开
形如: 展开
展开全部
typedef struct stu{
char * name,gender;
int score;
}STU;
void f(char *p)
{
//p=(char *)malloc(10);
strcpy(p,"Qian");
}
int main(void)
{
STU a={NULL,'m',290},b;
a.name=(char *)malloc(10);
strcpy(a.name,"Zhao");
b = a;
f(b.name);
b.gender ='f';
b.score =350;
printf("%s,%c,%d
\n",a.name,a.gender,a.score);
printf("%s,%c,%d
\n",b.name,b.gender,b.score);
return 0;
}
为啥注释掉了以后的答案变成:Qian,m,290,Qian,f,
350,?
而不注释掉答案却是: Zhao,m,290,Zhao
,f,350?
你的目的是通过函数去修改另外一个结构体对象b中成员name
的值。
观察到成员中的gender和score基本上没有什么值得研究 ,
所以只研究第一个成员name。
在你执行了代码b=a的时候,b和a分别在内存条上占用
sizeof(stu)的空间大小。而且,这两个空间中的值都是一
模一样的。
当你执行了函数f()的时候,分两种情况。
第一没有注释:函数f会在栈上分配4个字节的内存(sizeof
(char*),因为p的类型就是char*)。那么p的值就是等于
b.name。
b.name的值我们假设是0x1234567,那么现在p的值也就是
0x1234567。没有注释的情况下,p的值马上被修改成malloc
的返回值,所以现在p的值一定不是0x1234567。
假如malloc的返回值是0x7654321,那么现在p的值也就是
0x7654321。你使用了strcpy,那么0x7654321首地址开始的
内容就变成了zhao。
所以,你没有改变0x1234567所指向的内容。结果就是
0x1234567指向的内容还是为zhao。
第二有注释:函数f会在栈上分配4个字节的内存(sizeof
(char*),因为p的类型就是char*)。那么p的值就是等于
b.name。
b.name的值我们假设是0x1234567,那么现在p的值也就是
0x1234567。有注释的时候。p的值没有被malloc改变,还是
0x1234567.你使用了strcpy,就修改了0x1234567所指向的
内存。
最开始的内存中值是zhao,你修改后就变成了qian.
你的这个例子错误很多,但是基于你是实验的目的,我就不指
正了。针对不注释的情况,如果你要改变的话,我认为比较正
确的做法应该是这样的。
typedef struct stu{
char * name,gender;
int score;
}STU;
void f(char **p)
{
*p=(char *)malloc(10);
strcpy(*p,"Qian");
}
int main(void)
{
STU a={NULL,'m',290},b;
a.name=(char *)malloc(10);
strcpy(a.name,"Zhao");
b = a;
f(&b.name);
free(a.name);
a.name=NULL:
return 0;
}
char * name,gender;
int score;
}STU;
void f(char *p)
{
//p=(char *)malloc(10);
strcpy(p,"Qian");
}
int main(void)
{
STU a={NULL,'m',290},b;
a.name=(char *)malloc(10);
strcpy(a.name,"Zhao");
b = a;
f(b.name);
b.gender ='f';
b.score =350;
printf("%s,%c,%d
\n",a.name,a.gender,a.score);
printf("%s,%c,%d
\n",b.name,b.gender,b.score);
return 0;
}
为啥注释掉了以后的答案变成:Qian,m,290,Qian,f,
350,?
而不注释掉答案却是: Zhao,m,290,Zhao
,f,350?
你的目的是通过函数去修改另外一个结构体对象b中成员name
的值。
观察到成员中的gender和score基本上没有什么值得研究 ,
所以只研究第一个成员name。
在你执行了代码b=a的时候,b和a分别在内存条上占用
sizeof(stu)的空间大小。而且,这两个空间中的值都是一
模一样的。
当你执行了函数f()的时候,分两种情况。
第一没有注释:函数f会在栈上分配4个字节的内存(sizeof
(char*),因为p的类型就是char*)。那么p的值就是等于
b.name。
b.name的值我们假设是0x1234567,那么现在p的值也就是
0x1234567。没有注释的情况下,p的值马上被修改成malloc
的返回值,所以现在p的值一定不是0x1234567。
假如malloc的返回值是0x7654321,那么现在p的值也就是
0x7654321。你使用了strcpy,那么0x7654321首地址开始的
内容就变成了zhao。
所以,你没有改变0x1234567所指向的内容。结果就是
0x1234567指向的内容还是为zhao。
第二有注释:函数f会在栈上分配4个字节的内存(sizeof
(char*),因为p的类型就是char*)。那么p的值就是等于
b.name。
b.name的值我们假设是0x1234567,那么现在p的值也就是
0x1234567。有注释的时候。p的值没有被malloc改变,还是
0x1234567.你使用了strcpy,就修改了0x1234567所指向的
内存。
最开始的内存中值是zhao,你修改后就变成了qian.
你的这个例子错误很多,但是基于你是实验的目的,我就不指
正了。针对不注释的情况,如果你要改变的话,我认为比较正
确的做法应该是这样的。
typedef struct stu{
char * name,gender;
int score;
}STU;
void f(char **p)
{
*p=(char *)malloc(10);
strcpy(*p,"Qian");
}
int main(void)
{
STU a={NULL,'m',290},b;
a.name=(char *)malloc(10);
strcpy(a.name,"Zhao");
b = a;
f(&b.name);
free(a.name);
a.name=NULL:
return 0;
}
展开全部
首先用二进制创建打开一个文件"data.dat",用于写,在当前目录
循环6次,每次都从文件头写一个整型数据,最后写的数据是a[0]中存放的整数1
回到文件头再回读一个整型数据到k
关闭文件
打印k的值,由于上边写的时候都回到文件头,所以后一个写将会冲掉前一个写的值,只有最后一次写的存放在文件头,因此k的值是1
循环6次,每次都从文件头写一个整型数据,最后写的数据是a[0]中存放的整数1
回到文件头再回读一个整型数据到k
关闭文件
打印k的值,由于上边写的时候都回到文件头,所以后一个写将会冲掉前一个写的值,只有最后一次写的存放在文件头,因此k的值是1
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
思路是这样的,在不超过瓶口的时候,奇数分钟时高度加u,偶数分钟时高度减d
int run(float n,float u,float d)
{
float high=0;
int time=0;
while(high<n)
{
time++;
if(time%2==1)
high=high+u;
else
high-=d;
}
return time;
}
int run(float n,float u,float d)
{
float high=0;
int time=0;
while(high<n)
{
time++;
if(time%2==1)
high=high+u;
else
high-=d;
}
return time;
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
数据结构里的问题,要用到2叉树和栈这种结构,和树的遍历,属于中缀表达式求解算术运算
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
应该加{},否则最后一个else是没有配对if的,这样就会报错
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |