一、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)编写输入数字的代码,并编译执行。

dp@dp:~/cquick % cat guessnum.c#include <stdio.h>int main(){int mynum;printf("你好,请输入一个数字:");scanf("%d",&mynum);printf("\n你输入的数字是:%d\n",mynum);}接着在终端编译执行:dp@dp:~/cquick % gcc guessnum.c -o myguessdp@dp:~/cquick % ./myguess你好,请输入一个数字:55你输入的数字是:55dp@dp:~/cquick % 纵观上面程序及其执行结果,可发现,C语言中可使用printf函数完成屏幕输出,可使用scanf函数接受指定格式的数据录入,此外,”\n”表示换行符,”%d”表示整数格式。(2)限制输入数字的范围游戏的要求是1-500以内的整数但是如果我们在上述程序中输入900、-10等不符合要求的数字,仍然能通过,你好,请输入一个数字:900你输入的数字是:900你好,请输入一个数字:-10你输入的数字是:-10系统没有提示错误。因此,需要修改程序限制玩家输入数字的范围#include <stdio.h>int main(){int mynum;printf("你好,请输入一个数字:");scanf("%d",&mynum);if (mynum>500 ||mynum<1){printf("数字仅限于1-500之间,请重新运行本程序!\n");}else{printf("\n你输入的数字是:%d\n",mynum);}}

运行程序:

dp@dp:~/cquick % gcc guessnum.c -o myguess

dp@dp:~/cquick % ./myguess

你好,请输入一个数字:200

你输入的数字是:200

dp@dp:~/cquick % ./myguess

你好,请输入一个数字:900

数字仅限于1-500之间,请重新运行本程序!

dp@dp:~/cquick %

上面程序使用了C语言的if…else…语句块,这是一个很多语言都有的机制(包括一些函数语言,比如haskell的if…then…else…),该语句块分2个部分,第1个部分if语句段,表示如果if后面跟的条件满足的话,执行if语句段,第2个部分是else语句段,如果if后的条件不满足执行,什么是条件满足与不满足,C语言可理解为如果条件的返回值非0表示条件满足,如果是0则表示条件不满足。

可以将多个条件组合成一个综合条件做为该语句块的条件,方式是使用||(表示或者)或&&(表示并且),比如上面程序中的条件:mynum>500 ||mynum<1

但是C语言中有一个关键字NULL,在C语言中,条件语句中出现的NULL和0的值是一样的,但NULL常用于指针和对象,0常用于int等整型数。这意味着,如果出现了下面类似的语句块,就意味着是对含有指针变量(指针变量通常用于指向其它变量的内存地址,比如下面代码中的mypoint1和mypoint2)的条件进行判断了:

if (mypoint1!=NULL){

}

if (mypoint2==NULL){

}

从运行效果来看,错误的数字没有被接受,但要想重新输入,必须重新运行一次程序。

(3)引入循环机制

C语言中可以使用while循环,语法格式如下:

while(条件){

语句块

}

或者使用do…while循环,语法格式如下:

do{

语句块

}while (条件)

通过循环,在玩家输入错误数字的情况下,给玩家重新输入的机会,而不是直接退出程序。

dp@dp:~/cquick % cat guessnum.c

#include <stdio.h>int main(){int mynum;int ispass=0;while (!ispass){printf("你好,请输入一个数字:");scanf("%d",&mynum);if (mynum>500 ||mynum<1){ispass=0;printf("数字仅限于1-500之间,请重新运行本程序!\n");}else{ispass=1;printf("\n你输入的数字是:%d\n",mynum);}}}

编译并运行:

dp@dp:~/cquick % gcc guessnum.c -o myguess

dp@dp:~/cquick % ./myguess

你好,请输入一个数字:1234

数字仅限于1-500之间,请重新运行本程序!

你好,请输入一个数字:-12

数字仅限于1-500之间,请重新运行本程序!

你好,请输入一个数字:88

你输入的数字是:88

上述程序中的while的条件中使用了“!”,它表示逻辑非。

上述程序中的while的条件中使用了“!”,它表示逻辑非。

 也可以用do...while来实现它:#include <stdio.h>int main(){int mynum;int ispass=0;do{printf("你好,请输入一个数字:");scanf("%d",&mynum);if (mynum>500 ||mynum<1){ispass=0;printf("数字仅限于1-500之间,请重新运行本程序!\n");}else{ispass=1;printf("\n你输入的数字是:%d\n",mynum);}} while (!ispass);}

dp@dp:~/cquick % gcc guessnum.c -o myguess

dp@dp:~/cquick % ./myguess

你好,请输入一个数字:8889

数字仅限于1-500之间,请重新运行本程序!

你好,请输入一个数字:12

你输入的数字是:12

观察上面2个程序可看出,使用了ispass这个变量做为是否退出循环的依据,也可以不使用ispass,直接通过break语句退出循环(注意,只能退出break语句本身所在的那层循环),

