计算机二级C语言考试编程题题库

请补充函数fun(),该函数的功能是:求100(不包括100)以内能被2或5整除,但不能同时被2和5整除的自然数。结果保存在数组bb中,函数fun()返回数组比元素的个数。

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。

试题程序:

include <stdio.h>

define N 100

int fun (int bb [] )

{

int i, j;

for(【 】;i<100; i++)

if ((i%1!=0&&i%5==0)|| (i%2==0&&i%5 !=0)

【 】;

【 】;

}

main()

{

int i, n;

int bb [N];

clrscr ();

n=fun (bb);

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

{

if (i%10==0)

printf ("\n");

printf ("% 4d", bb [i]);

}

}


正确答案:i=l j=0 bb[j++]=I return j
i=l, j=0 bb[j++]=I return j 解析:第一空:题目要求找100以内的自然数,而自然数是从1开始的,所以i的初始值为1。变量j声明时没有初始化,所以在这里初始化为0,用来记录满足条件的自然数的个数。第二空:将满足条件的白然数存于数组bb中,下标加1是为了下一次存储做准备。第三空:题目要求fun()函数返回数组bb元素的个数,所以函数返回j。


以下程序可把输入的十进制数以十六进制数的形式输出,请填空。

main()

{char b[17]={"0123456789ABCDEF"};

int c[64],d,i=0,base=16;

long n;

printf("Enter a number:\n");scanf("%ld",&n);

do{c[i]=【17】;i++;n=n/base;}

while(n!=0);

printf("Transmite new base:\n");

for(--i;i>=0;--i)

{d=c[i];printf("%c",b【18】);}

printf("\n");

}


正确答案:
n%base;[d]


以下程序可把输入的十进制数以十六进制数的形式输出,请填空。

main()

{char b[17]={"0123456789ABCDEF"};

int c[64],d,i=0,base=16;

long n;

printf("Enter a number:\n");scanf("%ld",&n);

do{c[i]=【17】;i++;n=n/base;}

while(n!=0);

printf("Transmite new base:\n");

for(--i;i>=0;--i)

{d=c[i];printf("%c",b【18】);}

printf("\n");

}


正确答案:
nose;[d]


阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。

【程序2.1说明】

已知一个排好序的数组,现输入一个数,要求按原来的顺序规律,将它插入到数组中。

【程序2.1】

include <stdioh>

define N 100

void main()

{

float a[N+l],x;

int i,p;

printf("输入已经排好序的数列: ");

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

scanf(%f",&a[i]);

printf("输入要插入的数:");

scanf("%f",&x);

for(i=0,p=N; i<N; i++)

if(x<a[i])

{

(1)

break;

}

for(i=N-1; i>=p; i--)

(2)

(3)

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

prinff("%f\t",a[i]);

}

【程序2.2说明】

本程序用变量count统计文件中字符的个数。

【程序2.2】

include <stdio.h>

include <stdlib.h>

void main()

{

FILE *fp;

long count=0;

if((fp=fopen("letter.txt","r"))==NULL)

{

printf("can not open file\n");

exit(0);

}

while(!feof(fp))

{

(4)

count++;

}

printf("count=%d\n",count);

(5)

}


正确答案:(1)p=i (2)a[i+1]=a[i]; (3)a[p]=x; (4)fgetc(fp); (5)fclose(fp);
(1)p=i (2)a[i+1]=a[i]; (3)a[p]=x; (4)fgetc(fp); (5)fclose(fp); 解析:本题考查在C语言中实现对数组的插入和对文件中字符个数的统计。
我们先来看程序2.1。题目要求在程序2.1中实现在排好序的数组中插入一个数,但不能改变数组中数字排序的规律。由于数组是已经排好序的,它有可能是按不递减的方法排序,也有可能是按不递增的方法排序。在插入时,从数组中第一个数开始,逐个进行比较,直到找到比其大或相等的数,在其前面进行插入,在插入前应该先将数组中的元素逐个后移。
下面我们来看代码。代码中有三个循环,第(1)空在第一个循环体下面的条件判断语句里,条件判断语句是判断要插入的数J与数组中元素的大小,如果数x小于数组中的元素,就执行第(1)空的语句。从上面的分析,再结合第二个循环语句的条件,我们可以知道,此空的作用是记录数要插入的位置,并把这个结果存放在变量p中,所以,答案为p=i。
第(2)空所在的位置是第二个循环体下面,根据分析,要完成的任务应该是将数组中要插入位置后的元素逐个往后移动。所以,此空的答案为a[i+1]=a[i]。
在完成了上述两空之后,再结合整个程序来看,很明显还有一个功能没有完成,那就是插入数x,第(3)空就是用于完成这个任务的。由于在代码的前面已经记录下了要插入的位置,所以,此空答案为a[p]=x。
在程序2.2中,题目要求完成的任务是用变量count统计文件中字符的个数,要实现对文件中字符个数的统计,首先需要我们判断出哪些是字符,这就涉及C语言中对文件中字符的判定。此外,还需要我们掌握对文件的基本操作。
下面,我们来看程序2.2的代码。首先用一个条件判断语句来打开一个文件,如果打开成功,则执行下面的while循环语句,循环体的功能是对文件中的内容逐个判断,如果是字符,则统计变量count加1,因此,第(4)空的功能就是要找出文件中的所有字符。这里没有条件判断语句来判段是否是字符,需要用到C语言中对文件处理的一个函数fgetc(),其作用是可以取出文件中所有的字符,因此,此空答案为fgetc(fp)。
第(5)空在代码的最后面,如果我们对文件操作很熟悉的话,不难发现文件在打开后还没有关闭,此空要实现的功能是关闭文件,因此,此空答案为fclose(fp)。


下面程序的输出结果是( )。

main()

{int i=0,a=0;

while(i<20)

{ for(;;)

{ if((i%10)==0)break;

else i--;}

i+=11;

a+=i;

}

printf("%d\n",A);

}


正确答案:32
32 解析:while(表达式)的功能是:首先计算表达式的值.若为真,则执行循环体语句,执行完毕,再计算表达式的值.若仍为真,则重复执行循环体语句,直到表达式的值为假,结束while语句的执行,继续执行while语句后面的语句;i=0时满足循环条件,也满足if的条件,执行语句得i=11,a=11,第2次循环不满足if的条件,执行i--,i=10,执行i+=11;a+=i后,得i=21,a=32,不满足i20,循环结束。


摘要:计算机c语言编程题库1、求100之内自然数中最大的能被17整除的数。voidmain(){inti;for(i=100;i>0;i--)if(i%17==0)break;printf("%d\n",i);}2、已知a,b,c都是1位整数,求当三位整数abc、cba的和为1333时a、b、c的值。voidmain(){inta,b,c;for(a=1;a<=9;a++){for(b=0;b<=9;b++){for(c=1;c<=9;c++)if(a*100+b*10+c+c*100+b*10+a==1333)printf("%d,%d,%d\n",a,b,c);}}}3、计算并输出200-400之间不能被3整除的整数的和。voidmain(){inti,sum=0;for(i=200;i<=400;i++)if(i%3!=0)sum=sum+i;printf("%d\n",sum);}4、从键盘输入10个数,统计非负数的个数,并计算非负数的和。voidmain(){inti,n=0,sum=0; inta[10];printf(“请输入10个数:”);for(i=0;i<10;i++)scanf(“%d”,&a[i]);for(i=0;i<10;i++)if(a[i]>=0){sum=sum+a[i];n++;}printf("非负个数是%d,sum=%d\n",n,sum);}5、求100之内自然数中偶数之和。voidmain(){inti,sum=0;for(i=0;i<=100;i++)if(i%2==0)sum=sum+i;printf("sum=


有下列程序: include<stdi0.h>voidmain( ) {inti=5; do{if(i%3=1)if(i%5==2){printf(&qu

有下列程序:

#include<stdi0.h>

voidmain( )

{inti=5;

do

{if(i%3=1)

if(i%5==2)

{printf("*%d",i);break;}

i++:

}while(i!=O);

printf("\n");

}

程序的运行结果是( )。

A.*7

B.*3*5

C.*5

D.*2*6


正确答案:A
A。【解析】本题考查d0…while循环,先执行循环体,再判断条件是否成立,函数实现的功能是找出满足一个数,它除3时余1,除5时余2,然后打印“*”和这个数从5开始,等于7时恰好符合条件,输出,最后循环结束。


下列语句段中不是死循环的是()。

A、intI=100;while(1){I=I0+1;if(I=20)break;}

B、intI;sum=0;for(I=1;;I++)sum=sum+1;

C、intk=0;do{++k;}while(k>=0);

D、ints=3379;while(s++%2+3%2)s++;


参考答案:A


阅读下列函数说明和C代码,填入(n)处。

[说明]

以下C语言程序实现了生成从里到外是连续的自然数排列的回旋矩阵,矩阵形式如下:

7 6 5 16

8 1 4 15

9 2 3 14

10 11 12 13

程序的变量说明如下:

x1:矩阵上边界;

x2:矩阵下边界;

y1:矩阵左边界;

y2:矩阵右边界;

s:数组元素升降标记,s等于1为升,s等于-1为降;

a[]:存放矩阵元素的数组。

仔细阅读C语言程序源码,将(n)处的语句补充完整。(注:每处仅一个语句)

[C程序]

include<stdio.h>

void main ( )

{

const int N=20;

int i=0,j=0,a[N][N],n;

int m,x1,x2,y1,y2,s;

while (1)

{

Printf ("\ninput matrix row N( N>=2): ");

scanf ("%d",&n);

printf ("\n");

if (n>=2)

break;

}

m=n*n;

x1=0; y1=0; x2=n; y2=n;

if(n%2==0)

{j=n-1; y2=n-1; s=1;}

else

{i=n-1; y1=1; s=-1; }

while (1)

{

if (s==1)

{

for (i; i<x2; i++) a[i][j]=m--;

i--;

j--;

(1)

for (j;j>=y1;j--) a[i][j]=m--;

j++;

i--;

y1++;

(2)

}

else

{

for (i;i>=x1;i--)

a[i][j]=m--;

i++;

j++;

(3)

for (j;j<y2;j++)

(4)

(5)

i++;

(6)

S=i;

}

if (m<1) break;

}

for (i=O;i<n; i++)

{

for (j=O;j<n;j++)

printf ("%6d",a[i][j]);

printf ("\n");

}

printf ("\n");

}


正确答案:(1)x2--; (2)s=-1; (3)x1++; (4)a[i][j]=m--; (5)j--; (6)y2--;
(1)x2--; (2)s=-1; (3)x1++; (4)a[i][j]=m--; (5)j--; (6)y2--; 解析:自然数排列的回旋矩阵是一个经典程序设计题目。本题中生成的是一个从里到外是连续的自然数排列的回旋矩阵。仔细阅读代码,能够发现(1)处应该为矩阵下边界递减;(2)处应该为数组元素递减状态,即为降;(3)处应该为矩阵上边界递增;(4)处应该为存放矩阵元素的数组中的数据递减;(5)处应该为数组元素的列序号递减,即j--;(6)矩阵右边界递减。


以下程序的输出结果是【 】。

main()

{ char *p[]={" BOOL","OPK","H","SP"};

int i;

for(i=3; i>0;i--,i--)printf(" %c",*p[i]);

printf("\n");}


正确答案:SO
SO 解析:考查用指针引用字符串数组中元素的方法。题中需要注意两个问题:一是for循环的修正表达式共执行两次"i--"操作;二是*p[i]是对某个字符的引用。


以下函数按每珩8个输出数组中的数据 void fun( iht*w, int n) { inti; for(i=0;i<n,i++) { ______ printf("%d",w[i]); } printf("\n"); } 下划线处应填入的语句是______。

A.if(i/8=0)printf("\n);

B.if(i/8=0)continue;

C.if(i%8=0)printf("\n");

D.if(i%8=0)continue;


正确答案:C
解析:本题主要考查输出换行的问题,要求每行8个输出,因此,下划线处应填的语句是if(i%8=0)printf("\n");选项A相当于空—行,前七个数每输出—个数换行,从第八个数以后不换行输出剩下的数。选项B相当于前八个数不输出,从第九个数开始不换行输出剩下的数。选项D相当于不换行从数组中的第二个数开始输出,凡是i对8取模为0的数,均不输出。所以选项C是正确的。


相关考题:

考题 下列语句段将输出字符'*'的个数为( )。 int i=100; while (1) { i--; if(i==0) break; cout<<'*'; }A.98B.99C.100D.101 正确答案:B解析:本题考查while循环语句。根据if条件表达式可知,当i的值为1时,进入循环体,执行i--后i的值变为0,符合if条件,执行break跳出while循环体。所以共循环99次,即输出字符99个。

考题 有下列程序:#includestdi0.h#defineN4voidfun(inta[][N],intb[]){inti;for(i=0;iN,i++)b[i]=a[i][i];}voidmain( ){intx[][N]={{1,2,3},{4),{5,6,7,8),{9,10}),y[N],i;fun(x,y);for(i=0;in;i++)printf(%d,,y[i]);printf(\n);}程序的运行结果是( )。A.1,2,3,4,B.1,0,7,0,C.1,4,5,9,D.3,4,8,10, 正确答案:BB。【解析】本题考查数组的初始化,在对二维数组元素赋初值时,如果只对部分元素赋初值,那未赋初值的元素自动取0。fun函数是将二维数组a中主对角线上的元素赋给数组b,所以y[4]=(1,0,7,0)。

考题 若变量inti,intsum=0,要求程序段完成求1加到100的和的,能完成此操作的程序段不正确的是()A、for(i=1;i=100;i++)sum+=i;B、for(i=1;i=100;i++)sum=i;C、for(i=1;i=100;i++)sum=sum+i;D、for(i=0;i=100;i++)sum+=i;正确答案:B

考题 有以下程序: #includestdio.h main { int i=0,a=0; while(i20) { for(;;) {if((i%10)==0)break: else i--; } i+=11: a+=i: } printf("%d\n",a); } 程序的输出结果是( )。A.62B.63C.33D.32 正确答案:D本题考查while循环。当i20时,进入while循环体,循环体内的for循环实现的功能是i%10==0,也就是说当i值为0或者l0的倍数的时候,跳出循环,执行i+=11;a+=i;,若i值不是10的倍数,则一直执行for循环i--。①当i=0时,执行i+=11;a+=i;,i=11,a=11;②判断i=10时,跳出for循环,执行i+=11;a+=i;,i=21,a=32;③判断i=2120,不符合题意,结束循环。

考题 有下列程序:#includestdi0.hvoidmain( ){inti,j;for(i=3;i=1;i--){for(j=1;j=2;j++)printf(”%d”,i+j);printf(\n);}}程序的运行结果是( )。A.234B.43234554334C.23D.4534342323 正确答案:DD。【解析】本题考查for循环使用。当i=3时,j可以取1和2,i+j分别是4和5,执行printf(\n)换行,i--为2。当i=2时,j可以取1和2,i+j分别是3和4,执行printf(\n)换行,i--为1。当i=1时,J可以取1和2,i+j分别是2和3,执行printf(\n)换行,i--为0,不符合循环,退出。

考题 有下列程序:#includestdi0.hvoidfun(inta[],intn){inti,t;for(i=0;in/2;i++){t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;}}voidmain( ){intk[10]={1,2,3,4,5,6,7,8,9,10},i;fun(k,5);for(i=2,i8;i++)printf(%d,k[i]);printf(\n);}程序的运行结果是( )。A.345678B.876543C.1098765D.321678 正确答案:DD。【解析】在程序中,fun(k,5)的功能是将数组k的k[0]、k[1]分别与k[3]、k[4]交换,for循环从k[2]到k[8]输出,所以输出结果为321678。

考题 单选题若变量inti,intsum=0,要求程序段完成求1加到100的和的,能完成此操作的程序段不正确的是()Afor(i=1;i=100;i++)sum+=i;Bfor(i=1;i=100;i++)sum=i;Cfor(i=1;i=100;i++)sum=sum+i;Dfor(i=0;i=100;i++)sum+=i;正确答案: B解析: 暂无解析

考题 单选题若变量inti,intsum=0,要求程序段完成求1加到100的和的,能完成此操作的程序段不正确的是()Afor(i=1;i=100;i++)sum+=i;Bfor(i=1;i=100;i++)sum=i;Cfor(i=1;i=100;i++)sum=sum+i;Dfor(i=0;i=100;i++)sum+=i;正确答案: D解析: 暂无解析

考题 有下列程序: #includestdi0.h voidmain( ) {inti,j; for(i=3;i=1;i--) {for(j=1;j=2;j++)printf(”%d”,i+j); printf("\n"); } } 程序的运行结果是( )。A.234B.432 345543 34C.23D.45 3434 2323 正确答案:DD。【解析】本题考查for循环使用。当i=3时,j可以取1和2,i+j分别是4和5,执行printf("\n")换行,i--为2。当i=2时,j可以取1和2,i+j分别是3和4,执行printf("\n")换行,i--为1。当i=1时,J可以取1和2,i+j分别是2和3,执行printf("\n")换行,i--为0,不符合循环,退出。

考题 有下列程序: #includestdi0.h #defineN4 voidfun(inta[][N],intb[]) {inti; for(i=0;iN,i++)b[i]=a[i][i]; } voidmain( ) {intx[][N]={{1,2,3},{4),{5,6,7,8),{9,10}), y[N],i; fun(x,y); for(i=0;in;i++)printf("%d,",y[i]); printf("\n"); } 程序的运行结果是( )。A.1,2,3,4,B.1,0,7,0,C.1,4,5,9,D.3,4,8,10, 正确答案:BB。【解析】本题考查数组的初始化,在对二维数组元素赋初值时,如果只对部分元素赋初值,那未赋初值的元素自动取0。fun函数是将二维数组a中主对角线上的元素赋给数组b,所以y[4]=(1,0,7,0)。
最新考题