当前位置 : 主页 > 编程语言 > c语言 >

2011年湖南省对口高考真题

来源:互联网 收集:自由互联 发布时间:2023-09-06
一、选择题 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.c

一、选择题

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.函数的类型与返回值的类型不一致时,以函数的类型为准


二、写程序结果

1、

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

运行结果是____________________。

 2、

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

运行结果是____________________。

 3、

#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));
}

运行结果是____________________。

 4、

#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所示。

表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;
}

 2、

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

2011年湖南省对口高考真题_2011年对口高考

图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所示的链表*/
}

 四、改错

1、

以下函数的功能是:在指针数组表示的字符串列表中查找特定的字符,指针数组以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;
}

五、程序设计题

1、

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

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

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

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

④将②和③所得的和值相加,当结果能被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;
}
网友评论