c语言高手救命

第一题有以下程序structSTU{charname[10];intnum;floatTotalScore;};voidf(structSTU*p){structSTUs... 第一题
有以下程序
   struct STU
   { char name[10]; int num; float TotalScore; };
   void f(struct STU *p)
   { struct STU s[2]={{"SunDan",20044,550},{"Penghua",20045,537}}, *q=s;
   ++p ; ++q; *p=*q;
   }
   main()
   { struct STU s[3]={{"YangSan",20041,703},{"LiSiGuo",20042,580}};
   f(s);
   printf("%s %d %3.0f\n", s[1].name, s[1].num, s[1].TotalScore);
   }
  程序运行后的输出结果是
   A)SunDan 20044 550 B)Penghua 20045 537
   C)LiSiGuo 20042 580 D)SunDan 20041 703
第二题
有以下程序
   # include
   struct STU
   { int num;
   float TotalScore; };
void f(struct STU p)
   { struct STU s[2]={{20044,550},{20045,537}};
   p.num = s[1].num; p.TotalScore = s[1].TotalScore;
   }
   main()
   { struct STU s[2]={{20041,703},{20042,580}};
   f(s[0]);
   printf("%d %3.0f\n", s[0].num, s[0].TotalScore);
   }
  程序运行后的输出结果是
   A)20045 537 B)20044 550 C)20042 580 D)20041 703
  
第三题

47)有以下程序
   # include
   struct STU
   { char name[10];
   int num; };
   void f(char *name, int num)
   { struct STU s[2]={{"SunDan",20044},{"Penghua",20045}};
   num = s[0].num;
   strcpy(name, s[0].name);
   }
   main()
   { struct STU s[2]={{"YangSan",20041},{"LiSiGuo",20042}},*p;
   p=&s[1]; f(p->name, p->num);
   printf("%s %d\n", p->name, p->num);
   }
  程序运行后的输出结果是
   A)SunDan 20042 B)SunDan 20044
   C)LiSiGuo 20042 D)YangSan 20041
  
第四题

有以下程序
   #include
   main()
   { FILE *fp; int i, k, n;
   fp=fopen("data.dat", "w+");
   for(i=1; i<6; i++)
   { fprintf(fp,"%d ",i);
   if(i%3==0) fprintf(fp,"\n");
   }
   rewind(fp);
   fscanf(fp, "%d%d", &k, &n); printf("%d %d\n", k, n);
   fclose(fp);
   }
  程序运行后的输出结果是
   A)0 0 B)123 45 C)1 4 D)1 2
第五题

有以下程序
   int a=2;
   int f(int n)
   { static int a=3;
   int t=0;
   if(n%2){ static int a=4; t += a++; }
   else { static int a=5; t += a++; }
   return t+a++;
   }
   main()
   { int s=a, i;
   for( i=0; i<3; i++) s+=f(i);
   printf("%d\n", s);
   }
各位路过的高手,请花点时间帮我讲解,我知道答案,但是一点也不知道它讲的什么鬼东西。麻烦大家了
答案是B,D,A,D,29
展开
 我来答
更无聊
推荐于2016-06-29
知道答主
回答量:27
采纳率:0%
帮助的人:0
展开全部
//使用的vc6.0调度“//”后面为注释
#include <iostream>
using namespace std;

struct STU
{
char name[10];
int num;
float TotalScore;
};
void f(struct STU *p)
{
struct STU s[2]={{"SunDan",20044,550},{"Penghua",20045,537}}, *q=s;//q指向s[0]
++p;//指针下移
++q;//到这里,p, q 分别指向主函数s[1],和f中的s[1]
*p=*q; //将f中的s[1]赋给主函数s[1]
}
void main()
{
struct STU s[3]={{"YangSan",20041,703},{"LiSiGuo",20042,580}};
f(s);//传递的是数组名,即指针,指针可以改变形参
printf("%s %d %3.0f\n", s[1].name, s[1].num, s[1].TotalScore);
}
///////////////////////////////////////第2题
struct STU
{
int num;
float TotalScore;
};

void f(struct STU p)
{
struct STU s[2]={{20044,550},{20045,537}};
p.num = s[1].num;
p.TotalScore = s[1].TotalScore;
}

main()
{
struct STU s[2]={{20041,703},{20042,580}};
f(s[0]);//传送的变量名,无法改变形参,不多说了
printf("%d %3.0f\n", s[0].num, s[0].TotalScore);
}
///////////////////////////////////////////////////////////////第3题//////

struct STU
{
char name[10];
int num;
};

void f(char *name, int num)
{
struct STU s[2]={{"SunDan",20044},{"Penghua",20045}};
num = s[0].num;
strcpy(name, s[0].name);
}

