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

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

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

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

一、选择题目+1+ C语言中,不合法的整型常量是__________。A. 88B. 018C. -0xabcdD. 2e5+2

答案:C. -0xabcd

二、C语言中,定义常量指针p(p的值不变)的正确语法是__________。A. char *const p;B. char const *p;C. const *char p;D. c

答案:B. char const *p;

一、选择题

1、

C语言中,不合法的整型常量是__________。

A.88 B.018 C.-0xabcd D.2e5

2、

C语言中,定义常量指针p(p的值不变)的正确语法是__________。

A.char *const p; B.char const *p;

C.const *char p; D.const char *p;

3、

C语言中,一个2行3列矩阵M的值如图1所示,能得到M中数值5的表达式是__________。

3 8 9

2 5 6

图1

A.*(M+1)+1 B.*(*M+1)+1

C.*(*(M+1)+1) D.**((*M+1)+1)

4、

C语言中,关于函数正确的说法有__________。(多选)

A.实参可以是常量、变量或表达式

B.实参与其对应的形参各占用独立的存储单元

C.实参与形参不一致时,以形参类型为准

D.函数的类型与返回值的类型不一致时,以函数的类型为准


二、写程序结果

#include <stdio.h> int main() { enum Color{Red,Blue,Green,Yellow=6,Black,Purple,Pink}; printf("%d,%d",Blue,Purple); }

运行结果是____________________。

#include <stdio.h> int main() { char a[]={'a','b','c','d'}; char *p=(char *)(&a+1); printf("%c,%c",*(a+1),*(p-1)); }

运行结果是____________________。

#include <stdio.h> int bits_count(unsigned value) { int count=0; for(count=0; value!=0; value>>=1) if((value&1)!=0) count++; return count; } int main() { printf("%d",bits_count(14)); }

运行结果是____________________。

#include <stdio.h> int *fun(int *q) { static int a=2; int *p=&a; a+=*q; return p; } int main() { int i=1; for(; i<4; i++) printf("%4d",*fun(&i)); }

运行结果是____________________。

三、程序填空

会计记帐时通常要求大整数用逗号进行分隔,下列函数实现将以分为单位的数字字符串转变为以元为单位,具体输出格式如表1所示。

表1

输入

输出

输入

输出

¥0.00

12345

¥123.45

1

¥0.01

123456

¥1,234.56

12

¥0.12

1234567

¥12,345.67

1234

¥12.34

123456789

¥1,234,567.89

#include<stdio.h> #include<string.h> #include<stdlib.h> char* dollars(char const* src) { int len,lenl,i; char *dst,*resultp; if(NULL==src) return NULL; len=strlen(src); lenl=len+len/3+2; dst=(char*)malloc(lenl); if(!dst) { return NULL; } _____________1______________ *dst++='¥'; if(len>=3) { int i; for(i=len-2; i>0;) { *dst++=*src++; if(_____________2______________) *dst++=','; } } else { *dst++='0'; } *dst++='.'; _____________3______________ *dst++=len<1?'0':*src; *dst=0; return resultp; }

下列程序的功能是实现向head指向的链表中插入新结点s,如图17所示,使该链表按结点的id值保持升序排列。

图17

#include <stdio.h> #include <stdlib.h> typedef struct Node { int id; char *name; struct Node *next; }Node; void Innode(Node *head,int id,char *str) { int j=0; Node *p,*q,*s; p=head; while (___________4______________) { q=p; p=p->next; } s=(Node*)malloc(sizeof(Node)); s->id=id; s->name=str; _____________5______________ _____________6______________ } main() { /*省略创建链表head的代码*/ Innode(head,3,"Jone"); /*head指向如图17所示的链表*/ }

四、改错

以下函数的功能是:在指针数组表示的字符串列表中查找特定的字符,指针数组以NULL指针结束,如果找到返回TRUE,否则返回FALSE。程序中有两处错误,将错误的行号及正确语句填入答题卡相应位置,不得增行或删行。

