加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

《C语言程序设计》核心试题(11)

(2011-09-13 23:25:28)
标签:

c语言

分类: 教学文件
第十三部分:编译预处理和动态存储分配


一、选择题
1)有以下程序
 main()
 { char  p[]={'a', 'b', 'c'}, q[]="abc";
   printf("%d  %d\n", sizeof(p),sizeof(q));
 };
程序运行后的输出结果是
 A  
 B  
 C  
 D 3

2)有以下程序
 # define    f(x)    (x*x)
 main()
 { int  i1, i2;
   i1=f(8)/f(4) ;    i2=f(4+4)/f(2+2) ;
   printf("%d, %d\n",i1,i2);
 }
程序运行后的输出结果是
 A64, 28  
 B4, 4   
 C4, 3   
 D64, 64

3)有以下程序
main()
  char  a[7]="a0\0a0\0";int  i,j;
    i=sizeof(a);  j=strlen(a);
    printf("%d  %d\n",i,j);
}
程序运行后的输出结果是   
 A   2
 B   6
 C   2
 D   2

4)以下叙述中正确的是                 
 A)预处理命令行必须位于源文件的开头
 B)在源文件的一行上可以有多条预处理命令
 C)宏名必须用大写字母表示
 D)宏替换不占用程序的运行时间

(5)
有以下程序
main( )
char a[]=”abcdefg”,b[10]=”abcdefg”;
   printf(“%d  %d\n”,sizeof(A) ,sizeof(B) );
}
执行后输出结果是
 A) 7    
 B) 8 8    
 C) 8 10   
 D) 10 10

(6)
有以下程序
#define  f(x)    x*x
main( )
int i;
   i=f(4+4)/f(2+2);
   printf(“%d\n”,i);
}
执行后输出结果是
 A) 28     
 B) 22     
 C) 16     
 D) 4

(7)
有以下程序
#include  <stdio.h>
#define  F(X,Y) (X)*(Y)
main ()
{ int  a=3, b=4;
printf("%d\n", F(a++,b++));
}
程序运行后的输出结果是
 A) 12          
 B) 15           
 C) 16          
 D) 20

(8)
有以下程序
main()
char s[]="\n123\\";
 printf("%d,%d\n",strlen(s),sizeof(s));
}
执行后输出结果是
 A) 赋初值的字符串有错 
 B) 6,7 
 C) 5,6     
 D) 6,6

(9)
有以下程序
main(int arge,char   *argv[])
int n,i=0;
while(arv[1][i]!='\0'
n=fun(); i++;}
 printf(%d\n",n*argc);
}
int fun()
static int s=0;
 s+=1;
 return s;
}
假设程序经编译、连接后生成可执行文件exam.exe,若键入以下命令行
exam 123<
回车>
则运行结果为

(10)
有以下程序
main()
{ char a[ ]={‘a’,‘b’,‘c’,‘d’, ‘e’, ‘f’, ‘g’,‘h’,‘\0’}; int  i,j;
i=sizeof(a);   j=strlen(a);
printf(“%d,%d\b”i,j);
}
程序运行后的输出结果是
 A99   
 B8    
 C1     
 D98

(11)
程序中头文件typel.h 的内容是:
#define     5
#define   M1   N*3
程序如下:
#define   “type1.h”
#define   M2   N*2
main()
{ int i;
i=M1+M2;  printf(“%d\n”,i);
}
程序编译后运行的输出结果是:
 A) 10   
 B) 20   
 C) 25    
 D) 30

(12)
有以下程序
#include  <stdlib.h>
main()
{ char *p,*q;
p=(char*)malloc(sizeof(char)*20); q=p;
scanf(“%s%s”,p,q);  printf(“%s%s\n”,p,q);

若从键盘输入:abc def<回车>,则输出结果是:
 A) def def  
 B) abc def  
 C) abc d  
 D) d d

(13)
若指针p已正确定义,要使p指向两个连续的整型动态存储单元,不正确的语句是
 A) p=2*(int*)malloc(sizeof(int));
 B) p=(int*)malloc(2*sizeof(int));
 C) p=(int*)malloc(2*2);
 D) p=(int*)calloc(2,sizeof(int));

(14)
以下程序的输出结果是
main()
  char  st[20]= “hello\0\t\\\”;
printf(%d %d \n”,strlen(st),sizeof(st));
}
 A) 9 9    
 B) 5 20   
 C) 13 20       
 D) 20 20

(15)
以下程序的输出结果是
amovep(int  p, int  (a)[3],int  n)
  int   i, j;
for( i=0;i<;i++)
for(j=0;j<n;j++){  *p=a[i][j];p++; }
}
main()
  int    *p,a[3][3]={{1,3,5},{2,4,6}};
p=(int *)malloc(100);
amovep(p,a,3);
printf(“%d %d \n”,p[2],p[5]);free(p);
}
 A) 56      
 B) 25          
 C) 34        
 D) 程序错误

