#include<stdio.h>
int main(int argc,char*argv[])
{for(unsigned int i=3;i>=0;i--)putchar('=');return 0;
}
/*(unsigned无符号整形)范围是0~65535(16位),最后一次减1得到的不是-1而是65535而造成无限循环*/

#include<stdio.h>
int main()
{int a=1,b=2,c;/*swap1*/c=a;a=b;b=c;printf("a=%d b=%d\n",a,b);/*以c作为暂存地暂存了a的值,再把b赋值给a,c赋值给b*//*swap2*/a=a-b;b=b+a;a=b-a;printf("a=%d b=%d\n",a,b);/*用1式替换2式后得到:b=(b+(a-b))=a;用1和2式替换为3式后得到:a=b-a=((b+(a-b))-(a-b)=b;*//*swap3*/a^=b;b^=a;a^=b;printf("a=%d b=%d\n",a,b);/*将a,b转换为二进制进行亦或从而交换a,b的值*/return 0;
}

#include<stdio.h>
void f()
{static int a=0;//a用static修饰作为静态局部变量,储存在静态区,在本文件中保存函数结束时的值int b=0;printf("%d,%d\n",++a,++b);
}
int main()
{f();f();f();f();/*b的值一直都是1,a的值一直在+1*/return 0;
}

结果如下:

#include<stdio.h>
int main()
{printf("%d\n",printf("Xiyou Linux Group2%d",printf("")));/*printf函数返回其成功打印的内容长度,最里面的printf返回长度为0,中间的printf返回长度19结果为Xiyou Linux Group2019*/return 0;
}

a为第一次声明变量不可直接作为常量进行赋值操作编译错误

现将程序改为下:

#include<stdio.h>
int main(int argc,char*argv[])
{char ch=255;int e=ch+1;int d;char c;printf("ch=%d \nch+1=%c \nd=%d \nc=%c\n",ch,e,d,c);/*ch:有符号字符型范围是-128~127,127+1超出范围后返回-128再加((255-127)-1)=(-128+127)=-1;e:e=255+1=256,+1返回-128再加((256-127)-1)=(-128+128)=0,ASCII码为0的是空字符;d:局部int变量未初始化,默认值未知。(在我的vscode上经常是0)c:局部变量char也为初始化。(在我的vscode上经常是空字符)*/return 0;
}

结果如下:

#include<stdio.h>
int main(int argc,char*argv[])
{char x=-2,y=3;char t=(++x)|(y++);//[或运算] 补码有一个位为1则此位为1(进行或运算时x=2,y=3)//x先++再做或运算,y先做或运算再++printf("x=%d y=%d t=%d\n",x,y,t);//因为-1的补码是11111111,与谁或运算都是它本身t=(++x)||(y++);//[逻辑或] x,y中任意一个为真(不为0)则t为真(1)printf("x=%d y=%d t=%d\n",x,y,t);return 0;
}

运算结果如下:

在计算机数据都是以补码的方式存储的。

优点:

1.避免了0的编码有两个(-0,+0),一个数的编码只能有一个;

2.符号位和有效值位可以一起处理,减法通过加法就可以实现,即简化了计算机的结构设计也提高了运算速度。

#define X a+b
int main(int argc,char*argv[])
{int a=1,b=1;printf("%d\n",X*X);//a+b*a+b无括号,结果是3return 0;
}#define X (a+b)
int main(int argc,char*argv[])
{int a=1,b=1;printf("%d\n",X*X);//(a+b)*(a+b)=4return 0;
}
/*宏替换是直接把出现定义名称的地方替换成表达式,不会自动加上括号*/

#include<stdio.h>
int main()
{int val=2018;//将2018赋值给变量valint *pi=2019;//将指针pi强行用常量初始化(也可以不初始化,结果相同且不会警告)pi=&val;//将指针pi指向变量val的地址*pi=0;//将指针pi指向的值val改变为0printf("&val=%d\n",&val);printf("pi=%d\n",pi);//pi=&val(随机分配地址)printf("val=%d\n",val);printf("*pi=%d\n",*pi);//*pi=val(通过指针修改val的值)return 0;
}

警告如下,但可以运行:

#include<stdio.h>
#include<stdlib.h>
int main(int argc,char*argv[])
{char*p=(char*)malloc(sizeof(char)*20),//分配一段20个char类型的储蓄空间让p指向它*q=p;//指针q指向p的地址(指同一个分配的地址)scanf("%s %s",p,q);//先输入p储存在此空间中,在赋值给q在同一个空间中,相当于覆盖掉了p的内容printf("%s %s\n",p,q);//打印出的p就是后赋值的q的内容return 0;
}

输入输出如下:    

