计算机二级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 解析:第一空:题目要求找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); 解析:本题考查在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 解析: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("*%d",i);break;}
i++:
}while(i!=O);
printf("\n");
}
程序的运行结果是( )。
A.*7
B.*3*5
C.*5
D.*2*6
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++;
阅读下列函数说明和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)处应该为矩阵下边界递减;(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 解析:考查用指针引用字符串数组中元素的方法。题中需要注意两个问题:一是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;
解析:本题主要考查输出换行的问题,要求每行8个输出,因此,下划线处应填的语句是if(i%8=0)printf("\n");选项A相当于空—行,前七个数每输出—个数换行,从第八个数以后不换行输出剩下的数。选项B相当于前八个数不输出,从第九个数开始不换行输出剩下的数。选项D相当于不换行从数组中的第二个数开始输出,凡是i对8取模为0的数,均不输出。所以选项C是正确的。
相关考题:
- 红内期发育成熟的时间,因不同虫种而异,间日疟原虫和卵形疟原虫为()小时,三日疟原虫为()小时,恶性疟原虫为()小时,产生相应的间日发热和三日发热等不同发热周期。
- 何谓肿瘤标志物?
- 急性支气管炎按照病变特点可分为()A、急性卡他性支气管炎B、急性化脓性支气管炎C、急性溃疡性支气管炎D、急性过敏性支气管炎
- 诊断恶性肿瘤的主要依据为肿瘤的()。A、异型性B、继发改变C、肉眼形态D、对机体的影响
- 疟原虫抗原的复杂性和变异性也是导致免疫球蛋白过度产生的原因。()是脑型疟的一个致病因子。
- 男性患儿,5岁,双眼平视前方时上睑缘位于瞳孔上缘的稍下方。查体:上直肌功能正常,上睑缘上提的幅度6mm。如采用上睑提肌缩短术后1周发现矫正不足,应采取如下措施()A、不必特殊处理,嘱加强术后肌肉功能锻炼即可B、立即再次手术,进一步缩短提上睑肌或改用额肌悬吊C、术后1个月再行提上睑肌缩短或额肌悬吊D、术后半年再行提上睑肌缩短或额肌悬吊E、暂时不手术,待近成年能配合手术以后再施行手术
- 生物防制是利用生物或生物制剂防制媒介按蚊的方法,目前用于防制媒介的生物及其制剂分为()和()两大类。
- 疟疾卫生服务因素包括哪些?
- 许莫结节是指椎间盘()A、向后突出B、向椎间孔突出C、向椎旁突出D、向椎体内突出E、向前突出
- 三热病人具体是指:(),(),()。