C语言期末复习题
一、单项选择题
1.一个C程序的执行是从
A)本程序的main函数开始,到main函数结束
B)本程序文件的第一个函数开始,到本程序文件的最后一个函数结束 C)本程序的main函数开始,到本程序文件的最后一个函数结束 D)本程序文件的第一个函数开始,到本程序main函数结束 2.下面四个选项中,均是不合法的用户标识符的选项的是 A) A p_o do B)float lao _A C) b-a goto int D) _123 temp INT 3.判断字符型变量c1是否为数字字符的正确表达式为 A)?0?<=c1<=?9? B)(c1>=0)&&(c1<=9) C) (?0?>=c1)||(?9?<=c1) D) (c1>=?0?)&&(c1<=?9?) 4.若有定义:int a=7;float x=2.5,y=4.7;则表达式x+a%3*(int)(x+y)%2/4的值是 A)2.500000 B)2.750000 C)3.500000 D)0.000000 5.在C语言中,要求运算数必须是整型的运算符是 A)/ B)++ C)!= D)%
6. 若有定义:
double a[] = { 2.1,3.6,9.5}; double b = 6.0;
则下列错误的赋值语句是:
A) b = a[2]; B) b = a + a[2]; C) a[1] = b; D) b = a[0] + 7;
7.若定义x为双精度型变量,则能正确输入x值的语句是 。 A)scanf(“%f”,x); B)scanf(“%f”,&x); C)scanf(“%lf”,&x); D)scanf(“%lf”, x); 8.以下不正确的说法是 。
A)实参可以是常量,变量或表达式 B)形参可以是常量,变量或表达式
C)实参可以为任意类型 D)如果形参和实参的类型不一致,以形参类型为准 9.下面程序段的运行结果是 。
char *s=”Nanjing” ; s+=3 ; printf(“%s”,s); A)jing B)字符j C)字符j的地址 D)不确定 10.下面程序段 int k=2;
while (k!=0) {printf(“%d”,k);k--;}
第1页/ 共14页
则下面描述中正确的是 。
A)while循环执行2次 B)循环是无限循环
C)循环题语句一次也不执行 D)循环体语句执行一次 11.若有说明:int *p,m=5,n;以下程序段正确的是 。 A)p=&n ; B)p = &n ; scanf(“%d”,&p); scanf(“%d”,*p); C)scanf(“%d”,&n); D)p = &n ; *p=n ; *p = m ;
12.若要对a进行自增运算,则a应具有下面说明 。 A)int a[3][2]; B)char *a[ ]={“12”,”ab”}; C)char (*a) [3] D)int b[10], *a=b;
13.若以下定义和赋值语句:int s[2][3]={0},(*p)[3];p=s;则对数组s的第i行第j列(假设i、j已经正确说明并赋值)元素的合法引用为: A)*(*(p+i)+j) B)*(p[i])+j C)(p+i)+j D)(*p+i)[j] 14.下面程序的运行结果是 。
#iunclude
} cnum[2]={1,3,2,7} ;
printf(“%d\\n”,cnum[0].y/cnum[0].x*cnum[1].x) ; } A)0 B)1 C)2 D)6 15.函数rewind的作用是 。
A)使位置指针重新返回文件的开头 B)将位置指针指向文件中所要求的特定位置 C)使位置指针指向文件的末尾 D)使位置指针自动移至下一个字符位置
16.
二、基础知识填空
1.在C语言中,没有专门的输入输出的语句,其输入输出都是用函数来完成的,格式化输入操作是由库函数 [1] 完成的。
2.三种基本程序结构是循环结构、选择结构和 [2] 。
a2?b23.数学表达式的C语言表达式是 [3]
x?y4. 设有数组定义: char array []=\则数组 array所占的内存空间为 [4] 5.x,y,z是整型变量,写出x,y,z三个变量中至少有两个为正数的逻辑表达式是: [5] 。
6.用continue语句只能用在循环语句的循环体内,其作用是: [6] 。 7.若有定义语句:int a[4]={1,2,3,4},*p;p=a;则++(*p)的值是 [7] 。 8.若有#define ADD(x) x+x
第2页/ 共14页
int m=1,n=2,k=3,sum ; sum = ADD(m+n)*k ; 则sum的值为 [8] 9.若有定义:
struct num{ int a ;
int b ; float f ;
} n = {1,3,5.0} ;
struct num *pn = &n ;
则表达式(*pn).a+pn->f的值是 [9] 。
10.若执行fopen函数时发生错误,则函数的返回值是 [10] 。
三、程序阅读题
1.输入100,200回车后,下面程序执行结果是 #include
void swap(int *,int *); int main() {
int a, b, *pa=&a, *pb=&b; scanf(“%d,%d”,&a,&b); swap (pa,pb);
printf(“a=%d,b=%d\\n”,a,b); return 0; }
void swap (int *p1,int *p2) {
int *p; p=p1; p1=p2; p2=p; }
2.若运行以下程序时,输入2473↙,则程序的运行结果是 。 #include
int c;
while ((c=getchar( )) !=?\\n?) switch (c-?2?)
{
case 0 :
case 1 : putchar (c+4) ;
case 2 : putchar (c+4) ; break ; case 3 : putchar (c+3) ;
default : putchar (c+2) ; break ; }
printf(“\\n”); return 0; }
第3页/ 共14页
3.输入6,下面程序的执行结果是: #include
unsigned long int fact (unsigned int ); int main()
{ unsigned int n,fac; scanf(\ fac=fact (n);
printf(\ return 0; }
unsigned long int fact (unsigned int n) {
unsigned int result; if(n==0||n==1) result=1; else
result=n*fact(n-1); return result; }
4.下面程序的输出结果是 。 #include
{ int i,a=5,sum; for(i=0;i<3;i++) sum=fun(a);
printf(\ return 0; }
int fun(int a) {
int b=0;
static int c=3; b++; c++;
return(a+b+c); }
5.下面程序运行的结果是 #include
void copy_string(char *,char *); int main() {
char a[]=\ char b[]=\ copy_string(a,b);
第4页/ 共14页
printf(\return 0 ; }
void copy_string(char *from,char *to) {
for(;*from!='\\0';from++,to++) *to=*from; *to='\\0'; }
6.下面程序执行的结果是 #include
void inv(int [], int ); int main()
{ int i,a[10]={3,7,9,11,0,6,7,5,4,2}; inv(a,10);
for(i=0;i<10;i++)
printf(\
printf(\return 0; }
void inv(int x[], int n) { int t,i,j,m=(n-1)/2; i=0; j=n-1;
for(;i<=m;i++,j--)
{ t=x[i]; x[i]=x[j]; x[j]=t; } }
7.写出下面程序的运行结果 。 #include
char name[20] ; int age ;
} person[ ] = { “liming”, 22, “wanghua”, 21,”zhangping”,20 } ; int main ( )
{ int old = 0 ;
struct man *p=person, *q ; for ( ; p<=&person[2]; p++)
if (old
8.输入9,5回车后,下面程序执行结果是 #include
void swap(int *,int *); int main() {
第5页/ 共14页