C语言的题??我不明白原因

来源:百度知道 编辑:UC知道 时间:2024/05/14 18:24:21
23.下面的程序执行后,文件test中的内容是( )
#include <stdio.h>
void fun(char *fname,char *st)
{ FILE *myf;int i;
myf=fopen(fname,〃w〃);
for(i=0;i<strlen(st);i++)fputc(st〔i〕,myf);
fclose(myf);
}
main()
{ fun(〃test〃,〃new world〃);fun(〃test〃,〃hello,〃);}
A.hello, B.new worldhello, C.new world D.hello,rld
【参考答案】A
31.以下程序的执行结果是( )
union un
{
int i;
char c〔2〕;
}
main()
{
union un x;
x.c〔0〕=10;
x.c〔1〕=1;
printf(〃%d〃,x.i);
}
A.266 B.11 C.265 D.138
【参考答案】A
32.下面程序的执行结果是( )
#define SUM(X) X*X
main()
{
int a=6;int i=1,j=2;
a+=SUM(i+j)/SUM(i+j);
printf(〃%d\n〃,a);
}
A.15 B.2 C.7 D.0
【参考答案】A
44.阅读下面程序,则输出结果是( )【形参和实参的区别?】
#include 〃stdio.h〃
void fun(int *a,int *b)
{ int c=20,d=25;
?*a=c/3;
?

23题:因为每个字串后面都有结束符,所以第二次调用fun后,hello后的结束符把后面部分都屏蔽掉了,所以只显示hello

31题:1求反可得。

32题:a+=SUM(i+j)/SUM(i+j);根据宏定义,可得a+=i+j*i+j/i+j*i+j;可得a+=9;可得a=15;

44题:因为传入fun的是对a和b的地址,所以是对a和b直接操作的。所以跟军fun函数可以得到A答案

45题:和上题比较,你会发现这个传入fun的是k的值而不是地址,所以k是不会变的

47题:是在求二进制的嘛,函数里传入20,根据函数计算得到的是20的二进制形式

6题: enum里的元素会根据自己前面的值自动加1,Y1是4,所以Y2是5,Y3是6

15题:++a结果是a=a+1,所以a为16,此时16使得for循环退出,并打印a。所以得16

1、由于fun函数中的打开文件方式是"w",是新建文件,所以当第二次调用fun时会把之前的文件内容删除掉
所以最后test文件中的内容只有hello,

2、共用体的含义是:以体内最大的变量字节数分配空间,并且所有成员公用该段内存。
程序给c的低位赋值10,高位赋值1,所以对于i变量也是一样,高位为1,低位为10,所以i=1*256+10=266

3、带入宏定义字符串得:
i+j*i+j/i+j*i+j=1+2*1+2/1+2*1+2=9,a原来等于6,所以加9后等于15

4、fun函数传入的形参是地址变量,在fun函数中修改的是该地址变量指向的值,所以是可以修改的。
指针a指向的值赋予20/3,取整等于6,指针b指向的值赋予25/5,等于5

5、fun函数传入的形参不是地址变量,因此对于该实参一切修改操作无效,因为局部变量一旦函数结束后便会释放内存。所以k不变=1

6、其实就是一个递归求二进制的算法,每次除以2,直到小于2,然后将余数从后往前输出
fun(20)除以2余0 fun(10)除以2余0 fun(5