本文目錄一覽:
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;
};
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/150577.html