二级C语言上机编程题技巧总结.doc





《二级C语言上机编程题技巧总结.doc》由会员分享,可在线阅读,更多相关《二级C语言上机编程题技巧总结.doc(26页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、二级C语言上机编程题技巧一、 方法总结1、 二级C语言上机编程题在二级上机考试中属于较难题型,因此很多同学都害怕通过不了。综合往年的考试,结合考试大纲,每年考试的编程题都有一定的规律和方法,只要同学们认真熟练使用做题的方法,通过考试是没有问题的。2、 编程题做题方法一:使用C语言特有的函数做题(1) 编程思想:使用C语言函数库中的做题,做题时必须注意包含对应的头文件(2) 考题举例:题库中的第37题,要求将数字字符串转化为对应整数,例如“-1234”转化后为-1234。做题时需要添加头文件#include stdlib.h,然后在fun函数中写入程序return atol(p);其中atol(
2、p)表示将p从字符串转化为长整型数。最后编译,运行后输入测试数据后即可得到满分。#include #include #include stdlib.hlong fun ( char *p) return atol(p);(3) 方法总结:该类方法可以适用的题目较少,同学们了解即可。3、 编程题做题方法二:使用规律做题(1) 编程思想:部分题目的答案是固定的,不会因为输入的数据改变而改变,因此这部分题目我们直接将答案记住即可,减少编程的麻烦。(2) 考题举例:题库中的70题,求cos(x)-x=0的一个实根。做题时候在fun函数中输入return 0.739085;后点击编译和运行即可,无需输入
3、测试数据。(补充:如果需要输入测试数据,程序在输出的黑屏上面会提示,不过一般是英文提示,所以同学们要格外小心)#include #include double fun() return 0.739085;(3) 考题总结:该题为每年必考的题目,因此同学们要将答案熟记,以便大家能顺利通过考试。4、 编程题做题方法三:使用C语言编程(1) 编程思想:该种方法是考试中使用频率最多的方法,就是使用学习的C语言进行编程,对C语言的知识进行综合运用,因此难度较大,容易出错。(2) 考题举例:题库14题,求小于形参n同时能被3和7整除的所有自然数之和的平方根,并作为函数的返回。做题时时一定要按照三个步骤来:
4、一要定义,二要满足题意,三要看有无返回。#include #include double fun( int n) int i;int sum=0; for(i=0;in;i+) if(i%3=0&i%7=0) sum=sum+i; return sqrt(sum);(3) 考题总结:该题属于编程方法中较简单的题型,做题时也可以使用简便方法,请参考考试总结中的叙述。5、 编程题做题方法四:使用简便方法做题(1) 编程思想:顾名思义这是一种简单而且高效的方法,可是要提醒大家里面的方法不是看一遍就能掌握的,同学们要仔细再仔细,多练习多思考。(2) 考题举例:题库第8题,要求除了字符串前导的*号之外,
5、将串中其他的*号全部删除。例如,字符串的内容:*A*BC*DEF*G*,删除后为:*ABCDEFG。做题步骤如下:1) 读题目,否则将不能正确做题。该题目的要求很清晰,就是删除*号,但是不能删除前导*号。这里大家要知道什么是前导*号?其实它是指字符串中第一个字母以前的全部*号,该题中有4个前导*号。2) 开始做题,找到NONO函数,了解做题的来龙去脉。以该题为例,以下是NONO函数的全部内容:NONO() /* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */FILE *in, *out ;int i ; char s81 ;in = fopen(D:k0124010001i
6、n.dat,r) ;out = fopen(D:k0124010001out.dat,w) ;for(i = 0 ; i 10 ; i+) fscanf(in, %s, s) ;fun(s) ;fprintf(out, %sn, s) ;fclose(in) ;fclose(out) ;分析NONO函数:分析过程有点多,第一次就要将其看懂,后面就可以很轻松! FILE *in, *out;表示定义了两个文件类型的指针in和out,用来指向某个打开的某个文件。 int i ; char s81 ;定义了一个整型的变量i,一般用来表示循环的递增;定义了一个字符类型的一维数组s,这里数组s没有存储任
7、何的数据,因此一般是闲置用来后面题目中存放数据使用的。 in = fopen(D:k0124010001in.dat,r) ;in是上面定义的文件指针,用来指向一个文件in.dat。首先大家要知道open在英语里面表示是“打开”,file在英语里面是“文件”,因此形象记忆fopen就是打开文件,打开什么文件?看后面的存储目录D:k0124010001in.dat,就是这个路径下面的文件in.dat,以”r”只读的形式打开,记住不能就行对in.dat的改动。 out = fopen(D:k0124010001out.dat,w) ;out文件指针用来指向out.dat,打开的方式以”w”写的方式
8、写数据,换句话说:in.dat是考试时候的数据源文件,而out.dat是用来存放答案的文件,所以要确保out.dat中的数据完全正确。 for(i = 0 ; i 10 ; i+)循环语句,该循环将执行10次 fscanf(in, %s, s) ;从in文件所指向的数据源文件in.dat中读取一行字符串数据给一维数组s,(顺便说下为什么知道是读取一行字符串数据,是因为%s格式是用来控制字符串的,因此不难判断),通过循环语句,将读取10行数据进行处理,该题目总共40分,因此每行就是4分。 fun(s) ;调用函数fun,传入实参s,我们从题目得知fun函数要完成的事情是删除字符串中的*号,但是不
9、删除前导*号,每次传入的数据都会被执行。 fprintf(out, %sn, s) ;printf在第二章学习的时候知道是输出的意思,fprintf的意思是将数据输出到out指针指向的文件中,以“%sn”格式方式输出,输出的数据是s,同学们一定要注意,此时的s是修改过的s,即是删除*号后的字符串。 fclose(in) ;关闭文件指针in fclose(out) ;关闭文件指针out,文件打开后要将其关闭。3) 在VC6.0中fun函数位置输入一些简单的语句,例如:输入定义一个test变量,给其赋值,最好多敲几个回车进去,如果数据有返回值,必须输入返回值。然后点击编译,运行后将出现这个界面:#
10、include void fun( char *a )int test;test=5; 要求输入一个字符串,可以任意的从键盘中输入字符串,例如输入:12345回车,得到:程序中出项Press any key to continue则说明程序已经运行,将在考试文件夹下面生成out.dat文件,否则在考生文件夹下面将不会生成out.dat文件,就没有办法继续做题。4) 打开in.dat 关闭第三步程序运行的界面,打开int.dat文件。 在VC+6.0界面中“单击File”,在弹出的菜单中选取“Open”,打开考生文件夹D:k0124010001下面的in.dat文件。截图如下: 查找范围里面选中
11、D盘 找到k01下面的24010001,发现没有in.dat文件,单击文件类型,选择“所有文件(*.*)”即可 选中in.dat,然后单击打开,出现下图所示界面为正确打开 分析in.dat中的数据发现每行数据都是由*号和字母组成的,总共有10行。5) 打开out.dat 和打开in.dat同样的方法打开out.dat 将out.dat里面的数据清空,即将out中所有东西都删除,让out没有任何的代码 将in.dat中第一行数据*A*BC*DEF*G*复制到out.dat中 将out.dat第一行数据的中间*和尾部*全部删除,然后敲入回车 以此类推将in.dat中剩余9行按照上面的步骤复制到ou
12、t.dat中进行修改,两行中间没有空行6) 保存交卷 单击左上方的保存,保存结果 保存后关闭vc+6.0方可交卷二、 考题总结第一种类型:字符串操作一,字符串删除*号1、 考题库中考题对应编号:8、9、10、19、45、54、57、61、65、71、77、90、92、93、100、56、60、72、75、85、862、 举例:以第10题为例讲解1) 分析题目:使字符串的前导*号不得多于n个,若多于n个,则删除多余的*好,若少于或等于n个,则什么也不做,字符串中间和尾部*号不得删除。2) 分析NONO函数:NONO()/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ FI
13、LE *in, *out ; int i, n ; char s81 ; in = fopen(D:k0124010001in.dat,r) ; out = fopen(D:k0124010001out.dat,w) ; for(i = 0 ; i 10 ; i+) fscanf(in, %s, s) ; fscanf(in, %d, &n) ; fun(s,n) ; fprintf(out, %sn, s) ; fclose(in) ; fclose(out) ;NONON函数具体分析方法前面(方法四)已经详细讲解过了,现将不同的点进行分析。fscanf(in, %s, s) ;表示从in.
14、dat中读取一个字符串放到数组s中fscanf(in, %d, &n) ;表示从in.dat中读取一个整型数据给变量n,从题目中我们不难发现s和n之间的关系,就是如果s字符串中的前导多于n个删除,则删除多余的*号,否则什么也不做。fprintf(out, %sn, s) ;只将修改后的字符串输出3) 在fun函数中输入测试数据,该题函数返回void则无需return语句#include void fun( char *a, int n ) int test; test=5;4) 编译运行,输入一个字符串后还需输入一个n 5) 打开in.dat分析in.dat中的数据刚好是一行字符串一行整数,总
15、共有20行,通过fscanf(in, %s, s) ; fscanf(in, %d, &n) ;两个函数每次输入两个数据分别给s和n,例如第一行中输入的时候s字符串就该为:*A*BC*DEF*G*,n的值就为:4,s字符串中的前导*号为个,多于了n的值,因此需要将多于的3个*号删除。6) 打开out.dat打开out.dat并清空数据,因为fprintf(out, %sn, s) ;只将修改后的字符串输出,将第一个字符串删除3个*号填写到out.dat中,不输出in.dat中的4以此类推将数据进行输入:7) 保存交卷第二种类型:字符串操作二,移动字符串1、 考题库中对应试题编号:1、42、83
16、、872、 试题举例:以第1题为例(1) 分析题目:把1到第m个字符平移到字符串的最后(2) 分析NONO函数: 注意fscanf(rf, %d %s, &m, a) ;表示从rf指向的文件in.dat中读取两个数据,一个整型数据给变量m,另外一个给数组a。根据题目我们不难判断,程序就完成:将数组a中的字符串从第1个到第m个移动到最后。(3) 在fun函数中输入测试数据,该题函数返回void则无需return语句,在执行窗口中需要输入m的值。(4) 编译,执行,输入测试数据 (5) 打开in.dat分析:in.dat结合NONO函数中的fscanf函数可以得到,函数将整数3给了m,将字符串:A
17、BCDEFGHIJK给了数组a(6) 打开out.dat 将in.dat中第一行中的字符的前3个字母移动到最后 依次类推将得到正确的结果。(7) 保存交卷第三种类型:数学问题一,将两个数字按照要求合并成一个数字1、 对应题库中的题目编号:13、38、44、46、63、69、78、88、94、95、962、 试题举例:以13题为例(1) 分析题目:将a中十位和个位数依次放在变量c的百位和个位上,b中的十位和个位依次放在变量c的十位和千位上(2) 分析NONO函数:(3) 在fun函数中输入测试数据,编译,执行,该题函数返回void则无需return语句,在执行窗口中需要输入12空格45回车后,出
18、现下图结果。 (4) 打开in.dat,fscanf(rf, %d,%d, &a, &b) ;第一行中将45给了变量a,将12给了变量b(5) 打开out.dat。fprintf(wf, a=%d,b=%d,c=%ldn, a, b, c) ;输出格式一定要注意,如下图所示,否则不得分。(6) 保存交卷第四种类型:数学问题二,二维数组相关类型题目1、 题库中对应题目编号:15、17、24、26、31、32、40、41、43、50、812、 考题举例:以15题为例(1) 题目分析:将M行N列的二维数组中的数据,按行的顺序依次放到一维数组中(2) NONO函数: (3) 在fun函数中输入测试数据
19、,编译,执行,该题函数返回void则无需return语句,出现下图结果。 (4) 打开in.dat。fscanf(rf, %d %d, &mm, &nn) ;从in.dat中第一行输入两个整型数,第一个3给变量mm表示数组中的行,第二个4给变量nn表示数组中的列。for(i = 0 ; i mm ; i+) for(j = 0 ; j nn ; j+) fscanf(rf, %d, &wij) ;将mm*nn个整数放到二维数组w中,即读取二维数组的数据。例如第一行mm为3,nn为4,则应该有一个3行4列的二维数组。(5) 打开out.dat。根据for(i = 0 ; i n ; i+) fp
20、rintf(wf, %3d, ai) ; fprintf(wf, n) ;格式进行数据的输出。for(i = 0 ; i n ; i+) fprintf(wf, %3d, ai) ;表示将n个二维数组元素以%3d的形式输出到out.dat中,以第一个二维数组为例即将以行的形式进行输出,结果如下: 第一个33前面要加一个空格,因为%3d要求输出的宽度为3,但是33这个数字只占了2个的宽度,因此必须在33前面加一个空格,依次类推,第二33至55都要在前面加一个空格。输完数据后要记得执行fprintf(wf, n) ;输出一个换行符。将题目中其它的二维数组修改后的结果如下:(7) 保存交卷第五种类型
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二级 语言 上机 编程 技巧 总结

限制150内