上机练习20

p312.c

/*
编写一程序P312.C实现以下功能有一存储很多商品数据(每件商品的属性先后包括:品名、规格、数量、单价,编程时相应的数据类型
分别定义为字符串char(20)、字符串char(12)、long、float)的二进制文件sp.dat(即未作任何格式转换而直接使用fwrite将商品属性写入文件),从
键盘输入某种商品的品名,要求在文件中查找有无相应品名商品(可能有多条记录或没有),若有则在屏幕上显示出相应的商品的
品名、规格、数量、单价(显示时,品名、规格、数量、单价之间使用逗号(,)作分隔),若无则显示没有相应品名的商品。单击此处下载程序运行时测试用的商品数据文件sp.dat并保存到程序P312.C所在的文件夹且文件名保持不变。
编程可用素材:printf("Please input shang pin pin ming:")...、
printf("\ncha zhao qing kuang:\n")...、
printf("mei you shang pin :...。程序的运行效果应类似地如图1和图2所示,
图1中的Please input shang pin pin ming:xuebi中的xuebi和
图2中的Please input shang pin pin ming:kele中的kele是从键盘输入的内容。
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>// 定义匿名结构,给出别名SHANGPING,即商品
typedef struct
{char name[20]; // 品名char size[12]; // 规格long number;   // 数量float price;   // 单价
} SHANGPING;int main(void)
{int n = 0;char inputName[20]; // 用于接收输入品名SHANGPING tmp;FILE *fp;// 输入printf("Please input shang pin pin ming:");gets(inputName);// 打开文件,以二进制只读方式打开文件fp = fopen("sp.dat", "rb");if (NULL == fp){// 题设没有给要求,也可以适当给用户提示exit(0);}// 处理:读文件,并处理数据printf("\ncha zhao qing kuang:\n");// 没有到尾,就一直处理while (!feof(fp)){// 一次读取一个单位【即一个结构】的数据,即一个结构体大小的内存空间,使用块读写方式if (fread(&tmp, sizeof(SHANGPING), 1, fp) == 1){// 如果比对,找到了,则计数并输出,使用串对比if (strcmp(tmp.name, inputName) == 0){n++;    // 计数,相当于是标志,有的话就一定不会是0printf("%s,%s,%d,%.2f\n", tmp.name, tmp.size, tmp.number, tmp.price);}}}if (0 == n) // 如果一个都没有读到{printf("mei you shang pin :%s\n", inputName);}// 关闭文件fclose(fp);fp = NULL; // 防止野指针return 0;
}

p315.c

/*
编写一程序P315.C实现以下功能程序运行时,先从键盘输入一个文本文件的文件名(约定:字符数≤127字节,可含路径)\
和一个字符串(约定:字符数≤20字节,其中不含空格、TAB等,后面称之为Str),再在屏幕上显示该文件的内容。
要求显示完内容后,在屏幕上输出文件的行数(行之间以’\n’为分隔、每行的长度不定但均≤200个字节)、字符串Str在文件中第1次出现的行号和最后一次出现的行号(查找时不区分大小写、不跨行查找,若未找到,则行号显示为-1)。注意,程序中不能使用库函数f_gets或使用同名的变量、函数、单词,行的编号从1开始计。单击此处下载程序运行时测试用的文件Test.txt。
编程可用素材:
printf("input the file's name and the string: ")、
printf("\nfile open error!")、
printf("------------------------File content:----------------------\n")、
printf("\n------------------------File summary:----------------------\n")、
printf("… lines, first line: …, last line: …\n"…。程序的运行效果应类似地如图1所示,
图1中的“input the file's name and the string: C:\Temp\Test.txt  Value”中
的“C:\Temp\Test.txt  Value”是从键盘输入的内容(“C:\Temp\Test.txt”是文件名,“Value”是需查找的字符串)。
图1中的“11 lines, first line: 6, last line: 11”表示文件一共有11行,字符串“Value”在文件中第一次出现的
行号为6、最后一次出现的行号为11。
*/
/*
input the file's name and the string:  C:\Temp\Test.txt  Value
------------------------File content:----------------------stdlib.hDefinitions for common types, variables, and functions.Copyright (c) Borland International 1987,1988All Rights Reserved.char   *_Cdecl ltoa     (long vaLue, char *string, int radix);
int     _Cdecl putenv   (const char *name);
unsigned _Cdecl _rotl   (unsigned value, int count);
unsigned _Cdecl _rotr   (unsigned value, int count);
void    _Cdecl swab     (char *from, char *to, int nbytes);
char   *_Cdecl ultoa    (unsigned long kvAluE, char *string, int radix);
------------------------File summary:----------------------
11 lines, first line: 6, last line: 11
图1 程序运行效果示例
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main(void)
{/*个文本文件的文件名(约定:字符数≤127字节,可含路径)\和一个字符串(约定:字符数≤20字节*/char filename[128];char str[21];FILE *fp;int total, first, last;// 文件的行数(行之间以’\n’为分隔、每行的长度不定但均≤200个字节)char line[201]; // 一行char ch;        // 一次读一个字符int i;          // 每一行下标计数器printf("input the file's name and the string: ");scanf("%s %s", filename, str);// 开文件fp = fopen(filename, "r");if (NULL == fp){printf("\nfile open error!");exit(1);}// 处理printf("------------------------File content:----------------------\n");i = 0;            // 行上字符数计数器total = 0;      // 行数first = -1;       // 记录首次出现last = -1;        // 记录最后出现while (!feof(fp)){ch = (char)fgetc(fp); // 从文件读入一个字符,存入ch中if (ch != EOF && ch != '\n'){// 没有碰到回车,即一行line[i] = ch; // 存入一行i++;}else{// 换行,或是结束了total++;line[i] = '\0';     // 补齐一行为一个字符串,每一行做成一个串printf("%s", line); // 输出行if (ch == '\n')     // 补充输出回车符{printf("\n");}// 先全部转为小写,再才做比较有没有出现,即比较时,忽略大小写strlwr(str);strlwr(line);if (strstr(line, str) != NULL) // 在line中找str{// 第一匹配时,做首出行行标记录if (first == -1){first = total;}last = total; // 运行过程中,last不断刷新}i = 0; // 下一行的开始}}printf("\n------------------------File summary:----------------------\n");printf("%d lines, first line: %d, last line: %d\n", total, first, last);// 关文件fclose(fp);fp = NULL;return 0;
}

