南師大複試編程訓練十一

101.共用體類型存儲方式

#include <stdio.h>
union Data
{
    int i;
    char ch;
    float f;   //i,ch,f共用同一存儲單元
} a;  //一瞬間只能放其中一個變量成員
int main()
{
    a.i=97;
    printf("%d\n",a.i);  //輸出int
    printf("%c\n",a.ch); //輸出對應ASCII碼的字符
    printf("%f\n",a.f);  //float輸出int的低兩個字節
    return 0;
}

運行結果:

102.共用體教師和學生示例

#include <stdio.h>

struct Person
{
    int num;
    char name[20];
    char sex;
    char job;
    union   //共用體
    {
        int clas;
        char position[10];
    } category;
} person[2];
int main()
{
    int i;
    printf("輸入教師或學生的信息:\n");
    for(i=0; i<2; i++)
    {
        scanf("%d %s %c %c",&person[i].num,person[i].name,&person[i].sex,&person[i].job);
        if(person[i].job=='s')   //若job爲學生,則輸入班級
            scanf("%d",&person[i].category.clas);
        else if(person[i].job=='t')  //若job爲教師,則輸入職位
            scanf("%s",person[i].category.position);
        else
            printf("Input error!\n");
    }
    printf("打印教室或學生的成績:\n");
    for(i=0; i<2; i++)
    {
        printf("%d %s %c %c ",person[i].num,person[i].name,person[i].sex,person[i].job);
        if(person[i].job=='s')
            printf("%d",person[i].category.clas);
        else if(person[i].job=='t')
            printf("%s",person[i].category.position);
        printf("\n");
    }

    return 0;
}

運行結果:

103.枚舉類型

#include <stdio.h>

int main()
{
    enum Weekday {sun,mon,tue,wed,thu,fri,sat} workday,weekend;
    workday=mon;
    weekend=sun;//可以直接進行賦值
    printf("mon=%d\ntue=%d\nwed=%d\nthu=%d\nfri=%d\nsat=%d\nsun=%d\n",mon,tue,wed,thu,fri,sat,sun);
    printf("for語句打印enum:\n");
    for(int i=sun; i<=sat; i++)    //用for進行循環enum
        printf("%d\n",i);
    if(workday==mon)  
        printf("workday,I want to play with you!\n");
    if(weekend==sun)
        printf("Weekend,I want to work very hard!\n");
    printf("另一種賦初值方法:\n");
    enum week {Mon = 1, Tues, Wed, Thurs, Fri = 10, Sat, Sun};  //進行賦值之後的值
    printf("Mon=%d\nTues=%d\nWed=%d\nThurs=%d\nFri=%d\nSat=%d\nSun=%d\n", Mon, Tues, Wed, Thurs, Fri, Sat, Sun);

    return 0;
}

運行結果:

總結:

1、在沒有顯示說明的情況下,枚舉常量(也就是花括號中的常量名)默認第一個枚舉常量的值爲0,往後每個枚舉常量依次遞增

2、在部分顯示說明的情況下,未指定的枚舉名的值將依着之前最有一個指定值向後依次遞增

3、一個整數不能直接賦值給一個枚舉變量,必須用該枚舉變量所屬的枚舉類型進行類型強制轉換後才能賦值

4、同一枚舉類型中不同的枚舉成員可以具有相同的值

5、同一個程序中不能定義同名的枚舉類型,不同的枚舉類型中也不能存在同名的枚舉成員(枚舉常量)

104.用getchar函數從鍵盤逐個輸入字符,然後用fputc函數寫到磁盤文件即可。

