- 2021-05-14 发布 |
- 37.5 KB |
- 33页
申明敬告: 本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
文档介绍
湖南省历界对口高考C语言真题答案
历界高考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