c语言编程题方法2.docx
《c语言编程题方法2.docx》由会员分享,可在线阅读,更多相关《c语言编程题方法2.docx(10页珍藏版)》请在冰豆网上搜索。
c语言编程题方法2
第二类型:
结合in.dat文件修改out文件。
第一种类型:
直接按题目要求修改out.dat文件,如《全国计算机等级考试上机考试第三题(程序编写题)做题技巧基本步骤篇》,在这里就不再讲了。
这是最基本的类型,也是最简单的类型。
第二类型:
结合in.dat文件修改out文件。
如此题:
我们用《基本步骤篇》中讲解的方法,一直做到打开out.dat文件为止,如下图:
到这里,从目前我们掌握的技巧来看,没有办法做,因为,我们不知道out文件当中,每个字符串所对应的n的值,这就要求我们必须找到n的值。
方法是,用打开out文件的方法打开in.dat文件(与out.dat文件在同一个文件夹中)。
我们把in与out进行对比,大家就会发现,字符的部分完全一样,但是,in文件每一个字符串下面都有一个数字,这就是我们要找的n的值,我们再按题目要求对out文件进行修改。
修改完成之后,保存,关掉所有已经打开的文件,就可以了。
第三种类型:
无法按第一种类型做,也没有in文件,这时,需要去程序中找相关数据。
如此题(这个题目是比较难的,有很多注意事项,我用红色的进行标注):
同样,我们按《基本步骤篇》中的步骤,一直做到打开out文件为止。
大家看到out文件之后,会发现,这是一个没有任何规律的数字,我们把-858993460删了。
这时,大家首先想到的自然是去找in文件,但是,大家会发现,这个题目根本没有in文件。
根据题目的意思,这个题目要按我们这个方法做,我们必须要知道两组数据:
一是所有学生的成绩,二是指定的分数段。
我们来看程序部分:
#include
#defineN16
typedefstruct
{charnum[10];
ints;
}STREC;
intfun(STREC*a,STREC*b,intl,inth)
{
}
main()
{STRECs[N]={{"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},
{"GA001",96},{"GA007",72},{"GA008",64},{"GA006",87},
{"GA015",85},{"GA013",94},{"GA012",64},{"GA014",91},
{"GA011",90},{"GA017",64},{"GA018",64},{"GA016",72}};
STRECh[N],tt;FILE*out;
inti,j,n,low,heigh,t;
printf("Enter2integernumberlow&heigh:
");
scanf("%d%d",&low,&heigh);
if(heighn=fun(s,h,low,heigh);
printf("Thestudent'sdatabetween%d--%d:
\n",low,heigh);
for(i=0;iprintf("%s%4d\n",h[i].num,h[i].s);
printf("\n");
out=fopen("D:
\\k01\\24010001\\out.dat","w");
n=fun(s,h,80,98);
fprintf(out,"%d\n",n);
for(i=0;ifor(j=i+1;jif(h[i].s>h[j].s){tt=h[i];h[i]=h[j];h[j]=tt;}
for(i=0;ifprintf(out,"%4d\n",h[i].s);
fprintf(out,"\n");
fclose(out);
}
通过这个程序,再结合题目中的“N名学生的数据已在主函数中放入结构体数组s中”,我们不难发现,学生的成绩就是:
{"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},
{"GA001",96},{"GA007",72},{"GA008",64},{"GA006",87},
{"GA015",85},{"GA013",94},{"GA012",64},{"GA014",91},
{"GA011",90},{"GA017",64},{"GA018",64},{"GA016",72}
我们再继续看程序,其中n=fun(s,h,80,98);中的80,98就是我们需要的学生的分数段。
到目前为止,我们需要的两组数据:
所有学生的成绩,指定的分数段都已经找到了,我们就可以往out文件中写入内容了。
可是,我们写什么内容到out文件中呢?
到这里,就对我们C语言知识的一些基本功有一定的要求了。
在这个地方,大家要记住一定,out文件里的内容,按正常做题方法来看,肯定是由程序实现书写的,只是,我们这个办法,由我们自己代替了程序的工作,我们自己就必须要遵守程序的一些规则。
程序实现书写内容到文件当中,自然就是fprintf语句,所以,大家只要去程序中,只要看到fprintf语句,说明fprintf语句后面的输出内容都是要写入到out文件当中去的(我尽量讲得详细,但是,这里仍然不好理解,希望大家认真看,多看两次,能理解上面说的是什么)。
回到这个题:
第一个:
fprintf(out,"%d\n",n);这条语句是需要输出一个n的值到out文件当中,n=fun(s,h,80,98);即n就是80到98之间学生的人数,我们数一下,知道n的值为8,所以,我们首先在out文件当中书写一个8,由于有\n,所以,还需要回车一下。
第二个:
fprintf(out,"%4d\n",h[i].s);h[i].s就是学生的分数,80到98之间学生的分数,注意输出的时候4d%(具体什么意思,自己去看书),同时,根据前面的几条语句:
for(j=i+1;jh[j].s){tt=h[i];h[i]=h[j];h[j]=tt;}这实行了对学生分数从小到大的排序,所以,我们接下来按从小到大的顺序把80到98之间的学生分数按4d%的格式写入到out文件中,注意\n,说明每一个分数完了都要换行,包括最后一个。
第三个:
fprintf(out,"\n");这就是输出一个换行符,就是在out文件后面一行再按一次回车健。
接着往下看,再也没有fprintf语句,说明,已经完了,保存,得分。
第四种类型:
没有in文件,程序中也没有相关数据,那么他的数据就在程序的运行窗口。
比如此题:
同样,我们按《基本步骤篇》中的步骤,一直做到打开out文件为止。
同里,我们把:
后面所有的内容都删除掉(包括:
与-之间的两个空格)。
我们要做这个题,必须要知道所有的人年龄,我们发现,没有in文件,程序中也没有给出相关的数据,其实,我们再运行一下程序,得到黑色的运行窗口,大家就会发现所有人的年龄。
这时,我们只需要数0-9之间有多少,10-19之间有多少。
。
。
。
就行了。
我们来做一个,0-9之间,共有2人,于是,可能很多同学就直接这么写了:
0---9:
2。
这是不对的,同样,大家一定要看清楚输入格式!
程序中有这么一条语句:
fprintf(wf,"%4d---%4d:
%4d\n",i*10,i*10+9,d[i])大家注意看,:
的前面的后面都各有两个空格,按输入格式讲的知识,我们知道,空格必须要原样输出的,所以,:
与2之间,必须要先敲两个空格;然后,再看4d%,我们知道,还必须有三个空格,所以,:
与2之间,应该是5个空格!
!
!
第五种类型:
没有out文件。
由于我们没有写代码,所以,可能部分程序没办法正常运行,造成就没有out文件(out文件不是本来就有的,他是在运行的了程序之后才生成的),这种时候,就需要我们手动建立一个out文件,建立方法是:
1、如果说有in文件,复制一下in文件,然后在同一个文件夹下面粘贴,然后重命名为out就可以了。
如果说没有in文件,我们在考生文件夹的空白处,单击右健,选择新健,选择文本文档,然后对这个新健的文件重命名为out.dat(注意,必须修改文件的后缀名。
文件原名为新建文本文档.txt,我们必须全部删掉,然后写上out.dat。
如果说你看不到.txt,