sokaoti.com
C语言程序设计试卷及答案 .

有以下程序

void f(int n, int *r)

{ int r1=0;

if(n%3==0) r1=n/3;

else if(n%5==0) r1=n/5;

else f(--n,&r1);

*r=r1;

}

main( )

{ int m=7,r;

f(m,&r); printf("%d\n",r);

}

程序运行后的输出结果是

A) 2

B) 1

C)3

D) 0


正确答案:A


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

int fun(int *x,int n)

{ if(n==0) return x[0];

else return x[0]+fun(x+1,n-1);

}

main( )

{ int a[]={1,2,3,4,5,6,7}; printf("%d\n",fun(a,3));}


正确答案:


以下程序的输出结果是______

nt fun(int*x,int n)

{if(n==0)

return x[0];

else return x[0]+fun(x+1,n-1);

}

main()

{int a[]={1,2,3,4,5,6,7};

printf(“%d\n”,fun(a,3));

}


正确答案:

10


有以下程序: #include<stdio.h> main( ) {int x=1,y=0; if(!x)y++; else if(x==0) if(x)y+=2; else y+=3; Drintf("%d\n"。v); } 程序运行后的输出结果是( )。

A.3

B.2

C.1

D.0


正确答案:D
因为x!=0,所以下列的循环不执行,只执行y++,最后结果为0。


以下程序 int aa[3][3]={{2},{4},{6}}; main() { int i,*p=&aa[0][0]; for(i=0;i<2;i++){ if(i==0)aa[i][i+1]=*p+1; else ++p; printf("%d",*p); } } 的输出是________。

A.23

B.26

C.33

D.36


正确答案:A
解析:观察题目,可以发现,*p=&aa[0][0]语句实际是将数组aa的首地址赋给了指针变量p,将i的值带入for循环中,i=0时,aa[0][1]=3;*p=2;*p输出的是指针所指向数组值,此时p所指向的是aa[0][0],输出2,而i=1时执行了++p操作使指针向后移动指向了aa[0][1],所以在输出*p时应为3。


C语言程序设计 笔试试题题号一二三四五六笔试(70%)综合(30%)总分分数 号学名姓试卷说明:1. 笔试卷面总分100分,取卷面成绩的70%计入总分;2. 综合成绩为平时成绩(10%)和实验成绩(20%)之和,占总分的30%;3. 答题时禁止拆开试卷钉,试卷背面即为草稿纸;4. 答题时间120分钟。一、单项选择题。将正确答案填入下面框中。 (本题16分,每小题1分) 题号12345678答案题号910111213141516答案注意行为规范 遵守考试纪律1. 有以下程序main()int a=1,b=0;if(!a) b+;else if(a=0) if(a) b+=2;else b+=3;printf(“%dn”,b);则程序输出( A )。A) 0 B) 1C) 2 D) 32. 有以下定义:int a; long b; double x,y;则下列正确的是( A )。A) a%(int)(x-y) B) a=x!=yC) (a*y)%bD) y=x+y=x 3. 若有定义 int (*p)3;则下列说法正确的是( C )。A) 定义了基类型为int的三个指针变量B) 定义了一个名为 *pt、具有三个元素的整型数值C) 定义了一个名为pt的指针变量,它可以指向每行有三个整数元素的二维数组D) 定义了基类型为int的具有三个元素的整型数组4. 有以下程序段main()int x=10;while(x-);printf(x=%dn,x);则最后的输出结果是:( B )。A) x=0 B) x= -1 C) x=1D)while构成无限循环5. 有以下程序:int fun()static int x=1;x *= 2; return x;main( ) int i,s=1;for(i=1;i1);A) 12 B) 3 C) 6 D) 113. 若有定义语句:double x,y,*px,*py;执行了px=x;py=y;之后,正确的输入语句是( B )。A) scanf(“%lf%lf”,x,y); B) scanf(“%lf,%lf”,px,py);C) scanf(“%f%f”, x, y); D) scanf(“%f%f”,x,y);14. 以下程序运行结果是( D )。char str =“abc“;printf(“%d, %d n“,strlen(str),sizeof(str);A)6,3 B) 3,3 C) 10,10 D) 3,1015. 以下程序段运行结果是( A )。#define f(x) x*x*xmain( ) int a=1,b,c;b=f(a+1);c=f(a+1);printf(“%d,%dn“,b,c);A) 4,8 B) 8,4 C) 8,8 D) 4,416. 有以下程序:main()FILE *f;f=fopen(“fa.txt“,“w“);fprintf(f,“day“);fclose(f);若文本文件fa.txt中原有内容为:hello,则运行以上程序后,文件fa.txt中的内容为( A )。A)day B) helloday C) daylo D)dayhello二、填空题。请按序号把答案填入下面框中, 不允许出框线。(本题20分,每空2分) 题号答 案题号答 案1arowcol6knext5m+10si或01. 以下fun函数功能是在N行M列的整型二维数组中,选出一个最大值作为函数值返回。int fun(int aNM) int i,j,row=0,col=0;for(i=0;iN;i+)for(j=0;jarowcol)row=i;col=j;return( 【1】 );2. 以下程序的功能是:将值为三位正整数的变量x中的数值按照个位、十位,百位的顺序拆分输出。main() int x=123;printf(“%d-%d-%dn”, 【2】 ,x/10%10,x/100);3. 下列程序运行时,若输入23he45a,输出结果是 【3】 #include main() char a=0;ch;while(ch=getchar()!=n)if(a%2!=0&(ch=a&ch=z) ch=ch-a+A;a+;putchar(ch);printf(“n”);4. 以下程序的功能是,通过函数fun输入字符并统计输入字符个数。用字符$作为输入结束标志。#include long 【4】 ;/*函数声明语句*/main() long n;n=fun(); printf(“n=%ldn”,n);long fun()long m; for(m=0;getchar()!=$; 【5】 ); return m;5. 有以下程序段,且变量已正确定义和赋值for(s=1.0,k=1;k=n;k+)s=s+1.0/(k*(k+1);printf(s=%fnn,s);请填空,是下面程序段的功能与之完全相同s=1.0;k=1;while( 【6】 )s=s+1.0/(k*(k+1); 【7】 ;printf(s=%fnn,s);6. 以下函数的功能是求两个整数的最大公约数。fun(int m,int n)int i=1,t;for(;i=m&idata); 【9】 ;printf(“n”);8. 以下程序的功能是:删除字符串中所有的空格。main() char s20=”how are you!”;int i,j;for(i=j=0;si!=0;i+)if(si!= ) sj=si; j+; sj= 【10】 ;三、请把下列程序运行结果填入答案框中,不允 许出框线,用“”表示回车。(本题24分,每小题3分) 题号12345678答案1244364121555553041. main() int i,j,a 2=1,2,3,4;for(i=0;i2;i+)for(j=i;j0& chi2) return(fib(n-1)+fib(n-2);else return(2);void main()printf(“%dn”,fib(4);4. main( )union examplestruct int x;int y;in;int a;int b;e;e.a=2;e.b=1;e.in.x=e.a+e.be.in.y=e.a*e.b;printf(“%dn”,e.in.y);5. struct NODEint k;struct NODE *link;void main() struct NODE m3,*p=m,*q=m+2;int i=0;

