(完整版)计算机二级C语言考试编程题题库

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

#include<stdio.h>

main()

{

int i,j,sum;

for(i=3;i>=1;i--)

{

sum=0;

for(j=1;j<=i;j++) sum+=i*j;

}

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

}


正确答案:


有以下程序: int fun(int x[],int n) {static int sum=0,I; for(i=0;i<n;i++)sum+=x[i]; return sum; } main() {int a[]={1,2,3,4,5},b[]={6,7,8,9},s=0; s=fun(a,5)+fun(b,4);printf("%d\n",s); } 程序执行后的输出结果是( )。

A.45

B.50

C.60

D.55


正确答案:C
解析:fun函数中用static声明的局部变量sum的值在函数调用结束后不消失而保留原值,即占用的存储单元不释放,在下一次调用该函数时,该变量已有值,就是上一次函数调用结束时的值。


有如下程序: include using namespace std; int main(){ int sum;

有如下程序: #include<iostream> using namespace std; int main(){ int sum; for(int i=0;i<6;i+=3){ sum=i; for(int j=i;j<6;j++)sum+=j; } cout<<sum<<end1; return 0; } 运行时的输出结果是( )。

A.3

B.10

C.12

D.15


正确答案:D
解析:此题考查的是for循环。首先进入外循环,根据循环条件,i的初始化值为0,赋值给sum,进入内循环.i的初值也被赋值为 i的初始值0,所以第一次内循环sum值为0,判断j=0,小于6,进行第二次内循环,sum的值为1,同理,仍然进行内循环直到j=6,跳出内循环,sum=15:外循环中i=3,i6,满足循环条件进入第二次外循环,i=3,sum=3,进入内循环,j=3,同理,计算内循环中sum的值,直到j=6跳出内循环,此时sum=15;外循环中i=6,跳出外循环,执行输出语句,即sum=15。


有以下程序

int fun(int x[],int n)

{static int sum=0,i;

for(i=0;i<n;i++) sum+=x[i];

return sum;

}

main()

{int a[]={1,2,3,4,5},b[]={6,7,8,9},s=0;

s=fun(a,5)+fun(b,4);printf("%d\n",s);

}

程序执行后的输出结果是

A.45

B.50

C.60

D.55


正确答案:C
解析:内部静态变量是始终存在的,当函数被调用退出后,内部静态变量会保存数据,再次调用该函数时,以前调用时的数值仍然保留着。Fun(a,5)的值是15,再次调用后sum=15,所以Fun(b,4)=45,s=45+15=60。


下列程序的输出结果是______。 #define A100 main() { int i=0,sum=0; do{ if(i==(i/2)*2)continue; sum+=i; }while(++i<A) ; printf("%d\n",sum); }

A.2500

B.2050

C.4

D.0


正确答案:A
解析:本题程序的功能是求1到99之间(包括1和99)所有奇数之和。程序中的while循环的终止条件为++i=100,在 while循环体内,如果i是偶数,则执行continue,跳过这一次循环,执行下一次循环,否则求和。最后输出的值是1到 99之间(包括1和99)所有奇数之和(1+99)*50/2=2500。


计算机 c 语言编程题库1、求 100之内自然数中最大的能被 17整除的数 。void main() int i;for(i =100;i0;i-)if(i%17=0)break;printf(%dn,i);2、已知a, b, c都是1位整数,求当三位整数 abc、cba的和为1333时a、b、c 的值。void main()int a,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,%dn,a,b,c);3、计算并输出 200-400之间不能被 3整除的整数的和。void main() int i,sum=0;for(i=200;i=400;i+) if(i%3!=0) sum=sum+i;printf(%dn,sum);4、从键盘输入 10 个数,统计非负数的个数,并计算非负数的和。void main() int i,n=0,sum=0;int a10;printf( 请“输入 10个数: ”);for(i=0;i10;i+) scanf( “ %d” ,&ai);for(i=0;i=0) sum=sum+ai; n+; printf( 非负个数是 %d,sum=%dn,n,sum);5、求 100 之内自然数中偶数之和。void main() int i,sum=0;for(i=0;i=100;i+) if(i%2=0) sum=sum+i; printf(sum=%dn,sum);6、输入 5 个数,求和并输出。要求编写求和的函数。void main() int b(int x,int n);int sum=0;int a5;int i;printf( 请输入 5 个数 :); for(i=0;i5;i+) scanf(%d,&ai);sum=b(a,5);printf(sum=%dn,sum);int b(int x,int n) int i,sum=0;for(i=0;i5;i+)sum=sum+xi;return sum; 7、编程计算 1*2*3+3*4*5+5*6*7+.+99*100*101 的值。 void main() int i,sum=0; for(i=1;i=99;i=i+2) sum=sum+i*(i+1)*(i+2); printf(%dn,sum);8、编写程序,将用户输入的字符串中所有的字符a 用*代替,然后输出void main() int i,n;char b20;printf( 请输入字符串 :);gets(b);n=strlen(b);for(i=0;in;i+)if(bi=a)bi=*;for(i=0;in;i+)printf(%c,bi); printf(n);9、编写程序,将一个一维数组的元素逆序存放并输出。例如,原顺序为3,4, 5,逆序后为 5,4,3,2,1。void main() int i;int a5;printf( 请“输入 5个数: ”); for(i=0;i5;i+) scanf( “ %d” ,&ai);for(i=0;i2;i+)t=ai;ai=a4-i;a4-i=t;for(i=0;i0) printf(zn);if(a0)printf(fn);if(a%2=0)1, 2,如果为负printf(0n);if(a%2!=0) printf(jn);12、计算并输出 1-200之间不能被 5 整除的整数的和。 void main() int i,sum=0; for(i=1;i=200;i+) if(i%5!=0) sum=sum+i; printf(%dn,sum);13、从键盘输入n和a的值,计算a+aa+aaa+aa.a(n个a)的值 void main() int i,a,n;long int sum=0,st=0; printf( 请输 a 和 n:); scanf(%d%d,&a,&n);for(i=1;i=n;i+) st=st+a; sum=sum+st; a=a*10;printf(%ldn,sum);14、输入 5 个数,求它们中最大值和平均值并输出。void main()int a5;int i,j,max,sum=0; float average; printf( 请输入 5 个数 :); for(i=0;i5;i+) scanf(%d,&ai);max=a0; for(j=0;j5;j+) sum=sum+aj; if(maxaj) max=aj;printf(max=%d,average=%fn,max,average);15、输出所有 200-400之间能被 3 整除且个位数字为 6 的整数。void main()int i; for(i=200;i=400;i+) if(i%3=0)&(i-6)%10=0) printf(%dn,i);printf(n);16、编写程序,将用户输入的字符串中所有的字符a 去掉,然后输出剩余的字符。void main() int i,j,n1;char a20;printf(请输入字符串:);gets(a);n1=strlen(a);for(i=0;in1;i+)if(ai!=a)printf(%c,ai); printf(n);17、计算并输出 200-400之间不能被 7 整除的整数的和。void main() int i,sum=0;for(i=200;i=400;i+)if(i%7!=0)sum=sum+i;printf(sum=%dn,sum);18、计算并输出 200-400之间不能被 5 整除的整数的和。void main() int i,sum=0;for(i=200;i=400;i+)if(i%5!=0)sum=sum+i;printf(sum=%dn,sum);19、从键盘输入 10 个数,统计非正数的个数,并计算非正数的和void main() int i,n=0,sum=0;int a10;printf( 请“输入 10个数: ”);for(i=0;i10;i+)scanf( “ %d” ,&ai);for(i=0;i10;i+)if(ai=0) sum=sum+ai;n+;printf( 非正个数是 %d,sum=%dn,n,sum);20、输入一串字符,将其中的大写字母变成对应的小写字母并输、出。 void main() int i,n;char a20;printf(请输入字符串:);gets(a);n=strlen(a); for(i=0;i=A&ai=Z) ai=ai+32;for(i=0;in;i+)printf(%c,ai); printf(n);21、打印所有的水仙花数。所谓水仙花数是指一个三位数,其各位数字的立方 和等于该数。例如, 153 就是一个水仙花数,因为 153=1*1*1+5*5*5+3*3*3 void main() int a,b,c,s; for(a=1;a=9;a+)for(b=0;b=9;b+)for(c=0;c=9;c+) if(a*100+b、*10+c=a*a*a+b*b*b*b+c*c*c)s=a*100+b*10+c;printf(%dn,s);22、一个皮球从 100 米高度自由落下,每次落地后反弹回原高度的一半,再落 下,再反弹。求当它第 10次落地时,共经过了多少米,第 10 次反弹多高? void main() int i;for(i=2;i=10;i+)sum=sum+2*h;h=h/2;printf(%f,%fn,sum,h);23、输出所有 0-200之间能被 3 整除且个位数字为 6的整数。 void main()int i;for(i=0;i=200;i+)if(i%3=0)&(i-6)%10=0)print

