C语言求助大神,麻烦写下具体过程,谢谢!

1.写出以下程序的输出结果#include<stdio.h>voidmain(void){struct{intx;inty;}a={5,7},*p=&a;printf("... 1. 写出以下程序的输出结果
#include<stdio.h>
void main(void )
{
struct {
int x;
int y;
} a={ 5,7}, *p=&a;
printf("%d\n",++p->x);
}
2、写出以下程序的输出结果
#include<stdio.h>
struct a{
int x;
int y;
};
void fun(struct a *c)
{
struct a u={12, 13 };
*c=u;
}
void main( )
{
struct a m={21,23};
fun(&m);
printf("%d %d\n",m.x,m.y);
}

3、写出以下程序的输出结果
#include<stdio.h>
struct STU {
char name[10];
int num;
int Score;
};
void main( )
{
struct STU s[5]= {
{"YangSan",20041,703},
{"LiSiGuo",20042,580},
{"wangYin",20043,680},
{"SunDan",20044,550},
{"Penghua",20045,537}
}, *p[5], *t;
int i, j;
for(i=0;i<5;i++)
p[i]=&s[i];
for(i=0;i<4;i++){
for(j=i+1;j<5;j++){
if(p[i]->Score > p[j]->Score){
t=p[i];
p[i]=p[j];
p[j]=t;
}
}
}
printf("%d %d\n", s[1].Score, p[1]->Score);
}
展开
 我来答
刀劈华山
2018-05-15 · TA获得超过2273个赞
知道小有建树答主
回答量:1338
采纳率:72%
帮助的人:380万
展开全部

第一个:6

关键点在++p->x,其中p指向的是a,->的优先级高于++,可以看成是++(a.x),也就是5+1=6

第二个:12 13

关键点是m是作为地址参数传入fun的,在fun里改变了这块地址所指向的m这块内存的值,所以m的值跟着改变了

第三个:580 550

排版好一点就好看的多了...

void main( )
{
 struct STU s[5]= 
 {
  {"YangSan",20041,703},
  {"LiSiGuo",20042,580},
  {"wangYin",20043,680},
  {"SunDan", 20044,550},
  {"Penghua",20045,537}
 };
 struct STU *p[5];
 struct STU *t;   //冒泡排序的临时变量
 int i;
 int j;
 
 //这个for循环的赋值可以简单的认为现在p就是s
 for(i=0; i<5; i++) 
 {
  p[i] = &s[i];
 }
 //冒泡排序 按照Score的从小到大排
 for(i=0; i<4; i++)
 {
  for(j=i+1; j<5; j++)
  {
   if(p[i]->Score > p[j]->Score)
   {
    t = p[i];
    p[i] = p[j];
    p[j] = t;
   }
  }
 }
 /* 数组下表是1,s[1]就是最初的定义中第二个人也就是580 p[1]就是冒泡排序后Score第二小的人也就是550 */
 printf("%d %d\n", s[1].Score, p[1]->Score);
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式