2011年技能考试试卷C语言(真题)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一部分【程序填空】
第一套:
题目:函数gcd()计算整型数组a中相邻两元素的最大公约数,最小公倍数,其中最大公约数存入数组b中,最小公倍数存入数组c中。
---------------------------------------------------------
注意:请勿改动主函数main()中的其他内容。
---------------------------------------------------------
#includ e<stdio.h>
#includ e<conio.h>
voidgcd(inta[],intn,intb[],intc[]){
inti,x,y,z;
/***********SPACE***********/
for(i=0;i<【?】;i++){
x=a[i];
y=a[i+1];
whil e(z=x%y){
x=y;y=z;
}
页脚内容1
b[i]=y;
/***********SPACE***********/
c[i]=a[i]*a[i+1]/【?】;
}
}
intmain(){
inta[5]={8,12,5,7,14};
intb[4],c[4];
inti;
gcd(a,5,b,c);
for(i=0;i<5;i++)
printf("%d\t",a[i]);
printf("\n");
for(i=0;i<4;i++)
printf("%d\t",b[i]);
printf("\n");
for(i=0;i<4;i++)
页脚内容2
printf("%d\t",c[i]);
printf("\n");
getch();
return0;
}
第二套
题目:函数reverse()对字符串str进行逆序。
#includ e<stdio.h>
#includ e<string.h>
#includ e<conio.h>
voidreverse(charstr[]){
intlen,j;
charc;
/***********SPACE***********/
l en=【?】(str);
/***********SPACE***********/
for(j=l en-1;【?】;j--){
页脚内容3
c=str[j];
str[j]=str[l en-1-j];
str[l en-1-j]=c;
}
}
intmain(){
chara[80];
printf("Pl easeenterastring:");
gets(a);
reverse(a);
printf("Theinversedstringis:");
puts(a);
getch();
return0;
}
第三套
题目:对主函数main()中数组a进行处理:如果相邻元素相同则保留一个。
例如对数组a处理后,
页脚内容4
它的前11个元素为{-5,7,-4,25,0,2,4,16,8,5,20}。
#includ e<stdio.h>
#includ e<conio.h>
intmain(){
inta[20]={-5,-5,7,-4,-4,25,25,0,0,0,2,4,16,16,8,5,5,5,5,20};
inti,prev,next;
prev=0;
next=1;
whil e(next<20){
/***********SPACE***********/
if(a[prev]!=【?】)
a[++prev]=a[next];
next++;
}
/***********SPACE***********/
for(i=0;i【?】prev;i++)
printf("%d",a[i]);
页脚内容5
printf("\n");
getch();
return0;
}
第四套
题目:程序输出由0~3四个数字组成的符合下列条件的4位整数:
1.每个4位整数中,0~3四个数字只能出现一次;
2.百位数不能为3,十位数不能为2。
#includ e<stdio.h>
#includ e<conio.h>
intmain(){
intg,s,b,q;
intnum=0;
for(b=0;b<4;b++){
if(b==3)continue;
for(s=0;s<4;s++){
if((b==s)||(s==2))continue;
页脚内容6
/***********SPACE***********/
for(q=【?】;q<4;q++){
if((q==b)||(q==s))continue;
/***********SPACE***********/
g=【?】-q-b-s;
printf("%d\n",q*1000+b*100+s*10+g);
num++;
}
}
}
printf("%d\n",num);
getch();
return0;
}
第五套
题目:在一维数组a中找出最大,最小元素,并将最大元素和数组最后一个元素交换,最小元素和数组首元素交换。
页脚内容7
#includ e<stdio.h>
#includ e<conio.h>
intmain(){
inta[10]={15,8,12,6,10,1,4,5,9,-3};
inti,t,max_ind ex,min_ind ex;
max_ind ex=min_ind ex=0;
for(i=1;i<10;i++){
if(a[i]>a[max_ind ex])
max_ind ex=i;
if(a[i]<a[min_ind ex])
min_ind ex=i;
}
t=a[0];a[0]=a[min_ind ex];a[min_ind ex]=t;
/***********SPACE***********/
if(max_ind ex==【?】){
t=a[min_ind ex];a[min_ind ex]=a[9];a[9]=t;
}
页脚内容8
else{
/***********SPACE***********/
【?】;
}
for(i=0;i<10;i++)
printf("%d\t",a[i]);
printf("\n");
getch();
return0;
}
======================================================== =========
第二部分【程序改错】
第一套
题目:主函数main()调用函数change()将二维数组strrow中的字符按列存入一维数组strcol中。
下面给定的程序存在错误,请改正。
#includ e<stdio.h>
#includ e<conio.h>
页脚内容9
/***********FOUND***********/
void change(chart[5][],chars[]){
inti,j;
for(j=0;j<5;j++)
for(i=0;i<3;i++)
/***********FOUND***********/
s[3*j+i]=t[j][i];
/***********FOUND***********/
s[j]=0;
}
intmain(){
charstrrow[][5]={{'C','r','r','','s'},{'','o','a','T','t'},{'P','g','m','e','!'}}; charstrcol[16];
change(strrow,strcol);
puts(strcol);
getch();
return0;
页脚内容10
}
第二套
题目:在主函数中main()中输入年、月、日,然后计算该天是这一年的第几天。
其中函数LeapYear()是判断某年是否为闰年。
下面给定的程序存在错误,请改正。
#includ e<stdio.h>
#includ e<conio.h>
intLeapYear(intyear){
/***********FOUND***********/
return((year%4==0&&year%100)&&(year%400==0));
}
intmain(){
intmon_days[2][11]={{31,28,31,30,31,30,31,31,30,31,30},{31,29,31,30,31,30,31,31,30,31,30}};
intyear,mon,day,days;
inti;
scanf("%d%d%d",&year,&mon,&day);
days=day;
/***********FOUND***********/
页脚内容11
for(i=0;i<mon-2;i++)
/***********FOUND***********/
days=mon_days[LeapYear(year)][i];
printf("%d\n",days);
getch();
return0;
}
第三套
题目:主函数main()调用函数MyStrcat()将字符串src连接到字符串dstStr后面。
下面给定的程序存在错误,请改正。
#includ e<stdio.h>
#includ e<conio.h>
voidMyStrcat(chardstStr[],charsrcStr[]){
inti,j;
i=j=0;
/***********FOUND***********/
whil e(dstStr[i++])i++;
页脚内容12
i-=1;
whil e(srcStr[j]){
dstStr[i]=srcStr[j];
i++;j++;
}
/***********FOUND***********/
srcStr[i]=0;
}
intmain(){
chardst[100]="Thisis";
charsrc[20]="CTest!";
/***********FOUND***********/
MyStrcat(dst[100],src[20]);
puts(dst);
getch();
return0;
}
页脚内容13
第四套
题目:程序去除主函数main()中字符串str中的非字母字符。
函数IsAlpha()的功能是判断字符c 是否为字母。
#includ e<stdio.h>
#includ e<conio.h>
intIsAlpha(charc){
/***********FOUND***********/
return((c>='a'&&c<='z')&&(c>='A'&&c<='Z'));
}
intmain(){
charstr[]={"/**OneWorl d,OneDream!**/"};
intprev,next;
prev=next=0;
whil e(str[next]){
if(IsAlpha(str[next])){
/***********FOUND***********/
str[next]=str[prev];
页脚内容14
prev++;
}
next++;
}
/***********FOUND***********/
str[next]=0;
puts(str);
getch();
return0;
}
第五套
题目:主函数main()统计字符串str中的各字母(不区分大小写)及其他字符出现的次数,并显示统计结果(次数为0,则不显示)。
下面给定的程序存在错误,请改正。
#includ e<stdio.h>
#includ e<conio.h>
#includ e<ctype.h>
intmain(){
页脚内容15
charstr[]={"---JiangSuTeachersUniversityofTechnol ogy---"}; intchnum[27]={0},i=-1;
/***********FOUND***********/
whil e(str[i]){
if(isalpha(str[i]))
/***********FOUND***********/
chnum[toupper(str[i])-97]++;
else
chnum[26]++;
}
for(i=0;i<27;i++)
/***********FOUND***********/
if(chnum[i]=0)
if(i==26)
printf("otherch=%d\n",chnum[26]);
else
printf("%c(%c)=%d\n",i+65,i+97,chnum[i]);
页脚内容16
getch();
return0;
}
页脚内容17
第三部分【程序设计题】
第一套
题目:假设英文大小写字母的权值分别为:
A-E,a-e1;
F-J,f-j2;
K-O,k-o3;
P-T,p-t4;
U-Y,u-y5;
Z,z6
计算主函数main()中数组words中的各英文单词的权重(英文单词的权重为该单词各字母权值之和)。
例如:
单词"Worl d"的权重为16(W为5;o为3;r为4;l为3;d为1,5+3+4+3+1=16)。
编写程序:
1.编写函数void calculate(charw[][20],intn,intp[]),计算数组w中n个英文单词的权重,并将权重存放在数组p中。
2.编写函数voidsort(intp[],intn,charw[][20]),对数组p中n个单词的权重进行降序排序,权重所对应单词在数组w中的位置也要作相应调整。
页脚内容18
---------------------------------------------------------
注意:请勿改动主函数main()中的任何语句。
-------------------------------------------------------*/
#includ e<stdio.h>
#includ e<ctype.h>
#includ e<stdlib.h>
#includ e<conio.h>
#includ e<string.h>
void calculate(charw[][20],intn,intp[]){
/**********Program**********/
/**********End**********/
}
voidsort(intp[],intn,charw[][20]){
/**********Program**********/
/**********End**********/
}
intmain(){
页脚内容19
charwords[5][20]={{"JiangSu"},{"Teachers"},{"University"},{"of"},{"Technol ogy"}};
intvalue[5]={0};
inti;
FILE*fp;
if((fp=fopen("DATA.TXT","w"))==NULL){
printf("Fileopenerror\n");
exit(0);
}
calculate(words,5,value);
for(i=0;i<5;i++){
fprintf(fp,"%-20s%4d\n",words[i],value[i]);
printf("%-20s%4d\n",words[i],value[i]);
}
printf("\n");
fprintf(fp,"\n");
sort(value,5,words);
for(i=0;i<5;i++){
页脚内容20
fprintf(fp,"%-20s%4d\n",words[i],value[i]);
printf("%-20s%4d\n",words[i],value[i]);
}
fcl ose(fp);
getch();
return0;
}
第二套
题目:主函数main()中str_b是这样的字符串:若干个长度不等的,连续的'0'、'1'字符组成的字符子串被长度不等的'.'字符间隔。
将连续的'0'、'1'字符子串看成是二进制整数。
要求将其转换为十进制整数。
其中字符子串的首字符代表二进制数的符号位,'0'表示正数,'1'表示负数。
例如:"0111"表示7,"1111"表示-7。
编写程序:
1.编写函数intconvert(charb[],intd[]),将字符数组b中连续二进制数字字符子串转换为十进制整数,并存入整型数组d中。
函数返回十进制数的个数。
2.编写函数voidsort(intd[],intn),对数组d中n个元素进行升序排序。
#includ e<stdio.h>
#includ e<stdlib.h>
页脚内容21
#includ e<conio.h>
intconvert(charb[],intd[]){
/**********Program**********/
/**********End**********/
}
voidsort(intd[],intn){
/**********Program**********/
/**********End**********/
}
intmain(){
charstr_b[100]="...111100.01111.01100111...0111..110000.011..";
intint_d[10];
inti,k;
FILE*fp;
if((fp=fopen("DATA.TXT","w"))==NULL){
printf("Fileopenerror\n");
exit(0);
页脚内容22
}
k=convert(str_b,int_d);
for(i=0;i<k;i++){
printf("%d\t",int_d[i]);
fprintf(fp,"%d\t",int_d[i]);
}
printf("\n");
fprintf(fp,"\n");
sort(int_d,k);
for(i=0;i<k;i++){
printf("%d\t",int_d[i]);
fprintf(fp,"%d\t",int_d[i]);
}
printf("\n");
fprintf(fp,"\n");
fcl ose(fp);
getch();
页脚内容23
return0;
}
第三套
题目:主函数main()的一维数组a中元素为非0整数。
程序将负数存入数组b的左侧,正数存入数组b的右侧,并将数组b左侧的负数按升序,右侧的正数按降序重新排列。
编写程序:
1.编写函数intsplit(inta[],intb[],intlen),将数组a中l en个整数分别存放在数组b的左右两侧,其中负数存入数组b的左侧,正数存入数组b的右侧。
函数返回数组b中最后一个负数的下标。
2.编写voidsort(inta[],intl eft,intright,intord er)函数,对数组a中下标在[l eft,right]范围内的元素进行升序或降序排序。
当ord er=1时,进行降序排序,当ord er=0时,进行升序排序。
#includ e<stdio.h>
#includ e<stdlib.h>
#includ e<conio.h>
intsplit(inta[],intb[],intl en){
/**********Program**********/
/**********End**********/
}
voidsort(inta[],intleft,intright,intord er){
页脚内容24
/**********Program**********/
/**********End**********/
}
intmain(){
inta[10]={7,-2,3,14,-5,-6,5,22,-4,8},b[10];
inti,mid;
FILE*fp;
if((fp=fopen("DATA.TXT","w"))==NULL){
printf("Fileopenerror\n");
exit(0);
}
mid=split(a,b,10);
for(i=0;i<10;i++){
printf("%d\t",b[i]);
fprintf(fp,"%d\t",b[i]);
}
printf("\n");
页脚内容25
fprintf(fp,"\n");
sort(b,0,mid,0);
sort(b,mid+1,9,1);
for(i=0;i<10;i++){
printf("%d\t",b[i]);
fprintf(fp,"%d\t",b[i]);
}
printf("\n");
fprintf(fp,"\n");
fcl ose(fp);
getch();
return0;
}
第四套
题目:主函数main()中一维数组ring[9]存放数字1-9。
将ring看成是一个首尾相接的环。
将9个数分成3段,第1段为1个2位数,第2段为1个3位数,第3段为1个4位数,程序计算这3段数之和。
要求从环的第1个数开始,直到第9个数,依上述规则进行处理。
同时在这些和中寻找77的整数倍的数。
页脚内容26
例如:
从环的第一个数开始的3段数为12,345,6789,其和为7146;
从环的第二个数开始的3段数为23,456,7891,其和为8370;
.....
从环的第九个数开始的3段数为91,234,5678,其和为6003;
编写程序:
1.编写函数void calculate(intring[],intst[]),从数组ring的第1个数开始,将9个数分成3段,第1段为1个2位数,第2段为1个3位数,第3段为1个4位数,程序计算所有3段数之和。
并将所有3段数之和存入数组st中。
2.编写函数intcheck(intst[],intt77[]),在数组st中寻找77的整数倍的数,存入数组t77中,函数返回其个数。
#includ e<stdio.h>
#includ e<stdlib.h>
#includ e<conio.h>
void calculate(intring[],intst[]){
/**********Program**********/
/**********End**********/
}
页脚内容27
intcheck(intst[],intt77[]){
/**********Program**********/
/**********End**********/
}
intmain(){
intring[9]={1,2,3,4,5,6,7,8,9};
intst[9],t77[9],i,k;
FILE*fp;
if((fp=fopen("DATA.TXT","w"))==NULL){
printf("Fileopenerror\n");
exit(0);
}
calculate(ring,st);
for(i=0;i<9;i++){
printf("%d\t",st[i]);
fprintf(fp,"%d\t",st[i]);
}
页脚内容28
printf("\n");
fprintf(fp,"\n");
k=check(st,t77);
for(i=0;i<k;i++){
printf("%d\t",t77[i]);
fprintf(fp,"%d\t",t77[i]);
}
printf("\n");
fprintf(fp,"\n");
fcl ose(fp);
getch();
return0;
}
第五套
题目:将主函数main()中字符数组IPb中的32个'0','1'字符看做一个32位的二进制形式的IP地址,将其转换为4个十进制数整数形式的IP地址。
并以点分十进制记法(XXX.XXX.XXX.XXX)输出IP地址。
同时指出该地址所属的地址类。
IP地址类见下面分类:
A类地址:1.0.0.1-126.255.255.254
页脚内容29
B类地址:128.0.0.1-191.255.255.254
C类地址:192.0.0.1-223.255.255.254
D类地址:224.0.0.0-239.255.255.255
E类地址:240-
编写程序:
1.编写函数voidbtod(charipb[],intipd[]),将字符数组ipb中由字符组成的二进制IP地址转换为十进制IP地址,存入数组ipd中。
2.编写函数charclassto(intip),依据参数ip,判断IP所属的地址类,函数返回所属类的字符('A'~'E')。
#includ e<stdio.h>
#includ e<conio.h>
#includ e<stdlib.h>
voidbtod(charipb[],intipd[]){
/**********Program**********/
/**********End**********/
}
charclassto(intipd){
/**********Program**********/
页脚内容30
/**********End**********/
}
intmain(){
charIPb[33]="11000000111011001110001110000011",c;
intIPd[4]={0},i;
FILE*fp;
btod(IPb,IPd);
c=classto(IPd[0]);
if((fp=fopen("DATA.TXT","w"))==NULL){
printf("Fileopenerror\n");
exit(0);
}
for(i=0;i<3;i++){
printf("%d.",IPd[i]);
fprintf(fp,"%d.",IPd[i]);
}
printf("%d\t",IPd[3]);
页脚内容31
fprintf(fp,"%d\t",IPd[3]);
printf("%c类地址\n",c);
fprintf(fp,"%c类地址\n",c);
fcl ose(fp);
getch();
return0;
}
页脚内容32。