2012年湖南省对口高考真题中,哪一道题目的解答过程最复杂?

2026-04-11 22:451阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1953个文字,预计阅读时间需要8分钟。

2012年湖南省对口高考真题中,哪一道题目的解答过程最复杂?

1. 选择题 1 正确的C语言自定义标识符是__________。A. int B. a.3+CC. _7c D. 5d_+2+ A. i=3,执行j=i++后,i和j的值分别为__________。

A. i=4, j=3B. i=4, j=2C. i=3, j=4D. i=2, j=3+ B. i=4, j=2, i=4+j=3, i=3+j=3, i=3+j=2, i=3+2=3+ C. C语言中,_______ 是一个注释。A. /* */ B. // C. ** D. #+ D. int B%EF%BC%8Ea.3+C

1. int

2.A. i=4, j=3

3.A. i=4, j=3

4.A. /* */

一、选择题

1、

以下正确的C语言自定义标识符是__________。

A.int B.a.3 C._7c D.5d_

2、

已知i=3,执行j=i++后,i和j的值分别为__________。

A.i=4 j=2 B.i=4 j=3 C.i=3 j=3 D.i=3 j=2

3、

C语言中,以下语句能跳过循环体中未执行的语句,接着执行本循环下一次迭代的语句是__________。

A.空语句 B.break语句 C.return语句 D.continue语句

二、填空题

C语言中,文件操作fopen函数的原型为FILE * fopen(char *filename, char *mode),用于打开一个指定文件,若成功则返回一个与之关联的流,否则返回_____ 1 _____;代码片段FILE * fp=fopen("C:\\test.dat","a")的含义是以_____ 2 _____的方式打开路径"C:\\test.dat"对应的文件,当访问的文件是二进制文件时,还需要在字符串“a”后增加一个字符_____ 3 _____,以上代码片段对应的关闭文件的C语言代码是_____ 4 _____。

三、综合应用题

30人参观博物馆共花50美元,其中成年男子门票为3美元/人,成年女子2美元/人,小孩1美元/人。编程输出成年男子、成年女子和小孩人数的所有组合。

题目分析如下:

设x,y,z分别代表成年男子、成年女子和小孩人数。按题目要求,可得下面方程:

x+y+z=30 (1)

3x+2y+z=50 (2)

用程序求此不定方程的非负整数解,可先通过(2)-(1)式得:

2x+y=20 (3)

由(3)式可知,x变化范围是______1______

根据以上分析编写程序如下:

#include <stdio.h> main() { int x,y,z; /*x,y,z分别代表成年男子、成年女子、小孩人数*/ printf("Men Women Chlidren\n"); for(x=0;______2______;x++) { ______3______; /*按照(3)式根据x求y*/ ______4______; /*由(1)式求得z*/ if(3*x+2*y+z==50) /*当前得到的一组解是否满足式(2)*/ printf("%d %d %d\n",x,y,z); } }

四、写程序结果

#include <stdio.h> main() { int a=3,b=4; a%=b+=a+=(a+b); printf("%d,%d",a,b); }

运行结果是____________________。

#include <stdio.h> main() { int x=2,y=7,z=5; switch(x>2) { case 1: switch(y>0) { case 1: printf("1");break; case 2: printf("2");break; } case 0: switch(z==5) { case 0: printf("3");break; case 1: printf("4");break; default:printf("5");break; } default:printf("6"); } }

运行结果是____________________。

#include <stdio.h> main() { int a=8,y=0; do { a+=2; y+=a; if(y>30) break; } while(a=10); printf("a=%d y=%d\n",a,y); }

运行结果是____________________。

4、

#include <stdio.h> int func(int a,int b) { return a=a+b,a%b; } main() { int x=9,y=7,z=3,rels; rels=func(func(x,y),z); printf("%d\n",1<<rels); }

运行结果是____________________。

五、程序填空

下面程序输出x,y,z三个数中的最大值。

#include <stdio.h> int main() { int x=3,y=7,z=6; int a,b; a=x<y?_____ 1 _____; b=a<z?_____ 2 _____; printf("%d",b); return 0; }

