//程序填空题:在此程序中,通过定义学生结构体变量,存储了学生的学号,姓名和三门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun()函数的功能是重写形参filename所指文件中最后一个学生的数据,即用新的覆盖旧的,其他的不变。

//重难点:结构体数据的定义。对文件的读写操作。双层for循环输出结构体的数据。

 #include  <stdio.h>
#define N 5
typedef struct student {
long sno;
char name[];
float score[];
} STU;
void fun(char *filename, STU n)
{ FILE *fp;
/**********found**********/
fp = fopen(filename, "rb+");//打开文件,这里填首地址,不加*号
/**********found**********/
fseek(fp, -(long)sizeof(STU), SEEK_END);//重定位流上的文件指针,第一参数类型为:FILE *stream,把指针指向最后一个数据。
/**********found**********/
fwrite(&n, sizeof(STU), , fp);
fclose(fp);
}
void main()
{ STU t[N]={ {,"MaChao", , , }, {,"CaoKai", , , },
{,"LiSi", , , }, {,"FangFang", , , },
{,"ZhangSan", , , }};
STU n={,"ZhaoSi", , , }, ss[N];
int i,j; FILE *fp;
fp = fopen("student.dat", "wb");
fwrite(t, sizeof(STU), N, fp);
fclose(fp);
fp = fopen("student.dat", "rb");
fread(ss, sizeof(STU), N, fp);
fclose(fp);
printf("\nThe original data :\n\n");
for (j=; j<N; j++)//for双层循环进行结构体数据的遍历输出。
{ printf("\nNo: %ld Name: %-8s Scores: ",ss[j].sno, ss[j].name);
for (i=; i<; i++) printf("%6.2f ", ss[j].score[i]);
printf("\n");
}
fun("student.dat", n);
printf("\nThe data after modifing :\n\n");
fp = fopen("student.dat", "rb");
fread(ss, sizeof(STU), N, fp);
fclose(fp);
for (j=; j<N; j++)
{ printf("\nNo: %ld Name: %-8s Scores: ",ss[j].sno, ss[j].name);
for (i=; i<; i++) printf("%6.2f ", ss[j].score[i]);
printf("\n");
}
}

//程序修改题:在此程序中,函数Creatlink的功能是:创建带头节点的单向链表,使它能得出正确结果。

//重难点:结构体类型链表的定义。链表数据的赋值,malloc()函数内存申请。处理前进行表头的备份。

 #include <stdio.h>
#include <stdlib.h>
typedef struct aa
{ int data;
struct aa *next;
} NODE;
NODE *Creatlink(int n, int m)
{ NODE *h=NULL, *p, *s;
int i;
/**********found***********/
p=(NODE *)malloc(sizeof(NODE));//变量p指向刚分配的结构节点指针,(NODE *)表示类型,就好比(int),这里进行内存申请
h=p;//使用临时变量h保存p指针的初始位置。
p->next=NULL;
for(i=; i<=n; i++)
{ s=(NODE *)malloc(sizeof(NODE));//定义一个s进行数据的复制
s->data=rand()%m; s->next=p->next;
p->next=s; p=p->next;
}
/**********found***********/
return h;
}
void outlink(NODE *h)
{ NODE *p;
p=h->next;//从新定义个指针指向h,进行数据的输出
printf("\n\nTHE LIST :\n\n HEAD ");
while(p)
{ printf("->%d ",p->data);
p=p->next;
}
printf("\n");
}
void main()
{ NODE *head;//定义结构体类型链表指针
head=Creatlink(,);//函数返回链表表头
outlink(head);
}

//程序设计题:在此程序中,编写fun()函数,它的功能是:统计一行字符串中单词的个数,作为函数的返回值。字符串在主函数中输入,规定所有单词由小写字母组成,单词之间由若干个空格隔开,一行的开头没有空格。

//重难点:思路为遍历整个字符串,然后遇见空格,就进行它的前一个字符的判断,如果不为空格就代表一个单词。

 #include<string.h>
#include<stdio.h>
#define N 80
int fun(char *s)
{
int i=;//默认输入的单词最后不是以空格结尾,所以加1。
char a;
for (*s;*s!='\0'; s++)//字符串以‘\0’结尾
{
if (*s == ' ')
{
a = *(s - );
//a = *(--s);//这里尽量不要使用--s,这样的话指针位置会改变。
if (a >= 'a'&&a <= 'z')//这里是大于等于
{
i = i + ;
//s=s+1;
}
}
}
return i;
}
void main()
{
FILE *wf;
char line[N];
int num=;
printf("Enter a string:\n ");
gets(line);
num=fun(line);
printf("The number of word is:%d\n\n ",num);
/******************************/
wf=fopen("out.dat","w");
fprintf(wf,"%d",fun("a big car"));
fclose(wf);//断开文件指针和文件之间的联系。
/*****************************/
}

最新文章

  1. js组件在线编辑器插件、图表库插件、文件树插件
  2. JPEG文件格式介绍
  3. MAC中安卓开发环境的下载(转)
  4. 本地的手机号码归属地查询-oracle数据
  5. IEEE754测试-软件
  6. 关于HIVE的配置
  7. Eclipse NDK 配置
  8. Oracle sqlldr使用示例
  9. 异常信息:CLR无法从COM 上下文0x645e18 转换为COM上下文0x645f88,这种状态已持续60秒。拥有目标上下文/单元的线程很有可能执行的是非泵式等待或者在不发送 Windows 消息的
  10. boost库在windows下的编译和使用
  11. 鼠标移入 移出div div会消失的处理
  12. 爬虫day 04(通过登录去爬虫 解决django的csrf_token)
  13. 201621123050 《Java程序设计》第1周学习总结
  14. ●BZOJ 3309 DZY Loves Math
  15. MongoDb安装和快速入门
  16. youtube-dl下载youtube视频时查看分辨率以及选择分辨率下载
  17. Ubuntu 安装网卡驱动
  18. 「CodeForces - 598B」Queries on a String
  19. Vue &amp; webpack
  20. .net调用系统软键盘(兼容win7及win10)

热门文章

  1. echarts 如何去掉折线上的小圆点
  2. docker命令总结(一)
  3. try/catch/finally 语句
  4. blur()低通滤波
  5. DVWA的安装及报错解决
  6. AC3 Rematrix
  7. 【Python】 数字求和
  8. mysql 同时支持多少连接MYSQL 查看最大连接数和修改最大连接数
  9. JavaScript对象之对象标签和对象序列化
  10. ThinkPHP中的时间自动填充 无法获取时间