108
一、基本操作 函數(shù)fun的功能是:在有n個(gè)元素的結(jié)構(gòu)體數(shù)組std中,查找有不及格科目的學(xué)生,找到后輸出學(xué)生的學(xué)號(hào);函數(shù)的返回值是有不及格科目的學(xué)生人數(shù)。例如,主函數(shù)中給出了4名學(xué)生的數(shù)據(jù),則程序運(yùn)行的結(jié)果為: 學(xué)號(hào):N1002 學(xué)號(hào):N1006 共有2位學(xué)生有不及格科目 請(qǐng)?jiān)诔绦虻南聞澗處填入正確的內(nèi)容,并把下劃線刪除,使程序得出正確的 結(jié)果。 注意:源程序存放在考生文件夾下的BLANK1.C中。 不得增行或刪行,也不得更改程序的結(jié)構(gòu)! #include <stdio.h> typedef struct { char num[8]; double score[2]; /**********found**********/ } __(1)__ ; int fun(STU std[ ], int n) { int i, k=0; for(i=0; i<n; i++) /**********found**********/ if( std[i].score[0]<60__(2)__std[i].score[1]<60 ) { k++; printf("學(xué)號(hào):%s ",std[i].num); } /**********found**********/ return __(3)__ ; } main() { STU std[4]={ "N1001", 76.5,82.0 ,"N1002", 53.5,73.0, "N1005", 80.5,66.0,"N1006", 81.0,56.0 }; printf( "\n共有%d位學(xué)生有不及格科目\n" , fun(std,4) ); }
二、簡(jiǎn)單應(yīng)用 給定程序MODI1.C中,函數(shù)fun 的功能是判斷整數(shù)n是否是“完數(shù)”。當(dāng)一個(gè)數(shù)的因子之和恰好等于這個(gè)數(shù)本身時(shí),就稱(chēng)這個(gè)數(shù)為“完數(shù)”。例如:6的因子包括1、2、3,而6=1+2+3,所以6是完數(shù)。如果是完數(shù),函數(shù)返回值為1,否則函數(shù)返回值為0。數(shù)組a中存放的是找到的因子,變量k中存放的是因子的個(gè)數(shù)。 請(qǐng)改正函數(shù)fun中指定部位的錯(cuò)誤,使它能得出正確的結(jié)果。 注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。 #include <stdio.h> int fun(int n, int a[], int *k) { int m=0, i, t; t = n; /**********found**********/ for( i=0; i<n; i++ ) if(n%i==0) { a[m]=i; m++; t=t - i; } /**********found**********/ k=m; /**********found**********/ if ( t=0 ) return 1; else return 0; } main() { int n , a[10], flag, i, k; printf("請(qǐng)輸入一個(gè)整數(shù): "); scanf("%d",&n); flag = fun( n, a, &k ); if(flag) { printf(" %d 是完數(shù),其因子是: ", n); for(i=0;i<k;i++) printf(" %d ", a[i]); printf("\n"); } else printf(" %d 不是完數(shù).\n ", n ); }
三、綜合應(yīng)用 請(qǐng)編寫(xiě)函數(shù)fun :在形參指針?biāo)傅?個(gè)整數(shù)中找出最大值和最小值,最大的放在a中,最小的放在d中。 注意:部分源程序存在PROG1.C中,請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何 內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫(xiě)的若干語(yǔ)句。
#include <stdio.h> void NONO(); void fun(int *a, int *b, int *c, int *d) {
} main() { int a, b, c, d; printf("請(qǐng)輸入4個(gè)整數(shù): "); scanf("%d%d%d%d", &a,&b,&c,&d); printf("原始順序: %d,%d,%d,%d\n", a, b, c, d); fun(&a,&b,&c,&d); printf("處理后: %d,%d,%d,%d\n", a, b, c, d); NONO(); }
void NONO() {/* 本函數(shù)用于打開(kāi)文件,輸入數(shù)據(jù),調(diào)用函數(shù),輸出數(shù)據(jù),關(guān)閉文件。 */ FILE *fp, *wf ; int i, a, b, c, d ;
fp = fopen("in.dat","r") ; wf = fopen("out.dat","w") ; for( i=0; i<5; i++ ) { fscanf(fp, "%d %d %d %d", &a, &b, &c, &d); fun(&a,&b,&c,&d); fprintf(wf, "a=%d,d=%d\n", a, d); } fclose(fp) ; fclose(wf) ; }
一、基本操作答案
【參考答案】
(1) STU
(2) ||
(3) k
【考點(diǎn)分析】
主要考察對(duì)結(jié)構(gòu)體的定義和使用,以及邏輯運(yùn)算符的使用
【解題思路】
填空1: STU 結(jié)構(gòu)體別名,通過(guò)main()中的語(yǔ)句可知
填空2: || 只要學(xué)生二門(mén)課成績(jī)有不及格的,就算不及格,因此使用或運(yùn)算
填空3: k 返回的是不及格的學(xué)生個(gè)數(shù),有題意可知k是累計(jì)個(gè)數(shù)的。
二、簡(jiǎn)單應(yīng)用答案
【參考答案】
(1)for( i=0; i<n; i++ )改為for( i=1; i<n; i++ );
(2)k=m改為*k=m
(3)if ( t=0 )改為if ( t==0 );
【考點(diǎn)分析】
主要考察C語(yǔ)言約定數(shù)組的下標(biāo)是從0開(kāi)始的,理解指針的指向和指針的區(qū)別,以及邏輯運(yùn)算符的使用
【解題思路】
(1)for( i=0; i<n; i++ )改為for( i=1; i<n; i++ );一個(gè)數(shù)的因子從1開(kāi)始,不能從0開(kāi)始
(2)k=m改為*k=m;k為指針不能直接賦值整數(shù),*k為指針指向的內(nèi)容
(3)if ( t=0 )改為if ( t==0 );括號(hào)內(nèi)應(yīng)為判斷語(yǔ)句而不是賦值語(yǔ)句。
三、綜合應(yīng)用答案
【參考答案】
int max,min;//臨時(shí)存放最大值、最小值
max=min=*a;//初始化為*a
if(max<*b)//與*b比較,如果max比*b,修改max,如果min比*b大,修改min,下同
max=*b;
if(min>*b)
min=*b;
if(max<*c)
max=*c;
if(min>*c)
min=*c;
if(max<*d)
max=*d;
if(min>*d)
min=*d;
*d=min;
*a=max;
【考點(diǎn)分析】
主要考察考生對(duì)臨時(shí)變量的初始化及使用,以及如何比較多個(gè)數(shù)的大小
【解題思路】
通過(guò)初始化指定最大值,最小值,再使用當(dāng)前的最值與剩下的值比較,若比最大值大,修改最大值;若比最小值小,修改最小值。
|