【计算机类职业资格】二级C语言-396 (1)及答案解析.doc

上传人:syndromehi216 文档编号:1325363 上传时间:2019-10-17 格式:DOC 页数:8 大小:44KB
下载 相关 举报
【计算机类职业资格】二级C语言-396 (1)及答案解析.doc_第1页
第1页 / 共8页
【计算机类职业资格】二级C语言-396 (1)及答案解析.doc_第2页
第2页 / 共8页
【计算机类职业资格】二级C语言-396 (1)及答案解析.doc_第3页
第3页 / 共8页
【计算机类职业资格】二级C语言-396 (1)及答案解析.doc_第4页
第4页 / 共8页
【计算机类职业资格】二级C语言-396 (1)及答案解析.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

1、二级 C 语言-396 (1)及答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.函数 fun 的功能是:在有 n 个元素的结构体数组 std 中,查找有不及格科目的学生,找到后输出学生的学号:函数的返回值是有不及格科目的学生人数。例如,主函数中给出了 4 名学生的数据,则程序运行的结果为: 学号:N1002 学号:N1006 共有 2 位学生有不及格科目 请在程序的下划线处填入正确的内容,并把下划线删除,使程序得出正确的结果。 注意:源程序存放在 下的 BLANK1. C 中。不得增行或删行,也不得更改程序的结构! #include std

2、io. h typedef struct char num8; double score2; /*found*/ 1; int fun(STU std, int n) int i, k=0; for(i=0; in; i+) /*found*/ if(stdi. score060 2 stdi. score160) k+; printf(“学号: %s “, stdi. num); /*found*/ return 3; main( ) STU std4=“N1001“, 76.5, 82. 0, “N1002“, 53.5, 73.0, “N1005“, 80.5, 66. 0, “N100

