• 140.50 KB
  • 2021-05-14 发布

湖南省历界对口高考C语言真题答案

  • 33页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档由用户上传,淘文库整理发布,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,请立即联系网站客服。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细阅读内容确认后进行付费下载。
  4. 网站客服QQ:403074932
历界高考C语言真题 ‎2007年真题 一、程序分析题 ‎1、#include ‎ ‎#*‎ eef ‎24‎ ‎1-2‎ main( )‎ ‎{ int x=3;‎ ‎ do ‎ printf(“%d”,x-=2);‎ ‎ while(!(--x));‎ ‎}‎ ‎2、#include ‎ main( )‎ ‎{ int x=4,y=8,z;‎ ‎ z=x<<2|y;‎ ‎ printf(“%d”,z);‎ ‎}‎ ‎3、#include ‎ main( )‎ ‎{ char x=’E’,y=’e’;‎ ‎ printf(“%c”,x+32);‎ ‎ printf(“%c”,(x--,y++));‎ ‎ printf(“%c ”,x==y?x+=32:(y-=32));‎ ‎}‎ ‎4、#include ‎ main( )‎ ‎{ int t=2;‎ ‎ while(t<5)‎ ‎ switch(t%2)‎ ‎ { case 0: t++;printf(“#”);break;‎ ‎ case 1: t+=2;printf(“*”);‎ ‎ default:printf(“ ”);‎ ‎}‎ ‎}‎ ‎5、#include ‎ main( )‎ ‎{ char str1[50]=”Beijing 2008”,*q=str1;‎ ‎ char str2[50]=”One world One Dream!”,*p=str2;‎ ‎ while(*p!=’’) p++;‎ One world One Dream!Beijing 2008‎ ‎ while(*q!=’’) *p++=*q++;‎ ‎ *p=’’;‎ ‎ printf(“%s”,str2);‎ ‎ }‎ ‎6 #include ‎ ‎#include‎ main( )‎ gfedcba ‎{ char s[]=”abcdefg”,t;‎ ‎ int i=0,j=strlen(s)-1;‎ ‎ while(i‎ ‎ main( )‎ ‎ { int i,j,sum;‎ for(i=1; i<1000 ;i++)‎ ‎{ sum=0;‎ ‎ for(j=1;j‎ ‎ #define N 7‎ ‎ int fun(int s[],float aver)‎ ‎ { int i,count=0;‎ for(i=0;i‎ ‎ long fun(int x)‎ ‎ { int m,n,t;‎ ‎ long sum; long sum=1;‎ ‎ for(m=1;m<=x;m++)‎ ‎{ t=1;‎ ‎ for(n=1;n<=m;n++)‎ ‎ t=m*n; t*=n;‎ ‎ sum+=t;‎ ‎ }‎ ‎ return sum;‎ ‎}‎ ‎ main( )‎ ‎ { int num;‎ ‎ scanf(“%d”,&num);‎ ‎ printf(“sum=%ld ”,fun(num));‎ ‎}‎ ‎2、以下程序的功能是:从字符串str中,删除所有字母c,不区分大小写。如输入字符串”abcCdefcfCg”,删除后的字符串为”abdefg”。程序有两错误,请标记并改正。‎ ‎#include‎ main( )‎ ‎{ char str[81];‎ ‎ int i=0,j=0;‎ gets(str);‎ while(str[i]!=’’)‎ ‎{ if(str[i]!=’c’||str[i]!=’C’) { if(str[i]!=’c’&&str[i]!=’C’) ‎ ‎ str[j]=str[i]; str[j++]=str[i];‎ ‎ i++;‎ ‎}‎ str[j]=’’;‎ printf(“%s”,str);‎ ‎}‎ ‎3、以下程序从一个二进制文件中读出结构体数据,并将结构体数据输出在屏幕上。程序中有三处错误,请标记并改正。‎ ‎#include‎ struct student ‎{ char name[10];‎ ‎ float score;‎ ‎}stu;‎ main( )‎ ‎{ file *f; { FILE *f;‎ ‎ if((f=fopen(“a.dat”,”r”))==NULL)‎ ‎ { printf(“cannot open outfile ”);‎ ‎ exit(0);‎ ‎ }‎ while(feof(f)) while(!feof(f)) ‎ ‎{ fread(stu,sizeof(struct student),1,f); { fread(&stu,sizeof(struct student),1,f); ‎ ‎ printf(“%s,%.2f ”,stu.name,stu.score);‎ ‎}‎ fclose(f);‎ ‎}‎ 四、程序设计题 ‎1、已知一个数列从1项开始的前6项为:0,0,1,1,2,4,以后的各项都是其相邻的前3项之和,计算并输出该数列前20项之和。‎ ‎2、写一函数sort(int x[ ],int n)实现选择法排序 (从小到大)。‎ ‎ ‎ ‎2008年真题 一、程序分析题 ‎1、#include ‎ ‎2122‎ ‎9.1‎ ‎8,10‎ main( )‎ ‎{ char a=55;‎ ‎ a=~a&055;‎ ‎ printf(“%x,%o”,a,a);‎ ‎}‎ ‎2、#include ‎ ‎ #define test(x,y) x+y ‎ main( )‎ ‎ { float c;‎ c=2*test(3.2,5.4)/2;‎ printf(“6.1f”,c);‎ ‎}‎ ‎3、#include ‎ ‎ void fun( )‎ ‎ { int x=1;‎ static int y=1;‎ printf(“%d%d”,++x,y++);‎ ‎ }‎ ‎ main( )‎ ‎ { int i;‎ for(i=0;i<2;i++)‎ ‎ fun( );‎ ‎}‎ ‎4、#include ‎ ‎ main( )‎ ‎340‎ ‎3‎ ‎ { int a=12,b=0,n=0;‎ do ‎ ‎{ b+=2;a-=2+b;‎ ‎ n++;‎ ‎} while(a>=0);‎ printf(“%d”,n);‎ ‎ }‎ ‎5、#include ‎ ‎ main( )‎ ‎ { int n=132,i=1,j,k,b[10];‎ while(n!=0)‎ ‎{ j=n%6; b[i]=j;‎ ‎ n=n/6; i++;‎ ‎}‎ for(k=i-1;k>0;k--)‎ ‎ printf(“%d”,b[k]);‎ ‎}‎ 二、程序填空题 ‎1、任意输入平面一点坐标(x,y),求该点到原点(0,0)的距离。‎ ‎#include ‎ ‎ #include ‎ ‎ #include ‎ ‎ typedef struct NODE ‎ { float x;‎ float y;‎ ‎ }NODE;‎ main( )‎ ‎ { NODE *p;‎ p= (NODE *)malloc(sizeof(NODE)) ;‎ scanf(“%f,%f”,&p->x,&p->y);‎ printf(“%5.1f”,sqrt(p->x*p->x+p->y*p->y));‎ ‎ free(p) ;‎ ‎ }‎ ‎2、下列给定程序中,函数fun( )的功能是:从N个字符串中找出最长的那个串,并将其地址作为函数值返回。‎ ‎ #include ‎ ‎ #include ‎ ‎ #define N 4‎ ‎ #define M 50‎ ‎ char *fun(char (*q)[M])‎ ‎ { int i;char *p;‎ ‎ p=*q ;‎ for(i=0;i‎ ‎ void fun(int n,int a[ ][3]); ‎ ‎ main( )‎ ‎ { int a[3][3],i,j;‎ ‎ for(i=1;i<=3;i++)‎ for(j=1;j<=3;j++)‎ ‎ a[i-1][j-1] =i*j;‎ ‎ fun(3,a);‎ ‎ printf(“the result: ”);‎ ‎ for(i=0;i<3;i++)‎ ‎ { for(j=0;j<3;j++)‎ ‎ printf(“%4d”,a[i][j]);‎ ‎ printf(“ ”);‎ ‎ }‎ ‎ }‎ void fun(int n,int a[3][3])‎ ‎{ int i,j;‎ ‎ for(i=0;i‎ ‎ main( )‎ ‎ { int i,flag=1;‎ ‎ float a=144,b=89,s=0,t;‎ ‎ for(i=1;i<=8;i++)‎ ‎{ s+=a/b; { s+=flag*b/(a-b);‎ ‎ flag=-flag;‎ ‎ t=b;a=a-b;a=t; t=b;b=a-b;a=t;‎ ‎}‎ printf(“%5.1f”,s);‎ ‎ }‎ ‎2、下列程序的功能是采用简单插入的排序方法,随机产生10个整数,按从小到大的顺序排列。程序中有2处错误,请标记并改正。‎ ‎#include ‎ ‎#include ‎ main( )‎ ‎{ int i,j,a[11];‎ ‎ for(i=1;i<11;i++)‎ ‎ a[i]=rand( );‎ ‎ for(i=2;i<11;i++)‎ ‎ { a[0]=a[i];‎ for(j=i-1;j>=1;j--)‎ ‎ if(a[0]‎ ‎48‎ p h o ‎5,125‎ D,-69‎ ‎14‎ ‎ main( )‎ ‎ { struct stu ‎{ char name[10];‎ ‎ int age,sex;‎ ‎};‎ printf(“%d”,sizeof(struct stu));‎ ‎}‎ ‎2、#include‎ ‎ main( )‎ ‎{ int x=68;‎ ‎ printf(“%c,%d ”,x,~x);‎ ‎}‎ ‎3、#include‎ ‎ #include‎ ‎ main( )‎ ‎ { double x=5.14;‎ int a=(int)floor(x);‎ int b=(int)pow(floor(x),3);‎ printf(“%d,%d”,a,b);‎ ‎}‎ ‎4、#include‎ ‎ main( )‎ ‎{ char **p,*t[]={“compute”,”phone”,”mp3”};‎ ‎ for(p=t+2;p>=t;p--)‎ ‎ printf(“%c ”,*(*p+1))‎ ‎}‎ ‎5、#include‎ ‎ f(int arr[ ])‎ ‎ { int i=0;‎ for(;arr[i]<=10;i+=2)‎ ‎ printf(“%d ”,arr[i]);‎ ‎}‎ main( )‎ ‎{ int arr[]={2,4,6,8,10,12};‎ ‎ f(arr+1);‎ ‎ }‎ 二、程序填空题 ‎1、以下程序的功能是:从3个红球队、6个白球、5个蓝球中任意取出8个球,且其上至少有一个白球,输出所有可能的方案。‎ ‎#include‎ main( )‎ ‎{ int i,j,k;‎ ‎ printf(“ Red White Blue ”);‎ ‎ for(i=0;i<=3;i++)‎ ‎ for( j=1 ;j<=6;j++)‎ ‎ { k= 8-i-j ;‎ ‎ if( k>=0&&k<=5 )‎ ‎ printf(“%d %d %d ”,i,j,k);‎ ‎}‎ ‎}‎ ‎2、以下程序的功能是:求100以内最大的一对孪生素数之和,孪生素数是指两个素数之差为2。‎ ‎#include‎ ‎#include‎ int isPrime(int i)‎ ‎{ int j,r=0,k=sqrt(i);‎ ‎ for(j=2;j<=k;j++)‎ ‎ if(i%j==0) break;‎ if(j>k) r=1;‎ ‎ return r ;‎ ‎}‎ main( )‎ ‎{ int i,sum=0;‎ ‎ for(i=100;i>=5;i--)‎ ‎ if( isPrime(i)&&isPrime(i-2) )‎ ‎{ sum=i+i-2;‎ ‎ break ;‎ ‎}‎ printf(“%d ”,sum);‎ ‎}‎ ‎3、以下程序的功能是:输入某公司50名职员的工号、姓名和地址并存入名为”company.txt”的磁盘文件。‎ struct Employee ‎{ int empid;‎ ‎ char empname[10];‎ ‎ char empadd[30];‎ ‎}emp[50];‎ void save( )‎ ‎{ FILE *fp ;‎ ‎ int i;‎ if((fp=fopen(“company.txt”,”wb”))==NULL)‎ ‎{ printf(“cannot open file ”); return; }‎ for(i=0;i<50;i++)‎ ‎ if(fwrite( emp+i,sizeof(struct Employee),1,fp )!=1)‎ ‎ printf(“file write error ”);‎ ‎}‎ main( )‎ ‎{ int i;‎ ‎ for(i=0;i<50;i++)‎ ‎ scanf(“%d,%s,%s”, &emp[i].empid ,emp[i].empname, emp[i].empadd);‎ save( );‎ ‎}‎ 三、程序改错题,不得增行或删行。‎ ‎1、以下程序的功能是:从一个整数队列中找出值最大的数,若有多个则取最先得到的那一个。程序有两处错误,请标出并改正。‎ ‎#include‎ int *findmax(int a[ ],int n)‎ ‎{ int i,j,max;‎ ‎ for(i=1,j=0,max=a[0];imax)‎ ‎ { j=i;‎ ‎ max=a[i];‎ ‎ }‎ ‎ return *(a+j); return a+j;‎ ‎}‎ main( )‎ ‎{ int i,a[50];‎ ‎ for(i=0;i<50;i++)‎ ‎ scanf(“%d”,&a[i]);‎ ‎ printf(“%d”,findmax(a,50)); printf(“%d”,*findmax(a,50));‎ ‎}‎ ‎2、以下程序的功能是:输入一个字符串,将该字符串中的所有字符按ASCII码降序排序后输出。程序有两处错误,请标出并改正。‎ ‎#include‎ ‎#include‎ void fun(char t[])‎ ‎{ char c;‎ ‎ int i,j;‎ ‎ for(i=0;it[j])‎ ‎ { c=t[j];‎ ‎ t[j]=t[i++]; t[j]=t[i]; ‎ ‎ t[i]=c;‎ ‎ }‎ ‎}‎ main( )‎ ‎{ char s[81];‎ ‎ gets(s);‎ ‎ printf( Before sorting: %s”,s);‎ ‎ fun(s);‎ printf( after sorting: %s”,s);‎ ‎}‎ 四、程序设计题 ‎1、某学校操场上有一些学生,老师起知道有多少人,便让学生排队报数:按1到5报数,最后一名学生的报数为1,按1到6报数,最后一名学生的报数为5,按1到7报数,最后一名学生的报数为4,最后再按1到11报数,最后一名学生的报数为10。编写程序求操场 上共有多少学生。‎ ‎2、将自然数1~100按顺时围成一圈,首先取出1,然后按顺时针方向以步长30取数,直到所有的数取完为此。编程序求最后一个取出的数?‎ ‎2010年真题 一、单选题 ‎1、下列不是C语言合法标识符的是 B 。‎ A、_124 B、124abc C、sum124 D、a_124‎ p q r 图2‎ p q r 图1‎ ‎2、若有如图1所示存储结构,且变量定义为struct node{int data;struct node *next;}*p,*q,*r;若要实现如图2所示的存储结构,可选用的赋值语句是 D 。‎ A、p=r; B、p=q->next C、p->next=q; D、p->next=q->next;‎ 二、程序分析题 ‎6.00‎ ‎1、#include‎ ‎ main( )‎ ‎ { double x,y;‎ ‎ printf(“%.2f”,(x=5,y=x+3/2));‎ ‎ }‎ ‎2、#include‎ ‎ #define CUBE(x) (x*x*x)‎ ‎30‎ ‎100,100‎ ‎512‎ main( )‎ ‎{ int n=5;‎ int s=CUBE(++n);‎ ‎ printf(“%d”,s);‎ ‎}‎ ‎3、#include‎ ‎ 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‎ ‎ 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、下列函数rtrim实现的是删除字符串str尾部的所有空格。‎ ‎ char * rtrim(char *str)‎ ‎ { int n= strlen(str)-1 ;‎ if(n<1) return 0;‎ while(n>0)‎ ‎{ if(*(str+n)!=’ ’)‎ ‎ { *(str+n+1)=’’ ;‎ ‎ break;‎ ‎ }‎ ‎ else ‎ ‎ n-- ;‎ ‎}‎ return str;‎ ‎}‎ ‎2、某超市推行会员优惠购物,其中VIP会员八八折,金牌会员九折,银牌会员九三折,普通会员九六折,非会员不打折。以下程序实现了超市购物的结算,其中非会员、普通会员、银牌会员、金牌会员、VIP会员分别用0,1,2,3,4表示。‎ ‎#include‎ double compute(int n,int grade)‎ ‎{ int amount,i;‎ ‎ double sum,price,discount[5]={ 1.0,0.96,0.93,0.9,0.88 };‎ ‎ sum=0.0;‎ ‎ for(i=0;i‎ ‎ #include‎ ‎ struct student ‎ { long int num; /*学号*/‎ char name[20]; /*姓名*/‎ char major[25]; /*专业*/‎ ‎ };‎ ‎ FILE *fp;‎ ‎ main( )‎ ‎ { struct student st,*pst;‎ int i,num,realnum;‎ printf(“请输入读取的学生人数:”);‎ scanf(“%d”,&num);‎ pst=(struct student *)malloc( num*sizeof(struct student) );‎ if(!pst) return;‎ fp=fopen(“studs.dat”,”rb”);‎ if(NULL==fp)‎ ‎{ free(pst) ; return; }‎ realnum=0;‎ printf(“%s %s %s %s ”,”number”,”number”,”name”,”major”);‎ ‎/*文件包含的学生人数可能少于输入的人数*/‎ for(i=0; i=1);‎ for(j=i-1;j>=0;j++) for(j=i-1;j>=0;j--)‎ ‎ printf(“%d”,result[j]);‎ printf(“ ”);‎ ‎}‎ 五、程序设计题 ‎1、在全国青年歌手大奖赛中,有20个评委为参赛的选手打分,分数为1~100分。选手最后得分为:去掉一个最高分和最低分后其余18个分数的平均值。请编写程序实现,输入20个评委评分,求出选手的最后得分。‎ ‎2、编写程序,输入5行5列整数方阵,计算并输出该方阵两条对角线上各元素的平方和。‎ ‎2011年真题 一、单选题 ‎1、C语言中,不合法的整型常量是 B 。‎ A、88 B、018 C、-0xabcd D、2e5‎ ‎2、C语言中,定义常量指针p(p的值不可变)的正确语法是 A 。‎ A、char * const p; B、char const *p; C、const * char p; D、const char *p;‎ ‎2、C语言中,一个2行3列矩阵M的值如图所示,能得到M中数值5的表达式是 C 。‎ ‎3 8 9‎ ‎2 5 6‎ A、*(M+1)+1 B、*(*M+1)+1 C、*(*(M+1)+1) D、**((*M+1)+1)‎ ‎3、C语言中,关于函数不正确的说法有 C 。‎ A、实参可以是常量、变量或表达式 B、实参与其对应的形参各占用独立的存储单元 C、实参与形参的类型不一致时,以实参类型为准 D、函数的类型与返回值的类型不一致时,以函数的类型为准 二、程序分析题 ‎1、#include‎ ‎3 5 8‎ ‎3‎ b,d ‎1,8‎ ‎ main( )‎ ‎ { enum Color{Red,Blue,Green,Yellow=6,Black,Purple,Pink};‎ ‎ printf(“%d,%d”,Blue,Purple);‎ ‎ }‎ ‎2、#include‎ ‎ main( )‎ ‎ { char a[]={‘a’,‘b’,‘c’,‘d’};‎ ‎ char *p=(char *)(&a+1);‎ ‎ printf(“%c,%c”,*(a+1),*(p-1));‎ ‎ }‎ ‎3、#include‎ ‎ int bits_count(unsigned value)‎ ‎ { int count=0;‎ ‎ for(count=0;value!=0;value>>=1)‎ ‎ if((value&1)!=0)‎ ‎ count++;‎ ‎ return count;‎ ‎}‎ main( )‎ ‎{ printf(“%d”,bits_count(14));‎ ‎}‎ ‎4、#include‎ ‎ int *fun(int*q)‎ ‎{ static int a=2;‎ ‎ int*p=&a;‎ ‎ a+=*q;‎ ‎ return p;‎ ‎}‎ main( )‎ ‎{ int i=1;‎ for(;i<4;i++)‎ ‎ printf(“%4d”,*fun(&i));‎ ‎}‎ 三、程序填空题。‎ ‎1、会计记账时通常要求大整数用逗号进行分隔,下列函数实现将以分为单位的数字字符串转变为以元为单位,具体输出格式如下表所示。‎ 输入 输出 输入 输出 空 ‎¥0.00 ‎ ‎12345‎ ‎¥123.45‎ ‎1‎ ‎¥0.01‎ ‎123456‎ ‎¥1,234.56‎ ‎12‎ ‎¥0.12‎ ‎1234567‎ ‎¥12,345.56‎ ‎1234‎ ‎¥12.34‎ ‎123456789‎ ‎¥1,234,567.89‎ ‎#include ‎ ‎#include ‎ ‎#include ‎ char *dollars( char const* src)‎ ‎{ int len,len1,i;‎ char*dst,*resultp;‎ if(NULL==src)‎ ‎ return NULL;‎ len=strlen(src);‎ len1=len<4?6:len+len/3+2;‎ dst=(char*)malloc(len1);‎ if(!dst)‎ ‎ return NULL;‎ ‎ resultp=dst; ‎ ‎*dst++=‘¥’;‎ if(len>=3)‎ ‎{ int i;‎ for(i=len-2;i>0;)‎ ‎ { *dst++=*src++;‎ ‎ if( --i%3==0 )‎ ‎ *dst++=’,’;‎ ‎ }‎ ‎}‎ else *dst++=‘0’; ‎ ‎*dst++=‘.’;‎ ‎ *dst++=len<2?’0’:*src++; ‎ ‎*dst++=len<1?‘0’:*src;‎ ‎*dst=0;‎ return resultp;‎ ‎}‎ ‎2、下列程序的功能是实现向head指向的链表中插入新结点s使之仍然有序。链表已按id值升序排序。‎ ‎#include‎ ‎#include‎ 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( p!=NULL&&id>p->id )‎ ‎ { q=p;‎ ‎ p=p->next;‎ ‎ }‎ ‎ s=(Node*)malloc(sizeof(Node));‎ ‎ s->id=id;‎ ‎ s->name=str;‎ ‎ s->next=p; ‎ ‎ q->next=s; ‎ ‎}‎ main()‎ ‎{ /*省略创建链表head的代码*/‎ Innode(head,3,“Jone”); /*参数为若插入的数据*/‎ ‎}‎ ‎3、下列程序采用快速排序算法对任意输入的10个整数进行排序。快速排序算法是一种经典的排序方法,它是冒泡排序算法的改进。该算法的主要思想是在待排序的n个数据中取第一个数据作为基准值,将所有的数据分为两组,使得第一组中各数据值均小于或等于基准值,第二组中各数据值均大于基准值,这便完成了第一趟排序,再分别对第一组和第二组重复上述方法,直到每组只有一个数据为止。‎ ‎#include‎ void qusort(int s[],int start,int end)‎ ‎{ int i,j;‎ i=start; /*将每组首个元素赋给i*/‎ j=end; /*将每组末尾元素赋给j*/‎ s[0]=s[start]; /*设置基准值*/‎ while(i=s[0] ) ‎ ‎ j--; /*位置左移*/‎ ‎ if(i‎ L2 #include‎ L3 #define TRUE 1‎ L4 #define FALSE 0‎ L5 int find_string(char** string,char value)‎ L6 { char* cur_str;‎ L7 if(*string==NULL)‎ L8 return FALSE;‎ L9 while((cur_str=*strings)!=NULL) while((cur_str=*strings++)!=NULL)‎ L10 { while(cur_str!= ‘’) { while(*cur_str!= ‘’)‎ L11 if(*cur_str++==value)‎ L12 return TRUE;‎ L13 }‎ L14 return FALSE;‎ L15 }‎ 五、程序设计题 ‎1、一串数码是否构成合法的信用卡号,可以通过CheckCard算法来验证。‎ CheckCard算法验证的过程如下:‎ ‎①卡号的长度必须是16位。‎ ‎②从卡号最后一位数字开始,将奇数位数字求和。‎ ‎③从卡号最后一位数开始,将偶数位数字乘以2(如果乘积为两位数,则减9),再求和。‎ ‎④将②和③所得的和值相加,当结果能被10整除时,则校验通过。‎ 例如,卡号是5432123456788881‎ 奇数位和等于35‎ 偶数位乘以2(乘积为两位数的减去9)的结果:1 6 2 6 1 5 7 7,求和等于35。‎ ‎35+35=70可以被10整除,校验通过。‎ 编写函数实现CheckCard算法,判断输入的卡号是否能通过验证,通过则显示“成功”,否则显示“失败”。‎ ‎2、随着信息化进程的不断推进,数据的安全性越来越受到人们的重视,数据加密技术是保证数据安全的重要手段。编程实现对C盘根目录下名为“new.dat”文件的数据进行加密,加密方式是将“new.dat”文件中每个字符与字符A进行异或运算,运算后的加密数据存储到“new.dat”文件中。‎ ‎2012年真题 一、单选题 ‎1、以下正确的C语言自定义标识符是 C 。‎ A、int B、a.3 C、_7c D、5d_‎ ‎2、已知i=3,执行j=i++后,i和j的值分别为 B 。‎ A、4 2 B、 4 3 C、3 3 D、3 2‎ ‎3、C语言中,以下语句能跳过循环体中未执行的语句,接着执行本循环下一次迭代的语句是 D 。‎ A、空语句 B、break语句 C、return 语句 D、continue语句 二、填空题 ‎1、C语言中,文件操作fopen函数的原型为FILE *fopen(char *filename,char *mode);用于打开一个指定文件,若成功则返回一个与之关联的流,否则返回 NULL ;代码片段FILE *fp=fopen(“c:test.dat”,”a”)的含义是以 追加 的方式打开路径”c:test.dat”对应的文件,当访问的文件是二进制文件时,还需要在字符串”a”后增加一个字符 b ,以上代码片段对应的关闭文件的C语言代码是 fclose(fp); 。 ‎ 三、综合应用题 ‎1、30人参观博物馆共花50美元,其中成年男子门票为3美元/人,成年女子2美元/人,小孩1美元/人。编程输出成年男子、成年女子和小孩人数的所有组合。‎ 题目分析如下:‎ 设x,y,z分别代表成年男子、成年女子和小孩人数。可得以下方程:‎ x+y+z=30 ⑴‎ ‎3x+2y+z=50 ⑵‎ 用程序求此不定方程的非负整数解,可先通过⑵-⑴式得:‎ ‎2x+y=20 ⑶‎ 由⑶式可知,x变化范围是 [0,10] 。‎ 根据以上分析编写程序如下:‎ ‎#include‎ main( )‎ ‎{ int x,y,z;‎ ‎ printf(“Men Women Children ”);‎ ‎ for(x=0; x<=10 ; x++)‎ ‎ { y=20-2*x ;‎ ‎ z=30-x-y ;‎ ‎ if(3*x+2*y+z==50)‎ ‎ printf(“%d %d %d ”,x,y,z);‎ ‎}‎ ‎}‎ 四、程序分析题 ‎1、#include‎ ‎ main( )‎ ‎ { int a=3,b=4;‎ ‎ a%=b+=a+=a+b;‎ ‎ printf(“%d,%d”,a,b);‎ ‎}‎ ‎2、#include‎ ‎ 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:‎ ‎10,14‎ ‎46‎ ‎ switch(z==5)‎ ‎ { case 0:printf(“3”);break;‎ ‎ case 1:printf(“4”);break;‎ ‎ default:printf(“5”);break;‎ ‎ }‎ ‎ default:printf(“6”);‎ ‎ }‎ ‎}‎ ‎3、#include‎ ‎ main( )‎ ‎ { int a=8,y=0;‎ ‎ do ‎ { a+=2;‎ ‎ y+=a;‎ ‎ if(y>30) break;‎ ‎ }while(a=10);‎ ‎ printf(“a=%d y=%d ”,a,y);‎ ‎}‎ ‎4、#include‎ ‎ 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 ”,1<‎ ‎ main( )‎ ‎ { char ch[2][5]={“1981”,”0921”},*p[2];‎ int i,j,s=0;‎ a=12 y=34‎ ‎4‎ ‎9191‎ for(i=0;i<2;i++)‎ ‎ p[i]=ch[i];‎ for(i=0;i<2;i++)‎ ‎ for(j=1;j<=3;j+=2)‎ ‎ s=10*s+p[i][j]-‘0’;‎ printf(“%d”,s);‎ ‎}‎ 五、程序填空题 ‎1、下面程序输出x,y,z三个数中的最大值。‎ ‎ #include‎ ‎ main( )‎ ‎ { int x=3,y=7,z=6;‎ ‎ int a,b;‎ a=x‎ ‎ main( )‎ ‎ { char cx,pre=’’;‎ ‎ while( (cx=getchar( )) !=’ ’)‎ ‎ { if(cx!=’ ‘)‎ ‎ if(cx>=’a’&&cx<=’z’)‎ ‎ putchar(cx-32);‎ ‎ else if(cx<=’Z’&&cx>=’A’)‎ ‎ putchar(cx+32) ;‎ ‎ else putchar(cx);‎ ‎ else if(pre!=’ ‘)‎ ‎ putchar(cx);‎ ‎ pre=cx ;‎ ‎ }‎ ‎ }‎ ‎3、Merge函数用于将两个升序的链表head1和head2合并成一个链表,并保持合并后链表依然升序。排序的依据为结构体类型Node中的data成员,合并中不得删除节点。‎ ‎ typedef struct Node ‎ { int data;‎ ‎ struct Node *next;‎ ‎ }Node;‎ Node *Merge(Node *head1,Node *head2)‎ ‎{ Node *head=NULL,*p1=NULL,*p2=NULL,*pcurrent;‎ ‎ if(head1==NULL)‎ ‎ return head2;‎ ‎ if(head2==NULL)‎ ‎ return head1;‎ ‎ if(head1->datadata)‎ ‎ { head=head1;‎ ‎ p1=head->next ;‎ ‎ p2=head2;‎ ‎ }‎ ‎ else ‎{ head=head2;‎ ‎ p2=head->next ;‎ ‎ p1=head1;‎ ‎ }‎ ‎ pcurrent=head;‎ ‎ while(p1!=NULL&&p2!=NULL)‎ ‎ { if(p1->data<=p2->data)‎ ‎ { pcurrent->next=p1;‎ ‎ pcurrent=p1; ‎ ‎ p1=p1->next;‎ ‎ }‎ ‎ else ‎ ‎ { pcurrent->next=p2;‎ ‎ pcurrent=p2; ‎ ‎ p2=p2->next;‎ ‎ }‎ ‎}‎ if(p1!=NULL)‎ ‎ pcurrent->next=p1; ‎ if(p2!=NULL)‎ ‎ pcurrent->next=p2;‎ return head;‎ ‎} ‎ 六、程序改错题,不得增行或删行。‎ ‎1、以下程序用于输入两个学生的姓名和成绩,然后输出这两个学生的平均成绩,运行结果如图所示。程序中存在三处错误,请标出并改正。‎ input scors of student1‎ name:Lily score:05‎ input scors of student2‎ name:Lucy score:09‎ avg score is 07.0‎ ‎ ‎ ‎#include‎ define N2 #define N 2‎ struct Student ‎{ char name[10];‎ ‎ float score;‎ ‎};‎ main( )‎ ‎{ struct Student stu[N];‎ ‎ int i=0;‎ ‎ float rels=0;‎ for(; i‎ ‎ main( )‎ ‎ { char *array[]={“aa”,”bb”,”cc”,”dd”};‎ ‎ char (**pt)[ ]; char **pt;‎ ‎ int j;‎ ‎ pt=array+3;‎ ‎ for(j=3;j>=0;j--)‎ ‎ printf(“%s “,*(pt)[j]); printf(“%s “,pt[j-3]);‎ ‎ } ‎ ‎2013年真题 一、单选题 ‎1、下列选项中正确的C语言变量定义是 B 。‎ A、char a1=’A’,a2=A; B、unsigned long a=1000;‎ C、float a1=a2=10.0; D、double a=0.618,a=3.14‎ ‎2、假设有float a=5,b=a+5/2;则执行语句printf(“%f”,b);的输出结果为 D 。‎ ‎ A、7.500000 B、7 C、5.000000 D、7.000000‎ ‎3、有输入语句:scanf(“a=%d,b=%d”,&a,&b);为了使变量a的值为1,b的值为2,正确的数据输入方式是 C 。‎ ‎ A、12 B、1,2 C、a=1,b=2 D、a=1 b=2‎ 二、填空题 ‎1、在C语言中,可以使用函数 strlen( ) 来获取字符串的长度,使用函数 strcmp( ) 来对两个字符串进行比较。使用宏定义命令 #define 来定义宏,使用文件包含命令 #include 实现“文件包含”操作。‎ 三、综合应用题 ‎1、民警小张在某个案件中带回4个嫌疑人A,B,C,D,其中有一位是小偷,现在小张分别对4个嫌疑人进行询问:‎ A说:我不是罪犯;B说:C是罪犯;C说:D是罪犯;D说:我不是罪犯而且B也不是罪犯。‎ 已知其中3个人说的是真话,1人说的是假话,请根据以上信息帮助小张找出罪犯。‎ ‎#include‎ ‎#include‎ main( )‎ ‎{ int i;‎ ‎ char who=’A’;‎ ‎ int isFound=0;‎ ‎ for(i=0; i<4 ;i++)‎ ‎ { int sum=0;‎ who= ‘A”+i ;‎ if(who!=’A’)sum++;‎ if(who==’C’)sum++;‎ if(who==’D’)sum++;‎ if( who!=’D’&&who!=’B’ )sum++;‎ if( sum==3 )‎ ‎ { printf(“罪犯是%c ”,who);‎ ‎ isFound=1;‎ ‎ }‎ ‎}‎ ‎ if(!isFound)‎ ‎ printf(“没有找到符合条件的人 ”);‎ ‎}‎ 四、程序分析题 ‎1、 #include‎ main( )‎ ‎36687‎ ‎1‎ ‎{ int a=7,b=3,c=2;‎ ‎ int d=(a>b!=c);‎ ‎ printf(“%d”,d);‎ ‎}‎ ‎2、当以下程序输入为125时,运行结果是 ‎#include‎ main( )‎ ‎{ int c;‎ ‎ while((c=getchar( ))!=’ ’)‎ ‎ switch(c-‘2’)‎ ‎ { case 0:‎ ‎ case 1: putchar(c+4);‎ ‎ case 2: putchar(c+4);break;‎ ‎ case 3: putchar(c+3);‎ ‎ default: putchar(c+2);break;‎ ‎}‎ ‎}‎ ‎3、#include‎ ‎ static int f=1;‎ ‎ int func(int n)‎ ‎ { f+=n;‎ return f;‎ ‎ }‎ ‎36‎ ‎ main( )‎ ‎ { int i;‎ for(i=2;i<=3;i++)‎ ‎ printf(“%d”,func(i));‎ ‎ }‎ ‎4、#include‎ ‎ main( )‎ ‎ { int a[9]={1,2,3,4,5,6,7,8};‎ int *p=a;‎ ‎576‎ ‎20‎ int sum=0;‎ for( ;p‎ ‎ void f(int *q)‎ ‎ { int i;‎ for(i=0;i<3;i++)‎ ‎ (*q)--;‎ ‎ }‎ ‎ main( )‎ ‎ { int a[5]={8,7,6},i;‎ ‎ f(a);‎ ‎ for(i=0;i<3;i++)‎ ‎ printf(“%d”,a[i]);‎ ‎ }‎ 五、程序填空题 ‎1、下面程序从文本文件test.txt逐个读入字符,并显示在屏幕上。‎ ‎ #include‎ ‎ main()‎ ‎ { FILE*fp;‎ ‎ char ch,*filename=”tdst.txt))‎ ‎ if((fp= fopen (filename,”r”))==NULL)‎ ‎ { printf(“cannot open file ”);‎ ‎ exit(0);‎ ‎ }‎ ‎ while(! feof (fp))‎ ‎ { ch=fgetc(fp);‎ ‎ putchar(ch);‎ ‎ }‎ ‎ fclose(fp);‎ ‎ }‎ ‎2、以下程序的功能是:读入一行字符,以回车结束,按输入时的逆序使用单链表进行存储,先输入的位于链表尾,然后再遍历输出链表。‎ struct node ‎{ char value;‎ ‎ struct node *link;‎ ‎};‎ main( )‎ ‎{ struct node *top,*p;‎ ‎ char c;‎ ‎ top=NULL;‎ ‎ while((c=getchar( )) !=’ ’ )‎ ‎ { p=(struct node *)malloc(sizeof(struct node));‎ ‎ p->value=c;‎ ‎ p->link=top;‎ ‎ top=p ;‎ ‎}‎ p=top;‎ while(p)‎ ‎{ putchar( p->value );‎ ‎ p=p->link;‎ ‎}‎ ‎} ‎ ‎3、折半查找也称为二分查找,适用于有序数组。已知数组按照升序排列。‎ ‎#include‎ int main( )‎ ‎{ int key=0;‎ int data[10]={1,3,5,7,8,9,13,18,22,28};‎ int ret;‎ printf(“请输入要查找的数:”);‎ scanf(“%d”,&key);‎ ret=BinarySearch(key,data);‎ if(ret>=0)‎ printf(“ %d 是数组中的第%d个数 ”,key,ret+1);‎ else printf(“ %d在数组中未找到! ”,key);‎ system(“pause”);‎ return 0;‎ ‎}‎ int BinarySearch(int key,int data[ ])‎ ‎{ int low=0,high=9,middle;‎ ‎ while( low<=high )‎ ‎ { middle= (low+high)/2 ;‎ ‎ if( key==data[middle] )‎ ‎ return middle;‎ ‎ else if(key‎ ‎#define M 2‎ ‎#define N 2‎ ‎#define K 2‎ int main( )‎ ‎{ int a[M][K]={1,-1,0,2};‎ ‎ int b[K][N]={4,0,2,5};‎ ‎ int c[M][N}; int c[M][N}={0}; ‎ ‎ int i,j,l;‎ for(i=0;i‎ ‎#define MAX 3‎ struct PLAYER typedef struct PLAYER ‎{ char *name;‎ ‎ float score;‎ ‎}Player;‎ int main( )‎ ‎{ Player players[]={{“丁一”,90.3},{”陈二”,95.8},{“张三”,89.6}};‎ ‎ Player * player;‎ ‎ Player topplayer=players[0];‎ ‎ for(player=players;playertopplayer.score) if(player->score>topplayer.score) ‎ ‎ topplayer=player; topplayer=*player; ‎ ‎ printf(”Top Player is %s,score is %6.2f”,topplayer.name,topplayer.score);‎ ‎ return 0;‎ ‎}‎ ‎2014年真题 一、单选题 ‎1、算法的复杂度主要包括算法的时间复杂度和空间复杂度,算法的时间复杂度是指 D ‎ A、算法程序中的指令数 B、算法程序的长度 C、算法程序所占的存储空间 D、算法执行过程中所需要的基本运算次数 ‎2、C语言程序的基本单位是 B ‎ A、字节 B、函数 C、语句 D、字符 ‎3、若变量a,i已正确定义,且i已正确赋值,合法的C语言语句是 C ‎ A、a=int (i); B、a==0 C、++i; D、a=a++=2;‎ 二、填空题 ‎1、在C语言中,文件的打开方式决定对该文件所能进行的操作权限,文件打开方式参数 “r” 以只读方式打开一个文本文件, “w” 以写方式打开一个文本文件, “r+” 以读写方式打开一个文本文件, “a” 以在文件后面添加数据方式打开文本文件。‎ 三、综合应用题 ‎1、输入三角形的三边a、b、c,判断a、b、c能否构成三角形,如果能够构成三角形则判断为何种类型的三角形:等腰三角形、等边三角形、直角三角形、等腰直角三角形、一般三角形。‎ ‎#include‎ ‎#include‎ main( )‎ ‎{ float a,b,c;‎ ‎ printf(“请输入三角形边长 ”);‎ ‎ scanf(“%f%f%f”,&a,&b,&c);‎ ‎ if( a+b<=c||a+c<=b||b+c<=a )‎ ‎ printf(“不能构成三角形 ”);‎ ‎ else if( a*a+b*b==c*c||a*a+c*c==b*b||b*b+c*c==a*a )‎ ‎ if(a==b||b==c||a==c)‎ ‎ printf(“等腰直角三角形 ”);‎ ‎ else printf(“直角三角形 ”);‎ ‎ else if( a==b&&a==c )‎ ‎ printf(“等边三角形 ”);‎ ‎ else if( a==b||b==c||c==a )‎ ‎ printf(“等腰三角形 ”);‎ ‎ else printf(“一般三角形 ” );‎ ‎}‎ 四、程序分析题 ‎1、#include‎ ‎ main( )‎ ‎1,2,2‎ ‎ { int i=0,j=1,z=2;‎ if((j++||z++)&&i++);‎ ‎ printf(“%d,%d,%d ”,i,j,z);‎ ‎ }‎ ‎2、#include‎ ‎ main( )‎ ‎ { int n=’b’;‎ switch(++n) {‎ ‎ default:printf(“error”);break;‎ ‎ case ‘a’: case ‘A’:‎ j=6 i=5‎ googluck ‎ case ‘b’: case ‘B’:printf(“pass”);break;‎ case ‘c’: case ‘C’: printf(“good”);‎ case ‘d’: case ‘D’: printf(“luck”);‎ ‎ }‎ ‎}‎ ‎3、#include‎ ‎ main( )‎ ‎ { int i,j;‎ for(i=0;i<5;i++)‎ ‎ for(j=1;j<10;j++)‎ ‎ { if(j==6) break;‎ ‎ if(i<3) continue;‎ ‎}‎ ‎ printf(“j=%d ”,j);‎ printf(“i=%d ”,i);‎ ‎}‎ ‎4、#include‎ ‎ int f(int x[ ],int n)‎ ‎ { int i,r=1;‎ for(i=0;i<=n;i++)‎ ‎ r=r*x[i];‎ return r;‎ ‎42‎ ‎}‎ main( )‎ ‎{ int s,a[ ]={2,7,3,1,5,4,6,8};‎ ‎ s=f(a,3);‎ ‎ printf(“%d ”,s);‎ ‎}‎ ‎5、#include‎ ‎ int *f(int*x,int *y)‎ ‎ { if(*x<*y)‎ ‎ return x;‎ else return y;‎ ‎ }‎ ‎6,7,6‎ ‎ main( )‎ ‎ { int a=6,b=7,*p,*q,*r;‎ p=&a,q=&b;‎ r=f(p,q);‎ printf(“%d,%d,%d ”,*p,*q,*r);‎ ‎}‎ 五、程序填空题 ‎1、函数sum(n)使用递归完成表达式的运算:sum(n)=1*2+2*3+……+n*(n+1)‎ ‎ int sum(int n)‎ ‎ { if(n==1)‎ ‎ return 2 ;‎ else ‎ ‎ return sum(n-1)+n*(n+1) ;‎ ‎ }‎ ‎2、函数insert(char str1[ ],char str2[ ],int idx)实现在字符串str1中的第idx个字符后插入字符串str2,如下程序的输出为:abkkkcd ‎#include‎ void insert(char str1[ ],char str2[ ],int idx)‎ ‎{ char*p,*q;‎ ‎ int i=0;‎ ‎ p=str1;‎ for(i=0;i=p)‎ ‎ { *(q+1)=*q;‎ ‎ q-- ;‎ ‎ }‎ ‎ q++;‎ ‎ *q=*str2;‎ ‎ str2++;‎ ‎ p++ ;‎ ‎}‎ ‎}‎ main( )‎ ‎{ char a[10]=”abcd”;‎ ‎ char b[5]=”kkk”;‎ insert(a,b,2);‎ ‎ printf(“%s”,a);‎ ‎} ‎ ‎3、以字符串的形式输入一个浮点数的字符串,通过程序转换成对应的浮点数,需要考虑输入数据的正负。‎ ‎#include‎ ‎#define N 12‎ main( )‎ ‎{ char scr[N],ch;‎ ‎ int i,count=0,j;‎ ‎ int ispositive=1,isbefore=1;/*ispositive用于标识正负,isbefore用于标识小数点前后*/‎ ‎ double result=0;‎ ‎ gets(src);‎ ‎ for(i=0;i=’0’&&ch<=’9’)‎ ‎ { if(isbefore)‎ ‎ result=result*10+ch-‘0’ ;‎ ‎ else { float temp=1;‎ ‎ count++ ;‎ ‎ for(j=0;j‎ void fun(char s[ ])‎ ‎{ int i=0,j=0;‎ ‎ for(;s[i]!=’’;i++)‎ if(s[i]>=’0’&s[i]<=’9’) if(s[i]>=’0’&&s[i]<=’9’) ‎ ‎ {s[j]=s[i];‎ ‎ j--; j++; ‎ ‎ }‎ ‎ s[j]=’’;‎ ‎}‎ ‎2、函数createlist用于从键盘读入整数,并根据输入的顺序建立链表,当输入-1时结束链表创建,其中-1不存入链表,头节点不存储数据。在主函数中调用函数creatlist创建链表,随后遍历链表输出数据。以下程序只允许修改三行。‎ ‎#include #include‎ struct Node ‎{ int data;‎ ‎ struct Node *next;‎ ‎};‎ struct Node *creatlist( )‎ ‎{ struct Node p,q,head; { struct Node *p,*q,*head;‎ ‎ int a;‎ ‎ head=(struct Node *)malloc(sizeof(struct Node));‎ ‎ p=q=head;‎ ‎ printf(“input an interger number,enter -1 to end: ”);‎ ‎ scanf(“%d”,&a);‎ ‎ while(a!=-1)‎ ‎ { p=(struct Node *)malloc(sizeof(struct Node));‎ ‎ p->data=a;‎ ‎ q->next=p;‎ ‎ q=p; ‎ p->next=NULL;‎ ‎ scanf(“%d”,&a);‎ ‎}‎ return head;‎ ‎}‎ main( )‎ ‎{ struct Node *head,*p;‎ ‎ head=creatlist( );‎ ‎ p=head->next;‎ ‎ while(p)‎ ‎ { printf(“%d ”,p->data);‎ p->next=p; p =p->next;‎ ‎ }‎ ‎}‎