c语言

[转]程序员必读书单(转)

拈花ヽ惹草 提交于 2020-03-09 16:39:14
作者: Lucida 微博: @peng_gong 豆瓣: @figure9 原文链接: http://lucida.me/blog/developer-reading-list/ 关于 本文把程序员所需掌握的关键知识总结为三大类19个关键概念,然后给出了掌握每个关键概念所需的入门书籍,必读书籍,以及延伸阅读。旨在成为最好最全面的程序员必读书单。 前言 Reading makes a full man; conference a ready man; and writing an exact man. Francis Bacon 优秀的程序员应该具备两方面能力: 良好的 程序设计 能力: 掌握常用的数据结构和算法(例如链表,栈,堆,队列,排序和散列); 理解计算机科学的核心概念(例如计算机系统结构、操作系统、编译原理和计算机网络); 熟悉至少两门以上编程语言(例如C++,Java,C#,和Python); 专业的 软件开发 素养: 具备良好的编程实践,能够编写可测试(Testable),可扩展(Extensible),可维护(Maintainable)的代码; 把握客户需求,按时交付客户所需要的软件产品; 理解现代软件开发过程中的核心概念(例如面向对象程序设计,测试驱动开发,持续集成,和持续交付等等)。 和其它能力一样, 程序设计 能力和 软件开发 素养源自项目经验和书本知识

C语言的数据类型小结

