下面有一些关于C语言问题,希望大伙儿侃侃,最好解释详细,谢谢呢?

来源:百度知道 编辑:UC知道 时间:2024/06/30 20:09:01
1.若有定义int a=3;求表达式a&0377的值是__
2.已有定义:int a=3,b=10,c=15;求表达式 a|b&c的值是__
3.设有定义:float a=2,b=4,h=3;以下C语言表达式与代数式计算结果不相符的是
A)(a+B)*h/2 B)(1/2)*(a+B)*h
C) (a+B)*h*1/2 D)h/2*(a+B)
4.以下程序运行后的输出结果是____
main()
{int x=10,y=20,t=0;
if(x==y)t=x;x=y;y=t;
printf("%d,%d\n",x,y);
}
5.有以下程序
void f(int y,in*x)
{y=y+*x;*x=*x+y;}
main()
{int x=2,y=4;
f(y,&x);
printf("%d %d\n",x,y);
}
执行后输出的结果是___
6.以下程序中给指针p分配三个double型动态内存单元,请填空。
#include <stdio.h>
main()
{double *p;p=(double ____________*)
malloc(____________);
p[0]=1.5;p[1]=2.5;p[2]=3.5,
printf("%f%f%f\n",p[0],p[1],p[2]);
}
7.下列程序的运行结果是:___
#include <string.h>
char *ss(char *s)
{return s+strlen(s)/2;}
main()
{char *p,*str="abcdefgh";
p=ss(str);printf("%s\n",p);
}
8.下面程序的运行结果是:__

第一题:3

这是一道位运算,a&0377等同于011&011111111的运算,这两个与一下值为011,也就是3

第二题:11
这也是位运算,先把3,10,15化为二进制,依次为:011,1010,1111.a|b&c先运行b&c得到1010,再跟a或运算(一位一位或)得到1011,也就是11.

第三题: D) h/2*(a+B)
h/2等于1,而代数中等于1.5.这是因为h为整型,h/2后也是整形,0.5舍去.

第四题:20 0
以上格式写得让人误会,我重写一下,你就会明白.
main() {int x=10,y=20,t=0;
if(x==y)t=x; //这里没有加{},固IF语句范围只有第一个;为此
x=y;y=t;
printf("%d,%d\n",x,y);
}

第五题:8 4

void f(int y,int*x) X是按地址传,而Y是按值传,当值传到函数里时,*x可以改变X的值,而Y不能返回.保持原来的值...

第六题:
这是C语言的内存动态分配,不是很掌握,没有把握,希望其它好心人帮忙一下补齐.

第七题:efgh
这道我简单说下,语言点太多,要是不明白,发消息给我,我就这题说详细.
return s+strlen(s)/2,返回的是一个指针,s指向首元素a,strlen(s)/2=4,固返回的指针指向第五个元素e.主函数中的 printf打印从第五个元素之后的字串.

第八题:6
这是一道递规调用.主函数传给函数时f()时,a[]=a[3]首元素是1;返回1+f(&a[1],2);f(&a[1],2)在调用函数时a[]=a[1],但此时首素是2而不是1;返回1+2+f(&a[1],1);最后调用函数,a[]=a[2],首元素为3,也只有一个;返回1+2+3,得到6

第九题:double max,&y
这题不需要解释吧....还是简单讲一下,第一个空是函数