#include <stdio.h>
#include <stdlib.h>
int main()
{
    FILE *fp;
    char ch,filename[10];
    printf("請輸入所用的文件名:");
    scanf("%s",filename);
    if((fp=fopen(filename,"w"))==NULL)  //以只寫的方式打開文件,若沒有文件則新建一個
    {
        printf("無法打開此文件\n");
        exit(0);
    }
    ch=getchar();        //用來接收最後輸入的回車符
    printf("輸入一個字符串(以#結束):");
    ch=getchar();        //輸入一個字符
    while(ch!='#')
    {
        fputc(ch,fp);    //輸入文件中
        putchar(ch);     //屏幕上打印
        ch=getchar();    //繼續接受下一個字符
    }
    fclose(fp);   //關閉文件
    putchar('\n');
    return 0;
}

運行結果:

105.將一個磁盤文件的信息複製到另一個磁盤文件中。例如:file1.dat->file2.dat

#include <stdio.h>
#include <stdlib.h>
int main()
{
    FILE *in,*out;
    char ch,infile[10],outfile[10];
    printf("輸入讀入文件的名字:");
    scanf("%s",infile);
    printf("輸入讀出文件的名字:");
    scanf("%s",outfile);
    if((in=fopen(infile,"r"))==NULL)  //"r"打開方式,找不到就報錯
    {
        printf("無法打開此文件\n");
        exit(0);
    }
    if((out=fopen(outfile,"w"))==NULL)  //"w"打開方式,找不到就新建
    {
        printf("無法打開此文件\n");
        exit(0);
    }
    while(!feof(in))  //未遇到輸入文件的結束標誌
    {
        ch=fgetc(in);  //從輸入文件中讀一個字符
        fputc(ch,out);  //將ch寫入到輸出文件中
        putchar(ch);   //將ch顯示在屏幕上
    }
    putchar('\n');
    fclose(in);
    fclose(out);
    return 0;
}

運行結果:

106.從鍵盤讀入若干個字符串,對它們按字母大小的順序排序,然後把排好序的字符串送到磁盤文件中保存。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
    FILE *fp;
    char str[3][10],temp[10];
    int i,j,k,n=3;
    printf("Enter strings:\n");
    for(i=0; i<n; i++)   //輸入n個字符串
        gets(str[i]);
    for(i=0; i<n-1; i++)   //對輸入的n個字符串,由小到大,選擇排序
    {
        k=i;
        for(j=i+1; j<n; j++)
            if(strcmp(str[k],str[j])>0)
                k=j;
        if(k!=i)
        {
            strcpy(temp,str[i]);
            strcpy(str[i],str[k]);
            strcpy(str[k],temp);
        }
    }
    if((fp=fopen("file1.dat","w"))==NULL)  //打開文件
    {
        printf("can't open file!\n");
        exit(0);
    }
    printf("\nThe new sequence:\n");
    for(i=0; i<n; i++)
    {
        fputs(str[i],fp);       //將字符串輸入到文件中
        fputs("\n",fp);         //將換行輸入到文件
        printf("%s\n",str[i]);  //在屏幕上顯示結果
    }
    return 0;
}

運行結果:

107.從文件中讀回字符串,並在屏幕上顯示。

#include <stdio.h>
#include <stdlib.h>
int main()
{
    FILE *fp;
    char str[3][10];
    int i=0;
    if((fp=fopen("file1.dat","r"))==NULL)  //打開文件
    {
        printf("can't open file!\n");
        exit(0);
    }
    while(fgets(str[i],10,fp)!=NULL)  //fgets(str,n,fp)從fp所指向的文件讀入一個長度爲(n-1)的字符串
    {
        printf("%s",str[i]);  //因爲讀入字符串數組中的每個字符串後都有"\n"
        i++;                  //因此,printf()中不必加"\n"
    }
    fclose(fp);
    return 0;
}

運行結果:

