计算机二级考试C语言复习资料题目答案Word文档下载推荐.docx

上传人:b****5 文档编号:18598631 上传时间:2022-12-29 格式:DOCX 页数:36 大小:41.63KB
下载 相关 举报
计算机二级考试C语言复习资料题目答案Word文档下载推荐.docx_第1页
第1页 / 共36页
计算机二级考试C语言复习资料题目答案Word文档下载推荐.docx_第2页
第2页 / 共36页
计算机二级考试C语言复习资料题目答案Word文档下载推荐.docx_第3页
第3页 / 共36页
计算机二级考试C语言复习资料题目答案Word文档下载推荐.docx_第4页
第4页 / 共36页
计算机二级考试C语言复习资料题目答案Word文档下载推荐.docx_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

计算机二级考试C语言复习资料题目答案Word文档下载推荐.docx

《计算机二级考试C语言复习资料题目答案Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《计算机二级考试C语言复习资料题目答案Word文档下载推荐.docx(36页珍藏版)》请在冰豆网上搜索。

计算机二级考试C语言复习资料题目答案Word文档下载推荐.docx

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时停止

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 院校资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1