#include <stdio.h> #include <string.h> #define TRUE 1 #define FALSE 0 int find_string(char** strings,char value) { char* cur_str; if(*strings==NULL) return FALSE; while((cur_str=*strings)!=NULL) { while(cur_str!="\0") if(*cur_str++==value) return TRUE; } return FALSE; }

五、程序设计题

一串数码是否构成合法的信用卡号,可以通过CheckCard算法来验证。CheckCard算法验证的过程如下:

①卡号的长度必须为16位。

②从卡号最后一位数字开始,将奇数位数字求和。

③从卡号最后一位数字开始,将偶数位数字乘以2(如果乘积为两位数,则减9),再求和。

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

④将②和③所得的和值相加,当结果能被10整除时,则校验通过。

例如,卡号是:5432123456788881

奇数位和等于35

偶数位乘以2(乘积为两位数的减去9)的结果:16261577,求和等于35。

35+35=70可以被10整除,校验通过。

编写函数实现CheckCard算法,判断输入的卡号是否能通过验证,通过则显示“成功”,否则显示“失败”。

六、程序方向

(一)、程序填空

下列程序采用快速排序算法对任意输入的10个整数排序。将正确的内容填入答题卡的相应位置,使程序完整。

快速排序算法是一种经典的排序方法,它是冒泡排序算法的改进。该算法的主要思想是在待排序的n个数据中取第一数据作为基准值,将所有的数据分为两组,使得第一组中各数据值均小于或等于基准值,第二组中各数据值均大于基准值,这便完成了第一趟排序,再分别对第一组和第二组重复上述方法,直到每组只有一个数据为止。

#include <stdio.h> #include <stdlib.h> #include <time.h> void qusort(int s[],int start,int end) { int i,j; i=start; /*将每组首个元素赋给i*/ j=end; /*将每组末尾元素赋给j*/ s[0]=s[start]; /*设置基准值*/ while(i<j) { while(_____________1______________) j--; /*位置左移*/ if(i<j) s[i++]=s[j]; /*将s[j]放到s[i]的位置上,且i自增*/ while(i<j&&s[i]<=s[0]) i++; /*位置右移*/ if(i<j) _____________2______________ } s[i]=s[0]; /*将基准值放入指定位置*/ if(start<i) qusort(s,start,i-1); /*对分割出的部分递归调用函数qusort()*/ if(i<end) _____________3______________ } main() { int a[11],i; printf("please input 10 numbers:\n"); srand(time(0)); for(i=1;i<=10;i++) a[i]=rand()%100;//scanf("%d",&a[i]); _____________4______________ printf("the sorted numbers:\n"); for(i=1; i<=10; i++) printf("%4d",a[i]); }

(二)、程序设计

随着信息化进程的不断推进,数据的安全性越来越受到人们的重视,数据加密技术是保证数据安全的重要手段。编程实现对C盘根目录下名为“new.dat”文件的数据进行加密,加密方式是将“new.dat”文件中每个字符与字符A进行异或运算,运算后的加密数据存储到“new.dat”文件中。

参考答案:

一、选择题

1—4 B、A、C、ACD

二、写程序结果

1、 1,8 2、 b,d 3、 3 4、 □□□3□□□5□□□8

三、程序填空

1、 resultp=dst; 2、 ((i--)-3)%3==1 3、 *dst++=len<2?'0':*src++;

注:第2题网上答案--i%3==0有错误

第3题也可以是:*dst++=len<2?'0':*src++;

以下为补充main函数

