【教学案例一】
1. 实验目的
(1)熟练使用单个字符输入输出函数。
(2)掌握字符数组的常用操作。
2. 实验任务
(1)实验内容:输入一个以回车结束的字符串(少于80个字符),将它的内容逆序输出。
(2)实验要求:编写程序,达到满足如下表的运行示例结果。
测试用例:
3.
(1)程序分析:字符串的输入输出过程,是通过调用单个字符输入输出函数完成的。字符串的逆序,则是采用循环对字符数组中的单个字符交换位置实现。需要注意的是,字符串的结束标志是’\n’,需要用while循环来判断输入是否结束。
(2)参考代码:
#include <stdio.h>
int main(void)
{
int i, j, temp;
char str[80];
i = 0;
while((str[i] = getchar( )) != '\n')
i++;
str[i] = ‘\0’;
j = i - 1;
for(i = 0; i < j; i++, j--){
temp = str[i];
str[i] = str[j];
str[j] = temp;
}
for(i = 0; str[i] != 0; i++)
putchar(str[i]);
return 0;
}
【教学案例二】
1.实验目的
(1)理解文本文件的基本概念。
(2)掌握文件的打开和关闭,掌握通过循环从文件中读出所有字符。
(3)会对文件中读出的字符进行处理。
2.实验任务
(1)实验内容:编写一个程序,统计一个文本文件中字母、数字、空格/制表符及换行符个数,以及其它字符的个数。
(2)实验要求:先读入要求统计的文本文件名,然后按要求分别进行统计,并按以下格式输出:
alpha = XX, digit =XX, blank =XX, others =XX
3.实验分析
(1)问题分析:该问题可以采用最基本的文本文件处理方式,即:每次从文件中读出一个字符,并根据字符的类别在对应的计数变量内进行计数。重复以上操作直到遇到文件结束符。
(2)实验要点:先通过gets()函数读入文件名,并打开文本文件。利用fgetc()函数从文件中读出字符,如果该字符不是文件结束符EOF,则进行相应的处理:判断它是否字母?或是否为数字字符?或是否为空格、制表符及换行符?或是否为其它字符?以便让对应的变量进行计数。在遍历并处理了文件所有字符后,关闭文件,输出结果。
基本算法如下图所示。
图 统计文本文件各类字符个数流程图
4.参考代码
/* 1 */ #include<stdio.h>
/* 2 */ #include<ctype.h>
/* 3 */ #include<stdlib.h>
/* 4 */ int main(void)
/* 5 */ {FILE *fp;
/* 6 */ int alpha,digit,blank,other;
/* 7 */ char c,fname[20];
/* 8 */ alpha=digit=blank=other=0;
printf怎么输出字符/* 9 */ gets(fname);
/
* 10 */ if((fp=fopen(fname,"r"))==NULL){ /*以只读方式打开fname中指定的文本文件*/
/* 11 */ printf("Cannot open file!\n");
/* 12 */ exit(0);
/* 13 */ }
/* 14 */ while((c=fgetc(fp))!=EOF){ /*如果读出的字符c不是文件结束符,则进入循环*/
/* 15 */ if(isalpha(c))alpha++; /*判断是否为字母*/
/* 16 */ else if(isdigit(c))digit++; /*判断是否为数字字符*/
/* 17 */ else if(c==' '||c=='\t'||c=='\n')blank++;
/* 18 */ else other++;
/* 19 */ }
/* 20 */ printf("alpha=%d,digit=%d,blank=%d,others=%d\n ",alpha,digit,blank,other);
/
* 21 */ fclose(fp); /*关闭文件*/
/* 22 */ return 0;
/* 23 */ }
5.思考题
(1)如果统计的是文本文件a.txt中各种字母的出现次数(不区分大小写,即A和a 被认为是相同的),并把个数非零的统计结果以下面的方式显示在屏幕上,程
序应该怎么改? 输出示例(数据输出以制表符间隔):
A(a):6E(e):3M(m):11Y(y):5
(2)如果要求把待统计的文本文件名作为命令行参数输入,如何修改程序?
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论