# include < stdio . h >
void main ()
{
union
{
int k ;
char i [2];
}* s , a ;
s =& a ;
printf ("% d \ n ", s -> k );
printf ("% x \ n ", s -> k );
s -> i [0]=0x39;
s -> i [1]=0x38;
printf ("% x \ n ", s -> k );
}
A .3839 B .3938 C .380039. D .390038
解析:
共同体中,变量有相同的起始地址.也就是说, i [0]的地址就是 k 的起始地址
也就是说 k 的起始地址就是数组第一个元素的地址.
然后 k 占4个字节.函数中的局部变量如果没有初始化. k 是 OXCCCccCCC .
由于起始地址指向的变量的最低位字节.随着地址增大指向高位字节.
s -> i [0]=0x39
s -> i [1]=0x38;
所以后2个字节变成了OXCCCC3839.所以答案是 A
2.C语言源程序名的后缀是()
a. exe B . c
C .. obJ
D .. cpp
3.已知 a 和 b 为整型变量,下面每组表达式等价是()
A . m =( a =3.4*5)与 m = a =3.4*5
B。(float)(a+b)与(float)a/b
C .( int ) a + b 与( int )( a + b )
D. m% = 2+ a *3与m = m %2+ a *3
解析:%=的优先级很低,等价于 m = m %(2+ a *3)
4.若程序中有宏定义行:# define N 100则以下叙述中正确的是(
A .宏定义行中定义了标识符 N 的值为整数100
B .在编译程序对 C 源程序进行预处理时用100替换标识符 N
C .对 C 源程序进行编译时用100替换标识符 N
D .在运行时用100替换标识符 N
5.设有定义: char p[]={'1','2','3'},*p=p;,以下不能计算出 char 型数据所占字节的
A.sizeof(p) B . sizeof ( char ) C . sizeof (* q ) D . sizeof ( p [0])
6.有以下程序:
main ()
{ char s []=" abcde ";
s +=2;
printf ("% d \ n ", s [0]);
}
执行后的输出结果是()
A .输出字符 a 的 ASCII 码 C .输出字符 c
B .输出字符 c 的 ASCII 码 D .程序出错
7.C语言表达式3.26* exp ( x )+( a + b )/3)所表示的数学表达是
A .3.26x+1/3( a + b )
B .3.26x+ a + b
C .3.26ex+1( a + b )
D .3.26lnx+ a + b
解析: exp ( x )表示 e 的 x 次方
double log ( double x )// x 的自然对数, In ( x ), x >0
double lo10g( double x )// x 底数为10的对数,log10x, x >0
double pow ( double x , double y )// x 的 y 次
8.若有以下说明和定义:
Typedef int * INTEGER
INTEGER p ,* q ;
以下叙述正确的是
A . p 是 int 型变量,
C . q 是基类型为 int 的指针变量
B . p 是基类型为 int 的指针变量
D .程序中可用 INTEGER 代替 int 类型名
答案:ABCB ADCB
5.P指的是整个数组
6.s为数组地址,地址不能加2. =只能用于变量,不能用于常量和表达式
9
程序(函数 fun 只对下标为偶数的元素进行操)
程序运行后的输出结果是
# include < stdio . h >
void fun ( int * a , int n )
{
int i , j , k , t ;
for ( i =0; i < n -1; i +=2)
{
k = i ;
for ( j = i ;j < n : j +=2)
if ( a [ j ]> a [ k ])
k = j ;
t = a [ i ];
a [ i ]= a [ k ];
a [ k ]= t ;
}}
main ()
{
int aa [10]={1,2,3,4,5,6,7}, i ;
fun ( aa ,7);
for ( i =0; i <7; i ++)
printf ("% d ,", aa [ i ]);
printf (" \n ");
}
答案:7,2,5,4,3,6,1
有以下程序,程序运行后的输出结果是
# include < stdio . h >
# define PR ( ar ) printf ("% d ", ar );
void main ()
{int j , a []={1,3,5,7,9,11,13,15},* p = a +5;
for ( j =3;j;j- -)
{
switch ( j )
{
case 1:
caes 2:pR(* p ++); break ;
case 3:PR(*(-- p ));
}}}
答案:9911
以下程序中函数 fun 的功能是:统计 person 所指结构体数组中所有性别( sex )为 M 的记录的个数,存入变量 n 中,并做为函数值返回。请填空:
# include < stdio . h >
# define N 3
typedef struct
{
int num ;
char nam [10];
char sex ;
} SS ;
int fun ( SS person [])
{
int i , n =0;
for ( i =0; i < N ; i ++)
if (_______________==' M ') n ++;
return n;
}
main ()
{
SS W [ N ]={{1." AA ",' F '{,{2," BB ",' M '},{3," CC ",' M '}};
int n ;
n =_________;
printf (" n =% d n ", n );
}
答案:1.person[i].sex
2.fun(w);
编写函数 fun 求一个字符串的长度,在 main 函数中输入字符串,并输出其长
# include < stdio . h >
int fun ( char * pl )
{
char * p ;
int n =0; p = pl ;
while (* p ++)
n ++;
return n ;
}
main ()
{
char * p , a [20];
int len ;
p = a ;.
printf (" please input a string : \n ");
gets ( p );
len = fun ( p );
printf (" The string ' s length is :% d \n ", len );
}
请编写函数 fun ,该函数的功能是:判断字符串是否为回文,若是,则函数返回1,主函数中输出" YES ",否则返回0,主函数中输出" NO "。回文是指顺读和倒读都一样的字符串。
# include < stdio . h >
# define N 80
int fun ( char * str )
{
int i , n =0, fg =1;
char * p = str ;
while (* p ) /*将指针 p 置位到字符串末尾,并统计字符数*/
{
n++;
p++;
}
for ( i =0; i < n /2; i ++)/*循环比较字符*/
if ( str [ i ]== str [ n - 1 - i ]);
else
/*相同,什么都不作*/
/*不同,直接跳出循环*/
{
fg =0;
break ;
}
return fg ;
}
main ()
{
char s [ N ];
int i ;
printf (" Enter a string :");
gets ( s );
printf ("\ n \ n ");
puts ( s );
if ( fun ( s ))
printf (" YES \ n ");
else
printf (" NO \n ");
}
请编写函数 fun ,函数的功能是求出二维数组周边元素之和,作为函数值返回。二维数组中的值在主函数中赋予。
例如:二维数组中的值为
13579
29994
69998
13570
则函数值为61。
# include < stdio . h >
# define M 4
# define N 5
int fun ( int a [ M ][ N ])
{
int tot =0, i , j ;
for ( i =0; i < N;i ++)
{
tot+=a [0][ i ];
tot +=a[M-1][i];
}
for ( i =1; i < M -1; i ++){
tot += a [ i ][0];
tot += a [ i ][ N -1];
}
return tot ;
}
main ()
{ int aa [ M ][ N ]={{1,3,5,7,9},
{2,9,9,9,4},
{6,9,9,9,8),
{1,3,5,7,0}};
int i , j , y ;
printf (" The original data is :\ n ");
for ( i =0; i < M ; i ++)
{ for ( j =0: j < N ; j ++)
printf ("%6d", aa [ i ][ i ]);
printf (" n ");
}
y = fun ( aa );.
printf (" \nThe sum :% d \ n ", y );
printf (" n ");
}
学校统计学生的人数,让学生排队报数,按从1至5报数,最后一位同学报的数为1:按从1至6报数,最后一位同学报的数为5:按从1至7报数,最后一位同学报的数为4:按从1至11报数,最后一位同学报的数为10,计算至少有多少学生。
# include < stdio . h >
void main ()
{
int x =1;
for ( x =1;;x++).
if ( x %5==1&& x %6==5&&x%7==4&& x %11==10)
{
printf (" x =% d ", x );
break ;
}
}