int main() { char a[]={"456789"},*p; p=dollars(a); //printf("\n%s",p); printf("\n¥%s",p+1); }

程序中赋值¥有bug,因为¥为中文字符。故用上述方式输出。

4、 p!=NULL && p->id<id 5、 s->next=p; 6、 q->next=s;

注:第4题不能p->id<id && p!=NULL 因为插入最后一个节点时会溢出。

四、改错

L10 while((cur_str=*strings++)!=NULL)

L12 while(*cur_str!='\0')

注:L10不能修改为字符串复制。

int main() { char *aa[]={"abcd","xyz123","sadfg",""}; aa[3]=NULL; if(find_string(aa,'1')) printf("ok"); else printf("no"); }

五、程序设计题

1、参考代码

#include <stdio.h> #include "string.h" void CheckCard(char *p) { char *q; int s1=0,s2,t; if(strlen(p)!=16) { printf("失败,卡号长度不对"); return; } q=p+15; while(q>=p) { s1=s1+*q-'0'; q--; t=(*q-'0')*2; if(t>9) t=t-9; s2=s2+t; q--; } if((s1+s2)%10==0) printf("成功"); } int main() { char ka[100]="5432123456788881"; int len; //gets(ka); CheckCard(ka); return 0; }

六、程序方向

(一)、程序填空

1、 i<j&&s[j]>=s[0]

2、 s[j--]=s[i];

3、 qusort(s,i+1,end);

4、 qusort(a,1,10);

(二)程序设计

注:为了方便性,将操作文件改名了。

假设 aaa.txt文件内容为 ABC三个字符

#include <stdio.h> #include "string.h" int main() { FILE *fp,*fp1; char a[100],*p=a; if((fp=fopen("aaa.txt","r"))==NULL) { printf("文件不存在或者打不开,退出!"); return 0; } if((fp1=fopen("aaa1.txt","w"))==NULL) { printf("文件不存在或者打不开,退出!"); return 0; } while(!feof(fp)) { *p=fgetc(fp); *p=*p^'A'; fputc(*p,fp1); } fclose(fp1); fclose(fp); if((fp1=fopen("aaa1.txt","r"))==NULL) { printf("文件不存在或者打不开,退出!"); return 0; } if((fp=fopen("aaa.txt","w"))==NULL) { printf("文件不存在或者打不开,退出!"); return 0; } while(!feof(fp1)) { *p=fgetc(fp1); fputc(*p,fp); } fclose(fp1); fclose(fp); return 0; }

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

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

一、选择题目+1+ C语言中,不合法的整型常量是__________。A. 88B. 018C. -0xabcdD. 2e5+2

答案:C. -0xabcd

二、C语言中,定义常量指针p(p的值不变)的正确语法是__________。A. char *const p;B. char const *p;C. const *char p;D. c

答案:B. char const *p;

一、选择题

1、

C语言中,不合法的整型常量是__________。

A.88 B.018 C.-0xabcd D.2e5

2、

C语言中,定义常量指针p(p的值不变)的正确语法是__________。

A.char *const p; B.char const *p;

C.const *char p; D.const char *p;

3、

C语言中,一个2行3列矩阵M的值如图1所示,能得到M中数值5的表达式是__________。

3 8 9

2 5 6

图1

A.*(M+1)+1 B.*(*M+1)+1

C.*(*(M+1)+1) D.**((*M+1)+1)

4、

C语言中,关于函数正确的说法有__________。(多选)

A.实参可以是常量、变量或表达式

B.实参与其对应的形参各占用独立的存储单元

C.实参与形参不一致时,以形参类型为准

D.函数的类型与返回值的类型不一致时,以函数的类型为准


二、写程序结果

#include <stdio.h> int main() { enum Color{Red,Blue,Green,Yellow=6,Black,Purple,Pink}; printf("%d,%d",Blue,Purple); }

运行结果是____________________。

#include <stdio.h> int main() { char a[]={'a','b','c','d'}; char *p=(char *)(&a+1); printf("%c,%c",*(a+1),*(p-1)); }

运行结果是____________________。

#include <stdio.h> int bits_count(unsigned value) { int count=0; for(count=0; value!=0; value>>=1) if((value&1)!=0) count++; return count; } int main() { printf("%d",bits_count(14)); }

运行结果是____________________。

#include <stdio.h> int *fun(int *q) { static int a=2; int *p=&a; a+=*q; return p; } int main() { int i=1; for(; i<4; i++) printf("%4d",*fun(&i)); }

运行结果是____________________。

三、程序填空

会计记帐时通常要求大整数用逗号进行分隔,下列函数实现将以分为单位的数字字符串转变为以元为单位,具体输出格式如表1所示。

表1

输入

输出

输入

输出

¥0.00

12345

¥123.45

1

¥0.01

123456

¥1,234.56

12

¥0.12

1234567

¥12,345.67

1234

¥12.34

123456789

¥1,234,567.89

#include<stdio.h> #include<string.h> #include<stdlib.h> char* dollars(char const* src) { int len,lenl,i; char *dst,*resultp; if(NULL==src) return NULL; len=strlen(src); lenl=len+len/3+2; dst=(char*)malloc(lenl); if(!dst) { return NULL; } _____________1______________ *dst++='¥'; if(len>=3) { int i; for(i=len-2; i>0;) { *dst++=*src++; if(_____________2______________) *dst++=','; } } else { *dst++='0'; } *dst++='.'; _____________3______________ *dst++=len<1?'0':*src; *dst=0; return resultp; }

下列程序的功能是实现向head指向的链表中插入新结点s,如图17所示,使该链表按结点的id值保持升序排列。

图17

#include <stdio.h> #include <stdlib.h> typedef struct Node { int id; char *name; struct Node *next; }Node; void Innode(Node *head,int id,char *str) { int j=0; Node *p,*q,*s; p=head; while (___________4______________) { q=p; p=p->next; } s=(Node*)malloc(sizeof(Node)); s->id=id; s->name=str; _____________5______________ _____________6______________ } main() { /*省略创建链表head的代码*/ Innode(head,3,"Jone"); /*head指向如图17所示的链表*/ }

四、改错

以下函数的功能是:在指针数组表示的字符串列表中查找特定的字符,指针数组以NULL指针结束,如果找到返回TRUE,否则返回FALSE。程序中有两处错误,将错误的行号及正确语句填入答题卡相应位置,不得增行或删行。

#include <stdio.h> #include <string.h> #define TRUE 1 #define FALSE 0 int find_string(char** strings,char value) { char* cur_str; if(*strings==NULL) return FALSE; while((cur_str=*strings)!=NULL) { while(cur_str!="\0") if(*cur_str++==value) return TRUE; } return FALSE; }

五、程序设计题

一串数码是否构成合法的信用卡号,可以通过CheckCard算法来验证。CheckCard算法验证的过程如下:

①卡号的长度必须为16位。

②从卡号最后一位数字开始,将奇数位数字求和。

③从卡号最后一位数字开始,将偶数位数字乘以2(如果乘积为两位数,则减9),再求和。

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

④将②和③所得的和值相加,当结果能被10整除时,则校验通过。

例如,卡号是:5432123456788881

奇数位和等于35

偶数位乘以2(乘积为两位数的减去9)的结果:16261577,求和等于35。

35+35=70可以被10整除,校验通过。

编写函数实现CheckCard算法,判断输入的卡号是否能通过验证,通过则显示“成功”,否则显示“失败”。

六、程序方向

(一)、程序填空

下列程序采用快速排序算法对任意输入的10个整数排序。将正确的内容填入答题卡的相应位置,使程序完整。

快速排序算法是一种经典的排序方法,它是冒泡排序算法的改进。该算法的主要思想是在待排序的n个数据中取第一数据作为基准值,将所有的数据分为两组,使得第一组中各数据值均小于或等于基准值,第二组中各数据值均大于基准值,这便完成了第一趟排序,再分别对第一组和第二组重复上述方法,直到每组只有一个数据为止。

#include <stdio.h> #include <stdlib.h> #include <time.h> void qusort(int s[],int start,int end) { int i,j; i=start; /*将每组首个元素赋给i*/ j=end; /*将每组末尾元素赋给j*/ s[0]=s[start]; /*设置基准值*/ while(i<j) { while(_____________1______________) j--; /*位置左移*/ if(i<j) s[i++]=s[j]; /*将s[j]放到s[i]的位置上,且i自增*/ while(i<j&&s[i]<=s[0]) i++; /*位置右移*/ if(i<j) _____________2______________ } s[i]=s[0]; /*将基准值放入指定位置*/ if(start<i) qusort(s,start,i-1); /*对分割出的部分递归调用函数qusort()*/ if(i<end) _____________3______________ } main() { int a[11],i; printf("please input 10 numbers:\n"); srand(time(0)); for(i=1;i<=10;i++) a[i]=rand()%100;//scanf("%d",&a[i]); _____________4______________ printf("the sorted numbers:\n"); for(i=1; i<=10; i++) printf("%4d",a[i]); }

(二)、程序设计

随着信息化进程的不断推进,数据的安全性越来越受到人们的重视,数据加密技术是保证数据安全的重要手段。编程实现对C盘根目录下名为“new.dat”文件的数据进行加密,加密方式是将“new.dat”文件中每个字符与字符A进行异或运算,运算后的加密数据存储到“new.dat”文件中。

参考答案:

一、选择题

1—4 B、A、C、ACD

二、写程序结果

1、 1,8 2、 b,d 3、 3 4、 □□□3□□□5□□□8

三、程序填空

1、 resultp=dst; 2、 ((i--)-3)%3==1 3、 *dst++=len<2?'0':*src++;

注:第2题网上答案--i%3==0有错误

第3题也可以是:*dst++=len<2?'0':*src++;

以下为补充main函数

int main() { char a[]={"456789"},*p; p=dollars(a); //printf("\n%s",p); printf("\n¥%s",p+1); }

程序中赋值¥有bug,因为¥为中文字符。故用上述方式输出。

4、 p!=NULL && p->id<id 5、 s->next=p; 6、 q->next=s;

注:第4题不能p->id<id && p!=NULL 因为插入最后一个节点时会溢出。

四、改错

L10 while((cur_str=*strings++)!=NULL)

L12 while(*cur_str!='\0')

注:L10不能修改为字符串复制。

int main() { char *aa[]={"abcd","xyz123","sadfg",""}; aa[3]=NULL; if(find_string(aa,'1')) printf("ok"); else printf("no"); }

五、程序设计题

1、参考代码

#include <stdio.h> #include "string.h" void CheckCard(char *p) { char *q; int s1=0,s2,t; if(strlen(p)!=16) { printf("失败,卡号长度不对"); return; } q=p+15; while(q>=p) { s1=s1+*q-'0'; q--; t=(*q-'0')*2; if(t>9) t=t-9; s2=s2+t; q--; } if((s1+s2)%10==0) printf("成功"); } int main() { char ka[100]="5432123456788881"; int len; //gets(ka); CheckCard(ka); return 0; }

六、程序方向

(一)、程序填空

1、 i<j&&s[j]>=s[0]

2、 s[j--]=s[i];

3、 qusort(s,i+1,end);

4、 qusort(a,1,10);

(二)程序设计

注:为了方便性,将操作文件改名了。

假设 aaa.txt文件内容为 ABC三个字符

#include <stdio.h> #include "string.h" int main() { FILE *fp,*fp1; char a[100],*p=a; if((fp=fopen("aaa.txt","r"))==NULL) { printf("文件不存在或者打不开,退出!"); return 0; } if((fp1=fopen("aaa1.txt","w"))==NULL) { printf("文件不存在或者打不开,退出!"); return 0; } while(!feof(fp)) { *p=fgetc(fp); *p=*p^'A'; fputc(*p,fp1); } fclose(fp1); fclose(fp); if((fp1=fopen("aaa1.txt","r"))==NULL) { printf("文件不存在或者打不开,退出!"); return 0; } if((fp=fopen("aaa.txt","w"))==NULL) { printf("文件不存在或者打不开,退出!"); return 0; } while(!feof(fp1)) { *p=fgetc(fp1); fputc(*p,fp); } fclose(fp1); fclose(fp); return 0; }