void main()
{
struct STU s[2]={{"YangSan",20041},{"LiSiGuo",20042}},*p;
p=&s[1];
f(p->name, p->num);//name为指针(数组名),num不是,所以只改变name(输出SunDan)
printf("%s %d\n", p->name, p->num);
}

//main函数改成这样结果一样
void main()
{
struct STU s[2]={{"YangSan",20041},{"LiSiGuo",20042}},p;
p=s[1];
f(p.name, p.num);//name为指针(数组名),num不是,所以只改变name(输出SunDan)
printf("%s %d\n", p.name, p.num);
}
///////////////////////////////////////////////////////////////////第4题

/*函数名: rewind
功 能: 将文件指针重新指向一个流的开头
用 法: int rewind(FILE *stream);
程序例:

*/
void main()
{
FILE *fp; int i, k, n;
fp=fopen("data.dat", "w+"); //创建一个名为data.dat的文件
for(i=1; i<6; i++) //输入1,2,3,4,5
{
fprintf(fp,"%d ",i);
if(i%3==0) fprintf(fp,"\n"); //为3是换行
}
rewind(fp);
fscanf(fp, "%d%d", &k, &n); printf("%d %d\n", k, n);//从头开始读文件,读两数当然是1 ,2了
fclose(fp);
}

///////////////////////////////////////////////////////////////////////////第5题
int a=2;//全局变量

int f(int n)
{
static int a=3;
int t=0;
if(n%2){ static int a=4; t += a++; } //这里的a只有块作用域
else { static int a=5; t += a++; }
return t+a++; //使用的是函数和一行的a,++在后时,先用后加
}
void main()
{
int s=a, i;//这里a为全局变量,故s为2
for( i=0; i<3; i++)
s+=f(i);
printf("%d\n", s);
}
/*
还是分析一遍吧:
注意f里面的a都是静态的只赋值一次,下次作用时值不变。
先算f(0): 0%2为零 执行 esle,自增运算“++”在后,先加后自增,所以t为5;随后a为6,return 时else里的a无效,
这里的a为函数第一行为3的a,返回5+3,a自增为4;
f(1): 执行if t ==4 a为5(下次不用它,不管它也行)return时,因上次a自增为4为,所以返回 4+4,这时a自增为5
f(2):执行else 此时else中a为6了(执行f(0)时自增的)t = 6;return时加上第一行的a(5) 返回11
2+8+8+11 == 29没错吧!
*/
295814759
2009-09-18 · TA获得超过166个赞
知道小有建树答主
回答量:164
采纳率:0%
帮助的人:108万
展开全部
第一题应该是选B,main中先赋值s[0]={"YangSan",20041,703} s[1]={"LiSiGuo",20042,580}.之后调用f(s)这个函数,,这时s[0]={"SunDan",20044,550},s[1]={"Penghua",20045,537}.之后是指针的自增,但是++p是在本函数执行完之后才自增的,所以这里的s[1]的值就被赋值给了main中的s[1],答案就是B喽。

第二题很容易迷惑人,但细心点你就会发现,f(s[0]),这里的s[0]于main函数中的s[2]是同类的东西,都是结构体,而不是s[2]结构体中的s[0]。关键看参数的传递。f函数中参数的定义就是struct STU。f中的s[0]是说这个结构体中并没有给分配空间。所以答案是D。

第三题,这里的p是结构体指针,先是指向main中的s[1],然后在f函数中把f函数中s[0]的值赋给了p所指向的地址,所以最后p最后输出的值就是f中s[0]的值。答案是A

第四题,创建了一个文件,然后i从1开始循环,想ftp中写入数据i,如果i能被3整除,就向fp中输入文件的结束符。然后把fp中的值分别给了k和n,再把k和n输出。所以结果就是1,2,答案是D

第五题,static变量也就是静态变量,在程序运行过程中被声明后就会一直保存在内存里,所以只能声明一次,第二次再访问那个函数时,给静态变量声明同时赋值的语句就不再执行了,而静态变量的值始终保存在内存里,也就是上次改变以后的值。所以,第一次循环s=s+f(0)=2+f(0),而f(0)=t+a++,而else中t=5,(先运算再自增,+的优先级高,这里的a和外面的a不一样,),return值是5+3,a自增为4.所以第一次循环,s=2+8=10
同理,第二次循环,t=4,return=4+4,s=10+8=18 a自增为6 第三次循环,t=5,return值为5+6 s=18+11=29.
这样的回答可以给分了么,嘿嘿。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
goumuli
2009-09-17 · TA获得超过177个赞
知道答主
回答量:86
采纳率:0%
帮助的人:91.6万
展开全部
1.b 2.d 3.a 4.d 5.29
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式