C语言的一些题目(最终)(一)

2014-11-24 11:51:11 · 作者: · 浏览: 0
一些覆盖C语言许多知识点的题目,第一阶段的课程从3月8日到现在已经进行了六周,
感觉自己不会的东西越来越多,面对计算机的时间也越来越长,眼睛现在已经有点模糊了,
希望自己能对得起自己的这份努力,加油,加油,加油!


____________________________________________________________


1.下面的程序输出结果是多少


#include
  
   


int main()
{
	int x=2,y,z;
	x *=(y = z = 5);printf("%d\n”,x);	//10 后面表达式的结果是5
	z = 3;
	x ==(y = z); printf("%d\n”,x);		//10 只是判断,没有给x赋值
	x =(y == z); printf("%d\n”,x);		//1
	x = (y&z); printf("%d\n”,x);		//3 位与操作
	x = (y&&z); printf("%d\n”,x);		//1
	y = 4;
	x = (y | z); printf("%d\n”,x);		//7 位或操作
	x = (y || z); printf("%d\n”,x);		//1
	return 0;
}

  



____________________________________________________________


2.下面的程序输出结果是多少


#include
  
   


main()
{
	int b = 3;
	int arr[] = {6,7,8,9,10};
	int *ptr = arr;
	*(ptr++)+=123;			// arr[0]变成129,ptr指向arr[1]
	printf("%d,%d\n",*ptr,*(++ptr));  
}
  




/*这种题目是很有争议的,在vc和Linux的gcc编译器下输出的结果都是8,8。
但是在我的Mac系统下的gcc输出的结果却是7,8。在vc下的printf函数解释是从右到左,
靠堆栈传递,所以*(++ptr)先进入堆栈,然后*ptr进入,具体的我也解释不太清,坐等高人解答
*/




____________________________________________________________


3.下面的程序输出结果是多少


#include
  
   


int main()
{
	unsigned char a = 0xa5;     //a中装着一个16进制数 二进制为:1010 0101
	unsigned char b = ~a>>4;    //a参与运算,自动转换为int,b的结果二进制为
					//1111 0101
	printf("a = %d\n",a);		//a的十进制为165
	printf("b = %d\n",b);		//b的十进制为245
	return 0;
}

  


____________________________________________________________


4.下面程序的结果是多少?


#include


int main()
{
	unsigned int a = 0xCCCCCCF7;
	unsigned char i = (unsigned char)a; //i中装着a的后两位,也就是F7
	char* b = (char*)&a;	    	    //b指向a
	printf("%08x,%08x",i,*b);	    //16进制输出,000000F7 ,FFFFFFF7
	return 0;
}


//这道题目也很有趣,普通的变量进入printf,补位的时候补0;
//然而指针变量补位的时候补的是F。
____________________________________________________________


5.用一个表达式,判断一个数X是否是2n次方(2,4,8,16…),不可用循环语句。
(x & (x-1) == 0)   printf("yes\n") : printf("yes\n")


运用位操作,2^n次方数的二进制只有1位是1,运用一个表达式就可以判断。

____________________________________________________________


6.下面程序的结果是多少?
#include
   
    


main()
{
	int count = 0;
	int m = 9999;
	while(m)
	{
		count++;
		m = m&(m-1);
	} 
	printf("%d\n",count);      //8,进两次循环m的二进制去掉一位
}
   


____________________________________________________________


7.如何将a和b的值进行交换,并且不使用任何中间变量。


a = a + b;
b = a - b;
a = a - b;


//还有更快的位操作版本:


a = a ^ b;
b = b ^ a;
a = a ^ b;


____________________________________________________________


8.编写一个函数,要求输入年、月、日、时、分、秒,输出该时间的下一秒。
如输入2010年12月31日23时59分59秒,则输出2011年1月1日0时0分0秒。


就是单纯的判断,在这里就不赘述了
____________________________________________________________


9.编写一个函数,实现把C/C++程序代码中的注释去掉,并把结果返回。A.c---b.c


比较有难度的一道题,另写一篇博文解释。
____________________________________________________________


10.一个5位数字ABCDE*4 = EDCBA,这5个数字不重复,请 编程求出来这个数是多少?


五个变量,五个循环加一个判断就可以。
____________________________________________________________


11.用预处理指令#define声明一个常数,用以表示1年中有多少秒(忽略闰年)。


#define S (365*24*60*60)


____________________________________________________________


12.编写一个"标准"宏MIN,这个宏输入两个参数并返回其中较小的一个。


#define min((a), (b)) ((a)<(b)) (a):(b)


____________________________________________________________


13.const有什么用途,请说出最少两个。


1.定义常量
2.修饰,返回值,参数,函数,指针,在静态编译时让编译器帮助检查是否对某些变量进行了修改


____________________________________________________________


14.const于#define相比有什么不同?


(1)