更新时间: 试题数量: 购买人数: 提供作者:

有效期: 个月

章节介绍: 共有个章节

收藏
搜索
题库预览
某课程考分记录表如题76表所示,存储于文件student.txt中。考生可以多次参加该课程考试,取得多个考分,最终成绩按最高分计。文件中的数据首先按照考生考号升序排序,考号相同时按照考分升序排序。编程实现:输入考号,查找并输出考生姓名和最终成绩。 题76表 |考号|230201|240202|240202|240203|240203|240203|240205|240207|...| |姓名|孔佳|叶雯|叶雯|张雨|张雨|张雨|谢钧|李彤|...| |考分|97|89|98|77|88|96|96|95|...| #include<stdio.h> #include<stdlib.h> #include<string.h> struct STU_REC { char id[9]; //考号 char name[16]; //姓名 int grade; //考分 }; int main() { int find_stuid(char findid[],int length,struct STU_REC stuinfo[]); ① *p_stu; struct STU_REC stu[100]; int n,stu_n; char id[9]; if((p_stu=fopen("student.txt","r"))==NULL) { printf("Can not open file!\n"); exit(0); } n=0; //读入文件中的考生信息 while(!feof(p_stu)) { ② (&stu[n],sizeof(struct STU_REC),1,p_stu); n++; } fclose(p_stu); printf("Please enter student_id:\n"); scanf("%s",id); stu_n=find_stuid(id,n-2,stu); //根据返回的记录号输出考生姓名和成绩 if(stu_n>=0) printf("%s,%d\n",stu[stu_n].name,stu[stu_n].grade); else printf("无该考生信息!\n"); return(0); } //查找指定考号的记录号 int find_stuid(char findid[9],int length,struct STU_REC stuinfo[100]) { int left=0,right=length,mid,res=-1; while(left<=right) { mid=(left+right)/2; if(③ ) left=mid+1; else if(strcmp(stuinfo[mid].id,findid)>0) right=mid-1; else { res=mid; ④ ; } } return(res); }(含图)
平面内有若干个点,从指定点出发用一根线逐个连接所有点,遍历路径的算法描述如下: (1)指定起点A; (2)确定最近下一点B;计算出点A与其他未连接点的距离,找到距离最短的点B; (3)连接AB;把AB之间的距离计入遍历路径长度之中; (4)把点B作为新的起点A,返回执行(2),直到遍历所有点; (5)取得从指定点出发的遍历路径长度。 平面坐标系内有10个点,分别输入每个点的坐标,编程将10个点分别作为起点,按上述算法找出10个遍历路径,并按照遍历路径长度升序输出各点坐标。 #include<stdio.h> #include<math.h> #define NUM_D 10 //平面内点的个数 int main() { float getmindist(int start,float dotc[][3]); float dotc[NUM_D][3]={0},t; int i,j,k,p; for(i=0;i<NUM_D;i++) scanf("%f,%f",&dotc[i][0],&dotc[i][1]); for(i=0;i<NUM_D;i++) dotc[i][2]= ① ; for(i=1;i<NUM_D;i++) { ② ; for(j=i;j<NUM_D;j++) if(dotc[p][2]>dotc[j][2]) p=j; if(p!=i-1) for(k=0;k<3;k++) { t=dotc[p][k];dotc[p][k]=dotc[i-1][k];dotc[i-1][k]=t; } } for(i=0;i<NUM_D;i++) printf("%7.2f,%7.2f--%7.2f\n",dotc[i][0],dotc[i][1],dotc[i][2]); return(0); } //求从指定起点遍历路径的长度 float getmindist(int start,float dotc[NUM_D][3]) { int signdot[NUM_D]={0}; int i,j,p_min; float s_min=0,d_min,d; signdot[start]=1; for(i=1;i<NUM_D;i++) { d_min=0; //确定距离最近的下一点 for(j=0;j<NUM_D;j++) { if(!signdot[j]) { //求两点之间的距离d d=sqrt(pow(dotc[start][0]-dotc[j][0],2)+pow(dotc[start][1]-dotc[j][1],2)); if(d_min==0|| ③ ) { d_min=d; p_min=j; } } } start=p_min; signdot[start]=1; ④ ; } return(s_min); }