计算机二级考试C语言复习资料题目答案Word文档下载推荐.docx
《计算机二级考试C语言复习资料题目答案Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《计算机二级考试C语言复习资料题目答案Word文档下载推荐.docx(36页珍藏版)》请在冰豆网上搜索。
26.用递归函数实现10->
2进制转换
第三部分程序改错
1.#4scanf(“%d”,&
x);
#10low=m+1
#11high=m-1
2.#7scanf(“%c”,&
str[i]);
#8break
3.#7x,n
#13n==0
#15x*xn(x,n-1)
4.#5t=t*x/i
#15e=ex(x)
5.#4scanf(%d”,&
#10low=m+1
#11high=m-1
6.#3fun(str[])
#5while(*(str+num)!
=’\0’)num++;
#9charstr[10],*p=str;
7.#14flag=0;
#19flag=1;
i++;
8.#3func(str[])
#5while(*(str+num)!
#9{charstr[10],*p=str;
9.#5n=n/10;
#6while(!
n);
#12scanf(“%ld”,&
10.#10elseif(x>
a[m])low=m+1;
#11elsehigh=m-1;
11.#6a=1.0;
#8a/=i;
#9e+=a;
12.#6char*temp;
#10if(strcmp(temp,name[i])>
0)
#12printf(“%s\n”,temp);
13.#3str[i]!
=’\0’
#4str[i]>
=’0’&
&
str[i]<
=’9’
#10data=data*16+n;
14.#3intn1=0,n2=0,i;
#6if(str[i]==’#’)
#8if(str[i]>
=’0’&
str[i]<
=’9’)
#9n2++;
}
15.#5i<
N
#7sum=max=min=a[0]
#12aver=(float)(sum-max-min)/(N-2)
16.#7scanf(“%c”,&
#8break
17.#7x,n
#13n==0
#15x*xn(x,n-1)
18.#4doublefun(doubleeps)
#8while(t>
=eps)
#13return(2*s);
19.#3longfun(char*p)
#17num+=p[i]-48;
或num+=p[i]-‘0’;
#29printf(“%ld\n”,n);
/*必须有%ld*/
20.#9a[j]<
a[i]
#15b[k]>
a[j]&
a[j]
#18a[j]=b[k]
21.#2voidprintcol(int(*p)[N],introw,intcol)
#6printf(“\t\t%d\n”,*(*(p+i)+col));
#14}while(col<
0||col>
N-1);
22.#2…(char*s)
#4(*p)或…(*p!
=0)或…(*p!
='
\0’)
#9gets(x);
23.#6t=n%10;
#10n/=10;
#11}while(n);
或}while(n!
=0);
24.#4{for(j=0;
j<
=20-i;
j++)
#5printf("
"
);
#8printf("
\n"
25.#2char*fun(char*s,char*t)
#4a=0;
(或a=NULL;
)
#8if(*r==*p){r++;
p++;
}
第四部分编程序
1.设有链表结点的结构及变量如下:
structst
{intnum;
structst*next;
};
structst*head,*p1,*p2;
编写函数create(),是个无参数函数,创建链表,num=0结束,返回指针值,指向首结点head。
#defineNULL0
#defineLENsizeof(structst)
{intnum;
intn=0;
structst*creat()
{structst*head,*p1,*p2;
p1=p2=(structst*)malloc(LEN);
scanf("
%u,%d"
&
p1->
num,&
score);
head=NULL;
while(p1->
num!
=0)
{n=n+1;
if(n==1)head=p1;
elsep2->
next=p1;
p2=p1;
p1=(structst*)malloc(LEN);
p2->
next=NULL;
return(head);
2.对N个数据,降序排列并输出
#defineN10
main()
{inta[N]={1,5,0,3,-6,9,-8,7,2,4};
inti,j,t;
for(i=0;
i<
N-1;
i++)
for(j=i;
N;
if(a[i]<
a[j])
{t=a[i];
a[i]=a[j];
a[j]=t;
}
printf("
%3d"
a[i]);
3.有二维数组如下
1234
5678
9101112
现要求输入某元素所在的行和列,将其后的所有元素输出,必须用指针技术编程。
例如,输入2,3表示从第二行第三列元素7开始输出其余元素789101112
{inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
int*p,i,j;
%d%d"
i,&
j);
p=&
a[i-1][j-1];
for(;
p<
a[0][0]+12;
p++)
%5d"
*p);
4.将一个磁盘文件的数据读到一个链表中去,队列或堆栈不论。
要求如下:
●磁盘文件放在A盘的一级目录(即一级子文件夹)abc下,文件名是flile.dat
●链表结点的结构为
structnode
{charval;
strctnode*next;
●工作用的指针名为h和p
#include<
stdio.h>
string.h>
structnode*next;
structnode*create(FILE*fp)
{structnode*p,*h;
chard;
h=NULL;
fp=fopen("
a:
\\abc\\file.dat"
"
r"
while(!
feof(fp))
{fread(&
d,2,1,fp);
p=(structnode*)malloc(sizeof(structnode));
p->
val=d;
next=h;
h=p;
fclose(fp);
printlk(h);
returnh;
printlk(structnode*h)
{structnode*p;
printlink...\n"
p=h;
while(p)
{printf("
%c"
p->
val);
p=p->
next;
{structnode*h,*p;
FILE*fp;
rd_data"
if(fp==NULL)
readdataerror!
exit(0);
h=create(fp);
5.试写一个函数(函数名为f),以十进制正整数n为整型参数,函数的返回值是n的位数(例:
278是三位数)。
要求循环结构需用do_while控制结构。
intf(longn)
{intc=0;
do
{c++;
n=n/10;
}while(n);
returnc;
main()
{longn;
intnum;
%ld"
num=f(n);
%ldhas%dnumbers\n"
n,num);
6.将一个n×
n的矩阵行列转置后输出,转置功能由函数reverse实现,试编程。
#defineN3
voidreverse(floatx[][N],intn)
{inti,j;
floatt;
n;
i++)
j++)
{t=x[i][j];
x[i][j]=x[j][i];
x[j][i]=t;
voidprtable(floatx[][N],intn)
{for(j=0;
%10.4f"
x[i][j]);
main()
floata[][N]={{1,2,3},{4,5,6},{7,8,9}};
prtable(a,N);
reverse(a,N);
7.试用do_while控制结构,计算下列级数的和s=1+3+5+...+(2i-1)+...
当累加到某项s的值大于100时,该项及以后各项不再累加,结束循环求和。
{ints,i;
s=0;
i=0;
{i++;
s+=2*i-1;
}while(s+(2*i+1)<
=100);
sum=%d,i=%d\n"
s,i);
8.编程序用于将原字符串按某种规律变成密码:
即将字母A变成E,B变成F,…;
W变成A,X变成B,…,Z变成D,对小写字母也是如此编码,标点符号、空格维持原状。
#defineN4
decode()
{charc;
while((c=getchar())!
\n'
{if((c>
a'
c<
z'
)||(c>
A'
Z'
))
{c=c+4;
if(c>
'
+N||c>
)c=c-26;
}
c);
{decode();
9.编写一个带参数宏trans(F),输入一个华氏温度F,要求输出摄氏温度c。
公式是
取2位小数。
#definetrans(F)(F-32)*5/9.0
{floatc,F;
%f"
F);
c=trans(F);
F=%.2f,c=%.2f\n"
F,c);
10.对非线性方程f(x)=0,可用牛顿迭代公式
求解,要求方程式用函数名f,导函数f’名为f1,迭代函数名为g,假设函数f和f’已有定义,编写出迭代函数g(x),精度小于10-5。
floatg(floatx)
{floatxi;
do
{xi=x-f(x)/f1(x);
x=xi;
}while(fabs(f(x))>
=1e-5);
returnx;
11.编写ptstar无参数函数打印如下图形,顶端的*定位在屏幕第25字符位置,编出完整程序,写出对ptstar的调用。
123456789012345678901234567890
*
***
*****
*******
printstar()
123456789012345678901234567890\n"
4;
=23-i;
for(j=0;
2*i+1;
*"
{printstar();
12.试写一个函数(函数名为f),以正整数n为整型参数,函数的返回值是下列级数的前n项的和1+3+5+...+(2n-1)
要求用递归法计算级数的和。
longf(intn)
{if(n==1)return1;
elsereturn(2*n-1+f(n-1));
{longsum;
intn;
%d"
sum=f(n);
sum=%ld\n"
sum);
13.本程序的主程序为:
{intb[]={24,12,14,32,22,34};
%d\n"
f(b,6));
其中调用函数f,该函数有二个参数,依次为整型数组a和整型数n,函数的返回值是数组的a[0]到a[n-1]中的最大值。
试写出函数f。
要求循环结构需用for控制结构。
intf(inta[],intn)
{inti,max=-32768;
if(a[i]>
max)
max=a[i];
returnmax;
14.编写sort函数,对N个int型数据降升序排列,该函数有2个形参:
inta[]和intn,采用“冒泡法”或“选择法”可任选。
voidsort(inta[],intn)/*选择法*/
{inti,j,sub,temp;
n-1;
{sub=i;
for(j=i+1;
if(a[sub]>
a[j])sub=j;
if(i!
=sub)
{temp=a[i];
a[i]=a[sub];
a[sub]=temp;
15.编写一个名为prime的函数,以m为整型参数,判别m是否为素数。
若m为素数,则返回1;
若m不是素数,则返回0。
math.h>
intprime(intm)
{inti,k;
k=(int)sqrt(m);
for(i=2;
i<
=k;
i++)/*或i<
m*/
if(m%i==0)break;
/*或!
(m%i)*/
if(i>
k)return1;
/*或i==m*/
elsereturn0;
16.编写一个名为cntatoz的函数,输入一行字符,统计其中的英文字母个数(大小写不论)。
{charch;
intn=0;
Inputastring:
while
(1)
{ch=getchar();
if(ch=='
)break;
if(ch>
ch<
||ch>
n++;
Numberoflettersis%d.\n"
n);
17.设有3名学生成绩存在如下的数组中:
:
intscore[3][4]={{65,57,70,60},{90,87,50,81},{90,65,100,98}}
编程输出有成绩低于60分的某学生所有成绩(按C语言的规则,允许第0行)。
{voidsearch(float(*p)[4],intn);
floatscore[3][4]={{65,57,70,60},{58,87,90,81},{90,99,100,98}};
search(score,3);
voidsearch(float(*p)[4],intn)
{inti,j,flag;
{flag=0;
if(*(*(p+j)+i)<
60)flag=1;
if(flag==1)
No.%dfails,hisscoresare:
\n"
j+1);
for(i=0;
printf("
%6.1f"
*(*(p+j)+i));
18.试用do-while控制结构,计算下列公式的近似值
当计算某项的绝对值小于0.0001时,该项及以后各项不再累加,结束循环求和。
floatsum(floateps)
{floats=0.0;
intt=1,i=0;
do{s+=t;
t=-t*x*x/(2*i*(2*i–1.0));
}while(fabs(t)>
=eps);
returns;
19.试用for控制结构,求数组a[N]的前k(k<
=N)个元素的最大值和最小值。
将统计结果分别存于变量max和min中。
floatmax,min;
voidmmai(inta[],intk)
{inti;
max=min=a[0];
for(i=1;
k,i++)
{if(max<
a[i])max=a[i];
if(min>
a[i])min=a[i];
20.输入10个数,输出这10个数中仅出现一次的数
如输入:
12367236879987871235
则输出:
729935
{
inta[10],i,j;
for(i=0;
10;
i++)
&
a[i]);
for(j=0;
j<
j++)
if(i!
=j&
a[i]==a[j])
break;
if(j>
=10)
printf("
%d"
a[i]);
21.试设计一个函数,它能求出两个整型数的和与积,同时,再编写一个主程序main,调用上述函数以验证该函数的功能与正确性。
voidtest(inta,intb,int*ps,int*pt)
*ps=a+b;
*pt=a*b;
inta,b,s,t;
scanf("
a,&
b);
test(a,b,&
s,&
t);
%d%d\n"
s,t);
22.输入若干非0实数,直到输入0时停止