#include<stdio.h>
int main(int argc,char*argv[])
{int a[4]={2,0,1,9};printf("%p %p\n",a,&a);//输出的都是a[0]的地址printf("%p %p\n",a+1,&a+1); /*a 是数组首元素的首地址,也就是a[0]的首地址&a 是数组的首地址a+1 是数组下一元素的首地址,即a[1]的首地址&a+1 是下一个数组的首地址*/return 0;
}
/*格式控制符%p中的p是pointer(指针)的缩写,printf函数族中对于%p一般以十六进制整数方式输出指针的值,附加前缀0x*/
/*%p输出宽度取决于系统地址总线位数,即16位最多输出4位16进制字符,32位最多输出8位16进制字符,64位最多输出16位16进制字符*/

结果如下: 

long int fb(unsigned int n)
{long int f;if(n==1||n==2) f=1;//斐波那契前两项为1,后面的项为前两项之和else f=fb(n-1)+fb(n-2);return(f);
}
int main()
{unsigned int m;scanf("%d",&m);if(m>=1)printf("%ld\n",fb(m));return 0;
}

改进冒泡排序(加入一个判断量change):

#include<stdio.h>
int main()
{int s[1001];int i, j, n, t;int change=1;scanf("%d", &n);for (i = 0; i < n; i++)scanf("%d", &s[i]); for (i = 0; i < n&&change; i++)//若没有发生交换(change=0)则说明已经有序则提前退出排序{change=0;for (j = 0; j < n - i - 1; j++){/*在扫描过程中顺次比较相邻的两个数据的大小,若逆序就交换位置*/if (s[j] > s[j + 1]){t = s[j];s[j] = s[j + 1];s[j + 1] = t;change=1;//若发生了交换,change置为1}}}printf("%lf seconds\n", Times);for (i = 0; i < n; i++)printf("%d ", s[i]);
}
/*通过相邻数据的交换逐步将待排序序列变成有序序列的过程(也叫相邻排序)*/

第二种优化双向排序(也叫鸡尾酒排序)

下列出代码核心部分:

lenght = sizeof(a)/sizeof(int);
lenght = sizeof(a)/sizeof(a[0]);//先计算总长度
right = lenght-1;
left = 0;
//先给右边的赋值,因为右边的先排出数组里面的最大值 ,外层先装一个代表right的for循环吧
while(right>left)
{//下面的两个for循环是平等关系的,用一个while循环把她们括起来 for(i=left;i<right;i++){      temp = 0;//第一个for循环里面的交替是进行左边的值比较与交换,就是针对左边的较大数字排序 if(a[i]>a[i+1]){temp = a[i];a[i] = a[i+1];a[i+1] = temp;}}right--;//这样满足下一次摆放的那个数是放在右边的倒数第二个位置上面 temp = 0;for(j=right;j>left;j--){//内部的for循环是进行右边的数字大小排序,就是把比较小的数字放在右边的位置。if(a[j]<a[j-1]) {temp = a[j];a[j] = a[j-1];a[j-1] = temp;}}left++;//这样满足下一次左边放着第二大的数字是再左边第二个位置上面
}

 其他排序法:https://blog.csdn.net/TGRD4/article/details/121567712

#include<stdio.h>
#include<stdlib.h>
#include <stdbool.h>
int main(int argc, char **argv)
{union {short s;char  c[sizeof(short)];} un;un.s = 0x0102;//小端将高位字节排放在内存的高地址端(2在1前)if (sizeof(short) == 2){if (un.c[0] == 1 && un.c[1] == 2)printf("大端\n");else if (un.c[0] == 2 && un.c[1] == 1)printf("小端\n");elseprintf("不能判断\n");}elseprintf("sizeof(short) = %d\n", sizeof(short));printf("un.c[0]=%d\n",un.c[0]);printf("un.c[0]=%p\n",un.c[0]);printf("un.c[1]=%d\n",un.c[1]);printf("un.c[1]=%p\n",un.c[1]);printf("un.c[2]=%p\n",un.c[2]);//NULLexit(0);
}

1)大端模式:Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。
低地址 --------------------> 高地址
0x12  |  0x34  |  0x56  |  0x78

2)小端模式:Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。
低地址 --------------------> 高地址
0x78  |  0x56  |  0x34  |  0x12

这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。
但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的编译器)。
另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如果将多个字节安排的问题。
因此就导致了大端存储模式和小端存储模式。例如一个16bit的short型x,在内存中的地址为0x0010,x的值为0x1122,那么0x11为高字节,0x22为低字节。
对于大端模式,就将0x11放在低地址中,即0x0010中,0x22放在高地址中,即0x0011中。小端模式,刚好相反。
我们常用的X86结构是小端模式,而KEIL C51则为大端模式。很多的ARM,DSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。

来源于博客:https://www.cnblogs.com/broglie/p/5645200.html

每一列的意义:

来源于博客:https://blog.csdn.net/zhuoya_/article/details/77418413

其他关于linux的知识:

https://blog.csdn.net/qq_23329167/article/details/83856430