(16)
以下程序的输出结果是
#define    M(x,y,z)    x*y+z
main()
  int  a=1,b=2, c=3;
printf(“%d\n”, M(a+b,b+c, c+a));
}
 A) 19   
 B) 17   
 C) 15   
 D) 12

(17)
以下程序的输出结果是
 A) 16    
 B) 2    
 C) 9              
 D) 1
#define  SQR(X)  X*X
main()
int  a=16, k=2, m=1;
   a/=SQR(k+m)/SQR(k+m);
   printf(“d\n”,a);
}

(18)
若定义了以下函数:
void f(……)
{……
    *p=(double *)malloc( 10*sizeof( double));
……
}
p
是该函数的形参,要求通过p把动态分配存储单元的地址传回主调函数,则形参p的正确定义应当是
 A) double  *p  
 B) float  **p     
 C) double  **p   
 D) float  *p

(19)
有如下程序
#define        2
#define        N+1
#define     NUM   2*M+1
#main()
  int  i;
for(i=1;i<=NUM;i++)printf(“%d\n”,i);
}
该程序中的for循环执行的次数是
 A) 5              
 B) 6              
 C) 7             
 D) 8

(20)
下列程序执行后的输出结果是
 A) 6           
 B) 8             
 C) 10           
 D) 12
     #define  MA(x) x*(x-1)
     main()
     { int a=1,b=2;  printf("%d \n",MA(1+a+b));}

(21)
若有说明:long *pa;则不能通过scanf语句正确给输入项读入数据的程序段是
 A) *p=&a        scanf("%ld"p)
 B) p=(long *)malloc(8)  scanf("%ld"p)
 C) scanf("%ld"p=&a)
 D) scanf("%ld"&a)

(22)
以下程序的输出结果是
 A) 1  
 B) 4   
 C) 7    
 D) 5
    #include 
    int     a[3][3]={1
23456789}*p
    main(  )
     p=(int*)malloc(sizeof(int))

        f(p
a)
        printf("%d \n"
*p)
    }
    f(int *s
  int  p[][3])
    *s=p[1][1]
}

(23)
以下程序的输出结果是
 A) 9    
 B) 6    
 C) 36    
 D) 18
   #define    f(x)     x*x
   main(  )
    int   a=6
b=2c
       c=f(a) / f(b)

       printf("%d \n"
c)
   }

(24)
以下程序运行后,输出结果是
 A) 49.5          
 B) 9.5            
 C) 22.0           
 D) 45.0
       #include<stdio,h>
       #define      PT       5.5
       #define      S(x)     PT* x * x
      main()
       int    a=1,b=2;
          printf("%4.1f\n",S(a+b));
      }

(25)
以下程序运行后,输出结果是
 A) 1             
 B) 7              
 C) 9              
 D) 11
       fut(int    **s, int  p[2][3])
        **s=p[1][1];}
       main()
        int   a[2][3]={1,3,5,7,9,11},  *p;
           p=(int  *) malloc(sizeof(int));
         fut(&p,a);
         printf("%d\n",*P);
        }

(26)
设有以下宏定义:
#define           3
#define      Y(n)       ( (N+1)*n)
则执行语句:z=2 * (N+Y(5+1));,z的值为
 A) 出错           
 B) 42            
 C) 48             
 D) 54

(27)
若有说明,double *p,a;则能通过scanf语句正确给输入项读入数据的程序段是
 A*p=&a; scanf("%lf",p);     
 B)p=(double *)malloc(8);scanf("%f",p);
 C) p=&a;scanf("%lf",a);       
 D)p=&a; scanf("%le",p);

(28)
执行下面的程序后,a的值是
#define    SQR(X)  X*X
main( )
{ int a=10,k=2,m=1;
a/=SQR(k+m)/SQR(k+m);
printf("%d\n",a);     }
 A) 10          
 B) 1          
 C) 9           
 D) 0

(29)
以下程序的输出结果是
fut (int**s,int p[2][3])
    **s=p[1][1];    }
main( )
  int a[2][3]={1,3,5,7,9,11},*p;
p=(int*)malloc(sizeof(int));
fut(&p,a);
primtf("%d\n",*p);     }
 A) 1           
 B) 7             
 C) 9             
 D) 11

(30)
若要用下面的程序片段使指针变量p指向一个存储整型变量的动态存储单元:
int *p;
p=__________ malloc( sizeof(int));
则应填入
 A) int         
 B) inst *          
 C) (*int)         
 D) (int *)

(31)
请读程序:
#include<stdio.h>
#define SUB(X,Y) (X)*Y
main()
{ int a=3, b=4;
printf("%d", SUB(a++, b++));
}
上面程序的输出结果是
 A) 12            
 B) 15             
 C) 16             
 D) 20

