zoukankan      html  css  js  c++  java
  • 计算机二级-C语言-对文件的读写操作。链表的定义与赋值。对字符串的遍历和处理。

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

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

     1 #include  <stdio.h>
     2 #define    N    5
     3 typedef struct  student {
     4   long  sno;
     5   char  name[10];
     6   float  score[3];
     7 } STU;
     8 void fun(char  *filename, STU  n)
     9 { FILE  *fp;
    10 /**********found**********/
    11   fp = fopen(filename, "rb+");//打开文件,这里填首地址,不加*号
    12 /**********found**********/
    13   fseek(fp, -(long)sizeof(STU), SEEK_END);//重定位流上的文件指针,第一参数类型为:FILE *stream,把指针指向最后一个数据。
    14 /**********found**********/
    15   fwrite(&n, sizeof(STU), 1, fp);
    16   fclose(fp);
    17 }
    18 void main()
    19 { STU  t[N]={ {10001,"MaChao", 91, 92, 77}, {10002,"CaoKai", 75, 60, 88},
    20              {10003,"LiSi", 85, 70, 78},    {10004,"FangFang", 90, 82, 87},
    21              {10005,"ZhangSan", 95, 80, 88}};
    22   STU  n={10006,"ZhaoSi", 55, 70, 68}, ss[N];
    23   int  i,j;      FILE  *fp;
    24   fp = fopen("student.dat", "wb");
    25   fwrite(t, sizeof(STU), N, fp);
    26   fclose(fp);
    27   fp = fopen("student.dat", "rb");
    28   fread(ss, sizeof(STU), N, fp);
    29   fclose(fp);
    30   printf("
    The original data :
    
    ");
    31   for (j=0; j<N; j++)//for双层循环进行结构体数据的遍历输出。
    32   {  printf("
    No: %ld  Name: %-8s      Scores:  ",ss[j].sno, ss[j].name);
    33      for (i=0; i<3; i++)  printf("%6.2f ", ss[j].score[i]);
    34      printf("
    ");
    35   }
    36   fun("student.dat", n);
    37   printf("
    The data after modifing :
    
    ");
    38   fp = fopen("student.dat", "rb");
    39   fread(ss, sizeof(STU), N, fp);
    40   fclose(fp);
    41   for (j=0; j<N; j++)
    42   {  printf("
    No: %ld  Name: %-8s      Scores:  ",ss[j].sno, ss[j].name);
    43      for (i=0; i<3; i++)  printf("%6.2f ", ss[j].score[i]);
    44      printf("
    ");
    45   }
    46 }

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

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

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 typedef  struct  aa
     4 {  int  data;
     5    struct  aa  *next;
     6 } NODE;
     7 NODE *Creatlink(int  n, int  m)
     8 {  NODE  *h=NULL, *p, *s;
     9    int  i;
    10 /**********found***********/
    11    p=(NODE *)malloc(sizeof(NODE));//变量p指向刚分配的结构节点指针,(NODE *)表示类型,就好比(int),这里进行内存申请
    12    h=p;//使用临时变量h保存p指针的初始位置。
    13    p->next=NULL;
    14    for(i=1; i<=n; i++)
    15    {  s=(NODE *)malloc(sizeof(NODE));//定义一个s进行数据的复制
    16       s->data=rand()%m;      s->next=p->next;
    17       p->next=s;             p=p->next;
    18    }
    19 /**********found***********/
    20    return  h;
    21 }
    22 void outlink(NODE  *h)
    23 {  NODE  *p;
    24    p=h->next;//从新定义个指针指向h,进行数据的输出
    25    printf("
    
    THE  LIST :
    
      HEAD ");
    26    while(p)
    27    {  printf("->%d ",p->data);
    28       p=p->next;
    29    }
    30    printf("
    ");
    31 }
    32 void main()
    33 {  NODE  *head;//定义结构体类型链表指针
    34    head=Creatlink(8,22);//函数返回链表表头
    35    outlink(head);
    36 }

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

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

     1 #include<string.h>
     2 #include<stdio.h>
     3 #define N 80
     4 int fun(char *s)
     5 {
     6     int i=1;//默认输入的单词最后不是以空格结尾,所以加1。
     7     char a;
     8     for (*s;*s!=''; s++)//字符串以‘’结尾
     9     {
    10         if (*s == ' ')
    11         {
    12             a = *(s - 1);
    13             //a = *(--s);//这里尽量不要使用--s,这样的话指针位置会改变。
    14             if (a >= 'a'&&a <= 'z')//这里是大于等于
    15             {
    16                 i = i + 1;
    17                 //s=s+1;
    18             }
    19         }
    20     }
    21     return i;
    22 }
    23 void main()
    24 { 
    25   FILE *wf;
    26   char line[N]; 
    27   int num=0;
    28   printf("Enter a string:
     "); 
    29   gets(line);
    30   num=fun(line);
    31   printf("The number of word is:%d
    
     ",num);
    32 /******************************/
    33   wf=fopen("out.dat","w");
    34   fprintf(wf,"%d",fun("a big car"));
    35   fclose(wf);//断开文件指针和文件之间的联系。
    36 /*****************************/
    37 }
  • 相关阅读:
    第三方登录(QQ登录)开发流程详解
    编译PHP并与Ngnix整合
    Ngnix的日志管理和用定时任务完成日志切割
    Ngnix 安装、信号量、虚拟主机配置
    Redis命令操作详解
    Redis的安装和部署
    消息队列
    Ubuntu中Google Chrome安装
    关于双系统下Ubuntu不能访问Windows中某个盘的问题
    numpy.random.shuffle()与numpy.random.permutation()的区别
  • 原文地址:https://www.cnblogs.com/ming-4/p/10263025.html
Copyright © 2011-2022 走看看