https://wlybsy.blog.csdn.net/article/details/105289038

https://blog.csdn.net/qq_26219679/article/details/79647221

https://blog.csdn.net/lcgoing/article/details/86737110

西邮Linux兴趣小组2019年面试题总结相关推荐

  1. 西邮Linux兴趣小组2019纳新试题总结

    1.下面代码段将打印出多少个'='?运用相关知识解释该输出. int main() {for(unsigned int i=3;i>=0;i--){putchar('=');} } 无数个'=' ...

  2. 西邮linux兴趣小组2019,2020补纳面试题

    西邮linux兴趣小组2019,2020补纳面试题 2019补纳 2020补纳 C语言基础 数据结构与算法 GNU Linux常识 关于纳新试题,您需要了解: 本题仅作为面试有限参考 为了代码的简洁, ...

  3. 西邮Linux兴趣小组2019面试题总结

    西邮Linux兴趣小组2019面试题总结 unsigned int unsigned int 取值范围为0~4294967295,当i减到0后,再进行一次自减,会变为4294967295,永远满足&g ...

  4. 西邮Linux兴趣小组2021纳新试题

    1.大小和长度竟然不是一个意思, sizeof()和strlen()有什么异同之处? 他们对于不同参数的结果有什么不同?请试举例子说明. int main(void) { char s[] = &qu ...

  5. 西邮Linux兴趣小组2020纳新试题题解

    西邮Linux兴趣小组2020纳新试题题解 1. 请试着解释其输出. int main(int argc , char *argv[]) {unsigned char a = 255;char ch ...

  6. 西邮Linux兴趣小组2021纳新试题②

    1. 结果:127 -128 signed char的范围是-128~127 unsigned char的范围是0~256 计算a-ch是把ch转换成整数,而输出ch是进行了类型转换为char类型,1 ...

  7. 西邮Linux兴趣小组纳新笔试试题

    下面是西邮Linux小组今年纳新的笔试试题 1. 下面这个程序的输出结果是什么? int main() { int a = (1, 2); printf("a = %d\n", a ...

  8. 西邮linux兴趣小组网络,西邮Linux兴趣小组纳新笔试试题

    下面是西邮Linux小组今年纳新的笔试试题,原文在这里. 1. 下面这个程序的输出结果是什么? int main() { int a = (1, 2); printf("a = %d\n&q ...

  9. 2021年 西邮Linux兴趣小组 纳新免试题揭秘

    文章目录 引言 第一关 第二关 第三关 第四关 第五关 总结 引言 小组2020年的免试题的四位出题人是:小组18级成员李兆龙,20级成员赵子玮,刘树杭,任子涧. 同时19级成员周阔,戚凯萌,胡哲宁, ...

最新文章

  1. 博士生DIY超级显微镜,直接看到原子!网友:太极客了,一下省出几十万元
  2. git 连接到远程的其它分支问题
  3. django models中批量导入数据
  4. Android进阶篇之引导页系列之ViewPager实现Animation动画引导页
  5. dart初始化项目的分析
  6. bootbox.js
  7. vba两个集合的差集_Python中的集合是如何使用的?
  8. 零基础学python知乎-零基础人员可以学习python吗?|Python培训基础教程
  9. 总结之:CentOS 6.5 rsync+inotify实现数据实时同步备份
  10. 《请君入瓮——APT攻防指南之兵不厌诈》—第8章8.5节安全贵在未雨绸缪
  11. 【易我数据恢复】超实用的数据恢复工具
  12. 测评绿联蓝牙音频接收器
  13. 软件充值功能测试点有哪些?以手机话费充值为例
  14. bat 命令如何启动远程PC上的一个程序?
  15. 大数据多样性体现在包括_微生物组16S测序又有大动作!升级至NovaSeq PE250,数据量免费升至5万Tags...
  16. 【Git】如何实现部分提交
  17. java pdf 图片替换_Java 添加、替换、删除PDF中的图片
  18. MapReduce作业在Hadoop完全分布式集群上运行的问题与思考(持续更新)
  19. fix feeds/telephony/net/freeswitch/Makefile
  20. 软件发明专利实例_计算机软件发明专利技术经验交底资料范例

热门文章

  1. Linux 设备——网络驱动
  2. sql添加列,修改列,删除列(mysql/mssql)
  3. Jmeter配置元件之CSV数据文件设置-18
  4. 淘系用户平台技术团队单元测试建设
  5. idea cherry pick 功能 git log 窗口 冲突conflict
  6. 时间间隔感测试器2.0
  7. Observability:使用 OpenTelemetry 和 Elastic 监控 OpenAI API 和 GPT 模型
  8. mac系统使用git上传代码到gitee
  9. 批量梯度下降(BGD)、随机梯度下降(SGD)以及小批量梯度下降(MBGD)及 batch、epoch、iteration
  10. 机甲大师机器人控制(二):功能分析