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

2010年湖南省对口高考真题

来源:互联网 收集:自由互联 发布时间:2023-09-07
一、选择题 1、 下列不是C语言合法标识符的是__________。 A. _124 B. 124abc C. sum124 D.a_124 2、 若有如图1所示存储结构,且变量定义为struct node{int data;struct node *next;}p,q,r;若要实现图2所示的存

一、选择题

1、

下列不是C语言合法标识符的是__________。

A. _124             B. 124abc           C. sum124           D. a_124 

2、

若有如图1所示存储结构,且变量定义为struct node{int data;struct node *next;}p,q,r;若要实现图2所示的存储结构,可选用的赋值语句是__________。

A. p=r;             B. p=q->next;       C. p->next=q;       D. p->next=q->next;

 二、写程序结果

1、

#include <stdio.h>
main()
{
    double x,y;
    printf("%.2f",(x=5,y=x+3/2));
}

运行结果是____________________。

 2、

#include <stdio.h>
#define CUBE(x) (x*x*x)
main()
{
    int n=5;
    int s=CUBE(++n);
    printf("%d",s);
}

运行结果是____________________。

 3、

#include <stdio.h>
void fun(int a,int *b)
{
    a=*b*2;
    *b=a*5;
}
main()
{
    int x=10,*y;
    y=&x;
    fun(x,y);
    printf("%d,%d",x,*y);
}

运行结果是____________________。

 4、

#include <stdio.h>
void fun(int *a)
{
    *a=*(a-1)+*(a+1);
}
main()
{
    int i=0,s=0,arr[5]= {1,3,5,7,9};
    fun(arr+2);
    for(; i<5; i++)
        s+=arr[i];
    printf("%d",s);
}

运行结果是____________________。


三、程序填空

1、

下列函数rtrin_str实现的是删除字符串str尾部的所有空格。

char* rtrim_str(char* str)
{
    int n=__________ 1 __________;
    if(n<1)
        return 0;
    while(n>0)
    {
        if(*(str+n)!=' ')
        {
            __________ 2 __________
            break;
        }
        else
            __________ 3 __________
    }
    return str;
}

2、

某超市推行会员优惠购物,其中vip会员八八折,金牌会员九折,银牌会员九三折,普通会员九六折,非会员不打折。以下程序实现了超市购物的结算,其中非会员、普通会员、银牌会员、金牌会员、vip会员分别用0、1、2、3、4表示。

#include <stdio.h>
double computer(int n,int grade) 
{
    int amount,i;
    double sum,price,discount[5]= { __________ 4 __________ };
    sum=0.0;
    for(i=0; i<n; i++) 
    {
        printf("请输入商品单价和数量:\n");
        scanf("%lf%d",&price,&amount);	/*price:商品单价;amount:商品数量;*/
        sum+=price*amount;
    }
    return __________ 5 __________ ;
}
main() 
{
    int n,grade;	/*n:商品种数;grade:会员等级*/
    printf("请输入商品种数和会员等级:\n");
    scanf("%d%d",&n,&grade);
    printf("%.2lf\n", __________ 6 __________);
}


四、改错

1、

以下程序的功能是:任意输入一个小于256的正整数,将其转换成二进制数并输出。程序中有两处错误,请将错误处的行号及正确语句填入答题卡相应位置中,不得增行或删行。

#include "stdio.h"
int main()
{
    int x,i=0,j=0;
    int result[8];
    printf("请输入一个小于256的正整数:\n");
    scanf("%d",&x);
    do
    {
        result[i]=x%2;
        i++;
        x=x%2;
    }
    while(x>=1);
    for(j=i-1; j>=0; j++)
        printf("%d",result[j]);
    printf("\n");
    return 0; 
}


五、程序设计题

1、

在全国青年歌手大奖赛中,有20个评委为参赛的选手打分,分数为1-100分。选手最后得分为:去掉一个最高分和一个最低分后其余18个分数的平均值。请编写程序实现,输入20个评委评分,求出选手最后得分。


六、程序方向

(一)、程序填空

设文件studs.dat中存放着学生的基本信息,基本信息由以下结构体来描述:

struct student
{
    long int num;           /*学号*/
    char name[20];          /*姓名*/
    char major[25];         /*专业*/
}