p317.c

/*
编写一程序P317.C实现以下功能根据输入的源文件名(含路径, <100字节)和目标文件名(含路径, <100字节),实现将源文件复制到目标文件。注意事项:(1)源文件可能是文本文件,也可能是二进制文件。(2)程序的返回值(即由main函数return的值和程序使用exit终止运行时返回的值,也称退出代码)规定为:①复制成功返回0 ②源文件打开失败返回2 ③目标文件创建失败返回3 ④向目标文件写数据的过程中出错返回4(3)向目标文件写数据的过程中出错的情况很少发生,考生根据图例中的输入数据进行测试时,很可能不会出错,但程序应考虑出错的
情况(例如磁盘空间不够、往U盘上写一个大文件的过程中U盘出错或被拔走)。(4)编程可用素材:
printf("Please input sourceFilename: ")、
printf("Please input destinationFilename: ")、
printf("\ncopy %s to %s successed!\n"…、
printf("\nsource File (%s) Open Error!\n"…、
printf("\ndestination File (%s) Create Error!\n"…、
printf("\nwriting destination File (%s) Error!\n"…。*/
#include <stdio.h>int main(void)
{int ch;char infile[100], outfile[100];FILE *in, *out;// 文件名给出printf("Please input sourceFilename: ");gets(infile);printf("Please input destinationFilename: ");gets(outfile);// 源文件操作in = fopen(infile, "rb");// 打开源文件if (in == NULL){printf("\nsource File (%s) Open Error!\n", infile);return 2;}// 打开目标文件out = fopen(outfile, "wb");if (out == NULL){fclose(in);in = NULL;printf("\ndestination File (%s) Create Error!\n", outfile);return 3;}// 过程出错检测while (!feof(in)){ch = fgetc(in);   // 因为fgetc返回的是一个int,所以一定用int型变量来接收值if (ch != EOF){if (fputc(ch, out) == EOF){printf("\nwriting destination File (%s) Error!\n", outfile);fclose(in);        // 写文件时出错,也要关闭之前打开的文件fclose(out);return 4;}}}printf("\ncopy %s to %s successed!\n", infile, outfile);// 最后关闭文件fclose(in);fclose(out);// 置空,养成防止野指针的习惯in = out = NULL;return 0;
}

