问题 填空题

以下程序运行后的输出结果是 【20】
#include <stdio, h>
main ( )
char a [ ] = "Language", b [ ]: "Programe";
char * pl, * p2; int k;
p1=a;p2=b;
for(k=0;k<=7;k++)
if( * (p1 +k) == * (p2+k)) printf("% c", * (pi +k));

答案

参考答案:gae

解析: 本题考查字符指针变量与字符数组。for循环语句共循环8次:
①当k=0时,*(Pl+0)=’L’,*(p2+0)=’P’,L!=P,没有输出。
②当k=1时,*(p1+1)=’a’,*(p2+1)=’r’,a!=r,没有输出。
③当k=2时,*(p1+2)=’n’,*(p2+2)=’o’,n!=o,没有输出。
④当k=3时,*(P1+3)=’g’,*(p2+3)=’g’,g==g,所以输出g。
⑤当k=4时,*(p1+4)=’u’,*(P2+4)=’r’,u!=r,没有输出。
⑥当k=5时,*(p1+5)=’a’,*(p2+5)=’a’,a==a,所以输出a。
⑦当k=6时,*(p1+6)=’g’,*(p2+6)=’m’,g!=m,没有输出。
⑧当k=7时,*(p1+7)=’e’,*(p2+7)=’e’,e==e,输出e。
⑨当k=8时结束循环,输出结果为:gae。

问答题 简答题
问答题


阅读以下应用程序说明和C程序,将C程序段中(1)~(6)空缺处的语句填写完整。
【说明】
某大学征询学生意见,从各学院预选的n(n≤60)位优秀大学生中,评选出“十佳大学生”。以下【C程序】对各位学生选票进行相关的统计、排序等处理。
(1)各学院预选的优秀大学生按1,2,…顺序连续编号,每个编号用两个字符表示,即01,02,…。
(2)所回收的选票按以下格式存于文件source中,每行字符串对应一张选票。其中,姓名占10个字符,学院名称占30个字符,大学生编号占20个字符。
(3)对应名次的大学生编号可以有空缺,但必须用00表示。
(4)若编号超出规定范围,或编号重复出现,按照废票处理。
(5)按选票中所列“十佳大学生”顺序给出各名大学生的得分。评分标准如下:
一 二 三 四 五 六 七 八 九 十
15 12 9 7 6 5 4 3 2 1
(6)按各位大学生得分数由高到低顺序排队,并按以下格式列出“十佳大学生”排行表。
名次 大学生编号 合计得分 合计得票数
若得分相同,则得票数多的在前;若得分和得票数都相同,则编号小的在前。
以下【C程序】中所应用到的函数fopen、fclose和fgets都是I/O程序库中的函数。
【C程序】
#include <stdio. h>
#define n 60
long int tn[n], td[n], score[n+1][10], order[n];
char s[80];
int mark[]=(15,12,9,7,6,5,4,3,2,1);
FILE *fp, *fopen();
Main()
{ int c, g, k, I, j, b[10];
long int e, d, t, tt, dd;
char * p;
for(i=0; i<=n; i++)
for(j=0; j<10; j++)
score[i][j]=0;
fP=fopen("source", "r");/*以读方式打开文件source*/
p=fgets(s, 80, fp); /*读fp所指文件的下一行字符串于s*/
while(*p){
g=l; k=0; p+=40;
while(k<10){
c=((*p++)-’0’)*10+((*p++)-’0’);
b[k++]=c)
if(c<=n){
if(c)
{ i=0;
While( (1) );
If( (2) ){g=0; break;}
}
else{g=0; break;}
}
If(g)
For(i=0; i<k; i++)
If(b[i])
(3) ;
p=fgets(s, 80, fP);
}
Fclose(fp); /*关闭fp所指文件*/
For(i=1; i<n; i++){
For(t=0, d=0, j=0; j<10; j++){
t +=(e=score[i][j]);
d +=e * mark[j];
}
tn[i-1]=t; td[i-1]=d; order[i-1]=i;
}
For(i=0; i<n-1; i++){
k=i;
for(j=i+1; j<n; j++)
if((t=td[order[j]-1])>(d=td[order[k]-1]))
k=j;
else
if(t==d){
tt= (4) ;
dd= (5) ;
for(c=0; c<10; c++)
if((e= (6) )>0){
k=j; break;}
else
if(e<0)break;
}
If(k!=i){
t=order[k]; order[k]=order[i]; order[i]=t;
}
}
For(i=0; i<10; i++)
Printf("%2d%2d%d%d\n", i+1, order[i], td[order[i]-1], tn[order[i]-1]));
}
}

【问题2】
以上C程序段中,采用了哪种算法对大学生得分进行排序