下列程序的功能是:输入要读取的学生人数,利用malloc动态分配内存来存储从文件中读取的学生信息(以方便进一步管理),并输出读取的学号,姓名,专业。请将正确的内容填入答题卡的相应位置上,使程序完整。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct student
{
    long int num;
    char name[10];
    char major[10];
};
FILE *fp;
int main()
{
    struct student st,*pst;
    int i ,num,realnum;
    printf("请输入读取的学生数:");
    scanf("%d",&num);
    pst=(struct student *)malloc(______1______);
    if(!pst) return 0;
    fp=fopen("studs.dat","rb");
    if(NULL==fp)
    {
        ______2______;
        return 0;
    }
    realnum=0;
    printf("%s\t%s\t%s\n","number","name","major");
    /*文件包含的学生数量可能少于输入的人数*/
    for(i=0; i< ______3______ ; i++)
    {
        fread(pst+i,sizeof(struct student),1,fp);
        realnum++;
        ______4______;
        printf("%d\t%ld\t%s\t%s\n",realnum,st.num,st.name,st.major);
    }
    free(pst);
    fclose(fp);
    return 0;
}

 (二)、程序设计

编写程序,输入5行5列整数方阵,计算并输出该方阵两条对角线上各元素的平方和。


参考答案:

一、选择题

1—2    BD 

一、写程序结果

1、 6.00            2、 VC 512=8*8*8  DC 392=7*7*8         3、 100,100

4、 30     

分析:对于第2题,以下代码在VC中均为512,在DC中均为392。

#include "stdio.h"
#define CUBE(x)  (x*x*x)
int main()
{
    int s;
    int a=5; s=CUBE(++a); printf("\n %d",s);
    int b=5; s=++b*++b*++b; printf("\n %d",s);
    int c=5; printf("\n %d",++c*++c*++c);
    int d=5; int e; e=CUBE(++d); printf("\n %d",e);
    getchar();
}


二、程序填空

1、 n=strlen(str)-1            2、 *(str+n+1)='\0';       3、 n--;

4、 1.00,0.96,0.93,0.9,0.88     5、 sum*discount[grade]     6、 computer(n,grade)

三、改错

1、 L12         x=x/2;  // x=x%2;

2、 L15         for(j=i-1; j>=0; j--)   // for(j=i-1; j>=0; j++)

四、程序设计题

1、参考代码

#include "stdio.h"
int main()
{
    int x[21],min,max,n=1;
    float aver;
    while(n<=20)
    {
        printf("请输入第%d个评委的分数(1-100):",n);
        scanf("%d",&x[n]);
        if(x[n]>=1 && x[n]<=100)
            n++;
    }
    aver=min=max=x[1];
    for(n=2;n<=20;n++)
    {
        if(min>x[n])min=x[n];
        if(max<x[n])max=x[n];
        aver+=x[n];     
    }
    aver=(aver-min-max)/18;
    printf("\n 最后得分:%.2f",aver);    
    return 0; 
}

不足:没有考虑计算多个选手的情况,只考虑了计算一个选手的得分。

 五、程序方向

(一)、程序填空

1、 sizeof(struct student)

2、 free(pst);

3、 !feof(fp)&&(i<num)

4、 st=*(pst+i)

分析:本程序有bug,因为文件尾的情况存在多读一条数据的问题,因此,应该在循环外先读取一次,则不会出现多读一条数据的问题。

fread(pst+i,sizeof(struct student),1,fp);
    realnum++;
    st=*(pst+i);
    for(i=0; !feof(fp)&&(i<num); i++)
    {
        printf("%d  %ld %s %s\n",realnum,st.num,st.name,st.major);
        fread(pst+i,sizeof(struct student),1,fp);
        realnum++;
        st=*(pst+i);
    }

(二)程序设计

#include <stdio.h>
#define N 5
main()
{
    int a[N][N],i,j,s=0;
    for(i=0;i<N;i++) 
        for(j=0;j<N;j++)
        {
            //printf("\n请输入第%d行第%d列数据:",i,j);
            //scanf("%d",&a[i][j]); 
            a[i][j]=i+j;
        }
    for(i=0;i<N;i++)
        for(j=0;j<N;j++)
        {
            if(i==j || i+j==N-1)
                s+=a[i][j]*a[i][j];
        }
    printf("\n对角线上各元素的平方和为%d",s);  
}
// 0 1 2 3 4            0+4+16+36+64=120
// 1 2 3 4 5            16+16+16+16=64
// 2 3 4 5 6
// 3 4 5 6 7
// 4 5 6 7 8






上一篇:C语言-第1章_导言-05
下一篇:没有了
网友评论