(32)
请读程序:
#include<stdio.h>
void fun(float *pl, float *p2, float *s)
{ s=( float * )calloc( 1, sizeof(float));
*s=*p1+ *(p2++);
}
main()
{ float a[2]={1.1, 2.2}, b[2]={10.0, 20.0}, *s=a;
fun(a, b, s)
printf("%f\n",*s);
}
上面程序的输出结果是
 A) 11.100000     
 B) 12.100000      
 C) 21.100000       
 D) 1.100000

(33)
在宏定义 #define PI 3.14159中,用宏名PI代替一个
 A) 单精度数      
 B) 双精度数       
 C) 常量           
 D) 字符串

(34)
请选出以下程序段的输出结果
#include<stdio.h>
#define MIN(x,y)  (x)<(y)? (x):(y)
main()
{ int i,j,k;
i=10; j=15;
k=10*MIN(i,j);
printf("%d\n",k);
}
 A) 15            
 B) 100            
 C) 10             
 D) 150

(35) sizeof(double)
是 【35
 A)一种函数调用    
 B)一个双精度型表达式
 C)一个整型表达式    
 D)一个不合法的表达式

(36)
以下for语句构成的循环执行了 36 次。
# include <stdio.h>
# define  2
# define  N+1
# define  NUM  (M+1)*M/2
main()
{ int  i , n=0;
 for ( i=1;i<=NUM;i + + );
    {n + + ;  printf("%d",n); }
 printf("\n");  }
 A) 5      
 B) 6      
 C) 8      
 D) 9

(37)
以下程序的输出结果是 【37
# include<stdio.h>
# define  FUDGE(y)   2.84+y
# define  PR(a)   printf("%d",(int)(a))
# define  PRINT1(a)  PR(a);putchar('\n')
main()
{int x=2;   PRINT1(FUDGE(5)*x); }
 A) 11       
 B) 12      
 C) 13      
 D) 15

二、填空题:

1)已有定义:double  *p;,请写出完整的语句,利用malloc函数使p指向一个双精度型    的动态存储单元 1

(2)
以下程序运行后的输出结果是 2    .
#define  S(x)   4*x*x+1
main()
{
   int  i=6,j=8;
   printf("%d\n",S(i+j));
}

(3)
以下程序中, for循环体执行的次数是 3 
#define  N 2
#define  M N+1
#define  K M+1*M/2
main()
{ int i;
  for(i=1;i<K;i++)
  { ... }
  ...
}

(4)
以下程序中给指针p分配三个double型动态内存单元,请填空。
# include <stdlib.h>
main ( )
double *p;
   p=(double *) malloc(
4); 
   p[0]=1.5;p[1]=2.5;p[2]=3.5;
   printf(“%f%f%f\n”,p[0],p[1],p[2]);
}

(5)
以下程序的输出结果是【5
#defint  MCRA(m)  2*m
#define  MCRB(n,m) 2*MCRA(n)+m
main()
int i=2,j=3;
 printf("%d\n",MCRB(j,MCRA(i)));
}

(6)
下面程序的运行结果是【6
#define    10
#define   s(x)  x*x
#define   f(x)  (x*x)
main()
int i1,i2;
i1=1000/s(N); i2=1000/f(N);
printf(“%d  %d\n”,i1,i2);
}

(7)
设有如下宏定义
#define   MYSWAP(z,x,y)   {z=x;  x=y; y=z;}
以下程序段通过宏调用实现变量ab内容交换,请填空。
float  a=5,b=16,c;
MYSWAP( 
7 ,a,b); 

(8)
用以下语句调用库函数malloc,使字符指针st指向具有11个字节的动态存储空间,请填空。
st=(char*)
8 ;

(9)
以下程序的输出结果是 [9]
#define        MAX(x,y)      (x)>(y)?(x):(y)
main()
   int    a=5,b=2,c=3,d=3,t;
t=MAX(a+b,c+d)*10;
printf(“%d\n”,t);
}

(10)
若要使指针p指向一个double类型的动态存储单元,请填空。
p=  [10]  malloc(sizeof(double));  

(11)
下面程序的输出是  11
#define PR(ar) printf("%d", ar)
main()
{ int j, a[]={ 1,3,5,7,9,11,13,15}, *p=a+5;
for(j=3; j; j--)
{ switch(j)
{ case 1:
case 2: PR(*p++); break;
case 3: PR(*(--p));}
}
}


答案:
一、选择题:
01) 
 02) C  03)  04)  05) 

06) A  07)  08)  09)  10) D

11) 
 12)  13)  14)  15) 

16) 
 17)  18)  19)  20) B

21) 
 22)  23)  24)  25) 

26)  27)  28)  29)  30) D

31) 
 32)  33)  34)  35) 

36)  37) 

二、填空题:
(1) p=(double*)malloc(sizeof(double))

(2) 81

(3) 4

(4) 3*sizeof(double)

(5) 16

(6) 1000  10

(7) c

(8) Malloc (11)
malloc(sizeof(char)*11)

(9) 7

(10) (double *)

(11) 9911


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有