108. 用格式化的方式讀寫文件

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int a,c;
    float b,d;
    FILE *fp;
    if((fp=fopen("file1.dat","w"))==NULL)  //必須以"w"打開文件
    {
        printf("can't open file!\n");
        exit(0);
    }
    printf("請輸入整型a和浮點型b:\n");
    scanf("%d %f",&a,&b);
    fprintf(fp,"%d,%5.2f\n",a,b);   //格式化輸入到文件中
    fclose(fp);

    if((fp=fopen("file1.dat","r"))==NULL)  //必須以"r"打開文件,否則會出錯
    {
        printf("can't open file!\n");
        exit(0);
    }
    printf("\n讀取文件中的數據:\n");
    fscanf(fp,"%d,%f",&c,&d);        //從文件中讀出數據
    printf("%d,%5.2f\n",c,d);        //打印在屏幕上
    fclose(fp);

    return 0;
}

運行結果:

109. 用二進制方式讀寫一組數據

#include <stdio.h>
#include <stdlib.h>
#define SIZE 4
struct Student_type    //學生結構體
{
    char name[10];
    int num;
    int age;
    char addr[15];
} stud[SIZE];

void save()   //將數據保存到文件中
{
    FILE *fp;
    int i;
    if((fp=fopen("std.dat","wb"))==NULL)
    {
        printf("can't open file!\n");
        return;
    }
    for(i=0; i<SIZE; i++)
        if(fwrite(&stud[i],sizeof(struct Student_type),1,fp)!=1)  //二進制形式輸出到文件中
            printf("file write error!\n");
    fclose(fp);
}

void print()   //將數據讀出
{
    struct Student_type st[SIZE];
    FILE *fp;
    int i;
    if((fp=fopen("std.dat","rb"))==NULL)
    {
        printf("can't open file!\n");
        return;
    }
    for(i=0; i<SIZE; i++)
    {
        if(fread(&st[i],sizeof(struct Student_type),1,fp)!=1)  //二進制形式讀取文件數據
            printf("file write error!\n");
        printf("%s %d %d %s\n",st[i].name,st[i].num,st[i].age,st[i].addr);  //將數據打印在屏幕上
    }
    fclose(fp);
}

void print2()
{
    struct Student_type stu[SIZE];
    FILE *fp;
    int i;
    if((fp=fopen("std.dat","rb"))==NULL)
    {
        printf("can't open file!\n");
        return;
    }
    for(i=0; i<SIZE; i+=2)
    {
        fseek(fp,i*sizeof(struct Student_type),0);      //隨機讀,用fseek指定位置,0表示距文件開始位置,1表示距文件當前位置,2表示距文件末尾位置
        if(fread(&stu[i],sizeof(struct Student_type),1,fp)!=1)  //二進制形式讀取文件數據
            printf("file write error!\n");
        printf("%s %d %d %s\n",stu[i].name,stu[i].num,stu[i].age,stu[i].addr);  //將數據打印在屏幕上
    }
    fclose(fp);
}
int main()
{
    int i;
    printf("Please enter data of students:\n");
    for(i=0; i<SIZE; i++)  //輸入學生數據
        scanf("%s%d%d%s",stud[i].name,&stud[i].num,&stud[i].age,stud[i].addr);
    save();    //存入文件中
    printf("讀出文件內容:\n");
    print();   //讀取文件數據

    printf("隨機讀取文件內容:\n");
    print2();
    return 0;
}

運行結果:

110.隨機讀寫數據文件rewind

#include <stdio.h>
#include <stdlib.h>
int main()
{
    FILE *fp1,*fp2;
    if((fp1=fopen("file1.dat","r"))==NULL)   //打開輸入文件
    {
        printf("can't open file!\n");
        exit(0);
    }
    if((fp2=fopen("file2.dat","w"))==NULL)   //打開輸出文件
    {
        printf("can't open file!\n");
        exit(0);
    }
    while(!feof(fp1))
        putchar(fgetc(fp1));   //從文件中逐個讀入字符,然後輸出到屏幕
    putchar('\n');

    rewind(fp1);   //此時文件指針已指向末尾,使其重新回到文件頭
    while(!feof(fp1))
        fputc(fgetc(fp1),fp2);  //從文件頭重新讀字符,並輸入到文件file2中

    fclose(fp1);
    fclose(fp2);
    return 0;
}

運行結果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章