生活随笔
收集整理的這篇文章主要介紹了
全国计算机等级考试题库二级C操作题100套(第15套)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
第15套:
程序通過定義學(xué)生結(jié)構(gòu)體變量,存儲了學(xué)生的學(xué)號、姓名和3門課的成績。所 有學(xué)生數(shù)據(jù)均以二進制方式輸出到student.dat文件中。函數(shù)fun的功能是從指定 文件中找出指定學(xué)號的學(xué)生數(shù)據(jù),讀入此學(xué)生數(shù)據(jù),對該生的分數(shù)進行修改,使 每門課的分數(shù)加3分,修改后重寫文件中該學(xué)生的數(shù)據(jù),即用該學(xué)生的新數(shù)據(jù)覆蓋 原數(shù)據(jù),其它學(xué)生數(shù)據(jù)不變;若找不到,則什么都不做。 請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除, 使程序得出正確的結(jié)果。
注意:源程序存放在考生文件夾下的BLANK1.C中。
不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
給定源程序:
#include <stdio.h>
#define N 5
typedef struct student
{
long sno
;
char name
[10];
float score
[3];
} STU
;
void fun(char *filename
, long sno
)
{ FILE
*fp
;
STU n
; int i
;
fp
= fopen(filename
,"rb+");
while (!feof(__1__
))
{ fread(&n
, sizeof(STU
), 1, fp
);
if (n
.sno__2__sno
) break;
}
if (!feof(fp
))
{ for (i
=0; i
<3; i
++) n
.score
[i
] += 3;
fseek(__3__
, -1L*sizeof(STU
), SEEK_CUR);
fwrite(&n
, sizeof(STU
), 1, fp
);
}
fclose(fp
);
}
main()
{ STU t
[N
]={ {10001,"MaChao", 91, 92, 77}, {10002,"CaoKai", 75, 60, 88},
{10003,"LiSi", 85, 70, 78}, {10004,"FangFang", 90, 82, 87},
{10005,"ZhangSan", 95, 80, 88}}, ss
[N
];
int i
,j
; FILE
*fp
;
fp
= fopen("student.dat", "wb");
fwrite(t
, sizeof(STU
), N
, fp
);
fclose(fp
);
printf("\nThe original data :\n");
fp
= fopen("student.dat", "rb");
fread(ss
, sizeof(STU
), N
, fp
);
fclose(fp
);
for (j
=0; j
<N
; j
++)
{ printf("\nNo: %ld Name: %-8s Scores: ",ss
[j
].sno
, ss
[j
].name
);
for (i
=0; i
<3; i
++) printf("%6.2f ", ss
[j
].score
[i
]);
printf("\n");
}
fun("student.dat", 10003);
fp
= fopen("student.dat", "rb");
fread(ss
, sizeof(STU
), N
, fp
);
fclose(fp
);
printf("\nThe data after modifing :\n");
for (j
=0; j
<N
; j
++)
{ printf("\nNo: %ld Name: %-8s Scores: ",ss
[j
].sno
, ss
[j
].name
);
for (i
=0; i
<3; i
++) printf("%6.2f ", ss
[j
].score
[i
]);
printf("\n");
}
}
解題思路:
本題是考察如何從指定文件中找出指定學(xué)號的學(xué)生數(shù)據(jù),并進行適當?shù)男薷?#xff0c;修改后重新寫回到文件中該學(xué)生的數(shù)據(jù)上,即用該學(xué)生的新數(shù)據(jù)覆蓋原數(shù)據(jù)。
第一處:判斷讀文件是否結(jié)束,所以應(yīng)填:fp。
第二處:從讀出的數(shù)據(jù)中判斷是否是指定的學(xué)號,其中學(xué)號是由形參sno來傳遞的,所以應(yīng)填:==。
第三處:從已打開文件fp中重新定位當前讀出的結(jié)構(gòu)位置,所以應(yīng)填:fp。
給定程序MODI1.C中函數(shù)fun的功能是:利用插入排序法對字符串中的字符按從小到大的順序進行排序。插入法的基本算法是:先對字符串中的頭兩個元素進行排序。然后把第三個字符插入到前兩個字符中,插入后前三個字符依然有序; 再把第四個字符插入到前三個字符中,……。待排序的字符串已在主函數(shù)中賦予。
請改正程序中的錯誤,使它能得出正確結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
給定源程序:
#include <stdio.h>
#include <string.h>
#define N 80
void insert(char *aa
)
{ int i
,j
,n
; char ch
;
n
=strlen
[ aa
];
for( i
=1; i
<n
;i
++ ) {
c
=aa
[i
];
j
=i
-1;
while ((j
>=0) && ( ch
<aa
[j
] ))
{ aa
[j
+1]=aa
[j
];
j
--;
}
aa
[j
+1]=ch
;
}
}
main( )
{ char a
[N
]="QWERTYUIOPASDFGHJKLMNBVCXZ";
int i
;
printf
("The original string : %s\n", a
);
insert(a
) ;
printf("The string after sorting : %s\n\n",a
);
}
解題思路:
第一處: 函數(shù)應(yīng)該使用圓括號,所以應(yīng)改為:n=strlen(aa) ;。
第二處: 變量c沒有定義,但后面使用的是ch變量,所以應(yīng)改為:ch=aa[i];。
N名學(xué)生的成績已在主函數(shù)中放入一個帶頭節(jié)點的鏈表結(jié)構(gòu)中,h指向鏈表的頭節(jié)點。請編寫函數(shù)fun,它的功能是:找出學(xué)生的最高分,由函數(shù)值返回。
注意: 部分源程序在文件PROG1.C文件中。
請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。
給定源程序:
#include <stdio.h>
#include <stdlib.h>
#define N 8
struct slist
{ double s
;
struct slist
*next
;
};
typedef struct slist STREC
;
double fun( STREC
*h
)
{
}
STREC
* creat( double *s
)
{ STREC
*h
,*p
,*q
; int i
=0;
h
=p
=(STREC
*)malloc(sizeof(STREC
));p
->s
=0;
while(i
<N
)
{ q
=(STREC
*)malloc(sizeof(STREC
));
q
->s
=s
[i
]; i
++; p
->next
=q
; p
=q
;
}
p
->next
=0;
return h
;
}
outlist( STREC
*h
)
{ STREC
*p
;
p
=h
->next
; printf("head");
do
{ printf("->%2.0f",p
->s
);p
=p
->next
;}
while(p
!=0);
printf("\n\n");
}
main()
{ double s
[N
]={85,76,69,85,91,72,64,87}, max
;
STREC
*h
;
h
=creat( s
); outlist(h
);
max
=fun( h
);
printf("max=%6.1f\n",max
);
NONO();
}
解題思路:
本題是考察如何從鏈表中求出學(xué)生的最高分。
我們給出的程序是利用while循環(huán)語句以及臨時結(jié)構(gòu)指針p變量來求出最高分。
將鏈表中的第1個值賦給變量max。將鏈表指針p的初始位置指向h的next指針(h->next)。判斷p指針是否結(jié)束,如果結(jié)束,則返回max,否則做下一步。判斷max是否小于p->s,如果小于,則max取p->s,否則不替換。取p->next賦值給p(取下一結(jié)點位置給p),轉(zhuǎn)3繼續(xù)。
參考答案:
double fun( STREC
*h
)
{
double max
=h
->s
;
STREC
*p
;
p
=h
->next
;
while(p
)
{ if(p
->s
>max
)
max
=p
->s
;
p
=p
->next
;
}
return max
;
}
STREC
* creat( double *s
)
{ STREC
*h
,*p
,*q
; int i
=0;
h
=p
=(STREC
*)malloc(sizeof(STREC
));p
->s
=0;
while(i
<N
)
{ q
=(STREC
*)malloc(sizeof(STREC
));
q
->s
=s
[i
]; i
++; p
->next
=q
; p
=q
;
}
p
->next
=0;
return h
;
}
outlist( STREC
*h
)
{ STREC
*p
;
p
=h
->next
; printf("head");
do
{ printf("->%2.0f",p
->s
);p
=p
->next
;}
while(p
!=0);
printf("\n\n");
}
總結(jié)
以上是生活随笔為你收集整理的全国计算机等级考试题库二级C操作题100套(第15套)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。