1.文件中存储的学生信息按照班级编号升序排列,每个班级的人数可以不同,要求读取文件中所有学生的成绩,计算每个班级的平均成绩,将班级编号和平均成绩输出。

存储格式:

145811  fuxin             100

145811  chengxian     90

145812  zhangxue     92

145812  lijun              88

145813  ha                100

145813  hd                300

145813  hf                 200

#include

#include

int main()

{

int num=0; //班级人数计数

int sumScore =0; //累计成绩

int curClass=0; //当前班级

int curScore=0; //当前成绩

int lastClass=0; //上一个班级

int readItems=0; //正确读入数据数目

FILE *fin; //输入文件

fin=fopen("score.dic","r");

if(!fin) //文件打开失败

{

fprintf(stderr,"error open file!"); //输出错误信息到标准输出

exit(-1); //强制退出,并返回错误码

}

lastClass=0;

char s[100];

while((readItems=fscanf(fin,"%d %*s %d",&curClass,&curScore))!=EOF) //*表示跳过

{

if(readItems!=2)

break;

if(lastClass==curClass||lastClass==0)

{

num++;

sumScore +=curScore;

lastClass=curClass;

}

else

{

if(num==0)

return 0;

printf("%d\t%d\n",lastClass,sumScore/num);

sumScore=curScore;

lastClass=curClass;

num=1;

}

}

printf("%d\t%d\n",lastClass,sumScore/num);

fclose(fin);

}

2.用fgetc函数从键盘逐个输入字符,然后用fputc函数写到磁盘文件即可

#include

#include

int main()

{

FILE *fp;

char ch;

if((fp=fopen("file.dat","w"))==NULL)

{

printf("error open file");

exit(1);

}

printf("请输入字符串,以#结束:\n");

while((ch=getchar())!='#')

{

fputc(ch,fp);

putchar(ch); //在屏幕上显示字符

}

fclose(fp);

putchar(10); //向屏幕输出一个换行符

return 0;

}

3.将一个磁盘文件中的信息复制到另一个磁盘文件中

int main()

{

FILE *fin,*fout;

int ch;

fin=fopen("fin.dat","r");

fout=fopen("fout.dat","w");

if(fin==NULL||fout==NULL)

{

fprintf(stdin,"error open files");

}

while((ch=fgetc(fin))!=EOF) //注意ch是int类型

fputc(ch,fout);

fclose(fin);

fclose(fout);

printf("复制文件成功");

return 0;

}

如果使用feof()函数判断是否到达文件末尾,需要注意先读取再判断是否到文件尾, 也就是说在它之前一定要读一次才能做出判断。因为在读完文件的最后一个字符后,fp->flag仍然没有被置为_IOEOF,因而feof()仍然没有探测到文件结尾。直到再次调用fgetc()执行读操作,feof()才能探测到文件结尾。这样就多执行了一次。

//错误,多输出一行FF

while(!feof(fp))

{

c = fgetc(fp);

printf("%X\n",c);

}

//正确

c = fgetc(fp);

while(!feof(fp))

{

printf("%X\n",c);

c = fgetc(fp);

}

4 从键盘读入若干字符,对它们按照字母大小排序,然后把排好序的字符串送到磁盘文件保存

#define MAXSIZE 1000

int main()

