C语言必会100题(20)。计算字符串中子串出现的次数/从键盘输入字符,送到磁盘/输入小写磁盘保存大写/合并文件/五个学生,3门课程,保存到文件中

特此鸣谢:鱼C_小甲鱼(B站up主)不二如是(鱼C论坛大佬)
题目来源:https://fishc.com.cn
注:这些题在网上都可以搜到,题下面的代码大多是流传下来的答案(我重新排了一下版,增加了可读性),部分是本人经过深思熟虑后编写的。
汇总:C语言

96,计算字符串中子串出现的次数

1.题目:输入两个字符串,判断第二个字符串在第一个字符串中出现的次数
2.程序源代码:

#include <string.h>
#include <stdio.h>

int main(void) 
{
    char str1[20], str2[20], *p1, *p2;
    int sum = 0;

    printf("please input two strings\n");
    scanf("%s%s", str1, str2);

    p1 = str1;
    p2 = str2;

    while(*p1 != '\0') {

        if(*p1 == *p2) {

            while(*p1 == *p2 && *p2 != '\0') {

                p1++;
                p2++;
            }
        } else {

            p1++;
        }

        if(*p2 == '\0') {

            sum++;
        }
        p2 = str2;
    }

    printf("%d", sum);
    getchar();
    
    return 0;
}

97,从键盘输入字符,送到磁盘

1.题目:从键盘输入一些字符,逐个把它们送到磁盘上去,直到输入一个#为止。
2.程序源代码:

#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("cannot open file\n");
        // 正常退出,必须有头文件,#include <stdlib.h>
        exit(1);
    }

    ch = getchar();

    printf("输入文件内容:");
    while(ch != '#') {

        // 将字符ch写到文件指针fp所指向的文件的当前写指针的位置
        fputc(ch, fp);
        // 打印输出
        putchar(ch);
        // 判读是否为#
        ch = getchar();
    }
    // 关闭文件
    fclose(fp);

    return 0;
}

98,输入小写磁盘保存大写

1.题目:从键盘输入一个字符串,将小写字母全部转换成大写字母,然后输出到一个磁盘文件“test”中保存。输入的字符串以!结束。
2.程序源代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() 
{

    FILE *fp;
    char str[100];
    int i = 0;

    if((fp = fopen("test ", "w")) == NULL) {

        printf("cannot open the file\n");
        exit(0);
    }
    printf("please input a string:\n");

    // gets() 函数的功能是从输入缓冲区中读取一个字符串存储到字符数组 str 的内存空间
    gets(str);

    while(str[i] != '!') {

        if(str[i] >= 'a' && str[i] <= 'z') {

            str[i] = str[i] - 32;
        }

        // 将字符str[i]写到文件指针fp所指向的文件的当前写指针的位置
        fputc(str[i], fp);
        i++;
    }

    fclose(fp);

    // 从test.txt文件中读取字符到str数组里面
    fp = fopen("test ", "r");
    fgets(str, strlen(str) + 1, fp);

    printf("%s\n", str);
    fclose(fp);

    return 0;
}

99,合并文件

1.题目:创建两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列),存放到一个新文件C中并输出。
2.程序源代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main() 
{

    FILE *fp;
    int i, j, n, ni;
    char c[160], t, ch;

    // 创建A文件,输入字母
    // w 新建一个文本文件,已存在的文件将内容清空,只允许写
    // 创建失败的话
    if((fp = fopen("A", "w")) == NULL) {

        printf("file A cannot be opened\n");
        exit(0);
    }

    // 用户输入A文件内容
    printf("输入A文件内容:");
    while( (ch = getchar()) != '\n') {

        fputc(ch, fp);
    }
    fclose(fp);

    // 打印输出A文件内容
    printf("A contents are :\n");
    // r 打开一个文本文件,文件必须存在,只允许读
    fp = fopen("A", "r");
    // 文件内容放到c数组里面
    for(i = 0; (ch = fgetc(fp)) != EOF; i++) {

        c[i] = ch;
        putchar(c[i]);
    }
    fclose(fp);
    ni = i;
    printf("\n\n");


    // 创建B文件,输入字母
    // w 新建一个文本文件,已存在的文件将内容清空,只允许写
    // 创建失败的话
    if((fp = fopen("B", "w")) == NULL) {

        printf("file B cannot be opened\n");
        exit(0);
    }

    // 用户输入A文件内容
    printf("输入B文件内容:");
    while( (ch = getchar()) != '\n') {

        fputc(ch, fp);
    }
    fclose(fp);

    // 打印输出B文件内容
    printf("B contents are :\n");
    // r 打开一个文本文件,文件必须存在,只允许读
    fp = fopen("B", "r");
    // 文件内容放到c数组里面
    for(i = ni; (ch = fgetc(fp)) != EOF; i++) {

        c[i] = ch;
        putchar(c[i]);
    }
    fclose(fp);
    n = i;
    printf("\n\n");

    // 将c数组里面的两个文件的内容进行排序
    for(i = 0; i < n; i++) {

        for(j = i + 1; j < n; j++) {

            if(c[i] > c[j]) {
                t = c[i];
                c[i] = c[j];
                c[j] = t;
            }
        }
    }

    // 创建c文件,并且将排序好的字母放到c文件里面
    printf("C file is:\n");
    fp = fopen("C", "w");
    for(i = 0; i < n; i++) {

        putc(c[i], fp);
        putchar(c[i]);
    }
    fclose(fp);

    return 0;
}

100,五个学生,3门课程,保存到文件中

1.题目:有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩,最后把原有的数据和计算出的平均分数存放在磁盘文件"stud"中。
2.程序源代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct student {

    char num[6];
    char name[8];
    int score[3];
    float avr;
} stu[5];

int main()
{
    int i, j;
    float sum = 0;
    FILE *fp;

    for(i = 0; i < 5; i++) {

        printf("please input No.%d score:\n", i + 1);
        printf("stuNo:");
        scanf("%s", stu[i].num);
        printf("name:");
        scanf("%s", stu[i].name);

        for(j = 0; j < 3; j++) {

            printf("score %d.", j + 1);
            scanf("%d", &stu[i].score[j]);
            sum += stu[i].score[j];
        }
        stu[i].avr = sum / 3.0;
    }

    fp = fopen("stud.txt", "w");
    for(i = 0; i < 5; i++) {

        if(fwrite(&stu[i], sizeof(struct student), 1, fp) != 1) {

            printf("file write error\n");
        }
    }

    fclose(fp);

    return 0;

}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值