本文目录一览:
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;
};