您的位置:

c语言stuscore,while用法C语言

本文目录一览:

C语言编写单科学生成绩 编写一个单科学生成绩处理程序,具体要求如下: 1)学生个数定义成符号常量。

#includestdio.h

#define MAX_STU_NUM 100  //学生人数最大值

int main()

{

 int stu_num, i;  //学生人数

 float stu_score[MAX_STU_NUM]; //成绩

 float stu_fail = 0;  //不及格人数比例

 float stu_pass = 0;  //及格人数比例

 float stu_high = 0;  //高分人数比例

 float stu_average = 0; //平均成绩

 printf("输入学生人数:");

 scanf("%d", stu_num);

 printf("输入学生成绩(空格或换行分开):\n");

 for (i = 0; i  stu_num; i++)

 {

  scanf("%f", stu_score[i]);

  stu_average += stu_score[i];

  if (stu_score[i]  60)

   stu_fail++;

  else if (stu_score[i] = 80)

  {

   stu_high++;

   stu_pass++;

  }

  else

   stu_pass++;

 }

 stu_average /= stu_num;

 stu_fail /= stu_num;

 stu_pass /= stu_num;

 stu_high /= stu_num;

 printf("\n学生人数:%d\n", stu_num);

 printf("平均成绩:%.f\n",stu_average);

 printf("高分比例:%.2f%%\n",stu_high*100);

 printf("及格比例:%.2f%%\n",stu_pass*100);

 printf("不及格比例:%.2f%%\n",stu_fail*100);

 return 0;

}

C语言运行STU然后再SCORE

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;

}

C语言编写程序:

#includestdio.h

struct stu

{char stuID[20];

 char stuName[20];

 int stuScore;

};

int main( )

{struct stu scoreArray[5],t;

 int i,j;

 for(i=0;i5;i++)

   scanf("%s%s%d",scoreArray[i].stuID,scoreArray[i].stuName,

     scoreArray[i].stuScore);

 for(i=0;i4;i++)

   for(j=0;j4-i;j++)

     if(scoreArray[j].stuScorescoreArray[j+1].stuScore)

     {t=scoreArray[j];

      scoreArray[j]=scoreArray[j+1];

      scoreArray[j+1]=t;

 }

 for(i=0;i5;i++)

   printf("%s\t%s\t%d\n",scoreArray[i].stuID,scoreArray[i].stuName,

     scoreArray[i].stuScore);

 return 0;

}

C语言结构体定义

struct stuscore{

    int stuNo;

    float stuScore1;

    float stuScore2;

    float stuAvg;

};