{

FILE *fp;

char str[MAXSIZE];

int ch;

int i;//字符个数

if((fp=fopen("file.dat","w"))==NULL)

{

printf("error open file");

exit(1);

}

i=0;

//从键盘获取数据

while((ch=getchar())!=EOF)

{

if(i==(MAXSIZE))

{

if(fputs(str,fp)==EOF)//向文件输入数据

{

printf("error output to file");

exit(1);

}

i=0;

}

//插入排序

if(i==0)

{

str[i]=ch;

}

else

{

int j;

for(j=i-1;j>=0&& ch

{

str[j+1]=str[j];

}

str[j+1]=ch;

}

i++;

}

if(i>0)

fputs(str,fp);

fclose(fp);

return 0;

}

5 从键盘读入若干字符串,对它们按照字母大小排序,然后把排好序的字符串送到磁盘文件保存

#include

#include

#include

#define MAXLINES 100 //最大行数

#define MAXLEN 1000 //一行最大长度

char *lineptr[MAXLINES]; //指向字符串的指针数组

//返回长度

int getline(char*s,int lim)

{

int c;

char *t=s;

while(--lim>0&&(c=getchar())!=EOF &&c!='\n')

*s++=c;

if(c =='\n')

*s++=c;

*s='\0';

return s-t;

}

int readlines(char *lineptr[],int maxlines)

{

int len,nlines;

char *p,line[MAXLINES];

nlines=0;

while((len=getline(line,MAXLEN))>0)

if(nlines>=maxlines ||(p=(char*)malloc(sizeof(len)))==NULL)

return -1;

else

{

line[len-1]='\0';

strcpy(p,line);

lineptr[nlines++]=p;

}

return nlines;

}

void writeline(char*lineptr[],int nlines,FILE *fp)

{

while(nlines-->0)

{

printf("%s\n",*lineptr);

fputs(*lineptr++,fp);

fputs("\n",fp);//输入换行符

}

}

void swap(char *v[],int i,int j)

{

char *temp;

temp=v[i];

v[i]=v[j];

v[j]=temp;

}

void qsort(char *v[],int left,int right)

{

int i,last;

if(left>right)

return;

swap(v,left,(left+right)/2);

last=left;

for(i=left+1;i<=right;i++)

if(strcmp(v[i],v[left])<0)

swap(v,++last,i);

swap(v,left,last);

qsort(v,left,last-1);

qsort(v,last+1,right);

}

int main()

{

FILE *fp;

if((fp=fopen("file.dat","w"))==NULL)

{

printf("error open file");

exit(1);

}

printf("Enter strings:\n");

int nlines;//读取行数

if((nlines=readlines(lineptr,MAXLINES))>0)

{

qsort(lineptr,0,nlines-1);

writeline(lineptr,nlines,fp);

}

else

{

printf("error input");

}

fclose(fp);

}

6 从键盘输入10个学生的有关数据,然后把它们转存到磁盘文件上去

#define SIZE 10

struct Student_type{

char name[10];

int num;

int age;

char addr[15];

}stud[SIZE]; //全局结构体数组

void save()

{

FILE*fp;

int i,j;

if((fp=fopen("student.dat","wb"))==NULL)

{

printf("error open file\n");

exit(1);

}

for(i=0;i

{

if((j=fwrite(&stud[i],sizeof(struct Student_type),1,fp))!=1)

printf("file write error\n");

}

fclose(fp);

}

void read()

{

FILE *fp;

if((fp=fopen("student.dat","rb"))==NULL)

{

printf("erroe open file");

exit(1);

}

for(int i=0;i

{

fread(&stud[i],sizeof(struct Student_type),1,fp);

printf("%-10s %4d %4d %-15s\n",stud[i].name,stud[i].num,stud[i].age,stud[i].addr);

}

fclose(fp);

}

int main()

{

int i;

printf("Please enter data of students:\n");

for(i=0;i

{

scanf("%s%d%d%s",stud[i].name,&stud[i].num,&stud[i].age,stud[i].addr);

}

save();

read();

return 0;

}

7 有一个磁盘文件,内有一些信息。要求第一次将它的内容显示在屏幕上,第2次把它复制到另一个文件上

void rewind(FILE *stream)

设置文件位置为给定流stream的文件的开头

int main()

{

FILE *fp1,*fp2;

fp1=fopen("fin.dat","r");

fp2=fopen("fout.dat","w");

if(!fp1||!fp2)

{

printf("error open file");

exit(1);

}

while(!feof(fp1))

{

putchar(getc(fp1));

}

putchar(10);//换行

rewind(fp1);//使文件位置标记返回文件头

while(!feof(fp1))

{

putc(getc(fp1),fp2);

}

fclose(fp1);

fclose(fp2);

return 0;

}

8 在磁盘文件上存有10个学生的数据区的开头,从磁盘文件读入相应学生的信息,并把它显示在屏幕上

#define SIZE 10

struct Student_type{

char name[10];

int num;

int age;

char addr[15];

}stud[SIZE];

int main()

{

int i;

FILE *fp;

if((fp=fopen("student.dat","rb"))==NULL)

{

printf("error open file");

exit(1);

}

for(i=0;i

{

fseek(fp,i*sizeof(struct Student_type),0);

fread(&stud[i],sizeof(struct Student_type),1,fp);

printf("%-10s %4d %4d %-15s\n",stud[i].name,stud[i].num,stud[i].age,stud[i].addr);

}

fclose(fp);

return 0;

}

9 有两个磁盘文件,各存放一行字母,今要求把这两个文件中的信息合并(按照字母顺序排列),输出到一个新文件中

int main()

{

FILE *fp1,*fp2,*fp3;

fp1=fopen("fin.dat","r");

fp2=fopen("fout.dat","r");

fp3=fopen("file.dat","w");

if(!fp1||!fp2||!fp3)

{

printf("error open file");

exit(1);

}

char c[1000];//存储数据

int i,j,k,ch;

puts("fileA:");

for(i=0;(ch=getc(fp1))!=EOF&&ch!='\n';i++)

{

c[i]=ch;

putchar(c[i]);

}

puts("\nfileB:");

for(;(ch=getc(fp2))!=EOF&&ch!='\n';i++)

{

c[i]=ch;

putchar(c[i]);

}

for(j=0;j

for(k=0;k

if(c[k]>c[k+1])

{

int temp=c[k];

c[k]=c[k+1];

c[k+1]=temp;

}

puts("\nfileC:");

for(j=0;j

{

putc(c[j],fp3);

putchar(c[j]);

}

fclose(fp1);

fclose(fp2);

fclose(fp3);

return 0;

}

10 两个班的成绩分别存放在两个班的成绩分别存放在两个文件当中。 每个文件有多行, 每行都是由空格分隔的学号、姓名和成绩。现在要将两个班的成绩合并到一起进行排序按照成绩从高到低,如果相同则按学号由小到大排序。将结果输出一个文件当中。两个输入文件名与输出文件名使用命令行参数指定。请你编写一个程序完成上述功能

#include

#include

#include

#define MAXN 200

struct stuNode

{

char stuID[20];

char name[20];

int score;

};

typedef struct stuNode stuType;

int myCompare(stuType m,stuType n)

{

if(m.score!=n.score)

return n.score-m.score;

else

return strcmp(m.stuID,n.stuID);

}

int cmp(const void *a,const void *b)

{

stuType m=*(stuType*)a, n=*(stuType*)b;

return myCompare(m,n);

}

void loadData(FILE* fp,stuType *m)

{

int i=0;

while(fscanf(fp,"%s",m[i].stuID)!=EOF)

{

fscanf(fp,"%s%d",m[i].name,&m[i].score);

i++;

}

qsort(m,i,sizeof(stuType),cmp);

m[i].score=-1; // set -1 as bounder

}

void merge(stuType *a,stuType *b)

{

stuType tmp[MAXN];

int i=0,j=0,index=0;

while(a[i].score>0 && b[j].score>0)

{

if(myCompare(a[i],b[j])<0)

tmp[index++]=a[i++];

else

tmp[index++]=b[j++];

}

while(a[i].score>0)

tmp[index++]=a[i++];

while(a[i].score>0)

tmp[index++]=b[j++];

tmp[index].score=-1;

for(i=0;i

a[i]=tmp[i];

}

int main(int argc,char* argv[])

{

stuType a[MAXN],b[MAXN];

FILE *fin1,*fin2,*fout;

int i;

fin1=fopen(argv[1],"r");

fin2=fopen(argv[2],"r");

fout=fopen(argv[3],"w");

if(!fin1||!fin2||!fin3)

{

printf("error open file");

exit(1);

}

loadData(fin1,a);

loadData(fin2,b);

merge(a,b);

for(i=0;a[i].score>0;i++)

{

fprintf(fout,"%s %s %d\n",a[i].stuID,a[i].name,a[i].score);

}

return 0;

}

c语言fwrite写字符串数组,【字符串数组面试题】面试问题:C语言 文… - 看准网...相关推荐

  1. c语言 指针 字符串 回文 strcmp,【查找字符串面试题】面试问题:C语言指针题集… - 看准网...

    1. 若有说明:int a=2, *p=&a, *q=p;,则以下非法的赋值语句是(). A. p=q;           B. *p=*q;        C. a=*q;         ...

  2. js 跳转到指定位置 高德地图_【高德字符串JavaScript面试题】面试问题:高德地图Js … - 看准网...

    申请JSAPI的开发者key 申请地址:http://lbs.amap.com/dev/key 引入高德地图JavaScript API文件: 创建地图容器 在页面body里你想展示地图的地方创建一个 ...

  3. 单片机红外线c语言,自己写的51单片机的红外线遥控接收程序(C语言)

    自己写的51单片机的红外线遥控接收程序(C语言) (6页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 11.90 积分 //51单片机做的红外遥控实验(C ...

  4. c语言字符串数组分配没错,【字符串数组面试题】面试问题:C语言基础小结… - 看准网...

    26. 位段:指定结构体中成员变量所占的位数(以位的形式紧凑存储) unsigned char/int aaa:1 这里只能是unsigned char/int类型 27. 指针数组:int *p[1 ...

  5. C语言 编程判断花瓶是谁打碎的,【数组编程面试题】面试问题:C语言解决是谁… - 看准网...

    逛贴吧偶遇一道很新颖的C语言编程题,想到自己的C语言荒废了很久,便决定花点时间解决一下练练手. 具体题目如下: 实验题目(4)[见实验教材实验五的题目6]:编写程序exp5_6.c,请判断花瓶是谁打碎 ...

  6. 贪吃蛇项目面试C语言,【游戏数组面试题】面试问题:C语言贪吃蛇(… - 看准网...

    // 贪吃蛇.cpp : 定义控制台应用程序的入口点. #include "stdafx.h" #include #include #include "iostream& ...

  7. c语言 万年历问题,【数组函数面试题】面试问题:万年历的C语言… - 看准网

    万年历_源码 主函数所在源码 #include #include #include int GetWeek(int year,int month,int day);//求今天是周几.周四就返回 4 . ...

  8. c语言怎么使用数组播放下一首音乐,【数组编程面试题】面试问题:c语言MP3播… - 看准网...

    #include #include #include #include //CString的头文件 #include//使用当前时钟做种子 #include #include #include #pr ...

  9. 贪吃蛇项目面试C语言,【游戏数组面试题】面试问题:c语言版贪吃蛇… - 看准网...

    主要运用了光标的移动-.- 教程会在一个月内发布-.-最近考试好多...... 看代码应该能看懂.... 3.1 规则模块与动画模块 1)函数原型:void gui( );void dong( ); ...

最新文章

  1. 原生js实现preAll和nextAll方法
  2. C#控件及常用属性整理
  3. ssm mysql增删改查_SSM配置并实现简单的数据库增删改查操作
  4. (转)ATOM介绍和使用
  5. java中到底有没有指针?
  6. qcc3020定制、qcc3020软件开发tws耳机的注意事项
  7. 什么是WebSockets!?
  8. 家庭服务器搭建,NAS存储
  9. 利用互斥量实现进程间同步
  10. 【运维面试】面试官: 你每天在公司都做啥?
  11. 手机如何开启微信定位服务器,微信怎么定位对方的手机所在位置(偷偷定位微信好友位置)...
  12. 网站快速排名百度首页搜索前十名
  13. 51单片机hc-sr04超声波模块控制的c语言编程,基于STM32单片机对HCSR04超声波的控制...
  14. c语言炉石传说算法设计,CCF-CSP题解 201609-3 炉石传说
  15. 宠物功能[置顶] QQ宠物保姆
  16. 怎样用计算机设置隐私空间,华为手机的三种隐私设置,开放的秘密空间,永远不用担心女友检查手机!...
  17. 借助GitHub pages搭建静态个人网站并绑定域名
  18. [心情]How to Be a Happier Person
  19. 编写第一个c语言程序
  20. UIImagePickerController 选照片 拍照 录视频

热门文章

  1. NodeJS-001-Nodejs学习文档整理(转-出自http://www.cnblogs.com/xucheng)
  2. 字符串常量在内存中的存放位置由系统自动安排。_C++核心编程--内存分区模型...
  3. 搜索引擎登录工具_“搜索引擎营销”有多重要!你知道吗?
  4. python代码中怎么增加数据_python 实现数据库中数据添加、查询与更新的示例代码...
  5. python自动化开发和全栈开发_python全栈开发devops运维自动化方向初到高级在线课程分享...
  6. Python制作词云图根据蒙板图像确定形状和文字颜色
  7. docker -v 文件夹下没有数据_微服务就是Dubbo?并没有那么简单!微服务架构+Docker+k8s了解下...
  8. 面试中死锁的考点总结(死锁的定义、产生原因、四个必要条件、如何预防)
  9. 【数据结构----笔记5】插入排序算法之【希尔排序算法】
  10. ssd颗粒查看工具_SSD又降价了,但是使用前一定要做这几件事