3、6“, 81.0, 56.0; printf(“/n 共有%d 位学生有不及格科目/n“, fun(std, 4); (分数:30.00)二、程序修改题(总题数:1,分数:30.00)2.给定程序 MODI1. C 中,函数 fun 的功能是判断整数 n 是否是“完数”。当一个数的因子之和恰好等于这个数本身时,就称这个数为“完数”。例如:6 的因子包括 1、2、3,而 6=1+2+3,所以 6 是完数。如果是完数,函数返回值为 1,否则函数返回值为 0。数组 a 中存放的是找到的因子,变量 k 中存放的是因子的个数。 请改正函数 fun 中指定部位的错误,使它能得出正确的结果。 注意:不要改动

4、 main 函数,不得增行或删行,也不得更改程序的结构。 #include stdio. h int fun(int n, int a, int *k) int m=0, i, t; t=n; /*found*/ for(i=0; in; i+) if(n%i=0) am=i; m+; t=t-i;) /*found*/ k=m; /*found*/ if(t=0) return 1; else return 0; main( ) int n, a10, flag, i, k; printf(“请输入一个整数: “); scanf(“%d“, flag=fun(n, a, if(flag) p

5、rintf(“%d 是完数,其因子是:“, n); for(i=0; ik; i+) printf(“%d“, ai); printf(“/n“); else printf(“%d 不是完数./n“, n); (分数:30.00)_三、程序设计题(总题数:1,分数:40.00)3.请编写函数 fun:在形参指针所指的 4 个整数中找出最大值和最小值,最大的放在 a 中,最小的放在 d中。 注意:部分源程序存在 PROG1. C 中,请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。 #include stdio. h void NONO( );

6、 void fun(int *a, int *b, int*c, int *d) main( ) int a, b, c, d; printf(“请输入 4 个整数: “); scanf(“%d%d%d%d“, printf(“原始顺序: %d, %d, %d, %d/n“, a, b, c, d); fun( printf(“处理后: %d, %d, %d, %d/n“, a, b, c, d); NONO( ); void NONO( ) /*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/ FTLE *fp, *wf; int i, a, b, c, d; fp=fope

7、n (“C:/WEXAM/24990001/in. dat“, “r“); wf=fopen (“C:/WEXAM/24990001/out. dat“, “w“); for(i=0; i5; i+) fscanf(fp, “%d%d%d%d“, fun( fprintf(wf, “a=%d, d=%d/n“, a, d); fclose(fp); fclose(wf); (分数:40.00)_二级 C 语言-396 (1)答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.函数 fun 的功能是:在有 n 个元素的结构体数组 std 中,查找

8、有不及格科目的学生,找到后输出学生的学号:函数的返回值是有不及格科目的学生人数。例如,主函数中给出了 4 名学生的数据,则程序运行的结果为: 学号:N1002 学号:N1006 共有 2 位学生有不及格科目 请在程序的下划线处填入正确的内容,并把下划线删除,使程序得出正确的结果。 注意:源程序存放在 下的 BLANK1. C 中。不得增行或删行,也不得更改程序的结构! #include stdio. h typedef struct char num8; double score2; /*found*/ 1; int fun(STU std, int n) int i, k=0; for(i=

9、0; in; i+) /*found*/ if(stdi. score060 2 stdi. score160) k+; printf(“学号: %s “, stdi. num); /*found*/ return 3; main( ) STU std4=“N1001“, 76.5, 82. 0, “N1002“, 53.5, 73.0, “N1005“, 80.5, 66. 0, “N1006“, 81.0, 56.0; printf(“/n 共有%d 位学生有不及格科目/n“, fun(std, 4); (分数:30.00)解析:STU | k 答案考生文件夹 解析 本题中函数 fun 的

10、功能是在有 n 个元素的结构体数组 std 中,查找有不及格科目的学生,找到后输出学生的学号;函数的返回值是有不及格科目的学生人数。这里用到了结构体,结构体在对于个人信息处理是有很方便的作用。只需要用到学生的分数和学号,所以这里的结构体的成员表列比较少。然后根据题目要求是要统计出不及格学生的人数并且查找和统计他们的学号,这里用到 if 条件语句即可进行统计,要注意的是这里学科数,要求只要有一门学科不及格即进入统计,所以要正确地给出条件语句。最后输出学号和人数。 第一空:“ -|_|-;”这一空出现在定义结构体时,这里使用了 typedef就是很明显地要声明结构体类型,而这里则是要填写结构体类型

11、名。这里就要知道 typedef。的作用了,typedef 是用来命名已有类型的,相当于给已经知道的类型(如 int float)一个新的类型名,而这里命名的是一个结构体,这不同于结构体的类型定义,大括号后面填写的不是变量名表列,而是结构体类型名,相当于给一个名称或者一种新的类型。而根据后面程序已给出的部分,我们能清楚的看到定义的结构体类型名是 STU,所以这一空应该填的是“STU”。 第二空: “if(stdi. score060 -|_|- stdi. score160);”这一空出现在 fun 函数中的 if 条件语句中,根据 if 后面的执行语句我们可以看到执行的人数的统计,所以这里应

12、该就是在判断学生学科分数是否及格的条件语句。对于一开始的结构体定义我们能够发现成员 score 是长度为 2 的数组,所以每个学生应该是有两门学科的分数需要来判定和统计的,而这两门学科中任意一门分数不够的话都定义为不及格,然后统计进入人数中,这里所填空的两边是两门学科的分数低于 60 分,既然前面说了是任意一门低于 60 即进入统计,那这里就应该是“或”符号才符合要求,所以这一空应该填“|”。 第三空:“return(3);”这一空出现在 fun 函数中,这里要填写的是 fun 函数执行后的返回值。根据题目的要求函数是要查找不及格的科目的学生,找到学生学号,然后返回学生的人数,这一空前面已经执

13、行了查找,统计人数和学号的输出,所以这里应该返回的就是不及格学生的人数。而根据前面的定义,人数统计的变量名应该是 k,所以这一空应该要填写的是“k”。 考点 结构体,typedef 命名结构体类型,一维数组,for 循环,if 条件语句。二、程序修改题(总题数:1,分数:30.00)2.给定程序 MODI1. C 中,函数 fun 的功能是判断整数 n 是否是“完数”。当一个数的因子之和恰好等于这个数本身时,就称这个数为“完数”。例如:6 的因子包括 1、2、3,而 6=1+2+3,所以 6 是完数。如果是完数,函数返回值为 1,否则函数返回值为 0。数组 a 中存放的是找到的因子,变量 k

14、中存放的是因子的个数。 请改正函数 fun 中指定部位的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。 #include stdio. h int fun(int n, int a, int *k) int m=0, i, t; t=n; /*found*/ for(i=0; in; i+) if(n%i=0) am=i; m+; t=t-i;) /*found*/ k=m; /*found*/ if(t=0) return 1; else return 0; main( ) int n, a10, flag, i, k; printf(“

15、请输入一个整数: “); scanf(“%d“, flag=fun(n, a, if(flag) printf(“%d 是完数,其因子是:“, n); for(i=0; ik; i+) printf(“%d“, ai); printf(“/n“); else printf(“%d 不是完数./n“, n); (分数:30.00)_正确答案:()解析:for(i=0; i(n; i+)改为 for(i=1; in, i+) k=m;改为*k=m; if(t=0)改为 if(t=0) 解析 本题的 fun 函数主要功能是:是判断整数 n 是否是“完数”。当一个数的因子之和恰好等于这个数本身时,就称

16、这个数为“完数”。(例如:6 的因子包括 1、2、3,而 6=1+2+3,所以 6 是完数)如果是完数,函数返回值为 1,否则函数返回值为 0。数组 a 中存放的是找到的因子,变量k 中存放的是因子的个数。这里是一个条件判断问题,原理上利用条件 if 条件语句和 for 循环得到结果,结果则是用数组输出完数的因子,用 k 变量输出因子的个数。 这里 fun( )函数为了判定这个数字是否为完数,一定要使用正确的循环,这个判断条件还是需要一定的步骤的。最重要的就是注意细节 (1)第一个错误在 fun( )函数的 for 循环中,这里的循环的就是输入数字 n 的因式,很明显的一个问题就是循环的起始值

17、有问题,这从 i=0 开始就违反了最基本的四则运算,0 不可能是其他整数的因式,也没有意义。所以这里应该将“i=0”改为“i=1”。 (2)第二个错误在 fun( )函数中数字经过 for 循环过后,这里“k=m”,是为了得到“k”的值,也就是因子的个数。但是要注意的细节是在 fun( )函数中的参数是“*k”,也就是说 k 只是一个指针变量,而不是我们所需要的因子个数的变量,所以这里我们应该使用的是“*k”,即将“k=m”改为“*k=m”。 (3)第三个错误在 fun 函数第二个 if 条件语句中,这里“f(t=0)return 1;”的 t 是数字减掉因子和的值,也就是说只要是 t 等于

18、0 就代表输入的数字是一个完数,这里原本的意图就是在得到因子的和之后判断数字是否为完数。但是又有一个细节没有注意到的就是在 if 条件语句中,等于号应该是“=”,而不是普通的“=”,所以这里应该将“if(t=0)”改为“if(t=0”。) 考点 指针,if 条件语句,for 循环三、程序设计题(总题数:1,分数:40.00)3.请编写函数 fun:在形参指针所指的 4 个整数中找出最大值和最小值,最大的放在 a 中,最小的放在 d中。 注意:部分源程序存在 PROG1. C 中,请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。 #includ

19、e stdio. h void NONO( ); void fun(int *a, int *b, int*c, int *d) main( ) int a, b, c, d; printf(“请输入 4 个整数: “); scanf(“%d%d%d%d“, printf(“原始顺序: %d, %d, %d, %d/n“, a, b, c, d); fun( printf(“处理后: %d, %d, %d, %d/n“, a, b, c, d); NONO( ); void NONO( ) /*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/ FTLE *fp, *wf; in

20、t i, a, b, c, d; fp=fopen (“C:/WEXAM/24990001/in. dat“, “r“); wf=fopen (“C:/WEXAM/24990001/out. dat“, “w“); for(i=0; i5; i+) fscanf(fp, “%d%d%d%d“, fun( fprintf(wf, “a=%d, d=%d/n“, a, d); fclose(fp); fclose(wf); (分数:40.00)_正确答案:()解析:#include stdio. h void NONO( ); void fun (int *a, int *b, int *c, i

21、nt *d) int t; if(*a*b) t=*a; *a=*b; *b=t; if(*a*c) t=*a; *a=*c; *c=t; if(*a*d) t=*a; *a=*d; *d=t; if(*b*c) t=*b; *b=*c; *c=t; if(*b*d) t=*b; *b=*d; *d=t; if(*c*d) t=*c; *c=*d; *d=t; main( ) int a, b, c, d; printf(“请输入 4 个整数:“); scanf(“%d%d%d%d“, print“原始顺序: %d, %d, %d, %d/n“, a, b, c, d); fun( print

22、f(“排序后:%d, %d, %d, %d/n“, a, b, c, d); NONO( ); void NONO( ) FILE *fp, *wf; int i, a, b, c, d; fp=fopen (“c:/WEXAM/24990001/in. dat“, “r“); wf=fopen (“c:/WEXAM/24990001/out. dat“, “w“); for(i=0, i5; i+) fscanf(fp, “%d%d%d%d“, fun( fprintf(wf, “a=%d, d=%d/n“, a, d); fclose(fp); fclose(wf); 解析 本题中的函数功

23、能主要是在形参指针所指的 4 个整数中找出最大值和最小值,最大的放在 a 中,最小的放在 d 中。这个题目类似于排序,但是又不是严格的排序,只要重新排序最大值和最小值的位置即可。所以类似于排序,这一题需要相互比较 4 个数字,然后进行位置的调换。基本思路就是比较相邻的两个数字,如果靠近 a 的数字比靠近 d 的数字要大,就不用进行交换,如果靠近 a 的数字比靠近 d 的数字小,就进行交换,这样的话最大的数字就会慢慢交换到 a 的位置,然后最小的数字就会慢慢交换到 d 的位置。所以根据分析我们就要用到 if 语句来进行判断和处理,只要经过几轮的 if 判断大小然后交换,就能实现题目条件所给出的位

24、置的重置,得到要求的结果。 首先在主函数 main 中我们需要的就是四个数字,这四个数字需要手动输入,件程序代码第 1315 行,四个数字输入完城后就可以进入 fun 函数进行数据处理了。进入到 fun 函数中,只要从 a 到 d 进行比较,按照一开始的规则即可,如果 a 大于 b,不变,比较 a 与 c,若 a 小 b,a 与 b 交换位置,交换过后 a 就大于b 了,这样就进行 a 与 c 的比较;a 与 c 的比较同理,这样的循环比较,就能发现,每比较一次,较大的数字就能交换到 a 的位置,较小的数字就离 a 越来越远,也就是到了 d 的位置,这样就完成了题目所给出的要求了,最大的数字放在 a 中,最小的数字放在 d 中。当新的排序排好后,就可以返回主函数进行输出了。 考点 if 循环语句、排序

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试资料 > 职业资格

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1