下面程序接受键盘上的输入,直到按回车键为止,然后将输入的字符串输出,输出时如果原输入字符是英文大写字母则转成小写字母输出,如果是小写字母则转成大写字母输出,如果有连续的一个以上的空格时只输出一个空格。

#include<stdio.h> main() { char cx,pre='\0'; while(_____ 3 _____!='\n') { if(cx!=' ') if(cx>='a'&&cx<='z') putchar(cx-32); else if(cx<'Z'&&cx>='A') _____ 4 _____; else putchar(cx); else if(pre!=' ') putchar(cx); _____ 5 _____; } }

六、改错

以下程序用于输入两个学生的姓名和成绩,然后输出这两个学生的平均成绩,运行结果如图7所示。程序中存在3处错误。(注:严格意义上是四个错误,找出错误比较大的三个)。

#include <stdio.h> define N 2 struct Student { char name[4]; float score; }; main() { struct Student stu[N]; int i=0; for(; i<N; i++) { printf("input scores of student%d:\n",i+1); printf("name:"); scanf("%s",stu[i].name); printf("score:"); scanf("%f",stu[i].score); } float rels=0; for(; i<N; i++) { rels+=stu[i].score; } printf("avg score is:%3.2f",rels/N); }

以下程序将数组中元素逆序输出,运行结果如下所示。程序中存在2处错误。

dd cc bb aa

#include <stdio.h> int main() { char *array[]= {"aa","bb","cc","dd"}; char (**pt)[]; int j; pt=array+3; for(j=3; j>=0; j--) printf("%s ",*(pt)[j]); }

七、程序设计题

Merge函数用于将两个升序的链表head1和head2合并成一个链表,并保持合并后链表依然升序。排序的依据为结构体类型Node中的data成员,合并中不得删除节点。下面给出Merge函数的主体框架,在空出的五个位置补充该主体框架缺失的代码段。

注意:不能定义新的变量,可不用已定义的某些变量。

#include "stdio.h" typedef struct Node { int data; struct Node *next; } Node; Node *Merge(Node *head1,Node *head2) { if(head1==NULL) return head2; if(head2==NULL) return head1; Node *head=NULL; //head指针用于指向合并后链表的头结点 Node *p1=NULL; Node *p2=NULL; if(head1->data<head2->data) { head=head1; _____ 1 _____; p2=head2; } else { head=head2; _____ 2 _____; p1=head1; } Node *pcurrent=head; while(p1!=NULL&&p2!=NULL) { if(p1->data<=p2->data) { pcurrent->next=p1; _____ 3 _____; p1=p1->next; } else { pcurrent->next=p2; _____ 4 _____; p2=p2->next; } } if(p1!=NULL) _____ 5 _____; if(p2!=NULL) pcurrent->next=p2; return head; }

参考答案:

一、选择题

1—3 C、B、D

二、填空题

1、NULL 、追加、b、fclose(fp)

三、综合应用题

1、[0,10] 或者 x>=0 and x<=10 2、x<=10 3、y=20-2*x 4、z=30-x-y

四、写程序结果

1、 10,14 2、 46 3、 a=12 y=34 4、 4

五、程序填空

1、 y:x 2、z:a

3、(cx=getchar()) 4、putchar(cx+32) 5、pre=cx;

六、改错

1、

L02 #define N 2 //本语句非逻辑错误,可能为打印错误

L18 scanf("%f",&stu[i].score);

L21 for(i=0; i<N; i++)

L25 printf("avg score is:%04.1f",rels/N);

2、

L05 char **pt;

L09 printf("%s ",*pt--);

L09 printf("%s ",pt[j-3]);//也可以

2012年湖南省对口高考真题中,哪一道题目的解答过程最复杂?

七、程序设计题

1、 p1=head1->next 2、 p2=head2->next

3、 pcurrent=p1 4、 pcurrent=p2

5、 pcurrent->next=p1

补充测试头文件

int main() { Node a[5]={{6,&a[3]},{2,&a[4]},{10,NULL} ,{8,&a[2]},{4,&a[0]}}; Node b[5]={{5,&b[3]},{1,&b[4]},{9,NULL} ,{7,&b[2]},{3,&b[0]}}; Node *h1=&a[1],*h2=&b[1],*h; h=Merge(h1,h2); while(h) { printf("%d ",h->data); h=h->next; } }

