1、二级 C 语言机试-209 及答案解析(总分:100.00,做题时间:90 分钟)一、填空题(总题数:1,分数:30.00)1.请补充 main 函数,该函数的功能是:先以只写方式打开文件“out99.dat”,再把字符串 str 中的字符保存到这个磁盘文件中。注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在 main 函数的横线上填入所编写的若干表达式或语句。试题程序:#include “stdio. h“#include “conio.h“#define N 80main ()FILE *fp;int i=0;char ch;char strN=“Im a
2、student!“;clrscr();if ( (fp=fopen ( 【1】 ) ) =NULL)printf(“cannot open out99. dat/n“);exit(0);while (stri)ch=stri;【2】 ;putchar(ch);i+;【3】 ;(分数:30.00)填空项 1:_二、改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun()的功能是;计算函数 F(x, y ,z)=(x+ y)/(x-y)+(z+ y)/(z-y)的值。其中 x 和 y 不相等,z 和 y 不等。例如,当 x 的值为 9,y 的值为 11,2 的值为 15 时,函数
3、值为-3.50。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。试题程序:#include stdio. h#include math. h/*found*/#define FU(m, n) (m/n)float fun(float a, float b, float c)float value;value=FU(a+ b, a-b)+FU(c+ b, c-b);/*found*/return(Value);main()float x, y, z, sum;printf (“Input x y z: “);scanf(“%f%f%
4、f“, printf(“x=%f, y=%f, z=%f/n “,x, y, z);if (x=yy=z) printf (“Data error! /n “);exit (0); sum=fun (x, y, z);printf(“The result is:%5. 2f/n “,sum);(分数:30.00)填空项 1:_三、编程题(总题数:1,分数:40.00)3.请编写一个函数 unsigned fun (unsigned w),w 是一个大于 10 的无符号整数,若 w 是 n(n2)位的整数,则函数求出 w 的后 n-1 位的数作为函数值返回。例如:w 值为 5923,则函数返回
5、923;若 w 值为 923,则函数返回 23。注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。试题程序:#includeconio. h#includestdio. hunsigned fun(unsigned w)main()unsigned x;clrscr ();printf(“Enter a unsigned integernumber: “);scanf (“%u“,printf(“The original data is:%u/n“,x);if (x10)printf (“Data error! “);
6、elseprintf (“The result :%u/n“, fun(x) );(分数:40.00)_二级 C 语言机试-209 答案解析(总分:100.00,做题时间:90 分钟)一、填空题(总题数:1,分数:30.00)1.请补充 main 函数,该函数的功能是:先以只写方式打开文件“out99.dat”,再把字符串 str 中的字符保存到这个磁盘文件中。注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在 main 函数的横线上填入所编写的若干表达式或语句。试题程序:#include “stdio. h“#include “conio.h“#define N
7、 80main ()FILE *fp;int i=0;char ch;char strN=“Im a student!“;clrscr();if ( (fp=fopen ( 【1】 ) ) =NULL)printf(“cannot open out99. dat/n“);exit(0);while (stri)ch=stri;【2】 ;putchar(ch);i+;【3】 ;(分数:30.00)填空项 1:_ (正确答案:1“out99.dat”,“w” 2 fpnte (ch,fp) 3 fclose (fp))解析:解析 填空 1:本题考查对文件操作的掌握。打开一个文件的调用方式是,fp=
8、fopen (文件名,使用文件方式);,题目要求以只写的方式打开文件“out 99.dat”,所以文件使用方式为“w”。填空2;fputc ()函数用于将一个字符写到磁盘文件上去,调用形式为:fputc (要输出的字符,文件指针)。填空 3:对一个文件进行操作后,应该关闭它,以防它再被误用。调用形式为:fclose (文件指针);。二、改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun()的功能是;计算函数 F(x, y ,z)=(x+ y)/(x-y)+(z+ y)/(z-y)的值。其中 x 和 y 不相等,z 和 y 不等。例如,当 x 的值为 9,y 的值为 11,2
9、 的值为 15 时,函数值为-3.50。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。试题程序:#include stdio. h#include math. h/*found*/#define FU(m, n) (m/n)float fun(float a, float b, float c)float value;value=FU(a+ b, a-b)+FU(c+ b, c-b);/*found*/return(Value);main()float x, y, z, sum;printf (“Input x y z: “);
10、scanf(“%f%f%f“, printf(“x=%f, y=%f, z=%f/n “,x, y, z);if (x=yy=z) printf (“Data error! /n “);exit (0); sum=fun (x, y, z);printf(“The result is:%5. 2f/n “,sum);(分数:30.00)填空项 1:_ (正确答案:(1)错误;#define FU(m, n) (m/n) 正确:#define FU(m,n) (m)/(n)(2)错误:return (Value); 正确:return (value);)解析:解析 如果从数学思想来说,这是一道简
11、单的小学数学题,当然,用 C 语言的别的办法实现的话,也用不了三两句的程序,但是,这道题的考查点在 C 语言的宏定义上(这样的问题比较隐蔽),它的格式为#define 标识符 字符串,中间要用空格分开,在该题中,标识符为 FU (m, n),而字符串则是(m/n),由题干信息易知,应该是# define FU(m,n) (m)/(n)。三、编程题(总题数:1,分数:40.00)3.请编写一个函数 unsigned fun (unsigned w),w 是一个大于 10 的无符号整数,若 w 是 n(n2)位的整数,则函数求出 w 的后 n-1 位的数作为函数值返回。例如:w 值为 5923,则
12、函数返回 923;若 w 值为 923,则函数返回 23。注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。试题程序:#includeconio. h#includestdio. hunsigned fun(unsigned w)main()unsigned x;clrscr ();printf(“Enter a unsigned integernumber: “);scanf (“%u“,printf(“The original data is:%u/n“,x);if (x10)printf (“Data error
13、! “);elseprintf (“The result :%u/n“, fun(x) );(分数:40.00)_正确答案:(unsigned fun (unsigned w)if(w=10000)return w%10000; /*求出 n 位整数 w 的后 n-1 位的数*/if(w=1000)return w%1000;if(w=100)return w%100;if(w=10)return w%10;)解析:解析 我们首先应该明白无符号整数的定义形式,若它大于 10000(5 位)时,将 10000 对它求余则结果为后 4 位;当它大于 1000(4 位)时,将 1000 对它求余则结果为后 3 位,花此类推。特别注意这里所有 if()的顺序不能颠倒。