C指针原理教程之C快速入门
1、C语言简介C语言是一门语法 精简的语言它的关键字仅有32个C语言以main函数为主函数程序编译运行后后执行的就是main函数的内容因此纵观很多C语言程序形成了一道有趣的风景线头文件和许多c代码文件以main函数为中心和起始点构造在main函数中调用了这些文件中编写的代码引用头文件。C语言程序实质就是在程序中调用 C标准库提供的函数、其它C库提供的函数、操作系统提供的API接口、自己定义的函数同时应用适当的数据结构和算法来完成工作。C语言虽然精简但却很强大它不但能完成比它更复杂的程序语言所做的事情而且还能做其他语言不擅长的工作比如操作系统LINUX、UNIX的内核、gnome桌面等等都是C语言的杰作尤其在系统内核的设计与研发领域它的“兄弟”C也不是对手至今为止没有出现一款用C制作的桌面系统或嵌入式系统的内核。2、C语言的关键字auto 声明自动变量short 声明短整型变量或函数int 声明整型变量或函数long 声明长整型变量或函数float声明浮点型变量或函数double 声明双精度变量或函数char 声明字符型变量或函数struct声明结构体变量或函数union声明共用数据类型enum 声明枚举类型typedef用以给数据类型取别名const 声明只读变量unsigned声明无符号类型变量或函数signed声明有符号类型变量或函数extern声明变量是在其他文件正声明register声明寄存器变量static 声明静态变量volatile说明变量在程序执行中可被隐含地改变void 声明函数无返回值或无参数声明无类型指针if:条件语句else 条件语句否定分支与 if 连用switch :用于开关语句 case开关语句分支for一种循环语句do 循环语句的循环体while 循环语句的循环条件goto无条件跳转语句continue结束当前循环开始下一轮循环break跳出当前循环default开关语句中的“其他”分支sizeof计算数据类型长度return 子程序返回语句可以带参数也可不带参数循环条件猜数字我们来一步步打造一个猜数字的游戏游戏的大意是输入一个1-500以内的正整数程序根据玩家输入的数字提示数字比正确答案之前大或者数字比正确答案之间小比如要猜的数字是85玩家第一次输入90提示比要猜的数字大第二次输入80提示比要猜的数字小第二次输入85提示猜中了。下面来一步步打造这个游戏帮助大家快速复习C语言基础知识。(1)编写输入数字的代码并编译执行。dpdp:~/cquick % cat guessnum.c12345678910111213#include stdio.hintmain(){intmynum;printf(你好请输入一个数字:);scanf(%d,mynum);printf(\n你输入的数字是:%d\n,mynum);}接着在终端编译执行123456789dpdp:~/cquick% gcc guessnum.c -o myguessdpdp:~/cquick% ./myguess你好请输入一个数字:55你输入的数字是:55dpdp:~/cquick%纵观上面程序及其执行结果可发现C语言中可使用printf函数完成屏幕输出可使用scanf函数接受指定格式的数据录入此外”\n”表示换行符”%d”表示整数格式。2限制输入数字的范围游戏的要求是1-500以内的整数但是如果我们在上述程序中输入900、-10等不符合要求的数字仍然能通过你好请输入一个数字:900你输入的数字是:900你好请输入一个数字:-10你输入的数字是:-10系统没有提示错误。因此需要修改程序限制玩家输入数字的范围1234567891011121314151617181920212223#include stdio.hintmain(){intmynum;printf(你好请输入一个数字:);scanf(%d,mynum);if(mynum500 ||mynum1){printf(数字仅限于1-500之间请重新运行本程序\n);}else{printf(\n你输入的数字是:%d\n,mynum);}}运行程序123456789101112131415dpdp:~/cquick% gcc guessnum.c -o myguessdpdp:~/cquick% ./myguess你好请输入一个数字:200你输入的数字是:200dpdp:~/cquick% ./myguess你好请输入一个数字:900数字仅限于1-500之间请重新运行本程序dpdp:~/cquick%上面程序使用了C语言的if...else...语句块这是一个很多语言都有的机制包括一些函数语言比如haskell的if...then...else....该语句块分2个部分第1个部分if语句段表示如果if后面跟的条件满足的话执行if语句段第2个部分是else语句段如果if后的条件不满足执行什么是条件满足与不满足C语言可理解为如果条件的返回值非0表示条件满足如果是0则表示条件不满足。可以将多个条件组合成一个综合条件做为该语句块的条件方式是使用||表示或者或表示并且比如上面程序中的条件mynum500 ||mynum1但是C语言中有一个关键字NULL在C语言中条件语句中出现的NULL和0的值是一样的但NULL常用于指针和对象0常用于int等整型数。这意味着如果出现了下面类似的语句块就意味着是对含有指针变量(指针变量通常用于指向其它变量的内存地址比如下面代码中的mypoint1和mypoint2)的条件进行判断了1234567891011if(mypoint1!NULL){............}if(mypoint2NULL){............}从运行效果来看错误的数字没有被接受但要想重新输入必须重新运行一次程序。3引入循环机制C语言中可以使用while循环语法格式如下while(条件){语句块}或者使用do...while循环语法格式如下do{语句块}while (条件)通过循环在玩家输入错误数字的情况下给玩家重新输入的机会而不是直接退出程序。dpdp:~/cquick % cat guessnum.c123456789101112131415161718192021222324252627282930313233#include stdio.hintmain(){intmynum;intispass0;while(!ispass){printf(你好请输入一个数字:);scanf(%d,mynum);if(mynum500 ||mynum1){ispass0;printf(数字仅限于1-500之间请重新运行本程序\n);}else{ispass1;printf(\n你输入的数字是:%d\n,mynum);}}}编译并运行123456789101112131415dpdp:~/cquick% gcc guessnum.c -o myguessdpdp:~/cquick% ./myguess你好请输入一个数字:1234数字仅限于1-500之间请重新运行本程序你好请输入一个数字:-12数字仅限于1-500之间请重新运行本程序你好请输入一个数字:88你输入的数字是:88上述程序中的while的条件中使用了“”它表示逻辑非。也可以用do...while来实现它123456789101112131415161718192021222324252627282930313233#include stdio.hintmain(){intmynum;intispass0;do{printf(你好请输入一个数字:);scanf(%d,mynum);if(mynum500 ||mynum1){ispass0;printf(数字仅限于1-500之间请重新运行本程序\n);}else{ispass1;printf(\n你输入的数字是:%d\n,mynum);}}while(!ispass);}1234567891011dpdp:~/cquick% gcc guessnum.c -o myguessdpdp:~/cquick% ./myguess你好请输入一个数字:8889数字仅限于1-500之间请重新运行本程序你好请输入一个数字:12你输入的数字是:12观察上面2个程序可看出使用了ispass这个变量做为是否退出循环的依据也可以不使用ispass直接通过break语句退出循环注意只能退出break语句本身所在的那层循环12345678910111213141516171819202122232425262728293031#include stdio.hintmain(){intmynum;intispass0;while(1){printf(你好请输入一个数字:);scanf(%d,mynum);if(mynum500 ||mynum1){printf(数字仅限于1-500之间请重新运行本程序\n);}else{printf(\n你输入的数字是:%d\n,mynum);break;}}}12345678910111213dpdp:~/cquick% gcc guessnum.c -o myguessdpdp:~/cquick% ./myguess你好请输入一个数字:8788数字仅限于1-500之间请重新运行本程序你好请输入一个数字:66你输入的数字是:66dpdp:~/cquick%