1. 程式人生 > 其它 >C/C++拾遺(二)C語言實現Key-Value鍵值對查詢

C/C++拾遺(二)C語言實現Key-Value鍵值對查詢

實驗任務3

問題1:是 在當前路徑下,生成了文字檔案file3.dat;

問題2:正確且直觀可讀。

實驗任務4

1.子任務1

執行程式,螢幕上正確輸出了按分數由高到底排序的學生資訊,同時,在當前路

徑下,生成了二進位制檔案file4.dat。用記事本程式開啟檔案file4.dat,裡面的資料資訊直觀可讀。 2.子任務2
#include <stdio.h> 
#include <stdlib.h>
#define N 10
typedef struct student {
    int num;
    char name[20];
    int score;
}STU;

int main() { FILE *fp; STU str[N]; int i; fp = fopen("d:\\exe\\file4.dat", "rb"); if( fp == NULL ) { printf("fail to open file4.dat\n"); exit(0); } for(i=0;i<N;i++) { if(fread(&str[i],sizeof(struct student),1,fp)) printf(
"%d %s %d\n",str[i].num,str[i].name,str[i].score); else { printf("file read error\n"); break; } } fclose(fp); return 0; }

實驗任務5

#include<stdio.h>
#include <stdlib.h>
#include<string.h>
 const int N = 10
; typedef struct student { long int id; char name[20]; float obj; float sub; float sum; char level[10]; }STU; void input(STU s[],int n); void output(STU s[],int n); void process(STU s[],int n); int main() { STU stu[N]; printf("錄入%d個考生資訊: 准考證號,姓名,客觀題得分(<=40),操作題得分(<=60)\n", N); input(stu, N); printf("\n對考生資訊進行處理: 計算總分,確定等級\n"); process(stu, N); printf("\n列印考生完整資訊: 准考證號,姓名,客觀題得分,操作題得分,總分,等級\n\n"); output(stu, N); return 0; } //輸入 void input(STU s[],int n) { FILE *fp; int i; fp = fopen("d:\\exe\\exam.txt", "r"); if( fp == NULL ) { printf("fail to open exam.txt\n"); exit(0); } for(i=0;i<n;i++) fscanf(fp, "%d %s %f %f", &s[i].id, &s[i].name, &s[i].obj, &s[i].sub); fclose(fp); } //輸出 void output(STU s[],int n) { FILE *fout; int i; printf("准考證號 姓名 客觀題得分 操作題得分 總分 等級\n------------------------------------------------------------\n"); fout = fopen("d:\\exe\\result.txt", "wt"); if( !fout ) { printf("fail to open result.txt\n"); } for(i=0;i<n;i++) { printf("%ld %10s %9.2f %15.2f %8.2f %8s\n", s[i].id, s[i].name, s[i].obj, s[i].sub, s[i].sum, s[i].level); fprintf(fout,"%ld %10s %9.2f %15.2f %8.2f %8s\n",s[i].id, s[i].name, s[i].obj, s[i].sub, s[i].sum, s[i].level); } //fwrite(s, sizeof(STU), N, fout); fclose(fout); } //算總分 void process(STU s[],int n) { int i,j,m; STU temp; for(i=0;i<n;i++){ s[i].sum = s[i].sub + s[i].obj; } //排序 for(i=0;i<n-1;i++) for(j=0;j<n-i-1;j++) if(s[j].sum < s[j+1].sum) { temp=s[j]; s[j]=s[j+1]; s[j+1]=temp; } //確定等級 for(i=0;i<n;i++) { m=i+1; if((float(m)/n)<0.2) strcpy(s[i].level,"優秀"); else if((float(m)/n)<0.6) strcpy(s[i].level,"合格"); else strcpy(s[i].level,"不合格"); } }

總結:

實驗任務5中最開始定義的output函式裡採取的輸出到檔案的方式是使用fwrite函式,但出現了一個問題,記事本開啟result.txt檔案時,明明定義的是txt,但得到的卻是一堆亂碼。這個問題我想的不是很清楚,可能是前面資料輸入到檔案時我使用的是fscanf函式,以及fwrite是把資料整塊寫進去,這裡應該是要採用迴圈一條一條輸入。還有就是資料輸入的型別最開始使用的不正確。