目录
①统计成绩
②、查找日期
③藏头词
四、IP地址转换
五、删除链表值为偶数的节点
题述:从键盘输入10个学生的学号,姓名和数学语文和英语成绩,自导文本文件f3.txt中,再从中取出数据,计算每个学生的总成绩和平均分,并将显示结果打到屏幕上。
思路:这道题考察对读写文件,我们可以用文本的形式进行读写,也就是用fscanf和fprintf
①、涉及从文件中读和写数据到文件中,所以一定要打开文件两次,一次以写的方式打开,另一次以读的方式打开。不然如果你只是以写的方式打开,可你后续还从文件中读数据了,读出来的就是乱码(原来我就这么错过,半天没找到错误)
②、如果写完之后还要从文件中读数据一定要用到rewind函数,因为你写完数据之后,你的文件位置指针指向数据尾,如果你不用rewind,下次再读就什么数据也没有,用rewind函数可以让文件位置指针指向文件头,以便读取数据。(rewind大概就是使文件位置指针回到头的意思)
#include<Stdio.h>
#include<Stdlib.h>
#define N 2
typedef struct student
{int num;char name[20];double math;double chinese;double english;
}student;student stu[N];
int main()
{FILE* pf = fopen(", "w");if (pf == NULL){perror("fopen"); exit(-1);}for (int i = 0; i < N; i++){scanf("%d %s %lf %lf %lf", &stu[i].num, stu[i].name, &stu[i].math, &stu[i].chinese, &stu[i].english);fprintf(pf, "%d %s %lf %lf %lf", stu[i].num, stu[i].name, stu[i].math, stu[i].chinese, stu[i].english);fputc('n', pf);}rewind(pf);pf = fopen(", "r");if (pf == NULL){perror("fopen");exit(-1);}double sum = 0; student b;for (int i = 0; i < N; i++){sum = 0;fscanf(pf, "%d %s %lf %lf %lf", &b.num, b.name, &b.math, &b.chinese, &lish);sum += b.math +b.chinese + b.english;printf("每个学生的总成绩和平均分各为%lf,%lfn", sum, sum / N);}fclose(pf);pf = NULL;return 0;
}
题述:查找星期:定义一个指针数组将下表的星期信息组织起来,输入一个字符串,在表中查找,若存在,输出该字符串在表中的序号,否则输出-1
思路:定义指针数组,再调用strcmp就很好做了
#include <stdio.h>
#include <string.h>#define MAXS 80int getindex(char* s)
{char* week[7] ={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};int i = 0;for (i = 0; i < 7; i++){if (strcmp(s, week[i]) == 0)return i;}return -1;
}int main()
{int n;char s[MAXS];scanf("%s", s);n = getindex(s);if (n == -1) printf("wrong input!n");else printf("%dn", n);return 0;
}
题述:输入一组英文单词(不超过8个),要求按输人顺序取出每个单词的第一个字母并连接在一起形成一个 字符串开输出。
思路:我们可以先定一个n,说明想输入多少个单词。单词总数不超过8个,而每个单词的长度我们还可以假定,所以这里可以用二维数组
#include<stdio.h>int main()
{char word[8][20];//最多有8个单词,每个单词长度最大为20char str[9];//要多出一个空间来存'