搜索
您的当前位置:首页正文

湖南省2014届普通高等学校对口招生考试C语言试卷

来源:易榕旅网
2015 6模拟试卷(三)

一、单选题(在本题的每一小题的备选答案中,只有一个答案是正确的,本大题共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(list[high]>=tmp&&high>low) --high;

________①_____ ;

while(low________②_____ ; }

list[low] = tmp;

湖南省常宁市职业中专2014届对口升学计算机专业5月份模拟试卷,第1页,共7页

return ____③_____; }

void QSort(int list[], int low, int high) {int mid;

if(low{mid = part(list, low, high); QSort(list, low, mid-1); __________④__________;} }

void show(int list[], int n) {int i;

for(i=0; iint main()

{ 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 main() {

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 int age(int n) { int f; if(n==1) f=10; else ④ ; return f; }

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 L2 int sub(int n) L3 {

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 L2 #include L3 #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]湖南省常宁市职业中专2014届对口升学计算机专业5月份模拟试卷,第6页,共7页

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(sumfreturn findCoin(coin,front,front+(back-front)/2-1); if(sumf>sumb)

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(sumfreturn findCoin(coin,front,front+(back-front)/2-1); if(sumf>sumb)

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页

因篇幅问题不能全部显示,请点此查看更多更全内容

Top