美文网首页
2016年第七大题

2016年第七大题

作者: Tyihou | 来源:发表于2017-10-04 19:41 被阅读0次
#include<stdio.h>
#include<stdlib.h>
float search(FILE *fp, int n, float k, int m);
#pragma warning(disable:4996)
int main()
{
    FILE *fp;
    float  k, Q;
    //你的代码的这里没有声明Q,我这给你加上,以后记住每用一个变量之前都要想一下,自己是否声明过了
    int m, num = 0;
    fp = fopen("file.txt", "rb");
    //这里为了调试方便,我把fp写出来了,以后为了让代码易读,还是尽量写出来
    if (fp== NULL)
    {
        printf("无法打开文件\n");
        exit(0);

    }
    printf("请输入一个整数M:");
    scanf("%d",&m);
    //以后记住,像这种不是指针型变量用scanf函数的需要加上取地址符号&,但是数组不需要,因为数组其实也只是一个指针,下同
    printf("请输入一个数字K:");
    scanf("%f", &k);
    //获取文件中的字符个数
    while (!feof(fp)){
        fgetc(fp);
        num++;
    }
    //其实这里获取的num值并不是准确的文件中的字符的个数,因为再最后一次循环中,fgetc函数使文件指针移向文件末尾的时候num又自加了一次,然后才会进行while条件的判断
    Q = search(fp,num-1,k,m);
    /*这里我把num-1了,这样就是文件里边的真正的字符个数了,记住要把search函数需要的参数都传过去,
    比如说需要k,m参数,所有一定要把这些参数传过去,需要更改函数的定义和声明*/
    if (Q == -1) {
        printf("没有找到!\n");
            }
    printf("倒数第M个大于K的数字是:%f\n", Q);
    //Q的类型是float不能用%d进行输出,应该用%f
    return 0;
}
float search(FILE *fp,int n,float k,int m) {
    //修改定义和声明,增加传入的参数
    float s[100];
    //float s[m+1];
    /*这里因为我的编译器不支持c99标准,所以只能在定义数组的时候声明长度,考试的时候可以写float s[m+1];
    因为题中说最多存m+1个字符*/
    int i, j=0;
    for (i = 0; i < n; i++) {
        //这里不能 “=n”因为数组的索引是从0开始等于n的话就是需要循环n+1次,而文件中真实的字符个数为n个
        fseek(fp, -((long)i+1), SEEK_END);
        /*你这个函数用的不错,我都想不到,不过调用的时候尽量写标准,第一个参数传入一个文件-指针,这个你知道,
        第二个参数是long类型的,你定义的i是int型的,所有要进行强制类型转换,而题中说是从倒数开始查找,所以应该是输入一个负值,
        至于为什么要+1之后再取负,是因为要把文件指针移向倒数第一个字符,只有这样fgetc才能读取到字符,因为fgetc函数只能向后读取不能向前读取,
        最后一个参数可以用2也可以用SEEK_END*/
        char a = fgetc(fp);
        float b = (float)a-48;
        /*
        fgetc函数返回的char类型的,不能直接进行比较,需要转换,但是直接用float进行强制类型转换的时候,
        是转换为该字符串的acill码,比如说字符3转换后acill就变成51了,这样就失去了比较的价值了,所以我们根据acill码
        找到他原来的值,我们直接把整数的acill码减去48,就可以得该字符实际表示的整数值,
        我们这样计算计算之后得到了变量b,用变量b我们就可以与k进行比较了
        */
        printf("字符为:%c\t转为float型为:%f\t输入需要对比的字符为:%f\n", a, b,k);
        if (b>k)
        {
            s[j] = b;
            j++;
        }
    }
    //if ((float)strlen(s) < m)return -1;
    if ((float)sizeof(s)< m)return -1;
    //判断字符串数组的长度可以用strlen但是,判断数组的长度只能用sizeof进行计算得出
    return s[m-1];
    //要时刻牢记数组的元素是从0开始的,所以题上的说第m个,其实对应的数组上的m-1
}
运行结果.png file文件中的内容.png image.png image.png

相关文章

  • 第七章大题

    $简述收入分配不平等的原因,如何度量收入分配不平等 一原因 第一,初始条件的不公平。每个人在经济社会中拥有的资本不...

  • 2015第七大题

  • 2016年第七大题

  • 政治 大题

  • 税法大题

    某饮料生产企业甲为增值税纳税人,适用企业所得税税率25%。2019年度实现营业收入80000万元,自行核算的201...

  • 高考倒计时11天

    今天,我们来攻克高考数学大题当中的解三角形大题。昨天的数列大题与今天的解三角形大题是二选一,近年来高考全国卷对于这...

  • 得小题者得天下

    很多学生在考试备考时,总是主抓大题,以为大题分值高。其实不然,大题是主观题,难免要扣分,而小题是客观题,答对了就是...

  • 期中测试试卷分析

    本次期中测试试卷共七大题。第一大题考察生字词,共21.5分;第二大题考察句型,共11分;第三大题考察对课文内容的掌...

  • 二下数学月考质量分析

    一、试题分析: 本次试卷共六个大题,第一大题是填空,共8个小题,34分;第二大题是判断题,共5分,第三大题是选择题...

  • 无关爱情 - 恋爱就像一张考卷

    选择题 判断题 填空题 论证题 计算题 最后一道大题 你说 最后一道大题你不会 有点郁闷 我只会最后一道大题……

网友评论

      本文标题:2016年第七大题

      本文链接:https://www.haomeiwen.com/subject/nivcyxtx.html