1、国家二级 C语言机试(操作题)模拟试卷 648及答案与解析 一、程序填空题 1 使用 VC+2010打开考生文件夹下 blank1中的解决方案。此解决方案的项目中包含一个源程序文件 blank1 c。在此程序中,已建立一个带头结点的单向链表,链表中的各结点按结点数据域中的数据递增有序链接。函数 fun的功能是:把形参X的值放人一个新结点并插入链表中,使插入后各结点数据域中的数据仍保持递增有序。 请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也 不得更改程序的结构 ! 试题程序: #include stdio h #inclu
2、de stdlib h #define N8 typedef struct list int data; struct iist*next; SLTST; void fun(SLTST*h, int x) SLTST*p, *q, *s; s=(SLIST*)malloc(siZeof (SLIST); *found* s- data=【 1】 ; q=h; p=h- next; while(p!=NULL&x p- data) *found* q=【 2】 ; p=p- next; s- next=p; *found* q- next=【 3】 ; SLIST*creatlist(int*a
3、) SLIST*h, *p, *q; int i; h=p=(SLIST*)malloc(sizeof(SLIST); for(i=0; i N; i+) q=(SLIST*)malloc(sizeof(SLIST); q- data=ai; p- next=q; p=q; p- next=0; returnh; void outlist; (SLIST, *h) SLIST*p; p=h- next; if(p=NULL) printf(“ nThe list is NULL! n“); else printf(“ nHead“); doprintf(“- d“, p- data); p=p
4、- next; )while(p!=NULL); printf(“- End n“); main() SLIST*head; int x; int aN=(11, 12, 15, 18, 19, 22, 25, 29; head=creatliSt(a); printf(“ nThe list before inserting: n“); outlist(head); printf(“ nEnteranumber: “); scanf(“ d“, &x); fun(head, X); printf(“ nThe list after inserting: n“); outlist(head);
5、 二、程序修改题 2 使用 VC+2010打开考生文件夹下 modi1中的解决方案。此解决方案的项目中包含一个源程序文件 modi1 c。程序的功能是:读入一个整数 k(2k10000),输出它的所有质因子 (即所有为素数的因子 )。例如,若输入整数 2310,则应输出: 2,3, 5, 7, 11。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include conio h #include stdio h *found* IsPrime(int n); int i, m; m=1; for(i=2; i
6、n; i+) *found* if!(n i) m=0; break; ) return(m); main() int j, k; printf(“ nPlease enter an integer number between2and10000: “); scanf(“ d“, &k); printf(“ n nThe prime factot(s)of d is(are): “, k); for(j=2; j k; j+) if(!a(k j)&(IsPrLrae(j) printf(“ 4d, “, j); printf(“ n“); 三、程序设计题 3 使用 VC+2010打开考生文件
7、夹下 prog1中的解决方案。此解决方案的项目中包含一个源程序文件 prog1 c。在此程序中,请编写函数 fun,其功能是:将 M行 N列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。 例如,若二维数组中的数据为 W W W W S S S S H H H H 则字符串中的内容应是: WSHWSHWSHWSH。 注意:部分源程序给出如下。 请勿改动主函数 mmn和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include stdio h #define M3 #define N4 void fun(char(*s)N, char*b) vo
8、id main() char a100, wMN=W, W, W, W, S, S, S, S, H, H, H,H; int i, j; printf(“The matrix: n“); for(i=0; i M; i+) for(j=0; j N; j+) printf(“ 3c“, wij); printf(“ n“); fun(w, a); printf(“The A string: n“); puts(a); printf(“ n n“); 国家二级 C语言机试(操作题)模拟试卷 648答案与解析 一、程序填空题 1 【正确答案】 (1)x (2)p (3)s 【试题解析】 填空 1
9、:将形参 x赋值给结点的数据域。 填空 2和填空 3:将新的结点和原有链表中的结点进行比较。 二、程序修改题 2 【正确答案】 (1)IsPrime(int n) (2)if(!(n i) 【试题解析】 (1)函数定义格式错误,函数定义时后面不能加 “; ”,所以应该去掉分号。 (2)根据题意可知, if条件语句判断 n是否可以整除 i,如果不能整除则为质因子,所以 if!(n i)应改为 if(!(n i)。 三、程序设计题 3 【正确答案】 void fun(char(*s)N, char*b) int i, j, k=0; for(i=0; i N; i+) *按列的顺序依次放到一个字符串中 * for(j=0; j M; j+) bk+=sji; bk= 0; 【试题解析】 看到程序后,很容易便能想到用循环嵌套的方法,本题中按列的顺序依次放到一个字符串中,所以列标变化慢,行标变化快。 注意:第 1个循环条件为 i N(即列 );第 2个循环条件为 j M(即行 ),因为在循环的嵌套中越在内层,循环变化就越快。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1