#include <stdio.h>int main(){int mynum;int ispass=0;while(1){printf("你好,请输入一个数字:");scanf("%d",&mynum);if (mynum>500 ||mynum<1){printf("数字仅限于1-500之间,请重新运行本程序!\n");}else{printf("\n你输入的数字是:%d\n",mynum);break;}} }

dp@dp:~/cquick % gcc guessnum.c -o myguess

dp@dp:~/cquick % ./myguess

你好,请输入一个数字:8788

数字仅限于1-500之间,请重新运行本程序!

你好,请输入一个数字:66

你输入的数字是:66

dp@dp:~/cquick %

C指针原理(36)-C快速入门相关推荐

  1. C指针原理(38)-C快速入门

    为增加游戏的趣味性,待猜的数字可使用一个产生1-500以内的随机整数,可按以下方式计算这个整数(%为取余操作): 1-500以内的随机整数=随机整数%499+1 可借助stdlib.h中定义的sran ...

  2. API hook原理和实例快速入门(inline hook),以dll线程注入方式使用(win7-64bit)

    一个完整的hook,如果hook程序是以dll形式生成的,是分两步:1.完成dll本身的设计和生成,2.完成dll注入程序的设计和生成 本文完成第一步. 第二步在http://blog.csdn.ne ...

  3. PyTorch 深度学习:36分钟快速入门——GAN

    自动编码器和变分自动编码器,不管是哪一个,都是通过计算生成图像和输入图像在每个像素点的误差来生成 loss,这一点是特别不好的,因为不同的像素点可能造成不同的视觉结果,但是可能他们的 loss 是相同 ...

  4. SpringCloud实战与原理---快速入门

    SpringCloud实战与原理 第一章  快速入门 1. 初始化工程 2. 启动Eureka注册中心 2.1 Eureka注册中心启动代码 2.2 启动Eureka注册中心 3. 注册Eureka客 ...

  5. Servlet的快速入门以及执行原理

    Servlet server applet 概念:运行在服务器端的小程序. Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则. 将来我们自定义一个类,实现Servl ...

  6. CUDA编程之快速入门-----GPU加速原理和编程实现

    转载:https://www.cnblogs.com/skyfsm/p/9673960.html CUDA(Compute Unified Device Architecture)的中文全称为计算统一 ...

  7. Servlet快速入门和工作原理

    Servlet:  server applet     * 概念:运行在服务器端的小程序         * Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则.   ...

  8. (转载)JDO快速入门(原理详解)

    JDO快速入门 Java数据对象(Java Data Objects,JDO)是一个应用程序接口(API),它是Java程序员能够间接地访问数据库,也就是说,不需使用直接的结构化查询语言(SQL)语句 ...

  9. 架构设计:系统间通信(36)——Apache Camel快速入门(上)

    1.本专题主旨 1-1.关于技术组件 在这个专题中,我们介绍了相当数量技术组件:Flume.Kafka.ActiveMQ.Rabbitmq.Zookeeper.Thrift .Netty.DUBBO等 ...

最新文章

  1. [转]关于重定向RedirectAttributes的用法
  2. 经验分享:如何在自己的创业中,用上GPT-3等AI大模型
  3. JSP学习笔记(一):JSP语法和指令
  4. 安卓-04-实例01-XML布局UI界面
  5. U-Boot 图形化配置及其原理
  6. leetcode367. 有效的完全平方数
  7. java interfaceof,java interface教程
  8. Java中使用JNA实现全局监听Windows键盘事件
  9. ubuntu配置fastdfs+Nginx
  10. Ubuntu14.04下配置固定IP
  11. AT SELECTION-SCREEN
  12. SpringSecurity简单教程(源码开源免费提供)
  13. 找到某个关键字 同义词词林 python_Python——详解__slots__,property和命名规范
  14. 【一年总结】记我的大二生活
  15. matlab imwareaopen,李祎 副教授
  16. 少年派背后的故事 NVIDIA令其栩栩如生
  17. 阿里云免费SSL证书续费步骤 TOMCAT
  18. ios测试硬盘速度软件,轻巧好用的AJA System Test硬盘测速工具(Mac / Windows)
  19. 英语差python好学吗,英语不好可以学习编程嘛?
  20. 大话西游2服务器维护公告,大话西游2经典版:2019年05月09日停机维护公告

热门文章

  1. SpringMVC源码阅读系列汇总
  2. 元素水平垂直居中的几种常用方法
  3. redis哨兵集群的搭建
  4. 照片处理软件(iSee图片专家) 3.930 中文免费版
  5. C语言每日一题之No.9
  6. getdc 与getwindowDc的区别,loadbitmap 与loadimage的区别
  7. 毕业设计出现的一个严重错误----文件不能相互引用
  8. ksd文件怎么打开_文件KSDStore这是个什么文件 – 手机爱问
  9. pythonjs设置_python dom操作
  10. 玩转C语言之自定义数据类型-typedef