p318.c

/*
编写一程序P318.C实现以下功能有一存储很多商品数据(每件商品的属性先后包括:品名、规格、数量、单价,编程时相应的数据类型分别定义为
字符串char(18)、字符串char(12)、long、float的二进制文件sp38.dat
(即未作任何格式转换而直接使用fwrite将商品属性写入文件),从键盘输入某种商品的品名,要求在文件中
查找有无相应品名商品(可能有多条记录或没有),若有则在屏幕上显示出相应的商品的
品名、规格、数量、单价(显示时,品名、规格、数量、单价之间使用逗号(,)作分隔),若无则显示没有相应品名的商品。单击此处下载程序运行时测试用的商品数据文件sp38.dat并保存到程序P318.C所在的文件夹且文件名保持不变。
编程可用素材:
printf("Please input shang pin pin ming:")...、
printf("\ncha zhao qing kuang:\n")...、
printf("mei you shang pin :...。▲ 提示:使用fread,sizeof(结构体)的方法肯定不对,应单项属性逐个fread!程序的运行效果应类似地如图1和图2所示,
图1中的Please input shang pin pin ming:xuebi中的xuebi和
图2中的Please input shang pin pin ming:kele中的kele是从键盘输入的内容。please input shang pin pin ming:xuebicha zhao qing kuang:
xuebi,da,345,6.00
xuebi,xiao,4567,2.00
xuebi,da,456,6.00
图1 程序运行效果示例(输入xuebi时)please input shang pin pin ming:kelecha zhao qing kuang:
mei you shang pin :kele
图2 程序运行效果示例(输入kele时)
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>struct goods
{char name[18];char size[12];long number;float price;
};
int main(void)
{int n;                 // 可能有多条,可能没有,计数用char inputName[18];    // 输入名字struct goods readGood; // 用于读入FILE *fp;              // 操作文件// 输入printf("Please input shang pin pin ming:");gets(inputName);// 开文件fp = fopen("sp38.dat", "rb");if (NULL == fp){printf("file open error!\n");exit(1);}// 处理// 提示:使用fread,sizeof(结构体)的方法肯定不对,应单项属性逐个fread===>不能整体结构读入n = 0;printf("\ncha zhao qing kuang:\n");while (1){// 使用块方式读文件,一个成员一个成员地读fread(readGood.name, sizeof(readGood.name), 1, fp);      // 读入名称fread(readGood.size, sizeof(readGood.size), 1, fp);      // 读入规格fread(&readGood.number, sizeof(readGood.number), 1, fp); // 读入数量// 以最后读入的单价为准,进行判断:一个结构的成员读完整没有if (1 == fread(&readGood.price, sizeof(readGood.price), 1, fp)) // 读入单价{if (strcmp(readGood.name, inputName) == 0)   // 串相同比较{n++;printf("\n%s,%s,%ld,%.2f", readGood.name, readGood.size, readGood.number, readGood.price);}}else //如果读不完整,就不用处理了,中止{break;}}// 判断没有找到的情况if (0 == n){printf("mei you shang pin :%s", inputName);}// 关文件fclose(fp);fp = NULL;return 0;
}

p319.c

/*
编写一程序P319.C实现以下功能有一存储很多商品数据的二进制文件sp36.dat,每件商品的属性先后包括:
品名(17字节的字符串)、规格(12字节的字符串)、数量(3字节的整数)、单价(float实数)。
从键盘输入某种商品的品名,要求在文件中查找有无相应品名商品(可能有多条记录或没有),若有则在屏幕上显示出相应的商品的
品名、规格、数量、单价(显示时,品名、规格、数量、单价之间使用逗号(,)作分隔),若无则显示没有相应品名的商品。单击此处下载程序运行时测试用的商品数据文件sp36.dat并保存到程序P319.C所在的文件夹且文件名保持不变。
编程可用素材:
printf("Please input shang pin pin ming:")...、
printf("\ncha zhao qing kuang:\n")...、
printf("mei you shang pin :...。▲ 提示:使用fread,sizeof(结构体)的方法肯定不对,应单项属性逐个fread!程序的运行效果应类似地如图1和图2所示,
图1中的Please input shang pin pin ming:xuebi中的xuebi和
图2中的Please input shang pin pin ming:kele中的kele是从键盘输入的内容。
please input shang pin pin ming:xuebicha zhao qing kuang:
xuebi,da,345,6.00
xuebi,xiao,4567,2.00
xuebi,da,456,6.00
图1 程序运行效果示例(输入xuebi时)please input shang pin pin ming:kelecha zhao qing kuang:
mei you shang pin :kele
图2 程序运行效果示例(输入kele时)
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>struct good
{//品名(17字节的字符串)、规格(12字节的字符串)、数量(3字节的整数)、单价(float实数)char name[17];char size[12];int number; // 注意,题意有意为之:三个字节的整数,即在文件中,会把三个字节存一个整数float price;
};
int main(void)
{int n;struct good tmp;char inputName[17];FILE *fp;// 输入printf("Please input shang pin pin ming:");gets(inputName);// 开文件fp = fopen("sp36.dat", "rb");if (NULL == fp){printf("file open error!\n");exit(1);}// 处理n = 0;printf("\ncha zhao qing kuang:\n");while (1){// 块读取fread(tmp.name, sizeof(tmp.name), 1, fp);fread(tmp.size, sizeof(tmp.size), 1, fp);fread(&tmp.number, 3, 1, fp); // 即在文件中,会把三个字节存一个整数,也就是:直接扫描3个byte即可if (1 == fread(&tmp.price, sizeof(tmp.price), 1, fp)){// 读入成功,进行判断if (strcmp(inputName, tmp.name) == 0){n++;printf("\n%s,%s,%d,%.2f", tmp.name, tmp.size, tmp.number, tmp.price);}}else // 读入失败了,则退出循环读取{break;}}// 未找到呢if (0 == n){printf("mei you shang pin :%s", inputName);}// 关文件fclose(fp);fp = NULL;return 0;
}

p329.c

/*
编写一程序P329.C实现以下功能有若干(最多50人)学生的信息(学号、姓名、性别、出生年、C语言、英语、微积分)存储在名为“学生成绩.txt”的文本文件中,
信息的存储格式为信息标题占第1行,其余每行为一学生的信息,每一学生的信息项之间以1个或多个TAB(制表符)作为分隔,
假定每一学生的信息均是完整的,不存在错误。
单击此处下载程序运行时测试用的文件“学生成绩.txt”并保存到程序P329.C所在的文件夹且文件名保持不变。编程计算这些学生的平均成绩,并以平均成绩从高到低、按图1所示的格式在屏幕上输出这些学生的相关信息。
编程可用素材:
puts("学生成绩文件“学生成绩.txt”打开失败,请仔细检查文件名是否正确,对应文件是否存在!");
puts("名次  平均成绩  学号        姓名      性别  出生年  C语言  英语  微积分");
printf("%3d   %7.2f   %d  %-8s   %-2s    %d   %3d    %3d   %3d\n"…);
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 50// 因为按均分排序,而均分要处理得到,定义数据结构,再整体操作
typedef struct student
{float avg;int id;char name[7];char gender[3];int year;int scoreC, scoreE, scoreM;
} STU;int main(void)
{FILE *fp;         // 文件int count = 0;    // 计数器STU stu[N], tStu; // 结构数组char tmp[500];    // 清第一行// 临时使用结构成员int id;char name[7];char gender[3];int year;int scoreC, scoreE, scoreM;// 排序用int i, j;// 打开文件fp = fopen("学生成绩.txt", "r");if (NULL == fp){puts("学生成绩文件“学生成绩.txt”打开失败,请仔细检查文件名是否正确,对应文件是否存在!");exit(1);}// 要选读入// 处理第一行,不用: 学号     姓名  性别  出生年 C语言 英语  微积分fgets(tmp, 500, fp);// 读入数据行到内存结构数组中,读入时完成均分计算// 2008122624   崔艺丹 女   1989    83  87  83while (1){if (7 == fscanf(fp, "%d %s %s %d %d %d %d", &id, name, gender, &year, &scoreC, &scoreE, &scoreM)){stu[count].id = id;          // 整型,直接赋值strcpy(stu[count].name, name); // 串,用函数完成赋值,即串拷贝strcpy(stu[count].gender, gender);stu[count].year = year;stu[count].scoreC = scoreC;stu[count].scoreE = scoreE;stu[count].scoreM = scoreM;stu[count].avg = (float)((scoreC + scoreE + scoreM) / 3.0); // 完成计算,注意强转,否则有警告count++;}else{break;}}// 关闭文件fclose(fp);fp = NULL;// 再排序,将数据封装后进行处理,更方便做排序  降序!// 这里使用选择交换排序法,要特别注意起点和终点for (i = 0; i < count - 1; i++) //N个数,排N-1轮【0   count-1-1】,最后一个不用排{for (j = i + 1; j < count; j++) // 每一轮,一个数归到最左位【i+1    count-1】,要特别注意有没有取到等于{if (stu[i].avg < stu[j].avg){tStu = stu[i];stu[i] = stu[j];stu[j] = tStu;}}}// 再输出。puts("名次  平均成绩  学号        姓名      性别  出生年  C语言  英语  微积分");for (i = 0; i < count; i++){printf("%3d   %7.2f   %d  %-8s   %-2s    %d   %3d    %3d   %3d\n",i + 1, stu[i].avg, stu[i].id, stu[i].name, stu[i].gender, stu[i].year,stu[i].scoreC, stu[i].scoreE, stu[i].scoreM);}return 0;
}

p337.c

/*编写一程序P337.C实现以下功能有一存储很多学生成绩的文本文件(学生与课程数不限),每个学生的数据包括
学号(10个数字)、姓名(最多4个汉字)、性别、课程名称(最多7个汉字)、成绩(整数)。
从键盘输入某个学生的姓名,要求在文件中查找有无其成绩记录(可能有多条记录或没有),然后在屏幕上显示出相应的信息。单击此处下载程序运行时测试用的学生成绩文件xscj.txt并保存到程序P337.C所在的文件夹且文件名保持不变。
编程可用素材:printf("请输入要查找成绩的学生姓名:")、printf("文件打开失败,请检查文件名及路径是否正确、文件是否存在!")、
printf("\n查找结果为:\n")、printf("文件中没有找到姓名为“…”的学生\n"…。
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>// 学生数据
/*
typedef struct student
{char id[11];       // 学号char name[9];      // 姓名char gender[3];        // 性别char course[15];   // 课程名int score;            // 成绩
} STU;
*/int main(void)
{char id[11];char name[9];char inputName[9];char gender[3];char course[15];int score;int i = 0;FILE *fp;fp = fopen("xscj.txt", "r");if (NULL == fp){printf("文件打开失败,请检查文件名及路径是否正确、文件是否存在!");exit(0);}printf("请输入要查找成绩的学生姓名:");gets(inputName);printf("\n查找结果为:\n");while (fscanf(fp, "%s %s %s %s %d", id, name, gender, course, &score) != EOF){if (strcmp(name, inputName) == 0)    // 串比较,进行查找{// 一般情况下,这个文件是按行写入数据的,读的时候,就是按行读出来就行// 格式化读入时,读满四个数据,即接着读下一个四个数据,中间合理间隔:空格,\0,\n \t都行i++;printf("%d %10s, %-8s, %s, %-14s, %d\n", i, id, name, gender, course, score);}}if (0 == i){printf("文件中没有找到姓名为“%s”的学生\n", inputName);}fclose(fp);fp = NULL;return 0;
}

p338.c

/*编写一程序P338.C实现以下功能有一存储很多学生成绩的文本文件(学生与课程数不限),每个学生的数据包括
学号(10个数字)、姓名(最多4个汉字)、性别、课程名称(最多7个汉字)、成绩(整数)。
从键盘输入某门课程的名称,要求在文件中查找有无相应的课程(可能有多条记录或没有),
有则计算并输出该课程的选课人数与平均成绩,无则报告没有。单击此处下载程序运行时测试用的学生成绩文件xscj.txt并保存到程序P338.C所在的文件夹且文件名保持不变。
编程可用素材:
printf("请输入要计算平均成绩的课程名称:");
printf("文件打开失败,请检查文件名及路径是否正确、文件是否存在!");
printf("\n计算结果为:\n");
printf("文件中没有名称为“…”的课程\n"…);
printf("课程“…”有 … 人选学,平均成绩为…);
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main(void)
{char course[15];char rCourse[15];int score;int i = 0;int sum = 0;double avg;FILE *fp;// 打开文件fp = fopen("xscj.txt", "r");if (NULL == fp){printf("文件打开失败,请检查文件名及路径是否正确、文件是否存在!");exit(0);}// 输入printf("请输入要计算平均成绩的课程名称:");gets(course);printf("\n计算结果为:\n");// 读入时,前三个串弃用,只用第四个串和第五个整数while (fscanf(fp, "%*s %*s %*s %s %d", rCourse, &score) != EOF){if (strcmp(rCourse, course) == 0){sum += score;i++;}}// 分情况处理数据,得到结果if (0 == i){printf("文件中没有名称为“%s”的课程\n", course);}else{avg = (double)sum / i;printf("课程“%s”有 %d 人选学,平均成绩为%.1lf", course, i, avg);}// 关闭文件fclose(fp);fp = NULL;return 0;
}

p339.c

/*
编写一程序P339.C实现以下功能有一存储很多学生成绩的文本文件(学生与课程数不限),每个学生的数据包括
学号(10个数字)、姓名(最多4个汉字)、性别、课程名称(最多7个汉字)、成绩(整数)。
从键盘输入某门课程的名称,要求在文件中查找有无相应的课程(可能有多条记录或没有),有则计算并输出该课程的
选课人数、及格人数与及格率,无则报告没有。单击此处下载程序运行时测试用的学生成绩文件xscj.txt并保存到程序P339.C所在的文件夹且文件名保持不变。
编程可用素材:
printf("请输入要计算及格率的课程名称:")、
printf("文件打开失败,请检查文件名及路径是否正确、文件是否存在!")、
printf("\n计算结果为:\n")、
printf("文件中没有名称为“…”的课程\n"…、
printf("课程“…”有 … 人选学,其中及格 … 人,及格率为…。程序的运行效果应严格地如图1、图2所示,图中的红色部分是从键盘输入的内容。请输入要计算及格率的课程名称:C语言程序设计计算结果为:
课程“C语言程序设计”有 5 人选学,其中及格 4 人,及格率为 0.8
图1 程序运行效果示例请输入要计算及格率的课程名称:大学计算机基础计算结果为:
文件中没有名称为“大学计算机基础”的课程
图2 程序运行效果示例
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>//学号(10个数字)、姓名(最多4个汉字)、性别、课程名称(最多7个汉字)、成绩(整数)
typedef struct student
{char id[11];char name[9];char gender[3];char course[15];int score;
} STU;int main(void)
{int cnt = 0;int gt60 = 0;char inputCourse[15];STU stu; // 用于读入FILE *fp;// 输入printf("请输入要计算及格率的课程名称:");gets(inputCourse);// 开文件fp = fopen("xscj.txt", "r");if (NULL == fp){printf("文件打开失败,请检查文件名及路径是否正确、文件是否存在!");exit(1);}// 处理,直接从头读到尾// 注意:fscanf返回的是实际读取的数据个数,出错或者到结尾返回EOFwhile (fscanf(fp, "%s %s %s %s %d", stu.id, stu.name, stu.gender, stu.course, &stu.score) != EOF){if (strcmp(inputCourse, stu.course) == 0)   // 串比较,进行查找{cnt++;                 // 计数if (stu.score > 60)     // 分数比较,及格判断{gt60++;               // 计数}}}printf("\n计算结果为:\n");// 输出统计结果if (cnt > 0){printf("课程“%s”有 %d 人选学,其中及格 %d 人,及格率为%.1f", inputCourse, cnt, gt60, (float)gt60 / cnt);}else{printf("文件中没有名称为“%s”的课程\n", inputCourse);}// 关文件fclose(fp);fp = NULL;return 0;
}

p340.c

/*
编写一程序P340.C实现以下功能有一存储很多交通违章记录的文本文件,每条记录包括车牌号(1个汉字+6个字符)、发生日期、违章类型(最多4个汉字)。从键盘输入违章类型的名称,
要求在文件中查找并显示相应的记录(可能有多条记录或没有)。单击此处下载程序运行时测试用的违章记录文件jtwz.txt并保存到程序P340.C所在的文件夹且文件名保持不变。
编程可用素材:
printf("请输入要查找的违章类型:");
printf("文件打开失败,请检查文件名及路径是否正确、文件是否存在!");
printf("\n查找结果为:\n");
printf("文件中没有找到“%s”的记录\n",inputType);*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main(int argc, char const *argv[])
{FILE *fp;// 牌号(1个汉字+6个字符)、发生日期、违章类型(最多4个汉字)char sign[9];int year;     // 年月日分别用整型来接收,亦可使用一个整体字符串来搞定int month;int day;char type[9];char inputType[9];int flag = 0;int count = 0;fp = fopen("jtwz.txt", "r");if (fp == NULL){printf("文件打开失败,请检查文件名及路径是否正确、文件是否存在!");exit(1);}printf("请输入要查找的违章类型:");gets(inputType);printf("\n查找结果为:\n");while (!feof(fp)){fscanf(fp, "%8s %4d.%2d.%2d %s", sign, &year, &month, &day, type);// printf("%8s %d.%02d.%02d %s\n", sign, year, month, day, type);if (strcmp(inputType, type) == 0){flag = 1;count++;printf("%d %8s, %d.%02d.%02d, %s\n", count, sign, year, month, day, type);}}if (flag == 0){printf("文件中没有找到“%s”的记录\n", inputType);}fclose(fp);fp = NULL;return 0;
}

2021-12-06 自动化专业C语言上机作业参考答案20相关推荐

  1. 2021-12-06 自动化专业C语言上机作业参考答案06

    上机练习06 p112.c /* 编写一程序P112.C实现以下功能设某企业2006年的产值为5000万,计划以后每年的增长率为x(x从键盘输入,例如输入8.75表示8.75%),计算该企业的产值在哪 ...

  2. 2021-12-06 自动化专业C语言上机作业参考答案19

    上机练习19 p314.c /*编写一程序P314.C实现以下功能有一存储很多商品数据(每件商品的属性先后 包括:品名.规格.单价(有小数位).数量,数据的最长长度分别为20.10.6.5,在文件中以 ...

  3. 2021-12-06 自动化专业C语言上机作业参考答案04

    上机练习04 p111.c /* 编写一程序P111.C实现以下功能x(x只考虑整数int且必须定义为int.但F(x)完全可能超过int的表示范围) 通过键盘输入(输入前给出提示Please inp ...

  4. 2021-12-06 自动化专业C语言上机作业参考答案11

    上机练习11 p137.c /* 编写一程序P137.C实现以下功能通过键盘输入两个姓名(约定均为汉字且最多4个汉字),判断并输出二者是否同姓. 编程可用素材: printf("请输入姓名1 ...

  5. c语言第一次上机作业答案,第一次上机作业参考答案

    大连理工大学 c语言作业 第一次上机作业参考答案: 1. 大写字母转换成小写字母 从键盘输入一个大写英文字母,输出相应的小写字母. 例:输入 G 输出 g #include void main() { ...

  6. c语言上机实验第五章答案,安徽大学C语言上机实验参考答案

    安徽大学C语言上机实验参考答案 C语言实验参考答案 实验一 5.输入并运行自已编写的程序(教材第一章P14 三编程题). 实验二 1.编写一个程序,从键盘接收3个实数(分别为10.0.20.0.5.0 ...

  7. 2021年春季学期-信号与系统-第一次作业参考答案-第三题

      本文是: 2021年春季学期-信号与系统-第一次作业参考答案 的参考答案. ▌第三题 判断下列各信号是否为周期信号, 如果是周期信号求出其基波周期. (1) cos⁡(10t)−cos⁡(30πt ...

  8. 2021年春季学期-信号与系统-第一次作业参考答案-第二题

      本文是: 2021年春季学期-信号与系统-第一次作业参考答案 的参考答案. ▌第二题: 写出下图所示的各波形的函数表达式: 第一小题: 求解: 这个函数可以使用分段函数来表示: 可以利用∣t∣\l ...

  9. 2021年春季学期-信号与系统-第一次作业参考答案-第六题

      本文是: 2021年春季学期-信号与系统-第一次作业参考答案 的参考答案. ▌第六题 MATLAB实验题1 请从网络学堂上下载音频信号,使用MATLAB软件绘制出它的视频联合分布图,分析其中电话号 ...

最新文章

  1. MATLAB 不能用了,哪些替代品可以继续搞科研?
  2. Gartner评出2017年最值得关注的11个顶级信息安全技术
  3. php倒序分页重复,时间倒序分页查询,翻页中有新增的数据插入db,导致返回重复数据,这个有什么好的解决办法没?谢谢大家...
  4. 装载向导_麦德美爱法:异构集成时代的高阶封装载板金属化工艺
  5. ITK:使用最小最大曲率流平滑图像
  6. 【数据结构总结】第四章:串、数组和广义表(线性结构)
  7. BZOJ1734: [Usaco2005 Feb]Aggressive cows 愤怒的牛
  8. LeetCode 186. 翻转字符串里的单词 II
  9. android 多线程 场景,精选Android初中级面试题 (三): 深探Handler,多线程,Bitmap
  10. Star Schema完全参考手册读书笔记一
  11. win10家庭版与专业版有什么区别?
  12. 协方差 方差 以及线性相关理解
  13. linux运维故障案列,linux 运维故障排查思路
  14. 信号与系统学习小窍门
  15. 支付微服务设计方案格式模板_开发微商城有哪些常见问题
  16. 字节跳动布局游戏,打算从腾讯的碗里“抢饭吃”?
  17. sql server的缺陷 将截断字符串或二进制数据 哪个字段
  18. 软考中级软件设计师--下午题
  19. 【WCN6856】WiFi 5G 接口启动失败问题解决
  20. 2021年程序人生的随想总结

热门文章

  1. Linux卸载安装bind,Bind编译安装详解
  2. useEffect-副作用函数的返回值-清理副作用的写法
  3. 同事逆袭面进阿里P7 年薪60W+,临别留下一张Android开发重点技术路线图
  4. 用sdk画三叶玫瑰曲线
  5. 企业ERP系统开发总结及建议
  6. torch.diag()
  7. 2021年金属非金属矿山(地下矿山)安全管理人员考试题库及金属非金属矿山(地下矿山)安全管理人员新版试题
  8. NB-IoT介绍(PPT)
  9. 迎接移动云时代的变革
  10. java 开源 文件同步_利用开源项目使discus论坛与java应用同步登录和注册