99网
您的当前位置:首页2011年技能考试试卷C语言(真题)

2011年技能考试试卷C语言(真题)

来源:99网
第一部分【程序填空】

第一套:

题目:函数()计算整型数组a中相邻两元素的最大公约数,最小公倍数,其中最大公约数存入数组b中,最小公倍数存入数组c中。

--—-—-—--——-——-----—-———---—-——-—--———--—--------———-——-— 注意:请勿改动主函数main()中的其他内容。

———---—---—---—--—---———--—--—-—--———————--—————————--—-—

#include 〈stdio.h〉 #include 〈conio.h>

void (int a[],int n,int b[],int c[]){ int i,x,y,z;

/***********SPACE***********/ for(i=0;i〈【?】;i++){ x=a[i]; y=a[i+1];

while(z=x%y){ x=y;y=z; }

b[i]=y;

/***********SPACE***********/ c[i]=a[i]*a[i+1]/【?】; } }

int main(){

int a[5]={8,12,5,7,14}; int b[4],c[4]; int i;

(a,5,b,c); for(i=0;i<5;i++)

printf(\"%d\”,a[i]); printf(”\\n”); for(i=0;i<4;i++)

printf(”%d\\]); printf(”\\n\");

for(i=0;i〈4;i++)

printf(”%d\\",c[i]); printf(\"\\n\"); getch(); return 0;

1

}

第二套

题目:函数reverse()对字符串str进行逆序. #include #include

void reverse(char str[]){ int len, j; char c;

/***********SPACE***********/ len = 【?】(str);

/***********SPACE***********/ for (j=len—1; 【?】; j—-){ c=str[j];

str[j]=str[len-1—j]; str[len—1—j]=c; } }

int main(){

char a[80];

printf(”Please enter a string: ”); gets(a); reverse(a);

printf(\"The inversed string is: \"); puts(a); getch(); return 0; } 第三套

题目:对主函数main()中数组a进行处理:如果相邻元素相同则保留一个。例如对数组a处理后,它的前11个元素为{-5,7,—4,25,0,2,4,16,8,5,20}。 #include 〈stdio。h> #include 〈conio。h〉 int main(){

int a[20]={—5,-5,7,—4,-4,25,25,0,0,0,2,4,16,16,8,5,5,5,5,20}; int i,prev,next; prev=0; next=1;

while(next<20){

/***********SPACE***********/

2

if(a[prev]!=【?】) a[++prev]=a[next]; next++; }

/***********SPACE***********/ for(i=0;i【?】prev;i++) printf(”%d \",a[i]); printf(”\\n”); getch(); return 0; }

第四套

题目:程序输出由0~3四个数字组成的符合下列条件的4位整数: 1. 每个4位整数中,0~3四个数字只能出现一次; 2。 百位数不能为3,十位数不能为2。 #include 〈stdio。h> #include for(b=0;b〈4;b++){ if(b==3) continue; for(s=0;s<4;s++){

if((b==s)||(s==2)) continue; /***********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(); return 0; } 第五套

题目:在一维数组a中找出最大,最小元素,并将最大元素和数组最后一个元素交换,

3

最小元素和数组首元素交换. #include int a[10]={15,8,12,6,10,1,4,5,9,—3}; int i,t,max_index,min_index; max_index=min_index=0; for(i=1;i<10;i++){ if(a[i]>a[max_index]) max_index=i;

if(a[i]t=a[0];a[0]=a[min_index];a[min_index]=t; /***********SPACE***********/ if(max_index==【?】){

t=a[min_index];a[min_index]=a[9];a[9]=t; } else{

/***********SPACE***********/ 【?】; }

for(i=0;i〈10;i++)

printf(”%d\”,a[i]); printf(”\\n”); getch(); return 0; }

=================================================================

第二部分【程序改错】

第一套

题目:主函数main()调用函数change()将二维数组strrow中的字符按列存入一维数组strcol中.下面给定的程序存在错误,请改正。 #include 〈stdio.h> #include 〈conio。h〉

/***********FOUND***********/ void change(char t[5][],char s[]){ int i,j;

for(j=0;j<5;j++)

for(i=0;i<3;i++)

4

/***********FOUND***********/ s[3*j+i]=t[j][i];

/***********FOUND***********/ s[j]=0; }

int main(){

char strrow[][5]={{’C’,'r',’r’,' ’,'s’},{' ’,'o’,’a',’T’,’t’},{’P','g',’m’,’e’,'!'}};

char strcol[16];

change(strrow,strcol); puts(strcol); getch(); return 0; } 第二套

题目:在主函数中main()中输入年、月、日,然后计算该天是这一年的第几天。其中函数LeapYear()是判断某年是否为闰年。下面给定的程序存在错误,请改正。 #include #include int LeapYear(int year){

/***********FOUND***********/ return ((year%4==0 && year%100) && (year%400==0)); }

int main(){

int mon_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}}; int year,mon,day,days; int i;

scanf(\"%d %d %d\",&year,&mon,&day); days=day;

/***********FOUND***********/ for(i=0;i〈mon—2;i++)

/***********FOUND***********/ days=mon_days[LeapYear(year)][i]; printf(”%d\\n\); getch(); return 0; }

第三套

5

题目:主函数main()调用函数MyStrcat()将字符串src连接到字符串dstStr后面。下面给定的程序存在错误,请改正. #include 〈stdio。h> #include 〈conio.h〉

void MyStrcat(char dstStr[], char srcStr[]){ int i,j; i=j=0;

/***********FOUND***********/ while(dstStr[i++]) i++; i-=1;

while(srcStr[j]){

dstStr[i]=srcStr[j]; i++;j++; }

/***********FOUND***********/ srcStr[i]=0; }

int main(){

char dst[100]=\"This is \"; char src[20]=\"C Test!”;

/***********FOUND***********/ MyStrcat(dst[100],src[20]); puts(dst); getch(); return 0; }

第四套

题目:程序去除主函数main()中字符串str中的非字母字符。函数IsAlpha()的功能是判断字符c是否为字母。 #include 〈stdio。h〉 #include /***********FOUND***********/

return ((c〉='a’ && c<=’z’) && (c>=’A' && c〈=’Z’)); }

int main(){

char str[]={”/** One World,One Dream! **/\"}; int prev,next; prev=next=0;

6

while(str[next]){ if(IsAlpha(str[next])){

/***********FOUND***********/ str[next]=str[prev]; prev++; }

next++; }

/***********FOUND***********/ str[next]=0; puts(str); getch(); return 0; } 第五套

题目:主函数main()统计字符串str中的各字母(不区分大小写)及其他字符出现的次数,并显示统计结果(次数为0,则不显示)。下面给定的程序存在错误,请改正。 #include int main(){

char str[]={”---JiangSu Teachers University of Technology———\"}; int chnum[27]={0},i=—1;

/***********FOUND***********/ while(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(”other ch=%d\\n\",chnum[26]); else

printf(\"%c(%c)=%d\\n”,i+65,i+97,chnum[i]); getch(); return 0;

7

8

第三部分【程序设计题】

第一套

题目:假设英文大小写字母的权值分别为: A—E,a—e 1; F-J,f-j 2; K-O,k—o 3; P—T,p—t 4; U-Y,u—y 5; Z,z 6

计算主函数main()中数组words中的各英文单词的权重(英文单词的权重为该单词各字母权值之和).

例如:

单词\"World\"的权重为16(W为5;o为3;r为4;l为3;d为1,5+3+4+3+1=16)。 编写程序:

1. 编写函数void calculate(char w[][20],int n,int p[]),计算数组w中n个英文单词的权重,并将权重存放在数组p中.

2。 编写函数void sort(int p[],int n,char w[][20]),对数组p中n个单词的权重进行降序排序,权重所对应单词在数组w中的位置也要作相应调整。

——-——-—-—-—————-——-----——-—--———--———-—--——-————-——--—---

注意:请勿改动主函数main()中的任何语句。

———-—————————-—-—-—------—————---——---—-—--———--—-—----*/

#include #include

void calculate(char w[][20],int n,int p[]){ /**********Program**********/

/********** End **********/ }

void sort(int p[],int n,char w[][20]){ /**********Program**********/

9

/********** End **********/ }

int main(){

char words[5][20]={{\"JiangSu\"},{\"Teachers”},{”University”},{\"of\{”Technology”}};

int value[5]={0}; int i;

FILE *fp; if((fp=fopen(\"DATA.TXT\",”w”))==NULL){ printf(\"File open error\\n”); exit(0); }

calculate(words,5,value); for(i=0;i<5;i++){

fprintf(fp,\"%-20s%4d\\n\[i],value[i]); printf(\"%-20s%4d\\n\[i],value[i]); }

printf(”\\n”);

fprintf(fp,\"\\n\"); sort(value,5,words); for(i=0;i<5;i++){

fprintf(fp,”%-20s%4d\\n”,words[i],value[i]); printf(\"%-20s%4d\\n”,words[i],value[i]); }

fclose(fp); getch(); return 0; }

第二套

题目:主函数main()中str_b是这样的字符串:若干个长度不等的,连续的'0’、'1'字符组成的字符子串被长度不等的’.'字符间隔。将连续的'0'、’1'字符子串看成是二进制整数。要求将其转换为十进制整数。其中字符子串的首字符代表二进制数的符号位,'0’表示正数,'1’表示负数。例如:\"0111”表示7,”1111\"表示-7。

编写程序:

1. 编写函数int convert(char b[],int d[]),将字符数组b中连续二进制数字字符子串转换为十进制整数,并存入整型数组d中。函数返回十进制数的个数。 2. 编写函数void sort(int d[],int n),对数组d中n个元素进行升序排序。 #include〈stdio.h〉 #include〈stdlib.h〉

10

#includeint convert(char b[],int d[]){

/**********Program**********/

/********** End **********/ }

void sort(int d[],int n){

/**********Program**********/

/********** End **********/ }

int main(){

char str_b[100]=”。。.111100。01111.01100111。.。0111..110000.011..”; int int_d[10]; int i,k; FILE *fp;

if((fp=fopen(\"DATA.TXT\){ printf(”File open error\\n”); exit(0); }

k=convert(str_b,int_d); for(i=0;i〈k;i++){

printf(\"%d\”,int_d[i]);

fprintf(fp,\"%d\”,int_d[i]); }

printf(\"\\n\");

fprintf(fp,”\\n”); sort(int_d,k);

for(i=0;i〈k;i++){

printf(\"%d\”,int_d[i]); fprintf(fp,\"%d\\",int_d[i]); }

11

printf(”\\n”); fprintf(fp,”\\n”); fclose(fp); getch(); return 0; }

第三套

题目:主函数main()的一维数组a中元素为非0整数。程序将负数存入数组b的左侧,正数存入数组b的右侧,并将数组b左侧的负数按升序,右侧的正数按降序重新排列。

编写程序:

1。 编写函数int split(int a[],int b[],int len),将数组a中len个整数分别存放在数组b的左右两侧,其中负数存入数组b的左侧,正数存入数组b的右侧。函数返回数组b中最后一个负数的下标. 2. 编写void sort(int a[],int left,int right,int order)函数,对数组a中下标在[left, right]范围内的元素进行升序或降序排序.当order=1时,进行降序排序,当order=0时,进行升序排序。 #include #include #include〈conio.h> int split(int a[],int b[],int len){

/**********Program**********/

/********** End **********/ }

void sort(int a[],int left,int right,int order){ /**********Program**********/

/********** End **********/ }

int main(){

int a[10]={7,-2,3,14,-5,—6,5,22,-4,8},b[10];

12

int i,mid; FILE *fp;

if((fp=fopen(\"DATA。TXT\))==NULL){ printf(”File open error\\n”); exit(0); }

mid=split(a,b,10); for(i=0;i<10;i++){

printf(”%d\”,b[i]); fprintf(fp,”%d\\[i]); }

printf(”\\n”); fprintf(fp,”\\n”); sort(b,0,mid,0); sort(b,mid+1,9,1); for(i=0;i〈10;i++){ printf(”%d\\]);

fprintf(fp,”%d\\",b[i]); }

printf(\"\\n”); fprintf(fp,”\\n”); fclose(fp); getch(); return 0; }

第四套

题目:主函数main()中一维数组ring[9]存放数字1-9。将ring看成是一个首尾相接的环。将9个数分成3段,第1段为1个2位数,第2段为1个3位数,第3段为1个4位数,程序计算这3段数之和。要求从环的第1个数开始,直到第9个数,依上述规则进行处理。同时在这些和中寻找77的整数倍的数。 例如:

从环的第一个数开始的3段数为12,345,67,其和为7146; 从环的第二个数开始的3段数为23,456,71,其和为8370; 。.。。.

从环的第九个数开始的3段数为91,234,5678,其和为6003; 编写程序:

1. 编写函数void calculate(int ring[],int st[]),从数组ring的第1个数开始,将9个数分成3段,第1段为1个2位数,第2段为1个3位数,第3段为1个4位数,程序计算所有3段数之和。并将所有3段数之和存入数组st中。

2。 编写函数int check(int st[],int t77[]),在数组st中寻找77的整数倍的数,存

13

入数组t77中,函数返回其个数. #include #include〈stdlib.h> #include

void calculate(int ring[],int st[]){

/**********Program**********/

/********** End **********/ }

int check(int st[],int t77[]){

/**********Program**********/

/********** End **********/ }

int main(){

int ring[9]={1,2,3,4,5,6,7,8,9}; int st[9],t77[9],i,k; FILE *fp;

if((fp=fopen(”DATA。TXT”,\"w”))==NULL){ printf(\"File open error\\n”); exit(0); }

calculate(ring,st); for(i=0;i<9;i++){

printf(”%d\”,st[i]); fprintf(fp,\"%d\\",st[i]); }

printf(\"\\n”); fprintf(fp,\"\\n\"); k=check(st,t77); for(i=0;i〈k;i++){

14

printf(”%d\”,t77[i]);

fprintf(fp,\"%d\”,t77[i]); }

printf(”\\n”); fprintf(fp,\"\\n”); fclose(fp); getch(); return 0; }

第五套

题目:将主函数main()中字符数组IPb中的32个’0’,'1’字符看做一个32位的二进制形式的IP地址,将其转换为4个十进制数整数形式的IP地址。并以点分十进制记法(XXX。XXX。XXX。XXX)输出IP地址。同时指出该地址所属的地址类。IP地址类见下面分类:

A类地址:1.0.0。1—126.255。255。254 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。 编写函数void btod(char ipb[],int ipd[]),将字符数组ipb中由字符组成的二进制IP地址转换为十进制IP地址,存入数组ipd中。

2。 编写函数char classto(int ip),依据参数ip,判断IP所属的地址类,函数返回所属类的字符('A’~'E’)。 #include 〈stdio。h〉 #include 〈conio。h〉 #include 〈stdlib。h>

void btod(char ipb[],int ipd[]){

/**********Program**********/

/********** End **********/ }

char classto(int ipd){

/**********Program**********/

15

/********** End **********/ }

int main(){

char IPb[33]=\"11000000111011001110001110000011\",c; int IPd[4]={0},i; FILE *fp;

btod(IPb,IPd); c=classto(IPd[0]);

if((fp=fopen(”DATA。TXT\)==NULL){ printf(”File open error\\n”); exit(0); }

for(i=0;i<3;i++){

printf(\"%d。”,IPd[i]); fprintf(fp,”%d。\ }

printf(”%d\\[3]); fprintf(fp,\"%d\\[3]); printf(”%c类地址\\n\",c); fprintf(fp,\"%c类地址\\n”,c); fclose(fp); getch(); return 0; }

16

因篇幅问题不能全部显示,请点此查看更多更全内容