a[j-1]=a[j];a[j+1]=a[j];
elsecontinue;elsebreak;
a[j+1]=a[0];}
for(i=1;i<11;i++)
printf(“%d”,a[i]);
}
四、程序设计题
1、有一辆在高速公路上行驶的汽车,司机在某一时刻看到里程表显示的数值为95859公里(95859为回文数,回文数是指正读反读均一样的数),7小时后,里程表上又出现了一个回文数。
编程求出此回文数和汽车时速(注:
高速公路限速60公里以上,汽车的里程表为5位数)
2、弦数是指平方值等于某两个正整数平方之和的正整数,如:
32+42=52,因此5为弦数。
编程输出10到100之内的所有弦数及弦数的数量。
2009年真题
一、程序分析题
1、#include<>
48
pho
5,125
D,-69
14
main()
{structstu
{charname[10];
intage,sex;
};
printf(“%d”,sizeof(structstu));
}
2、#include<>
main()
{intx=68;
printf(“%c,%d\n”,x,~x);
}
3、#include<>
#include<>
main()
{doublex=;
inta=(int)floor(x);
intb=(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(intarr[])
{inti=0;
for(;arr[i]<=10;i+=2)
printf(“%d”,arr[i]);
}
main()
{intarr[]={2,4,6,8,10,12};
f(arr+1);
}
二、程序填空题
1、以下程序的功能是:
从3个红球队、6个白球、5个蓝球中任意取出8个球,且其上至少有一个白球,输出所有可能的方案。
#include<>
main()
{inti,j,k;
printf(“\nRedWhiteBlue\n”);
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\n”,i,j,k);
}
}
2、以下程序的功能是:
求100以内最大的一对孪生素数之和,孪生素数是指两个素数之差为2。
#include<>
#include<>
intisPrime(inti)
{intj,r=0,k=sqrt(i);
for(j=2;j<=k;j++)
if(i%j==0)break;
if(j>k)r=1;
returnr;
}
main()
{inti,sum=0;
for(i=100;i>=5;i--)
if(isPrime(i)&&isPrime(i-2))
{sum=i+i-2;
break;
}
printf(“%d\n”,sum);
}
3、以下程序的功能是:
输入某公司50名职员的工号、姓名和地址并存入名为””的磁盘文件。
structEmployee
{intempid;
charempname[10];
charempadd[30];
}emp[50];
voidsave()
{FILE*fp;
inti;
if((fp=fopen(“”,”wb”))==NULL)
{printf(“cannotopenfile\n”);return;}
for(i=0;i<50;i++)
if(fwrite(emp+i,sizeof(structEmployee),1,fp)!
=1)
printf(“filewriteerror\n”);
}
main()
{inti;
for(i=0;i<50;i++)
scanf(“%d,%s,%s”,&emp[i].empid,emp[i].empname,emp[i].empadd);
save();
}
三、程序改错题,不得增行或删行。
1、以下程序的功能是:
从一个整数队列中找出值最大的数,若有多个则取最先得到的那一个。
程序有两处错误,请标出并改正。
#include<>
int*findmax(inta[],intn)
{inti,j,max;
for(i=1,j=0,max=a[0];iif(a[i]>max)
{j=i;
max=a[i];
}
return*(a+j);returna+j;
}
main()
{inti,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<>
voidfun(chart[])
{charc;
inti,j;
for(i=0;ifor(j=i+1;jif(t[i]t[j])
{c=t[j];
t[j]=t[i++];t[j]=t[i];
t[i]=c;
}
}
main()
{chars[81];
gets(s);
printf(\nBeforesorting:
\n%s”,s);
fun(s);
printf(\naftersorting:
\n%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、_124B、124abcC、sum124D、a_124
2、若有如图1所示存储结构,且变量定义为structnode{intdata;structnode*next;}*p,*q,*r;若要实现如图2所示的存储结构,可选用的赋值语句是D。
A、p=r;B、p=q->nextC、p->next=q;D、p->next=q->next;
二、程序分析题
1、#include<>
main()
{doublex,y;
printf(“%.2f”,(x=5,y=x+3/2));
}
2、#include<>
#defineCUBE(x)(x*x*x)
30
100,100
512
main()
{intn=5;
ints=CUBE(++n);
printf(“%d”,s);
}
3、#include<>
voidfun(inta,int*b)
{a=*b*2;
*b=a*5;
}
main()
{intx=10,*y;
y=&x;
fun(x,y);
printf(“%d,%d”,x,*y);
}
4、#include<>
voidfun(int*a)
{*a=*(a-1)+*(a+1);}
main()
{inti=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)
{intn=strlen(str)-1;
if(n<1)return0;
while(n>0)
{if(*(str+n)!
=’’)
{*(str+n+1)=’\0’;
break;
}
else
n--;
}
returnstr;
}
2、某超市推行会员优惠购物,其中VIP会员八八折,金牌会员九折,银牌会员九三折,普通会员九六折,非会员不打折。
以下程序实现了超市购物的结算,其中非会员、普通会员、银牌会员、金牌会员、VIP会员分别用0,1,2,3,4表示。
#include<>
doublecompute(intn,intgrade)
{intamount,i;
doublesum,price,discount[5]={,,,,};
sum=;
for(i=0;i{scanf(“%lf%d”,&price,&amount);/*price:
商品单价,amount:
商品数量*/
sum+=price*amount;
}
returnsum*discount[grade];
}
main()
{intn,grade;/*n:
商品种数,grade:
会员等级*/
scanf(“%d%d”,&n,&grade);
printf(“%.2lf\n”,compute(n,grade));
}
3、设文件中存放着学生的基本信息,基本信息包括学号、姓名、专业等信息。
下列程序的功能是:
输入要读取的学生人数,利用malloc动态分配内存来存储从文件中读取的学生信息,并输出读取的学生的学号,姓名,专业。
#include<>
#include<>
structstudent
{longintnum;/*学号*/
charname[20];/*姓名*/
charmajor[25];/*专业*/
};
FILE*fp;
main()
{structstudentst,*pst;
inti,num,realnum;
printf(“请输入读取的学生人数:
”);
scanf(“%d”,&num);
pst=(structstudent*)malloc(num*sizeof(structstudent));
if(!
pst)return;
fp=fopen(“”,”rb”);
if(NULL==fp)
{free(pst);return;}
realnum=0;
printf(“%s\t%s\t%s\t%s\n”,”number”,”number”,”name”,”major”);
/*文件包含的学生人数可能少于输入的人数*/
for(i=0;ifeof(fp);i++)
{fread(pst+i,sizeof(structstudent),1,fp);
realnum++;
st=pst[i];
printf(“%d\t%ld\t%s\t%s\n