有以下程序: void sum(int *a) { a[0]= a[1]; } main() { int aa[10]={1,2,3,4,5,6,7,8,9,10},i; for(i=2;i>=0;i--)sum(&aa[i]); printf("%d\n",aa[0]); } 执行后的输出结果是 ______。

A.4

B.3

C.2

D.1


正确答案:A
解析:分析函数调用即得。


●下列程序运行后输出的数据是(51)。

int sum(int n)

{

int p=1;

int s=0;

int i=0;

for(i=1;i﹤=n;i++) s+=(p*=i);

retum s;

}

main()

{

printf((“sum(5)=%d\n”,sum(5));

}

(51) A.sum(5)=151

B.sum(5)=152

C.sum(5)=153

D.sum(5)=155


正确答案:C


以下程序的输出结果是【 】。include main() {int i,j,sum; for(i=3;i>=-1;i-) (sum=0; fo

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

include<stdio.h>

main()

{int i,j,sum;

for(i=3;i>=-1;i-)

(sum=0;

for(j=1;j<=i;j++) sum+=i*j;

}

printf("%d\n,sum);

}


正确答案:√
1 解析:本题考查的是for循环嵌套。外循环i变量从3递减到1,内循环变量j在每轮外循环的作用下从1递增到i,并在每轮外循环结束时,通过内循环求得sum的值,但由于外循环体的第一条语句是将变量sum初始化为0,所以每轮外循环结束时求得的sum值均被下一轮外循环执行时重新初始化为0,只有在最后一轮,当i=1时,内循环求得stan=1,跳出内循环,i的值减1变为0,不满足i>=1这个条件,结束外循环,此时输出sum的值为1。


给定程序MODllC中函数fun的功能是:输出M行M列整数方阵,然后求两条对角线上各元素之和,返回此和数。

inClude<coMo.h>

inClude<stdio.h>

dehne M 5

/************fOUnd************/

int fun(int n,int xx[][])

{int i,j,sum=0;

printf("\n The%dx%d matrix:\n"M,M);

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

{ for(j=0;j<M;j++)

/************found************/

printf("%f",xx[i][j]);

printf("\n");

}

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

sum+=xx[i][i]+XX[i][[n-i-1];

return(sum);

}

main( )

{int aa[M][M]={{1,2,3,4,5),{4,3,2,1,0),

{6,7,8,9,0},{9,8,7,6,5},{3,4,5,6,7}};

clrscr( );

printf("\n The sum Of all elements On 2 diagnals is %d."fun(M,aa));

}


正确答案:int fun(int nint xx[][]) 改为 int fun(int nint xx[][M)) printf("%fxx[i][j]); 改为 printf("%d"xx[i][j]);
int fun(int n,int xx[][]) 改为 int fun(int n,int xx[][M)) printf("%f,xx[i][j]); 改为 printf("%d,"xx[i][j]); 解析:二维数组作为函数形参时,二维长度不可缺省,只能省略一维的长度。在格式输出函数中,血型数据输出时对应的控制符是%d.


有以下程序: void sum(int *A) { a[0] =a[1]; } main ( ) { int aa[10]={1,2,3,4,5,6,7,8,9,10}, i; for (i=2 ;i>=0;i--) sum(&aa[i] ); print f ("%d\n",aa[0]); } 执行后的输出结果是

A.4

B.3

C.2

D.1


正确答案:A
解析:本题考核的知识点是数组的定义、赋初值以及函数调用的组合应用.本题中函数sum(int*A)的作用是:将形参a所指的数组中的第二个元素的值a[1]赋给第一个元素a[0]。主函数中定义一个长度为10的整型数组并赋初值,接着执行一个for循环,该循环共执行了3次.当i=2时,调用函数sum(&aa[2]),主函数中将&aa[2]作为实参传给行参a,所以此时形参a所指的数组的第一个元素和第二个元素分别为aa[2]和aa[3],故执行完该函数后将aa[3]的值赋给aa[2],即aa[1]=aa[3]=4,当i=1时,调用函数sum(&aa[1]),主函数中将&aa[1]作为实参传给行参a,所以此时形参a所指的数组的第一个元素和第二个元素分别为aa[1]和aa[2],故执行完该函数后将aa[2]的值赋给aa[1],即aa[1]=aa[2]=4;当i=0时;调用函数sum(&aa[0]),,主函数中将&aa[0]作为实参传给行参a,所以此时形参a所指的数组的第一个元素和第二个元素分别为aa[0]和aa[1],故执行完该函数后将aa[1]的值赋给aa[0],即aa[0]=aa[1]=4;故最后输出的aa[0]的值为4,所以,4个选项中选项A符合题意。

更多 “(完整版)计算机二级C语言考试编程题题库” 相关考题
考题 下列程序的输出结果是______。 #define A 100 main() { int i=0,sum=0; do{ if(i==(i/2)*2) continue; sum+=i; }while(++i<A) ; printf("%d\n",sum);A.2500B.2050C.4D.0正确答案:A解析:本题程序的功能是求1到99之间(包括1和99)所有奇数之和。程序中的while循环的终止条件为++i=100,在while循环体内,如果i是偶数,则执行continue,跳过这依次循环,执行下一次循环,否则求和。最后输出的值是1到99之间(包括1和99)所有奇数之和(1+99)*50/2=2500。

考题 阅读以下说明和C语言程序,将应填入(n)处的字句写在对应栏内。【说明】计算n的合数。一个整数n可以有多种划分,使其划分的一列整数之和为n。例如,整数5的划分为:54 13 23 1 12 2 12 1 1 11 1 1 1 1共有7种划分。这种划分的程序如下所示。【程序】include <stdio.h>int n[1000],m,k;void output sum(){int j;for(j=0;n[j]!=0;j++)printf("%d\t",n[j]);printf("\n");}void sum(int i)if(m-n[i]<n[i]){ m=m-n[i];(1)i++;n[i+1]=0;}else{(2)m-=n[i];i++;}if(m!=n[i])sum(i);elseoutput_sum();if(n[i]>1){n[i]--;(3)}else{while((n[i]==1)&&(i>O)){i--;(4)}if(i!=0){(5)sum(i);}}}void main(){int i;scanf("%d",&n[0]);m=k=n[0];for(i=1;i<=k;i++)n[i]=0;while(n[0]!=1){n[0]--;i=0;sum(0);m=k;}}正确答案:(1)n[i+1]=m; (2)n[i+1]=n[i]; (3)sum(i);(4) m+=n[i]; (5)n[i]--;(1)n[i+1]=m; (2)n[i+1]=n[i]; (3)sum(i);(4) m+=n[i]; (5)n[i]--; 解析:本题考查C语言中计算n合数方法的实现。 题目要求计算n的合数,我们首先来了解一下什么是n的合数。在正整数n的所有不同的划分中,将最大加数n1不大于m的划分个数记作q(n,m)。可以建立q(n,m)的如下递推关系。 (1)q(n,1)=1,n1 当最大数n1不大于1时,任何正整数只有一种划分形式,就是全1。 (2)q(n,m)=q(n,n),mn 最大加数n1实际上不能大于n。因此,q(1,m)=1。 (3)q(n,n)=1+q(n,n-1) 正整数n的划分由n1=n的划分和n1≤n-1的划分组成。 (4)q(n,m)=q(n,m-1)+q(n-m,m),n>m>1 正整数n的最大加数n1不大于m的划分由n1=m的划分和n1≤m-1的划分组成。要想求出所有解,只有递归到最底层即全为1为止。 知道了上述特性,下面我们来看代码。在代码中首先声明一个数组和两个全局变量 k,m。结合程序可以看出,其中数组n[i]中存放的是当前划分的最大加数,而m中存放的是当前被划分的数。程序代码中有三个函数,一个是主函数、一个output_sum()函数和一个sum()函数,函数output_sum()的功能很简单,就是输出一次划分结果,在sum()函数中被调用。 经过分析不难发现,函数sum()的作用是实现整数的划分。在函数体中,首先是一个条件判断语句,其作用是判断当前被划分的数m是否小于当前最大加数的两倍,如果条件成立,说明数被划分为两个数后,其最大加数大于另一个数,而另一个数应该存放在数组中。此时执行语句m=m-n[i]来求出另一个数,接下来应该是保存这个数到数组中的下个位置,第(1)空就用来完成这个任务,因此,答案为n[i+1]=m。 第(2)空所在的位置是条件不成立的情况下运行的语句,条件不成立,说明数被划分为两个数后,其最大加数小于另一个数,数可以有更大的最大加数,因此,将当前的最大加数保存到数组中的下个位置,此空答案为n[i+1]=n[i]。 第(3)空也在一个条件选择语句下面,此条件语句用于判断当前最大加数是否大于1,如果大于1,则需要接着划分,因此要调用函数sum(),其参数是i,所以此空答案为sum(i)。 第(4)空是条件不成立即当前最大加数为1的情况下执行的语句,当最大加数为1时,说明递归到了最底层,此时,递归应该往回走了,这需要还原当前最大划分数m(为这个数的其他划分做准备),因此,这个空的答案为m+=n[i]。 第(5)空是在条件i!=0为真的情况下执行的语句,如果条件为真,说明递归还没有回到最上层,应该求当前被划分数在当前最大加数变小后的其他划分情况,因此,此空答案为n[i]--。

考题 单选题有以下程序:#include int sum(int *array,int len){ if(len == 0)  return array[0]; else  return array[0]+sum(array+1,len-1);}main(){ int i=1,j=3; printf(%d,,i++); {  int i = 0;  i+=j*2;  printf(%d,%d,,i,j); } printf(%d,%d,i,j);}程序运行后的输出结果是(  )。A 1,6,3,1,3B 1,6,3,2,3C 1,6,3,6,3D 1,7,3,2,3正确答案:B解析:程序执行过程为:输出i=1,之后i自增,得i=2;然后执行复合语句,赋值i=0,执行语句i+=j*2;得i=6;输出i=6,j=3;花括号内的i的作用域仅限于该花括号内,在括号外的i为程序第四行定义的i,这两个i属于不同的变量。之后再输出i=2,j=3。答案选择B选项。

考题 下列程序的输出结果是______。main (){ int i,sum;for(i=1;i<7;i++)sum+=i;printf("%d",sum);}正确答案:无定值无定值 解析:for(i=1;i7;i++)决定了循环次数为6次,每次执行的操作是sum+=i,但由于sum没有初始化,并不知道sum的初值是多少,所以结果无定值。

考题 单选题有如下程序:#include int *sum(int data){ static int init=0; init+=data; return &init;}main(){ int i,*p; for(i=1;i<=4;i++) sum(i); p=sum(0); printf(%d,*p);}程序运行后的输出结果是(  )。A 15B 0C 1D 10正确答案:A解析:static变量编译时,将其分配在内存的静态存储区中,在整个程序运行期间都不释放这些存储单元,即使退出函数,下次再进入该函数时,静态局部变量仍使用原来的存储单元,值是上一次函数调用结束时的值。程序执行过程为:执行for循环,i=1,调用函数sum(1),data=1,init=0,init=init+data=1;i=2,调用函数sum(2),data=2,init=1,init=init+data=3;i=3,调用函数sum(3),data=3,init=3,init=init+data=6;i=4,调用函数sum(4),data=4,init=6,init=init+data=10;i=5退出for循环。调用函数sum(0),data=0,init=10,init=init+data=10,返回指向init的指针,输出init=10。答案选择D选项。

考题 本题的功能是求1~100的自然数的累加,并打印输出计算结果。public class javal{public static void main(String[]args){int sum=0;int i=1;for(;;){if( ){sum=sum+i:}else’;}System.OUt.println("sums="+sum);}}正确答案:第1处:i<=100第2处:break第3处:i++或i=i+1或i+=1【解析】for(;;){}可以构成无限循环,所以第l处和第2处分别为跳出循环的条件和跳出循环;第3处为循环条件的自加操作。

考题 有以下程序:include void sum(int *a){a[0]=a[1];}main(){int aa[10]={1,2,3,4,5,6,7,有以下程序: #include <stdio.h> void sum(int *a) { a[0]=a[1]; } main() { int aa[10]={1,2,3,4,5,6,7,8,9,10},i; for(i=2;i>=0;i--) sum(&aa[i]); printf("%d\n",aa[0]); } 执行后的输出结果是( )。A.4B.3C.2D.1正确答案:A解析:该程序通过main函数循环凋用sum函数。当i=2时,将实参aa[2]的地址传递给形参,此时a[0]=a[1]=aa[3]=4,即aa[2]=4;当i=1时,将实参aa[1]的地址传递给形参,此时a[0]=a[1]=aa[2]=4,即aa[1]=4;当i=0时,将实参aa[0]的地址传递给形参,此时a[0]=a[1]=aa[1]=4,即aa[0]=4;当i=-1时,不满足条件i>=0,跳出循环,程序执行后数组aa中的值为4,4,4,4,5,6,7,8,9,10,所以aa[0]=4。

考题 以下程序的运行结果是().  main()  {  int  i=1,sum=0;  while(i<10)  sum=sum+1;i++;     printf("i=%d,sum=%d",i,sum);  }A、i=10,sum=9B、i=9,sum=9C、i=2,sum=1D、运行出现错误正确答案:D

考题 以下程序执行后sum的值是 ( ) main( ) { int i,sum; for(i;i<6;i+ +)sum+=i; printf("%d\n",sum); }A.15B.14C.不确定D.0正确答案:C

考题 有以下程序: void sum(int *A) {a[0]=a[1];} main() { int aa[10]={1,2,3,4,5,6,7,8,9,10},i; for(i=1;i>0;i--)sum(&aa[i]); printf("%d\n",aa[0]); } 程序运行后的输出结果是______。A.4B.3C.2D.1正确答案:D解析:C语言规定,实参变量对形参变量的数据传递是“值传递”,只由实参传给形参,而不能由形参传回来给实参。函数调用结束后,形参单元被释放,实参单元仍保留并维持原值。本题要求输出aa[0]的值,结果应为1。