有以下程序:includeusing namespace std;int f(int,int);int main(){ int i:1,x; x=f

有以下程序: #include<iostream> using namespace std; int f(int,int); int main() { int i:1,x; x=f(i,i+1); cout<<x<<end1; return 0; } int f(int a,int b) { int c; c = a; if(a>b) c = 1; else if(a==b) c = 0; else c = -2; return c; } 运行后的输出结果是( )。

A.1

B.0

C.-1

D.-2


正确答案:D
解析:本题考核对函数调用方法的掌握程度。做此类题主要是弄清楚程序每一步的目的:在主函数前面声明了整型函数f。在主函数中,调用了函数f()。实参的值分别是1和2,1传给函数f的形参a,2传给函数f的形参b,函数返回的值赋给变量x。即为输出的函数值。具体分析一下函数f()的功能:如果a大于b,则赋予c的值为1;并且跳出if-else语句。如果a不大于b,则进入elseif分支中,如果a等于b,则赋予c的值为0,并跳出以下的if-else语句。如果a不等于b,则进入else分支,执行c=-2。因为实参1,2分别传给形参a,b,所以此时ab,f()函数应执行c=-2。即最终输出应为-2。


有以下程序:

#include<stdio.h>

main( )

{ int a=1,b=0;

if(--a)b++;

else if(a==0)b+=2;

else b+=3:

print[("%d\n",b);

}

程序运行后的输出结果是( )。

A.0

B.1

C.2

D.3


正确答案:D


以下程序的输出结果是() include main( ) { int a,b; for(a=1,b=1,a<=50;a+ +)

以下程序的输出结果是 ( ) # include<stdio.h> main( ) { int a,b; for(a=1,b=1,a<=50;a+ +) { if(b>=10) break; if (b%2==1) { b+=2; continue } b+=2; } printf("%d\n",a); }

A.4

B.5

C.6

D.7


正确答案:C


下列程序的运行结果是( )。 main() { int a=-5,b=1,c=1; int x=0,y=2,z=0; if(c>0)x=x+y; if(a<=0) { if(b>O) if(c<=0)y=x-y; } else if(c>0)y=x-y; else z=y; printf("%d,%d,%d\n",x,y,z); }

A.2,2,0

B.2,2,2

C.0,2,0

D.2,0,2


正确答案:A
解析: 本题考查if else语句的使用。先判断第1个if语句,因为c=1>0,所以x=x+y=0+2=2。第1个if语句,因为a=-50,所以进入下列的复合语句。经判断发现,复合语句中第2个if语句的条件均不满足,不执行任何语句退出,在这个过程中y和z的值没有发生变化。


下列程序的运行结果是( )。

main()

{ int a=-5,b=1,c=1;

int x=0,y=2,z=0;

if(c>0) x=x+y;

if(a<=0)

{ if(b>0)

if(c<=0) y=x-y;

}

else if(c>0) y=x-y;

else z=y;

printf("%d,%d,%d\n",x,y,z);

}

A.2,2,0

B.2,2,2

C.0,2,0

D.2,0,2


正确答案:A
解析:本题考查if else语句的使用。 先判断第1个if语句,因为c=1>0,所以x=x+y=0+2=2。第1个 if语句,因为a=-50,所以进入下列的复合语句。经判断发现,复合语句中第2个汀语句的条件均不满足,不执行任何语句退出,在这个过程中y和x的值没有发生变化。

更多 “C语言程序设计试卷及答案 .” 相关考题
考题 关于下面的程序 include main() { int x=3,y=0,z=0; if(x=y+z)printf("****"); else p关于下面的程序 #include<stdio.h> main() { int x=3,y=0,z=0; if(x=y+z)printf("****"); else printf("$$$$"); }说法正确的是______。A.有语法错误不能通过编译B.输出****C.输出$$$$D.可以通过编译,但不能通过连接,无法运行正确答案:C

考题 (27)有以下程序#include <stdio.h>main(){ int x=1,y=0;if(!x) y++;else if(x==0)if (x) y+=2;else y+=3;printf("%d\n",y);}程序运行后的输出结果是A)3B)2C)1D)0正确答案:D

考题 下面程序的输出结果是( )。 main() { int i=1,p; p=f(i,++i); printf("%d",p); } int f(int a, int b) { int C; if(a>b) C=1; else if(a==b)C=0; else C==-1; return (C); }A.-1B.0C.1D.2正确答案:B解析:执行“p=f(i,++i):”后i的值为2,所以a和b的值都为2,则c=0,选项B正确。

考题 下列程序的输出结果是()。includeint b=2;int func(int *a){b+=*a;return(b);}main(){i下列程序的输出结果是( )。 #include <stdio.h> int b=2; int func(int *a) { b+=*a;return(b);} main() { int a=2, res=2; res+=func(&a); printf("%d\n",res); }A.4B.6C.8D.10正确答案:B解析:对于函数体中的语句b+=*a;其中的“*”是指针运算符,*a就是main函数中变量a的值。

考题 有以下程序#include<stdio.h>main(){ int a=1,b=0;if(--a)b++;else if(a==0) b+=2;else b+=3:printf("%d\n",b);}程序运行后的输出结果是A.0B.1C.2D.3正确答案:C解析:本题考察运算符和选择语句,执行到if语句时,--a为0,所以不会执行后面的语句,但是会执行else if后面的语句,所以执行后,b=2,选项C)正确。

考题 请选出以下程序的输出结果()。includesub(int *s,int y){static int t=3; y=s[t];t--;}请选出以下程序的输出结果( )。 #include <stdio.h> sub(int *s,int y) { static int t=3; y=s[t];t--; } main() { int a[]={1,2,3,4},i,x=0; for(i=0;i<4;i++) { sub(a,x);printf("%d",x); } printf("\n"); }A.1234B.4321C.0D.4444正确答案:C解析:本题考查函数的形参和实参的关系。函数sub将实参x的值传给形参y,y值的改变不能使x的值发生改变,所以输出的x值始终为0。

考题 有以下程序:includeint fun(int x,int y){if(x==y)return(x);else return((x+y)/2);}m有以下程序: #include<stdio.h> int fun(int x,int y) {if(x==y)return(x); else return((x+y)/2); } main() {int a=1,b=2,c=3; printf("%d\n",fun(2*a,fun(b,C))); } 程序运行后的输出结果是( )。A.2B.3C.4D.5正确答案:A

考题 有以下程序 include int fun(int a, int b) { if(b==0) return a;有以下程序 #include <stdio.h> int fun(int a, int b) { if(b==0) return a; else return(fun(-a,-b)); } main() { printf("%d\n",fun(4,2)); } 程序的运行结果是______。A.1B.2C.3D.4正确答案:B解析:在调用一个函数的过程中又出现直接或间接调用该函数本身,称为函数的递归调用。本题考查的是函数递归调用。首先当a=4,b=2时,调用fun(4,2),不满足条件b==0,继续调用fun函数;此时a=3,b=1,即调用fun(3,1),不满足条件b=0,继续调用fun函数;此时a=2,b=0,满足条件b=0,返回a的值2。

考题 有以下程序: int f(int n) { if (n==1) return 1; else return f(n-1)+1; } main() { int i,j=0; for(i=i;i<3;i++) j+=f(i); printf("%d\n",j); } 程序运行后的输出结果是( )。A.4B.3C.2D.1正确答案:B解析:通过分析不难写出,f()函数的数学表达式为: f(n)=1 n=l; f(n)=f(-1)+1 n≠1; 在主函数中for循环执行了两次函数调用f(i)。第一次:i为1,调用f(1)得到返回值1,并把它加到j中,j的值为1。第二次i为2,调用f(n),根据递归公式可知f(2)=f(1)+1,得到返回值2并把它加到j中,j的值为3。所以最后输出,i的值为3。

考题 有以下程序#includemain(){ int x=1,y=0;if(!x) y++;else if(x==0)if (x) y+=2;else y+=3;printf("%d\n",y);}程序运行后的输出结果是A.3B.2C.1D.0正确答案:D