本文共计1953个文字,预计阅读时间需要8分钟。

2012年湖南省对口高考真题中,哪一道题目的解答过程最复杂?

1. 选择题 1 正确的C语言自定义标识符是__________。A. int B. a.3+CC. _7c D. 5d_+2+ A. i=3,执行j=i++后,i和j的值分别为__________。

A. i=4, j=3B. i=4, j=2C. i=3, j=4D. i=2, j=3+ B. i=4, j=2, i=4+j=3, i=3+j=3, i=3+j=2, i=3+2=3+ C. C语言中,_______ 是一个注释。A. /* */ B. // C. ** D. #+ D. int B%EF%BC%8Ea.3+C

1. int

2.A. i=4, j=3

3.A. i=4, j=3

4.A. /* */

一、选择题

1、

以下正确的C语言自定义标识符是__________。

A.int B.a.3 C._7c D.5d_

2、

已知i=3,执行j=i++后,i和j的值分别为__________。

A.i=4 j=2 B.i=4 j=3 C.i=3 j=3 D.i=3 j=2

3、

C语言中,以下语句能跳过循环体中未执行的语句,接着执行本循环下一次迭代的语句是__________。

A.空语句 B.break语句 C.return语句 D.continue语句

二、填空题

C语言中,文件操作fopen函数的原型为FILE * fopen(char *filename, char *mode),用于打开一个指定文件,若成功则返回一个与之关联的流,否则返回_____ 1 _____;代码片段FILE * fp=fopen("C:\\test.dat","a")的含义是以_____ 2 _____的方式打开路径"C:\\test.dat"对应的文件,当访问的文件是二进制文件时,还需要在字符串“a”后增加一个字符_____ 3 _____,以上代码片段对应的关闭文件的C语言代码是_____ 4 _____。

三、综合应用题

30人参观博物馆共花50美元,其中成年男子门票为3美元/人,成年女子2美元/人,小孩1美元/人。编程输出成年男子、成年女子和小孩人数的所有组合。

题目分析如下:

设x,y,z分别代表成年男子、成年女子和小孩人数。按题目要求,可得下面方程:

x+y+z=30 (1)

3x+2y+z=50 (2)

用程序求此不定方程的非负整数解,可先通过(2)-(1)式得:

2x+y=20 (3)

由(3)式可知,x变化范围是______1______

根据以上分析编写程序如下:

#include <stdio.h> main() { int x,y,z; /*x,y,z分别代表成年男子、成年女子、小孩人数*/ printf("Men Women Chlidren\n"); for(x=0;______2______;x++) { ______3______; /*按照(3)式根据x求y*/ ______4______; /*由(1)式求得z*/ if(3*x+2*y+z==50) /*当前得到的一组解是否满足式(2)*/ printf("%d %d %d\n",x,y,z); } }

四、写程序结果

#include <stdio.h> main() { int a=3,b=4; a%=b+=a+=(a+b); printf("%d,%d",a,b); }

运行结果是____________________。

#include <stdio.h> main() { int x=2,y=7,z=5; switch(x>2) { case 1: switch(y>0) { case 1: printf("1");break; case 2: printf("2");break; } case 0: switch(z==5) { case 0: printf("3");break; case 1: printf("4");break; default:printf("5");break; } default:printf("6"); } }

运行结果是____________________。

#include <stdio.h> main() { int a=8,y=0; do { a+=2; y+=a; if(y>30) break; } while(a=10); printf("a=%d y=%d\n",a,y); }

运行结果是____________________。

4、

#include <stdio.h> int func(int a,int b) { return a=a+b,a%b; } main() { int x=9,y=7,z=3,rels; rels=func(func(x,y),z); printf("%d\n",1<<rels); }

运行结果是____________________。

五、程序填空

下面程序输出x,y,z三个数中的最大值。

#include <stdio.h> int main() { int x=3,y=7,z=6; int a,b; a=x<y?_____ 1 _____; b=a<z?_____ 2 _____; printf("%d",b); return 0; }

下面程序接受键盘上的输入,直到按回车键为止,然后将输入的字符串输出,输出时如果原输入字符是英文大写字母则转成小写字母输出,如果是小写字母则转成大写字母输出,如果有连续的一个以上的空格时只输出一个空格。

