一、单选 ??共40题 (共计40分)
第1题 (1.0分) ???????题号:6675 ???????难度:易 ???????第1章
以下选项中叙述正确的是
A:C程序中的语句要经过编译才能转换成二进制机器指令
B:算法需要包含所有三种基本结构
C:有些算法不能用三种基本结构来表达
D:简单算法的操作步骤不能超过20步
答案:A
第2题 (1.0分) ???????题号:7169 ???????难度:中 ???????第2章
表示关系式x≤y≤z的C语言表达式的是
A:(x<=y)&&(y<=z)
B:(x<=y)||(y<=x)
C:(x<=y<=z)
D:x<=y)!(y<=x)
答案:A
第3题 (1.0分) ???????题号:7193 ???????难度:较易 ???????第2章
若变量已正确定义,以下选项中非法的表达式是
A:a!=4||'b'
B:'a'=1/2*(x=y=20,x*3)
C:'a' % 4
D:'A' + 32
答案:B
第4题 (1.0分) ???????题号:6330 ???????难度:中 ???????第2章
以下正确的字符常量是().
A:"AB"
B:'\0AB'
C:'AB'
D:'\xAB'
答案:D
第5题 (1.0分) ???????题号:6384 ???????难度:中 ???????第2章
有以下程序:
#include ?<stdio.h>
main()
{ int s,t,A=10; double B=6;
??s=sizeof(A); t=sizeof(B);
??printf("%d,%d\n",s,t);
}
在VC6.0平台上编译运行,程序运行后的输出结果是().
A:10,6
B:4,4
C:2,4
D:4,8
答案:D
第6题 (1.0分) ???????题号:6769 ???????难度:中 ???????第3章
若有定义:
char s[30] = {0};
运行时输入:
This is a string.<回车>
则以下不能正确读入整个字符串:
This is a string.
到字符数组 s 中的语句组是
A:i = 0;while ((c=getchar())!='\n') s[i++] = c;
B:gets(s);
C:for (i=0; (c=getchar()) != '\n'; i++) s[i] = c;
D:scanf("%s", s);
答案:D
第7题 (1.0分) ???????题号:7369 ???????难度:较易 ???????第3章
若有定义:int ?a; float ?b; double ?c; ,程序运行时输入:a=1,b=2,c=3 <回车>,能把
值1输入给变量a、值2输入给变量b、值3输入给变量c的输入语句是
A:scanf("a=%d,b=%f,c=%lf", &a,&b,&c);
B:scanf("%d%f%lf", &a,&b,&c);
C:scanf("a=%d,b=%lf,c=%lf", &a,&b,&c);
D:scanf("a=%d,b=%f,c=%f", &a,&b,&c);
答案:A
第8题 (1.0分) ???????题号:6900 ???????难度:较易 ???????第3章
以下不能输出字符A的语句是(注:字符A的ASCII码值为65,字符a的ASCII码值为97)
A:printf ("%c \n", 'a'-32);
B:printf ("%d \n", 'A');
C:printf ("%c \n", 65);
D:printf ("%c \n", 'B'-1);
答案:B
第9题 (1.0分) ???????题号:6205 ???????难度:中 ???????第4章
有下列程序 ?
????#include ?<stdio.h>
????main()
????{ ?
????????int a=0,b=0,c=0; ?
????????if (++a || ++b && ++c)
????????????printf("%d,%d,%d\n", a, b, c);
????}
程序执行后的输出结果是().
A:1,1,1
B:1,0,0
C:0,1,1
D:1,1,0
答案:B
第10题 (1.0分) ???????题号:6556 ???????难度:易 ???????第4章
以下说法正确的是().
A:复合语句中包含的语句种类没有限制
B:复合语句中不能有分支语句
C:复合语句中不能有循环语句
D:一条复合语句不能超过50行
答案:A
第11题 (1.0分) ???????题号:6048 ???????难度:中 ???????第4章
有以下程序
#include ?<stdio.h>
main( )
{ ?int ?t;
???scanf("%d", &t );
???if( t++ < 6 ) printf("%d\n", t);
???else ?????????printf("%d\n", t--);
???printf("\n");
}
执行时输入:6<回车>,则输出结果是
A:6
B:8
C:7
D:5
答案:C
第12题 (1.0分) ???????题号:6265 ???????难度:中 ???????第4章
以下各选项中的代码段执行后,变量y的值不为1的是().
A:int x=5,y=0; if(5) y=1;
B:int x=5,y=0; if(x) y=1;
C:int x=10,y=0; if(x=y) y=1;
D:int x=5,y=10; if(x=y) y=1;
答案:C
第13题 (1.0分) ???????题号:6775 ???????难度:中 ???????第5章
有如下程序段
??????for(i=0;i<10;i++)
?????????if(i>5) ?break;
则循环结束后i的值为
A:10
B:5
C:9
D:6
答案:D
第14题 (1.0分) ???????题号:6988 ???????难度:中 ???????第5章
有以下程序
????#include <stdio.h>
????main()
????{ ?int ?a = 7;
???????while ( a-- ) ;
???????printf ("%d\n", a);
????}
程序运行后的输出结果是
A:0
B:-1
C:1
D:7
答案:B
第15题 (1.0分) ???????题号:6713 ???????难度:中 ???????第5章
有如下程序
#include <stdio.h>
main()
{
????char ch = 'M';
????while (ch != 'K')
????{
????????ch --;
????????putchar(ch);
????}
????printf("\n");
}
程序运行后的输出结果是
A:MN
B:LK
C:OP
D:MM
答案:B
第16题 (1.0分) ???????题号:6149 ???????难度:较难 ???????第5章
有下列程序
#include ?<stdio.h>
main( )
{ ?int a=123456, b;
???while(a)
???{ ?b = a%10;
??????a /= 10;
??????switch(b)
??????{ ?default: printf("%d", b++);
?????????case 1: continue;
?????????case 2: printf("%d", b++); continue;
?????????case 3: printf("%d", b++);
?????????case 4: printf("%d", b++); continue;
??????}
???}
}
程序执行后的输出结果是().
A:654342
B:234456
C:1234456
D:6543421
答案:A
第17题 (1.0分) ???????题号:6036 ???????难度:中 ???????第5章
以下程序段中,与其他三个功能不同的程序段是
A:s=0;i=1;
?for( ; ; ) {s+=i; i++; if(i<=10) break;}
B:s=0,i=1;
?for( ; i<=10; ) {s+=i,i++;}
C:s=0;
?for(i=1;i<=10;i++){s+=i;}
D:for(s=0,i=1; i<=10; s+=i,i++) ;
答案:A
第18题 (1.0分) ???????题号:6049 ???????难度:中 ???????第5章
有以下程序
#include ??<stdio.h>
main( )
{ ?char ?ch = 'D';
???while (ch > 'A')
???{ ??ch --;
???????putchar(ch);
??????if (ch == 'A') ?break;
??????putchar(ch+1);
???}
}
程序运行后的输出结果是
A:CB
B:BCA
C:CCBB
D:CDBCA
答案:D
第19题 (1.0分) ???????题号:5971 ???????难度:中 ???????第6章
有以下程序
#include ??<stdio.h>
#include ??<string.h>
main( )
{ char ?a[20]="ab",b[20]="cdef";
??int ?k=0;
??strcat(a,b);
??while(a[k]!='\0') { b[k]=a[k]; k++;}
??puts(b);
}
程序的运行结果是
A:abcdef
B:cbcdef ??
C:cdef ?
D:ab
答案:A
第20题 (1.0分) ???????题号:6056 ???????难度:中 ???????第6章
有以下程序
#include ??<stdio.h>
main( )
{ ??int ?i, k=0, a[10];
????for( i=0; i<10; i++ ) a[i]=i;
????for( i=0; i<4; i++ ) k += a[i] + i;
????printf("%d\n", k);
}
程序运行后的输出结果是
A:10
B:16
C:6
D:12
答案:D
第21题 (1.0分) ???????题号:7119 ???????难度:中 ???????第6章
若有以下程序
?????#include <stdio.h>
?????main()
?????{ ?char ?a[20], b[ ]="The sky is blue."; ???int ?i;
????????for (i=0; i<7; i++) ??scanf("%c", &b[i]);
????????gets(a); ??????????printf("%s%s\n", a,b);
?????}
执行时若输入: ?(其中<Enter>表示回车符)
Fig flower is red. <Enter>
则输出结果是
A:wer is red.Fig flo is blue.
B:wer is red.Fig flo
C:wer is red.The sky is blue.
D:Fig flower is red.The sky is blue.
答案:A
第22题 (1.0分) ???????题号:6850 ???????难度:中 ???????第6章
下列定义数组的语句中,正确的是().
A:#define ?N ?10
int ?x[N];
B:int ?N=10;
int ?x[N];
C:int x[0..10];
D:int x[ ];
答案:A
第23题 (1.0分) ???????题号:7120 ???????难度:中 ???????第6章
若有以下程序
?????#include <stdio.h>
?????main()
?????{ ?char ?w[20], a[5][10]={"abcdef", "ghijkl", "mnopq", "rstuv", "wxyz"};
????????int ?p[6][2]={{0,1},{1,5},{0,0},{0,2},{1,4},{4,4}}, i;
????????for (i=0; i<6; i++) ?w[i]=a[ p[i][0] ][ p[i][1] ];
????????puts(w);
?????}
则程序的输出结果是
A:catis
B:ababj
C:ckbdl
D:black
答案:D
第24题 (1.0分) ???????题号:6455 ???????难度:较难 ???????第6章
有定义语句:int ?i; ?char ?s1[10], ?s2[10]= "Program"; ?则能正确给s1数组赋字符串的语句是( ).
A:for(i=0; i<=7; i++) s1[i]=s2[i];
B:s1=s2;
C:while(s2) s1++ =s2++;
D:for(i=0; s2[i]; i++ ) s1[i]=s2[i];
答案:A
第25题 (1.0分) ???????题号:7299 ???????难度:较难 ???????第7章
有以下程序
#include <stdio.h>
int ?d=1;
void ?fun( int ?p )
{ ?
????int ?d=5;
????d += p++;
????printf("%d ?", d );
}
main()
{ ?
????int ?a=3;
????fun( a );
????d += a++;
????printf("%d\n",d);
}
程序的输出结果是
A:8 ?4
B:9 ?6
C:9 ?4
D:8 ?5
答案:A
第26题 (1.0分) ???????题号:6886 ???????难度:中 ???????第7章
设有如下函数定义:
#include ?<stdio.h>
int ?fun( int ?k )
{ if (k<1) ?return ?0;
else ?if (k==1) ?return ?1;
else ?return ?fun(k-1)+1;
}
若执行调用语句:n=fun(3);,则函数fun总共被调用的次数是().
A:2
B:3
C:4
D:5
答案:B
第27题 (1.0分) ???????题号:7330 ???????难度:较难 ???????第7章
有以下程序
?????#include <stdio.h>
?????int ?a=1, b=2;
?????void fun1( int ?a, int ?b )
?????{ ?printf( "%d %d " ,a, b ); ?}
?????void fun2()
?????{ ?a=3; ?b=4; ?}
?????main()
?????{ ?fun1(5,6); ?fun2( ); ?
????????printf( "%d %d\n",a, b );
?????}
程序运行后的输出结果是
A:5 6 1 2
B:3 4 5 6
C:1 2 5 6
D:5 6 3 4
答案:D
第28题 (1.0分) ???????题号:5944 ???????难度:较易 ???????第7章
有以下程序
#include ??<stdio.h>
#define ??D(x) ??2*x+3
main( )
{
????int ?i = 1, j = 2;
????printf("%d\n", D(i+j));
}
程序运行后的输出结果是
A:7
B:6
C:9
D:2
答案:A
第29题 (1.0分) ???????题号:6064 ???????难度:易 ???????第7章
以下与存储类别有关的四组说明符中,全部属于静态类的一组是
A:extern和static
B:auto和static
C:register和static
D:register和extern
答案:A
第30题 (1.0分) ???????题号:7259 ???????难度:较易 ???????第7章
以下叙述中正确的是
A:函数名允许用数字开头
B:函数调用时,不必区分函数名称的大小写
C:调用函数时,函数名必须与被调用的函数名完全一致
D:在函数体中只能出现一次return语句
答案:C
第31题 (1.0分) ???????题号:6509 ???????难度:中 ???????第8章
对于函数声明 void fun(float ?array[], int *ptr); 以下叙述正确的是().
A:函数fun的参数 array, ptr 都是指针变量
B:函数fun的参数 array 是数组名,ptr 是指针变量,它们有本质区别
C:调用函数fun时,实参数组元素个数可以比形参array数组元素个数多
D:调用函数fun时,传送给形参array的应是数组的所有元素
答案:A
第32题 (1.0分) ???????题号:7328 ???????难度:较难 ???????第8章
有以下程序
#include <stdio.h>
main()
{ ?
????char ?*s="12134";
????int ?k=0, a=0 ;
????while( s[ k +1 ] )
????{ ?
????????k++;
????????if ( k % 2 ==0 )
????????{
?????????????a = a + ( s[ k ] - '0' +1 ) ;
?????????????continue;
????????}
????????a = a + ( s[ k ] - '0' );
????}
????printf (" k=%d a=%d\n", k, a );
}
程序运行后的输出结果是
A:k=5 a=15
B:k=4 a=12
C:k=6 a=11
D:k=3 a=14
答案:B
第33题 (1.0分) ???????题号:6716 ???????难度:中 ???????第8章
设有定义:int a,b[10],*c=NULL,*p;,则以下语句错误的是
A:p=a;
B:p=b;
C:p=c;
D:p=&b[0];
答案:A
第34题 (1.0分) ???????题号:6246 ???????难度:中 ???????第8章
有下列程序
#include <stdio.h>
void swap(int *a, int *b)
{ ?int *tp,t;
???tp = a; ?a = b; ?b = tp;
???t = *a; ?*a = *b; ?*b = t;
???printf("%d,%d,", *a,*b);
}
main( )
{ ?int i=3, j=7, *p=&i, *q=&j;
???swap(p, q);
???printf("%d,%d", *p, *q);
}
程序执行后的输出结果是().
A:7,3,3,7
B:7,3,7,3
C:3,7,3,7
D:3,7,7,3
答案:D
第35题 (1.0分) ???????题号:6114 ???????难度:中 ???????第8章
设有定义:int ?x[10],*p=x,i;,若要为数组x读入数据,以下选项正确的是
A:for(i=0;i<10;i++) ?scanf("%d",p+i);
B:for(i=0;i<10;i++) ?scanf("%d",*p+i);
C:for(i=0;i<10;i++) ?scanf("%d",*(p+i));
D:for(i=0;i<10;i++) ?scanf("%d",x[i]);
答案:A
第36题 (1.0分) ???????题号:7265 ???????难度:中 ???????第8章
以下叙述中正确的是
A:字符串常量"Hello"会被隐含处理成一个无名字符型数组,它有5个元素
B:不能用字符串常量对字符数组名进行整体赋值操作
C:char str[7] = "string!"; 在语法上是合法的,运行也是安全的
D:char *str; str = "Hello";与char str[]; str = "Hello";效果是一样的
答案:B
第37题 (1.0分) ???????题号:6422 ???????难度:易 ???????第9章
下面结构体的定义语句中,错误的是( ?).
A:struct ?ord ?{int ?x;int ?y;int ?z;} struct ?ord ?a;
B:struct ?ord ?{int ?x;int ?y;int ?z;}; struct ?ord ?a;
C:struct ?ord ?{int ?x;int ?y;int ?z;} a;
D:struct ?{int ?x;int ?y;int ?z;} ?a;
答案:A
第38题 (1.0分) ???????题号:6120 ???????难度:较难 ???????第9章
有以下程序
#include ??<stdio.h>
typedef ?struct ?stu {
???????????????????????char ?name[10];
???????????????????????char ?gender;
???????????????????????int ?score;
?????????????????????} STU;
void ?f( STU ?a, STU ?*b, STU ?c )
{ ?*b = c =a;
???printf( "%s,%c,%d,", b->name, b->gender, b->score );
???printf( "%s,%c,%d,", c.name, c.gender, c.score );
}
main( )
{ ?STU ?a={"Zhao", 'm', 290}, b={"Qian", 'f', 350}, c={"Sun", 'm', 370};
???f( a, &b, c );
???printf( "%s,%c,%d,", b.name, b.gender, b.score );
???printf( "%s,%c,%d\n", c.name, c.gender, c.score );
}
程序运行后的输出结果是
A:Zhao,m,290,Zhao,m,290,Zhao,m,290,Sun,m,370
B:Zhao,m,290,Zhao,m,290,Zhao,m,290,Zhao,m,290
C:Zhao,m,290,Zhao,m,290,Qian,f,350,Sun,m,370
D:Zhao,m,290,Zhao,m,290,Qian,f,350,Zhao,m,290
答案:A
第39题 (1.0分) ???????题号:7360 ???????难度:中 ???????第9章
有以下程序
#include <stdio.h>
#define ?S(x) ??x/x
main()
{ ?int ?k=5, j=2;
???printf("%d,%d\n", S(k+j), S(j+k));
}
程序的运行结果是
A:7,9
B:1,1
C:7,7
D:9,9
答案:A
第40题 (1.0分) ???????题号:6223 ???????难度:易 ???????第10章
以下关于C语言文件系统的叙述中正确的是().
A:fprintf()与fwrite()函数功能相同
B:文件以"r"方式打开后,可以存储文本类型的数据
C:fscanf()与fread()函数功能相同
D:以"w"或"wb"方式打开的文件,不可以从中读取数据
答案:D
二、程序填空 ??共1题 (共计18分)
第1题 (18.0分) ???????题号:317 ???????难度:中 ???????第1章
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
题目:函数fun的功能是:计算如“图片1”的前n项。
??????若x=2.5,函数值为12.182340。
-------------------------------------------------------*/
#include ???<stdio.h>
double fun(double ?x, int ?n)
{ ?
????????double ?f, t; ??
????????int ?i;
????????f = 1.0;
/***********SPACE***********/
????????t=【?】;
/***********SPACE***********/
????????for(i=【?】;i<n;i++)
????????{
/***********SPACE***********/
????????????????t*=x/【?】;
????????????????f += t;
????????}
????????return ?f;
}
main()
{ ?
????????double ?x, y;
????????x=2.5;
????????y = fun(x, 12);
????????printf("\nThe result is :\n");
????????printf("x=%-12.6f ????y=%-12.6f\n", x, y);
}
答案:
=======(答案1)=======
1.0
=======(答案2)=======
1
=======(答案3)=======
i
三、程序改错 ??共1题 (共计18分)
第1题 (18.0分) ???????题号:43 ???????难度:中 ???????第5章
/*-------------------------------------------------------
【程序改错】
---------------------------------------------------------
题目:下列给定程序中函数fun和funx的功能是:用二分法求方程 的一个根,并要求
??????绝对误差不超过0.001。
例如:若给m输入-100,n输入90,则函数求得的一个根为2.000。
-------------------------------------------------------*/
#include <stdio.h>
#include <math.h>
double funx(double ?x)
{ ??
????????return(2*x*x*x-4*x*x+3*x-6); ?
}
double fun( double ?m, double ?n)
{
/***********FOUND***********/
????????int ?r;
????????r=(m+n)/2;
/***********FOUND***********/
????????while(fabs(n-m)<0.001)
????????{ ??
????????????????if(funx(r)*funx(n)<0)
????????????????????????m=r;
????????????????else
????????????????????????n=r;
????????????????r=(m+n)/2;
????????}
????????return ?r;
}
main( )
{ ?
????????double ?m,n, root;
????????printf("Enter ?m ?n : ?\n");
????????scanf("%lf%lf",&m,&n);
????????root=fun( m,n );
????????printf("root = %6.3f\n",root);
}
答案:
=======(答案1)=======
double r ;
=======(答案2)=======
while (fabs(n-m) >0.001)
=========或=========
while (fabs(n-m) >=0.001)
=========或=========
while (0.001<fabs(n-m))
=========或=========
while (0.001<=fabs(n-m))
四、程序设计 ??共1题 (共计24分)
第1题 (24.0分) ???????题号:152 ???????难度:中 ???????第7章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:请编写函数fun,该函数的功能是:删除一维数组中所有相同的数,使之只剩一个。
??????数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。
例如:若一维数组中的数据是:2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10删除后,数
??????组中的内容应该是: 2 3 4 5 6 7 8 9 10。
注意:请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入
??????所编写的若干语句。
-------------------------------------------------------*/
#include <stdio.h>
#define N 80
int fun(int a[], int n)
{
/**********Program**********/
?????????????????????????????????????????????????????????????????????
/********** ?End ?**********/
}
void main()
{
????????
????????int a[N]={ 2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10}, i, n=20;
????????printf("The original data :\n");
????????for(i=0; i<n; i++) ?
????????????????printf("%3d",a[i]);
????????n=fun(a,n);
????????printf("\n\nThe data after deleted :\n");
????????for(i=0; i<n; i++) ?
????????????????printf("%3d",a[i]); ?
????????printf("\n\n"); ???????
}
答案: int i,j=1;
for(i=1;i<n;i++)
if(a[j-1]!=a[i]) ???????????????????????????????????????????
a[j++]=a[i];
return j;