给你一囗甜甜゛ 提交于 2020-03-09 08:05:17
才疏学浅,下面的结论摘自《C+Primer+Plus+第6版》【美】Stephen Prata著 C 有多种的数据类型。 基本数据类型分为两大类:整数类型和浮点数类 型 。通过为类型分配的储存量以及是有符号还是无符号,区分不同的整数类 型。 最小的整数类型是char ,因实现不同,可以是有符号的char或无符号的 char,即unsigned char或signed char。但是,通常用char类型表示小整数时才 这样显示说明。其他整数类型有short、int、long和long long类型。C规定,后 面的类型不能小于前面的类型。上述都是有符号类型,但也可以使用 unsigned关键字创建相应的无符号类型:unsigned short、unsigned int、 unsigned long和unsigned long long。或者,在类型名前加上signed修饰符显式 表明该类型是有符号类型。最后,_Bool类型是一种无符号类型,可储存0或 1,分别代表false和true。 浮点类型有3种:float、double和C90新增的long double。后面的类型应 大于或等于前面的类型。有些实现可选择支持复数类型和虚数类型,通过关 键字_Complex和_Imaginary与浮点类型的关键字组合(如,double _Complex 类型和float

C语言函数3

前提是你 提交于 2020-03-09 06:52:02
函数递归 递归定义: 程序调用自身的编程技巧称为递归( recursion)。 递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。 递归的主要思考方式在于: 把大事化小 递归的必要条件: 存在限制条件,当满足这个限制条件的时候,递归便不再继续。 每次递归调用之后越来越接近这个限制条件。 递归函数举例: 接受一个整型值(无符号),按照顺序打印它的每一位。 解析: 如输入1234,要使按顺序输出1 2 3 4 函数带入参数(1234) 由于1234不是单个数字,则进入向内层 递 的过程(给1234/10) 再次带入参数(123) 由于123不是单个数字,则进入向内层 递 的过程(给123/10) 再次带入参数(12) 由于12不是单个数字,则进入向内层 递 的过程(给12/10) 再次带入参数(1) 由于1是单个数字,则进行打印并向外层 归 的过程。 代码: # include <stdio.h> void print ( int n ) { if ( n > 9 ) { print ( n / 10 ) ; } printf ( "%d " , n % 10 ) ;

c语言指针详解

雨燕双飞 提交于 2020-03-09 06:47:55
c语言指针 1.指针是什么? 在c语言中指针和其他变量没有区别,例如 int a 和 int * b,我们可以看做为变量a 与变量b,只是 a存储的是整数值,而b存储的是整数变量的地址!!划重点地址!!! 2.指针的运算 int*a ,float*b,char *c,double*d a++ ,b++,c++, d++, 有什么区别? 已知 int 4字节 float 4个字节 char1个字节 double 8个字节 因为他们占据这些字节,而这些字节体现到内存上, 所以指针 a++ 偏移为4 ,float++偏移 4…依次类推 通过以上的结果我们可以归纳出 ​ 内存的存储长度与内存里面所存储的类型有关!!!划重点 3.指针与一维数组二维数组多维数组 一维数组与指针 int a[9] = {1,2,3,4,5,6,7,8,9}; ①a是什么? a是数组首元素的地址,意思在这个数组中 a代表 首元素1所在的地址 ②a的类型是什么? 因为a是首元素的地址,首元素为int类型,那么a为int *类型 ③a++的含义是什么?有什么用? a++代表往后移动四个字节,至于为啥四个字节呢 因为a是一个地址它存储的是int类型,所以在偏移四个字节后可以访问到a[1] 具体的用处可以用a++,访问数组中的值,可以用a[0] 中括号的方式访问到数组的值 ④写个程序来证明上方是对的 #include

C语言模拟纸牌分发

可紊 提交于 2020-03-09 06:16:43
利用指针来实现以下洗发牌的小程序,感受指针的魅力 纸牌52张,分四组 , 其实只要分为 牌面和牌号 就行了。牌面 有 红桃 黑桃 梅花 方块 (Hearts spades diamonds clubs),牌号是 A 2 3 4 5 6 7 8 9 10 J Q K #include "stdio.h" 2 #include "time.h" 3 #include "stdlib.h" 4 #include "string.h" 5 typedef struct stu { //定义纸牌的牌面和类别。 6 char face[8]; 7 char num[2]; 8 }STR; 9 10 void WriteBoard(STR p[],char *n[],char *f[]) { //初始化纸牌属性 11 int i; 12 for (i = 0;i<52;i++) { 13 strcpy(p[i].face,f[i/13]); 14 strcpy(p[i].num,n[i%13]); 15 } 16 } 17 void RandSend(int randnum[]) { // 洗牌,随机打乱顺序 18 int i,j,temp; 19 srand(time(NULL)); 20 for(i =0;i<52;i++) { 21 j = rand()%52; 22 temp =

C语言--指针与多维数组的关系

╄→尐↘猪︶ㄣ 提交于 2020-03-08 20:58:34
人之所以痛苦,那是因为你在成长 。--------magic_guo 多维数组,在某种意义上讲,是数组的数组的数组…。 比如二维数组,相当于数组的数组,即在一维数组的基础上,建立的另一个一维数组。 一维数组和指针的关系是:数组名代表数组中首元素的地址,而在多维数组中也是这样。 只不过多维数组的数组名和一维数组的名,值是一样的,但意义不同。 下面的一切都以二维数组为例: 例如: a = {{1, 2, 3, 4}, {5, 6, 7, 8, 9}, {10, 11, 12, 13}} 二维数组的数组名 a 相当于排长,而二维数组中一维数组的数组名{ a[0], a[1], a[2] }相当于班长。 所以当a指向的是二维数组的首元素地址,a[0]也指向二维数组的首元素地址。但是它们两个的站位不同,也就是含义不同。 所以也就不难来理解为什么a[0]+1 和 *(a+0)+1都是&a[0][1]了。 理解了这个关键点,下面来理解另一个定义: 代码: # include <stdio.h> // 一个班三个学生,各学四门学科, 计算总平均分数以及第n个学生的成绩 int main ( void ) { void average ( float * p , int n ) ; void search ( float ( * p ) [ 4 ] , int n ) ; float a [ 3 ]

C语言函数2

拈花ヽ惹草 提交于 2020-03-08 20:28:32
函数 函数链式访问 把一个函数的返回值作为另外一个函数的参数。 # include <stdio.h> # include <string.h> int main ( ) { char arr [ 20 ] = "hello" ; int ret = strlen ( strcat ( arr , "bit" ) ) ; printf ( "%d\n" , ret ) ; return 0 ; } # include <stdio.h> int main ( ) { printf ( "%d" , printf ( "%d" , printf ( "%d" , 43 ) ) ) ; return 0 ; } 函数的声明和定义 函数声明: 函数的声明一般出现在函数的使用之前。要满足先声明后使用。 函数的声明一般要放在头文件中的。 函数声明是为了告诉编译器有一个函数,参数,返回类型。 # ifndef __TEST_H__ # define __TEST_H__ //函数的声明 int Add ( int x , int y ) ; # endif //__TEST_H__ 函数定义: 函数的定义是指函数的具体实现,交代函数的功能。 # include "test.h" //函数的实现 int Add ( int x , int y ) { return x + y ; } 来源:

C语言指针

夙愿已清 提交于 2020-03-08 20:00:15
10 指针 指针是C语言中广泛使用的一种数据类型。运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构;能很方便地使用数组和字符串;并能象汇编语言一样处理内存地址,从而编出精练而高效的程序。指针极大地丰富了C语言的功能。学习指针是学习C语言中最重要的一环,能否正确理解和使用指针是我们是否掌握C语言的一个标志。同时,指针也是C语言中最为困难的一部分,在学习中除了要正确理解基本概念,还必须要多编程,上机调试。只要作到这些,指针也是不难掌握的。 10.1 地址指针的基本概念 在计算机中,所有的数据都是存放在存储器中的。一般把存储器中的一个字节称为一个内存单元,不同的数据类型所占用的内存单元数不等,如整型量占2个单元,字符量占1个单元等,在前面已有详细的介绍。为了正确地访问这些内存单元,必须为每个内存单元编上号。根据一个内存单元的编号即可准确地找到该内存单元。内存单元的编号也叫做地址。既然根据内存单元的编号或地址就可以找到所需的内存单元,所以通常也把这个地址称为指针。 内存单元的指针和内存单元的内容是两个不同的概念。 可以用一个通俗的例子来说明它们之间的关系。我们到银行去存取款时,银行工作人员将根据我们的帐号去找我们的存款单, 找到之后在存单上写入存款、取款的金额。在这里,帐号就是存单的指针, 存款数是存单的内容。对于一个内存单元来说,单元的地址即为指针

C语言寒假大作战02

試著忘記壹切 提交于 2020-03-08 19:49:02
问题 答案 这个作业属于哪个课程 https://edu.cnblogs.com/campus/zswxy/CST2019-1 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-1/homework/10262 我在这个课程的目标是 学习gittee与git基础命令运用 作业正文 https:////www.cnblogs.com/sanying/p/12444081.html 其它参考文献 百度,csdn 1.1.1设计思路和遇到的问题 1.2.1程序结果截图 1.3.1程序代码 include<stdio.h> int menu(); int help(); int error(); int grade1(int a); int grade2(int a); int grade3(int a); int main () { int m=-1,n=0; while(m != 0) { printf("========== 口算生成器 ==========\n"); printf("欢迎使用口算生成器 :\n"); printf("\n"); help(); printf("\n"); printf("\n"); menu(); scanf("%d",&n); switch(n) { case 1:grade1(n)