#include<stdio.h> main() { char cx,pre='\0'; while(_____ 3 _____!='\n') { if(cx!=' ') if(cx>='a'&&cx<='z') putchar(cx-32); else if(cx<'Z'&&cx>='A') _____ 4 _____; else putchar(cx); else if(pre!=' ') putchar(cx); _____ 5 _____; } }

六、改错

以下程序用于输入两个学生的姓名和成绩,然后输出这两个学生的平均成绩,运行结果如图7所示。程序中存在3处错误。(注:严格意义上是四个错误,找出错误比较大的三个)。

#include <stdio.h> define N 2 struct Student { char name[4]; float score; }; main() { struct Student stu[N]; int i=0; for(; i<N; i++) { printf("input scores of student%d:\n",i+1); printf("name:"); scanf("%s",stu[i].name); printf("score:"); scanf("%f",stu[i].score); } float rels=0; for(; i<N; i++) { rels+=stu[i].score; } printf("avg score is:%3.2f",rels/N); }

以下程序将数组中元素逆序输出,运行结果如下所示。程序中存在2处错误。

dd cc bb aa

#include <stdio.h> int main() { char *array[]= {"aa","bb","cc","dd"}; char (**pt)[]; int j; pt=array+3; for(j=3; j>=0; j--) printf("%s ",*(pt)[j]); }

七、程序设计题

Merge函数用于将两个升序的链表head1和head2合并成一个链表,并保持合并后链表依然升序。排序的依据为结构体类型Node中的data成员,合并中不得删除节点。下面给出Merge函数的主体框架,在空出的五个位置补充该主体框架缺失的代码段。

注意:不能定义新的变量,可不用已定义的某些变量。

#include "stdio.h" typedef struct Node { int data; struct Node *next; } Node; Node *Merge(Node *head1,Node *head2) { if(head1==NULL) return head2; if(head2==NULL) return head1; Node *head=NULL; //head指针用于指向合并后链表的头结点 Node *p1=NULL; Node *p2=NULL; if(head1->data<head2->data) { head=head1; _____ 1 _____; p2=head2; } else { head=head2; _____ 2 _____; p1=head1; } Node *pcurrent=head; while(p1!=NULL&&p2!=NULL) { if(p1->data<=p2->data) { pcurrent->next=p1; _____ 3 _____; p1=p1->next; } else { pcurrent->next=p2; _____ 4 _____; p2=p2->next; } } if(p1!=NULL) _____ 5 _____; if(p2!=NULL) pcurrent->next=p2; return head; }

参考答案:

一、选择题

1—3 C、B、D

二、填空题

1、NULL 、追加、b、fclose(fp)

三、综合应用题

1、[0,10] 或者 x>=0 and x<=10 2、x<=10 3、y=20-2*x 4、z=30-x-y

四、写程序结果

1、 10,14 2、 46 3、 a=12 y=34 4、 4

五、程序填空

1、 y:x 2、z:a

3、(cx=getchar()) 4、putchar(cx+32) 5、pre=cx;

六、改错

1、

L02 #define N 2 //本语句非逻辑错误,可能为打印错误

L18 scanf("%f",&stu[i].score);

L21 for(i=0; i<N; i++)

L25 printf("avg score is:%04.1f",rels/N);

2、

L05 char **pt;

L09 printf("%s ",*pt--);

L09 printf("%s ",pt[j-3]);//也可以

2012年湖南省对口高考真题中,哪一道题目的解答过程最复杂?

七、程序设计题

1、 p1=head1->next 2、 p2=head2->next

3、 pcurrent=p1 4、 pcurrent=p2

5、 pcurrent->next=p1

补充测试头文件

int main() { Node a[5]={{6,&a[3]},{2,&a[4]},{10,NULL} ,{8,&a[2]},{4,&a[0]}}; Node b[5]={{5,&b[3]},{1,&b[4]},{9,NULL} ,{7,&b[2]},{3,&b[0]}}; Node *h1=&a[1],*h2=&b[1],*h; h=Merge(h1,h2); while(h) { printf("%d ",h->data); h=h->next; } }