C语言编程经典题目及其详解Linux下3道

C语言是面向过程的,而C++是面向对象的

C和C++的区别:

C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。

C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。 所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”。

C与C++的最大区别:在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”,而就语言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,错!算法是程序设计的基础,好的设计如果没有好的算法,一样不行。而且,“C加上好的设计”也能写出非常好的东西。

本篇文章整理了3道Linux下C语言的经典题目,并附上了详细的分析。希望以此大家可以更好的理解C语言,欢迎大家讨论指正。

1、如果在Linux下使用GCC编译器执行下列程序,输出结果是什么?

C语言编程经典题目及其详解Linux下3道_第1张图片

小编推荐一个学C语言/C++的学习裙【 二六三,六八八,二七六 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

输出结果:4321

程序分析:

程序先输出43,然后紧接着输出printf函数的返回值。printf函数的返回值是输出字符的个数。所以在执行完最里面的printf("%d",i)输出43之后,接着输出printf("%d",43)的返回值即2,最后再打印printf("%d",2)的返回值即1。所以最后的输出结果是4321。

2、如果在Linux下使用GCC编译器执行下列程序,输出结果是什么?

C语言编程经典题目及其详解Linux下3道_第2张图片

输出结果:1020

程序分析:

当i = FFFFFF00H 的时候,才有''出现(因为char类型只占一个字节,当 i = FFFFFF00H 的时候,最后一个字节就是00H,也即''),C风格字符串读到''就终止了。FFFFFF00H 是 -256,就是 i 的值为255时 a[i] = FFFFFF00H,因此最终输出结果是255*4=1020(a[0] ~ a[254]总共255个整型)。

3、如果在Linux下使用GCC编译器执行下列程序,输出结果是什么?

C语言编程经典题目及其详解Linux下3道_第3张图片

小编推荐一个学C语言/C++的学习裙【 二六三,六八八,二七六 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

输出结果:

十进制c=-128

十六进制c=0XFFFFFF80

程序分析:

128的十六进制是0x80, 也就是2^7, 二进制看起来像这样:1000 0000 ,赋值给有符号数char c,其二进制不变。

但是小于sizeof(int)的整数在使用时其实都是扩展到sizeof(int)再计算的,对于有符号数扩宽填充符号位,这里char c=128的符号位是1,所以就是扩充了1111 1111 1111 1111 1111 1111 1000 0000,这样,打印%x时候,就是你看到的结果了。

这个扩宽是很正常的,并不会影响一个数值本身, 只是存储的字节变宽了而已。

符号位为1的二进制转十进制负数

C语言编程经典题目及其详解Linux下3道_第4张图片

①除去符号位减1;

②除去符号位,按位取反;结果就是负数的原码;

③原码转成相应的十进制。

因为符号位为1,所以被当做负数,而负数是以补码形式存在的,

所以其反码是1111 1111 1111 1111 1111 1111 1000 0000 - 1=1111 1111 1111 1111 1111 1111 0111 1111

原码是 1000 0000 0000 0000 0000 0000 1000 0000 转化为十进制是-128。

最后,上述3道Linux下C语言的经典题目只为更好的理解C语言相关知识,当然在实际项目中不会出现类似代码,欢迎大家探讨指正。

你可能感兴趣的:(C语言编程经典题目及其详解Linux下3道)