国家二级(C语言)机试模拟试卷99(题后含答案及解析)_0

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

国家二级(C语言)机试模拟试卷99(题后含答案及解析)
题型有:1. 程序填空题 2. 程序修改题 3. 程序设计题
程序填空题(30分)
1.请补充函数fun( ),该函数的功能是建立一个带头结点的单向链表并输出到文件“out98.dat”和屏幕上,各结点的值为对应的下标,链表的结点数及输出的文件名作为参数传入。

注意:部分源程序给出如下。

请勿改动主函数main 和其他函数中的任何内容,仪在函数fun( )的横线上填入所编写的若干表达式或语句。

试题程序:#include<stdio. h>#include<conio. h>#include<stdlib. h>typedef struct ss { int data; struct ss *next; } NODE; void fun(int n,char*filename) { NODE *h,*p, *s; FILE *pf; int i; h=p= (NODE *) malloc (sizeof (NODE)); h->data=0; for (i=1; i {s=(NODE *)malloc (sizeof (NODE));s->data=【】;【】;p=【】} p->next=NULL; if ( (pf=fopen (filename, “w”) ) ==NULL) { printf {“Can not open out9B.clat! “); exit (0); } p=h; fprintf (pf, “\n***THE LIST***\n”); print f (“\n***THE LIST***\n”) while (p) { fprintf (pf, “%3d”, p->data) printf (“%3d”,p->data); if (p->next ! =NULL) { fprintf (pf, “->”); printf (“->”); } p=p->next; } fprintf (pf, “\n”); printf (“\n”); fclose (pf); p=h; while (p) { s=p;p=p->next;free (s); } } main( ) { char * filename=“out98. dat”; int n; clrscr ( ); printf (“ \nInput n: “); scanf (“%d”, &n); fun (n, filename); }
正确答案:Ip->next=sp->next
解析:第一空:题目要求各结点的值为对应的下标,头结点的值为0,其他结点的值从1开始,所以此空应填i。

第三空:为了将结点p和结点s连接起来,应将结点p的next 指针指向结点s。

第三空:为了通过for 循环形成链表,每执行完一次循环操作,都要将指针p 指向下一个结点。

程序修改题(30分)
2.下列给定程序中,函数fun( )的功能是;求S的值。

设S=(22/1*30))*(42/(3*5))*(62/(5*7))*…*(2k)2/((2k-1)*(2k+1)) 例如,当k为10时,函数的值应为1.533852。

请改正程序中的错误,使它能得出正确的结果。

注童;不要改动main 函数,不得增行或删行,也不得更改程序的结构。

试题程序:#include <conio. h>#include <stdio. h>#include <math.h >/**************found***************/ fun (int k) { iht n; float s, w, p, q; n=1; s=1.0; while (n<=k) { w=2. 0*n; p=w-1.0; q=w+1.0; s=s*w*w/p/q; n++; } /***************found**************/ return s } main( ) { clrscr ( ); printf (“%f\n “, fun (10)); }
正确答案:(1)错误:fun(int k) 正确:double fun(int k)(2)错误:return s 正确:returns;
解析:这样一道数学题要是用C程序来实现,真的挺简单,但我们还是需要注意细节问题上出的错误,该题便是如此。

一个是简单的函数调用的定义,另一个是语法错误。

程序设计题(40分)
3.请编写一个函数unsigned fun (unsigned w),w 是一个大于10的无符号整数,若w是n(n≥2)位的整数,则函数求出w的后n-1位的数作为函数值返回。

例如:w值为5923,则函数返回923;若w值为923,则函数返回23。

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun 的花括号中填入所编写的若干语句。

试题程序:#include<conio. h>#include<stdio. h>unsigned fun(unsigned w) { } main( ) { unsigned x; clrscr ( ); printf(“Enter a unsigned integernumber: “); scanf (“%u”,&x); printf(“The original data is:%u\n”,x); if (x<10) printf (“Data error! “); else printf (“The result :%u\n”, fun(x) ); } 正确答案: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( )的顺序不能颠倒。

相关文档
最新文档