int i,j,n,low,heigh,t;
printf(\ scanf(\
if ( heigh< low ){ t=heigh;heigh=low;low=t; } n=fun( s,h,low,heigh );
printf(\ for(i=0;i printf(\ printf(\ out = fopen(\ n=fun( s,h,80,98 ); fprintf(out,\ for(i=0;i if(h[i].s>h[j].s) {tt=h[i] ;h[i]=h[j]; h[j]=tt;} for(i=0;i fprintf(out,\ fprintf(out,\ fclose(out); } 【参考答案】 int fun (STREC *a, STREC *b, int l, int h ) { int i,j=0; for(i=0;i if(a[i].s>=l&&a[i].s<=h) /*将分数高于l,低于h的学生记录存于结构体数组b中*/ b[j++]=a[i]; return j; /*返回分数范围内的学生人数*/ } 【考点分析】 本题考查:结构体数组操作;循环判断结构。 【解题思路】 本题使用循环判断结构实现,循环语句用于遍历结构体数组,条件语句用于判断当前元素是否符合条件,若符合条件则将其存入数组b中。 7、 46 #include void fun( char *a, int n ) { /* 以下代码仅供参考 */ int i=0,j,k=0; while(a[k]=='*') k++; /* k为统计*字符个数 */ if(k>n) { i=n;j=k; /* 以下完成将下标为k至串尾的字符前移k-n个位置 */ } } main() { char s[81]; int n;void NONO (); printf(\ printf(\ fun( s,n ); printf(\ NONO(); } void NONO () {/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 FILE *in, *out ; int i, n ; char s[81] ; in = fopen(\ out = fopen(\ for(i = 0 ; i < 10 ; i++) { fscanf(in, \ fscanf(in, \ fun(s,n) ; fprintf(out, \ } fclose(in) ; fclose(out) ; 47 */ } 【参考答案】 void fun(char *a,int n ) { int i=0, k=0; char *p, *t; p=t=a; /*开始时,p与t同时指向数组的首地址*/ while(*t==′*′) /*用k来统计前部星号的个数*/ {k++; t++;} if(k>n) /*如果k大于n,则使p的前部保留n个星号,其后的字符依次存入数组a中*/ { while(*p) {a[i]=*(p+k-n); i++; p++; } a[i]=′\\0′; /*在字符串最后加上结束标识位*/ } } 【考点分析】 本题考查:循环判断语句;字符串的操作。 【解题思路】 字符串中前导*号不能多于n个,多余的删除。首先需要通过while循环统计字符串前导*号的个数,然后通过if条件语句完成前导*号的个数和n的比较,如果前导*号多于n个,需要把n个*号和其余字符重新保留。 48