1、国家二级 C+机试(操作题)-试卷 170 及答案解析(总分:6.00,做题时间:90 分钟)一、基本操作题(总题数:1,分数:2.00)1.使用 VC6 打开考生文件夹下的源程序文件 modi1cpp,该程序运行时有错误,请补充程序中的丢失部分,使得程序运行。可以在修改处增加或者删除一条语句。本程序完成以下功能:(1)获得输入的两个数字 x1,x2(例如 x1=4,x2=2);(2)输出两个中较小的一个(例如输出 2);(3)计算 x1x2 如果 x2 等于 0,返回-1(输出结果 2);(4)输出 x1+x2 的结果(输出结果 6);(5)输出 x1+1 的结果(输出结果 5);(6)输出
2、x2-1 的结果(输出结果 1)。注意:不要改动 main 函数,不能增行或删行,也不能更改程序的结构,错误的语句在*error*的下面。#includeiostream.hvoid main()int x1;int x2;int x3;cout“pl ease inputtwo number:“(endl;cinx1x2;*error*x3=(x1x2)?x1:x2;cout“Min number is:“x3endl;计算 x1x2 如果 x2 等于 0,返回-1*error*x3=(x2)?x1x2:-1;cout;“x1x2=“x3endl;*error*x3=(-x1)+(x2+);
3、cout“x1+x2=“x3endl;cout“x1+1=“x1endl;cout“x2-1=“x2endl;return;(分数:2.00)_二、简单应用题(总题数:1,分数:2.00)2.使用 VC6 打开考生文件夹下的源程序文件 modi2cpp。请完成函数 fun(int n),求出 nn 矩阵的对角线数字的平方和。如果 n 为奇数,则对角线交叉部位数字只参与一次计算。注意:请勿改动主函数 main与其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。#includeiostreamh#define MAX_N 10int XXMAX_NMAX_N;int fun(
4、int n)void main()int n;docout“please input N(1=N10):“endl;cinn;if(n10&n=1)break;)while(1);for(int i=0;in;i+)for(int j=0;jn;j+)tout“please input:data:“endl;cinXXij;coutfun(n)endl;return;(分数:2.00)_三、综合应用题(总题数:1,分数:2.00)3.使用 VC6 打开源程序文件 modi3cpp。此程序的功能是将 out1txt 文件中的内容输出到屏幕与文件中。输出如下:李一 178m 21 王一 165m
5、23out2txt 文件的内容如下:李一 178m 21 王一 165m 23 其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。(1)以输入方式打开文件 out1txt,请在注释*1*后添加适当的语句。(2)以输出方式打开文件out2txt,请在注释*2*后添加适当的语句。(3)从文件中获得一个字符,判断是否结束,如果结束则退出输出。请在注释*3*后添加适当的语句。(4)把获得的字符输出到文件中,请在注释*4*后添加适当的语句。注意:仅在函数指定位置添加语句,请勿改动主函数 main 与其他函数中的任何内容。#includeiostream.h#includefstream.h#
6、includestdlib.hvoid main()char ch;fstream infile,outfile;*1*infileopen(“out1txt“);if(!infile)cout“out1txt 文件不能打开“endl;abort();*2*outfileopen(“out2txt“);if(!outfile)cout“out2txt 文件不能打开“endl;abort();*3*while()coutch;*4*coutendl;infileclose();outfileclose(),(分数:2.00)_国家二级 C+机试(操作题)-试卷 170 答案解析(总分:6.00,
7、做题时间:90 分钟)一、基本操作题(总题数:1,分数:2.00)1.使用 VC6 打开考生文件夹下的源程序文件 modi1cpp,该程序运行时有错误,请补充程序中的丢失部分,使得程序运行。可以在修改处增加或者删除一条语句。本程序完成以下功能:(1)获得输入的两个数字 x1,x2(例如 x1=4,x2=2);(2)输出两个中较小的一个(例如输出 2);(3)计算 x1x2 如果 x2 等于 0,返回-1(输出结果 2);(4)输出 x1+x2 的结果(输出结果 6);(5)输出 x1+1 的结果(输出结果 5);(6)输出x2-1 的结果(输出结果 1)。注意:不要改动 main 函数,不能增
8、行或删行,也不能更改程序的结构,错误的语句在*error*的下面。#includeiostream.hvoid main()int x1;int x2;int x3;cout“pl ease inputtwo number:“(endl;cinx1x2;*error*x3=(x1x2)?x1:x2;cout“Min number is:“x3endl;计算 x1x2 如果 x2 等于 0,返回-1*error*x3=(x2)?x1x2:-1;cout;“x1x2=“x3endl;*error*x3=(-x1)+(x2+);cout“x1+x2=“x3endl;cout“x1+1=“x1endl
9、;cout“x2-1=“x2endl;return;(分数:2.00)_正确答案:(正确答案:(1)x3=(x1x2)?x1:x2; (2)x3=(x2)?x1x2:-1; (3)x3=(x1+)+(x2-);)解析:解析:(1)第 1 个标识下“x3=(x1x2)?x1:x2;”语句是判断 x1 与 x2 其中哪个相对较小,并将其赋值给 x3。条件运算符的格式:表达式 17 表达式 2:表达式 3。执行顺序是先求解表达式 1,若非则求解表达式 3,此时表达式 3 的值就作为整个条件表达式值。所以求 x1 和 x2 中较小的一个,如果 x1x2为真,那么 x1 的值赋给 x3,否则 x2 的值
10、赋给 x3,即第 1 个标识下为“x3=(x1x2)?x1:x2;”。 (2)同理,第 2 个标识下计算 x1x2 如果 x2 等于 0 返回-1。即“x3=(x2)?x1x2:-1;”。 (3)题干中求x1+1,而-x1 是 x1-1,所以改为 x1+。同理 x2+改为 x2-。即“x3=(x1+)+(x2-);”。二、简单应用题(总题数:1,分数:2.00)2.使用 VC6 打开考生文件夹下的源程序文件 modi2cpp。请完成函数 fun(int n),求出 nn 矩阵的对角线数字的平方和。如果 n 为奇数,则对角线交叉部位数字只参与一次计算。注意:请勿改动主函数 main与其他函数中的
11、任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。#includeiostreamh#define MAX_N 10int XXMAX_NMAX_N;int fun(int n)void main()int n;docout“please input N(1=N10):“endl;cinn;if(n10&n=1)break;)while(1);for(int i=0;in;i+)for(int j=0;jn;j+)tout“please input:data:“endl;cinXXij;coutfun(n)endl;return;(分数:2.00)_正确答案:(正确答案:int da
12、ta=0;初始化求平方和变量 for(int i=0;in;i+) data+=XXii*XXii;求正对角线平方和 if(i!=n-i-1) data+=XXin-i-1*XXin-i-1;求逆对角线平方和 return data;)解析:解析:(1)首先初始化求平方和变量,设置求平方和的变量为 0。 (2)然后利用 for 循环求得矩阵正对角线平方和。 (3)最后求得逆对角线平方和,返回平方和变量。三、综合应用题(总题数:1,分数:2.00)3.使用 VC6 打开源程序文件 modi3cpp。此程序的功能是将 out1txt 文件中的内容输出到屏幕与文件中。输出如下:李一 178m 21
13、王一 165m 23out2txt 文件的内容如下:李一 178m 21 王一 165m 23 其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。(1)以输入方式打开文件 out1txt,请在注释*1*后添加适当的语句。(2)以输出方式打开文件out2txt,请在注释*2*后添加适当的语句。(3)从文件中获得一个字符,判断是否结束,如果结束则退出输出。请在注释*3*后添加适当的语句。(4)把获得的字符输出到文件中,请在注释*4*后添加适当的语句。注意:仅在函数指定位置添加语句,请勿改动主函数 main 与其他函数中的任何内容。#includeiostream.h#includefs
14、tream.h#includestdlib.hvoid main()char ch;fstream infile,outfile;*1*infileopen(“out1txt“);if(!infile)cout“out1txt 文件不能打开“endl;abort();*2*outfileopen(“out2txt“);if(!outfile)cout“out2txt 文件不能打开“endl;abort();*3*while()coutch;*4*coutendl;infileclose();outfileclose(),(分数:2.00)_正确答案:(正确答案:(1)将“infileopen(
15、“out1txt“);”补充完整为:infileopen(“out1txt“,ios:in); (2)将“outfileopen(“out2txt“)j”补充完整为:outfileopen(“out2txt“,ios:out); (3)将“while()”补充完整为:while(infileget(ch) (4)添加语句:outfilech;)解析:解析:(1)题目 1 要求“以输入方式打开文件 out1txt”。在 C+中调用文件流的成员函数 open的格式为,文件流类open(“文件名“,ios:in),所以第 1 个标识下语句就该为“infileopen(“out1txt“,ios:in);”。 (2)题目 2 要求“以输出方式打开文件 out2txt”。同理第 2 个标识下修改为“outfileopen(“out2txt“,ios:out);”。 (3)题目 3 要求“从文件中获得一个字符,判断是否结束”。程序中的“while()”循环判断语句中缺少从文件中获得的字符,所以这里补全 while 循环判断条件,即“while(infileget(ch)”。 (4)题目 4 要求“把获得的字符输出到文件中”。在 C+中,用流插入运算符为“”,所以根据题干中的要求在第四个标识下补全写入文件的流操作语句,即“outfilech;”。