一、单选题(在本题的每一小题的备选答案中,只有一个答案是正确的,本大题共22小
题,每小题5分,共110分) 20、若有定义:“int a[2][3];”,则对a数组的第i行第j列元素的不正确引用为( ) A.*(*(a+i)+j) B.*(a[i]+j) C.*(a+i)[j] D.a[i][j]
21、若有定义:double a=22;int i=0,k=19;则不符合C语言规定的赋值语句是( ) A、i=(a+k)<=(i+k) B、i=a%11; C、a=a++,i++; D、i=!a;
22、现有以下结构体变量定义,如图所示,指针p、q、r分别指定一个链表中连续的3个结
点。
现要将q和r所指结点交换位置,同时要保持链表的结构,下列不能完成此操作的语句是( )
A.q->next=r->next;p->next=r;r->next=q; B.p->next=r;q->next=r->next;r->next=q; C.q->next=r->next;r->next=q;p->next=r; D.r->next=q;p->next=r;q->next=r->next;
二、基本操作题(本大题共6小题,每空3分,共60分)
28、c语言函数
(1)feof()函数是文件尾检测函数,当文件指针处于文件尾时,返回一个 值(填0或非0),否则返回 值(填0或非0)。
(2)若文件指针fp指向某文件,现要求将文件指针fp移到离文件头100个字节处,请按要求填空
(3)在C语言中,可以用 函数来比较两个字符串是否相等。
三、综合应用题(本大题共4小题,每小题20分,每空5分,共80分)
31、以下程序是用快速排序对一组数据进行排序,该方法的基本思想是: (1).先从数列中取出一个数作为基准数。 (2).分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。 (3).再对左右区间重复第二步,直到各区间只有一个数。 #include \"stdio.h\" #define N 10
int part(int list[], int low, int high) { int tmp = list[low]; while(low ________①_____ ; while(low list[low] = tmp; 湖南省常宁市职业中专2014届对口升学计算机专业5月份模拟试卷,第1页,共7页 return ____③_____; } void QSort(int list[], int low, int high) {int mid; if(low void show(int list[], int n) {int i; for(i=0; i { int list[N] = {23, 65, 26, 1, 6, 89, 3, 12, 33, 8}; show(list, N); QSort(list, 0, N-1); show(list, N); } 四、程序分析题(本大题共3小题,共75分) 33、阅读程序写结果,共5小题,每小题5分,共25分。 (1)#include \"stdio.h\" (2)#include \"stdio.h\" main() main() { int x=10;float pi=3.1416;char str[]=\"abcdefg\"; { int a=3,y; printf(\"%d,%d,\ printf(\"%8.3f***\ y=a=3; printf(\"%%%5s%%\\n\ y=(++a)+(a++)+(a--); } printf(\"%d,%d\ } 运行结果 运行结果 (3)#include \"stdio.h\" main() { enum Day{Mon,Wed,Tue=2,Thu,Fri,Sat=6}; 运行结果 printf(\"%d,%d\ } (4)#include #include long t1; int i, n, t, t3; char a[100]={‘0’,‘0’,‘1’,‘1’,‘0’,‘1’}; strupr(a); t3 = strlen(a); t1 = 0; n=2; 湖南省常宁市职业中专2014届对口升学计算机专业5月份模拟试卷,第2页,共7页 for (i = 0; i < t3; i++) { if (a[i] - '0' >= n && a[i] < 'A' || a[i] - 'A' + 10 >= n) { printf(\"data error!!\"); exit(0); } if (a[i] >= '0' && a[i] <= '9') t = a[i] - '0'; else if (n >= 11 && (a[i] >= 'A' && a[i] <= 'A' + n - 10)) t = a[i] - 'A' + 10; t1 = t1 * n + t; } 运行结果 printf(\"the decimal is %ld\\n\ } (5)#include void shsort(int s[], int n) { int i, j, d; d = n / 2; while (d >= 1) { for (i = d + 1; i <= n; i++) { s[0] = s[i]; j = i - d; while ((j > 0) && (s[0] < s[j])) { s[j + d] = s[j]; j = j - d; } s[j + d] = s[0]; } d = d / 2; }} main() { int a[11]={0,45,68,12,32,7,85,456,258,357,123},i; shsort(a, 10); printf(\"the sorted numbers:\\n\"); for (i = 1; i <= 10; i++) printf(\"%5d\ 运行结果 } 34、程序填空。按照题目要求,将正确内容填入答题卡相应位置,使程序完整(每空5分,共25分)。 (1)本程序实现单链表逆置,要求创建一个单链表,并将链表中的结点逆置,将逆置后的链表输出到窗体上。程序运行效果如图所示:请按要求填空。 #include \"stdio.h\" struct student { int num; struct student *next; }; struct student *create(int n) { int i; struct student *head, *p1, *p2; int a; head = NULL; 湖南省常宁市职业中专2014届对口升学计算机专业5月份模拟试卷,第3页,共7页 printf(\"The record:\\n\"); for (i = n; i > 0; --i) { p1=(struct student*)malloc(sizeof(struct student)) ; scanf(\"%d\", &a); p1->num = a; /*数据域赋值*/ if (head == NULL) {head = p1; p2 = p1; } else { p2->next = p1; /*指定后继指针*/ p2 = p1; } } p2->next = NULL; return head; } struct student *reverse(struct student *head) { struct student *p, *r; if (head->next && head->next->next) { p = head; r = p->next; p->next = NULL; while (r!=NULL) { p = r; r = r->next; p->next = head; head=p; } return head; } return head; } void main() { int n, i; int x; struct student *q; printf(\"Input the count of the nodes you want to creat:\"); scanf(\"%d\", &n); q = create(n); q = reverse(q); printf(\"The reserve linklist is:\\n\"); while (q) { printf(\"%d, \", q->num); q = q->next; } getch(); } (2)有5个人坐在一起,问第5个人多少岁?他说比第4个人大2岁。问第4个人多少岁,他说比第3个人大2岁。问第3个人多少岁,又说比第2个人大2岁。问第2个人多少岁,说比第1个人大2岁。最后问第1个人多少岁,他说10岁。编写程序当输入第几个人时, 湖南省常宁市职业中专2014届对口升学计算机专业5月份模拟试卷,第4页,共7页 求出其对应的年龄。请按要求填空: #include main() { int i,j; printf(\"Do you want to know whose age?please input:\\n\"); scanf(\"%d\ j= ⑤ ; printf(\"the age is %d\ } 35、阅读程序,修改程序中的错误,不得增行或减行,也不得更改程序结构。请在答题卡中指出错误代码所在的行号,并给出该行修改后的程序代码。(每处错误5分,共25分,两个小题共5处错误。) (1)有A、B、C、D、E五人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方睡觉。第二天,A第一个醒来,他将鱼分成五份,把多余的一条扔掉,拿走自己的一份。B第二个醒来,也将鱼分为五份,把多余的一条扔掉,拿走自己的一份,C、D、E依次醒来,按同样的方法拿鱼。问他们合伙至少捕了多少鱼?以下程序采用递归的方法来求解他们至少捕了多少鱼,程序有两处错误,请将其更正。 L1 #include L4 if (n == 1) L5 { static int i = 0; L6 do L7 { i++; L8 } while (i % 5 != 0); L9 return (i ); L10 } L11 else { int t; L12 do L13 { t = sub(n - 1); L14 } while (t % 4 == 0); L15 return (t / 4 * 5+1) ; L16 } L17 } L18 main() L19 { int total; L20 total=sub(5); L21 printf(\"the total number of fish is %d\\n\L22 } (2)本程序实现文件的加密,具体要求如下:先从键盘中输入要加密操作文件所在的路径及名称,再输入密码,最后输入加密后要存储时的文件夹路径及名称。加密的算法思想如下:对文本文档中的内容进行加密,实质上就是读取该文档中的内容,对读出的每个字符与输入的密码进行异或,再将异或的结果重新写入指定的磁盘文件中即可。本程序有三处错误,请更正。 L1 #include L4 void encrypt(char *soucefile, char *pwd, char *codefile); L5 void encrypt(char *s_file, char *pwd, char *c_file) L6 { int i = 0; L7 FILE *fp1, *fp2; 湖南省常宁市职业中专2014届对口升学计算机专业5月份模拟试卷,第5页,共7页 L8 register char ch; L9 fp1 = fopen(s_file, \"rb\"); L10 if (fp1 == NULL) L11 { printf(\"cannot open s_file.\\n\"); L12 exit(1); L13 } L14 fp2 = fopen(c_file, \"r\"); L15 if (fp2 == NULL) L16 { printf(\"cannot open or create c_file.\\n\"); L17 exit(1); L18 } L19 ch = fgetc(fp1); L20 while (feof(fp1)) L21 { L22 ch = ch ^ *pwd + i; L23 i++; L24 fputc(ch, fp2); L25 ch = fgetc(fp1); L26 if (i > 9) L27 i = 0; L28 } L29 fclose(fp1); L30 fclose(fp2); L30 } L31 main(int argc, char *argv[]) L32 { L33 char sourcefile[50]; L34 char codefile[50]; L35 char pwd[10]; L36 if (argc != 4) L37 { printf(\"please input encode file name:\\n\"); L38 gets(sourcefile); L39 printf(\"please input Password:\\n\"); L40 gets(pwd); L41 printf(\"please input saved file name:\\n\"); L42 gets(codefile); L43 encrypt(sourcefile, pwd, codefile); L44 } L45 else L46 { strcpy(sourcefile, argv[1]); L47 strcpy(pwd, argv[2]); L48 strcpy(codefile, argv[3]); L49 encrypt(sourcefile, pwd, codefile); L50 } L51 } 五、程序设计题(本大题25分,每空5分) 36、一个国王要赏赐一个大臣30枚金币,但其中有一枚是假币。国王提出要求:只能用一个天平作为测量工具,并用尽量少的比较次数找出这枚假币,那么余下的29枚金币就赏赐给这个大臣;否则这个大臣将得不到赏赐。已知假币要比真币的分量略轻一些。请将以下空缺部分补充完整。 #include int findCoin(int coin[],int front,int back) { int i,sumf=0,sumb=0,sum=0; if(front+1==back) { if(coin[front] else return back+1; } if((back-front+1)%2==0 ) { for(i=front;i<=front+(back-front)/2;i++) sumf=sumf+coin[i]; for(i=front+(back-front)/2+1;i<=back;i++) sumb=sumb+coin[i]; if(sumf return findCoin(coin,front+(back-front)/2+1,back); } if((back-front+1)%2!=0) { for(i=front;i<=front+(back-front)/2-1;i++) sumf=sumf+coin[i]; for(i=front+(back-front)/2+1;i<=back;i++) sumb=sumb+coin[i]; sum=sumf+sumb ; if(sumf return findCoin(coin,front+(back-front)/2+1,back); if(sumf+sum==sumb+sum) return front+(back-front)/2+1; } } int main() { int coin[30]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1}; printf(\"%d\\n\",findCoin(coin,0,29)); system(\"PAUSE\"); return 0; } 湖南省常宁市职业中专2014届对口升学计算机专业5月份模拟试卷,第7页,共7页 因篇幅问题不能全部显示,请点此查看更多更全内容