Head First C - C语言入门
Head First C - C语言入门
文章目录
- Head First C - C语言入门
- C语言的工作方式
- 完整的C程序
- printf()函数
- 运行程序
- 字符串
- 布尔运算
- switch语句
- while循环
- for循环
- break语句
- continue语句
- 函数
C语言的工作方式
- 源代码 创建一个源文件,源文件中是C代码
- 编译 通过编译器运行源代码,编译器检查无错,就会编译源代码
- 输出 编译器会创建一个交可执行文件的新文件,文件中是机器代码
完整的C程序
- C程序通常注释开头
描述代码意图,包含许可证或者版权信息(可选)
/*
* 计算牌盒中牌数量的程序
* 本代码使用"拉斯维加斯公共许可证"
* (c)2014,学院21点扑克游戏小组
*/
- include部分
C语言是一种很小的语言,不用外部库,几乎干不了什么。
#include <stdio.h>
- 在源文件中找到的最后一样东西是函数
所有C代码都在函数中运行,main()是程序中所有代码的起点。
main()函数的返回类型是int,如果main()返回0,表明程序运行成功,返回其他值,就表示程序运行时出了问题。
早期的ANSI C标准中,main()函数可以时void类型。但是在C99标准中main函数的返回类型必须是int。
int main(){int decks;puts("输入有几副牌");scanf("%i", &decks);if(decks < 1){puts("无效的副数");return 1;}printf("一共有%i张牌\n", (decks * 52));return 0;
printf()函数
printf()函数用于显示格式化输出,用变量的值代替格式符
当调用printf()时,可以包含任意数量参数,但是要确保每个参数有一个对应的%格式符
printf("%s说计数时%i", "阿星", 21);
运行程序
C语言是一种编译型语言,需要将源代码编译为机器能够理解的机器代码,计算机才能够执行。
用gcc编译并运行程序
cards.c
/*
* 计算牌盒中牌数量的程序
* 本代码使用"拉斯维加斯公共许可证"
* (c)2014,学院21点扑克游戏小组
*/
#include <stdio.h>
#include <stdlib.h>
int main(){char card_name[3];puts("输入牌名:");scanf("%2s", card_name);int val = 0;if(card_name[0] == 'K'){val = 10;}else if(card_name[0] == 'Q'){val = 10;}else if(card_name[0] == 'J'){val = 10;}else if(card_name[0] == 'A'){val = 11;}else{val = atoi(card_name);}printf("这张牌的点数时:%i\n", val);return 0;
}
- 进入cards.c所在的目录中
- 在命令提示符中使用 gcc cards.c -o cards 命令进行编译
- 在Windows命令提示符中输入cards运行程序
或者直接用 gcc cards.c -o cards && cards
编译成功就会运行程序,出错则跳过运行显示错误消息。
字符串
字符串是字符数组,当C语言看到一个这样子的字符串时:
s = "Shatner" 会把它做一个数组读取,这个数组是由一个个独立的字符组成的: s = {'S', 'h', 'a' , 't', 'n', 'e', 'r'} C语言比大多数语言更低层,它无法确切地知道数组有多长,C语言需要知道什么时候会到达字符数组的尾部,为此C语言加入了哨兵字符。哨兵字符是一个出现在字符串末尾的附加字符,它的值为\0。逐一扫描字符数组中的所有元素,直到碰到\0。 s = "Shatner" 存储器中实际保存的是: S h a t n e r \0
这就是为什么在代码中定义card_name变量:
char card_name[3];
字符串card_name只需要记录1到2个字符,但因为需要哨兵字符结尾,所以必须定义数组大小为3。
字符为什么从0开始编号?为什么不是1?
字符的索引值是一个偏移量:表示当前要引用的字符到数组第一个字符之间有多少字符。
字符串字面值和字符数组区别?
字符串字面值是常量,这些字符一旦创建完毕,就不能再修改它。如果进行修改,gcc会显示总线错误(bus error)。C语言采取不同方式再存储器中保存字符串字面值。总线错误意味着程序无法更新那一块存储器空间。
布尔运算
ANSI C标准没有用来表示真假的值,C程序把0当作假处理,把除0以外的任何值当作真处理。C99标准允许在程序中使用true和false关键字,但是编译器还是会把他们当作1和0处理。
&&检查两个条件都为真
if( (dealer_up_card == 6) && (hand == 1))double_down();
如果第一个条件为假,就不会继续判断,因为知道有假则整个为假。
||检查至少一个为真
if(cupcakes_in_fridge || chips_on_table)eat_food();
如果第一个条件为真,就不会继续判断,因为知道有真则整个为真。
!把条件值反过来
if(!brad_on_phone)answer_phone();
为什么不能只写一个|和&?
也不是不行。| 和 &操作符总是计算两个条件,|| 和 && 可以跳过第二个条件。
| 和 &不仅能逻辑表达式求值,还能进行布尔运算
6 & 4 得到4 二进制(110 & 100 得到 100)
switch语句
写逻辑条件时,需要一次又一次检查同一变量的值。为了避免过多的if语句,可以使用switch语句。switch语句和if语句有些像,但它可以测试一个变量的多种取值。当计算机遇到switch语句,他会检查给出的值,然后匹配case,会运行case之后的所有代码,直到遇到break语句。
计算机会一直会运行下去直到switch语句结束。
switch(train){case 37:winnings = winnings + 50;//train==37,winnings加50,然后跳到终点break;case: 65:puts("头等奖!");//train==65,winnings加80,再加20,然后跳到终点winnings = winnings + 80;case 12:winnings = winnings + 20;//train==12,winnings加20,然后跳到终点break;default:winnings = 0;//对于其他任意train值,winnings归零
}
为什么用switch语句取代if?
需要多次检查同一变量时,switch更方便。
switch语句能检查字符串吗?
switch语句只能检查值,不能检查字符串或者任何形式的数组。
while循环
while(<某个条件>){/*在这里做一些事情*/
}
花括号内是循环体。
当程序执行到循环体的末尾,计算机就会检查循环条件是否为真。真则继续,假则结束。
int counter = 1;
while(counter < 11){printf("%i个枣\n", counter);counter++;
}
do while循环
while循环的一种形式,总是在循环体运行后才检查循环条件,循环体至少执行一次。
do{/*买彩票*/
}while(have_not_won);
for循环
所有的循环都是这样的三部曲:首先为循环准备变量,其次在每一轮的循环前检查条件,最后在循环末尾更新计数器或实现类似功能。
因为这个模式是通用的,C语言的设计者创造了for循环。
控制counter变量值的代码都放在了for循环语句中,并从循环体中分离出来。
for(<初始化循环变量>; <每次循环前对条件检查>; <每次循环后运行>){/*做一些事情*/}
int counter;
for(counter = 1; counter < 11; counter++){printf("%i个枣\n", counter);
}
break语句
想在循环中的某个地方跳出循环,使用break语句直接跳出循环。break语句直接退出当前循环,跳出循环体中break之后所有的语句。
while(feeling_hungry){eat_cake();if(feeling_queasy){/*从while循环中跳出*/break;}drink_coffee();
}
break不能从if语句中退出。
continue语句
想要跳过循环体的其余部分,然后回到循环的开始。
while(feeling_hungry){if(not_lunch_yet){/*回到循环条件*/continue;}eat_cake();
}
函数
以下的第一个int是返回值类型, larger是函数名, int a, int b是函数的参数。
int larger(int a, int b){if(a > b){return a;}
}
创建了一个void函数,是否就不能有return语句?
可以有return语句,但是会有一个warning,而且在返回类型为void的函数中return没有什么意义。如果试图读取void函数的值,编译器会报错。
在void函数中的return语句有时候可以用来提前退出函数。
Head First C - C语言入门相关推荐
- 写一篇C语言入门第一讲
嗨~大家好~ 我是小白,最近才使用这个博客,我是一个计算机系的学生,我会在这里发一些我给我们班其他同学讲C语言入门的博文,希望大家能共享这些资料,当然了,我也很希望大家给我提出好的意见或建议.(P ...
- C语言入门练习 - 第二期 判断语句与循环语句(题解)
比赛地址:C语言入门练习 - 第二期 判断语句与循环语句 A.入门--基础语法(for) #include<stdio.h> int main(){int n,i;scanf(" ...
- 计算机书籍-Go语言入门经典SAMS Teach Yourself
书名:Go语言入门经典 作者:[英]乔治 奥尔波(George Ornbo) 出版社:人民邮电出版社 出版时间:2018年08月 去当当网了解
- c语言中描述y是奇数,4章选择结构程序设计C语言入门习题
C语言入门习题 第四章 选择结构程序设计 一.选择题 1.有以下程序 main() { int i=1,j=2,k=3; if(i++==1&&(++j==3||k++==3)) pr ...
- C#forUnity快速入门(连载2)-C#语言入门
C# for Unity 编程语言快速入门教程(连载2)---C#语言入门 接上篇内容,我们把更多的C#语言入门级编程习题发布如下,希望能够对C#编程小白提高技能有帮助. 三: 学习循环语句(续) ...
- python终结一个循环额_Python语言入门之内存管理方式和垃圾回收算法解析
本文主要向大家介绍了Python语言入门之内存管理方式和垃圾回收算法解析,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 在列表,元组,实例,类,字典和函数中存在循环引用问题.有 ...
- VML编程之------VML语言入门《VML极道教程》原著:沐缘华
<VML极道教程>原著:沐缘华 1章4节:VML语言入门 1:VML语言入门 - 极道学法 在我正式开始讲解.你正式开始学习VML语言以前,请务必遵循以下规则,可以达到最佳效果.极道学习方 ...
- c++ 结构体赋值_《零基础看得懂的C语言入门教程》—(十二)结构体是这么回事
一.学习目标 了解C语言的结构体的使用方法 了解C语言结构体的结构的赋值 了解多种C语言结构体变量的赋值方法和取值方法 目录 <零基础看得懂的C语言入门教程>--(二)简单带你了解流程 & ...
- c语言作业ppt模板,C语言入门教学PPT模板
目前要说发展前景最好的行业,那么就必然是互联网行业了,大部分行业现在都离不开计算机,也就是说学好计算机,走到哪里都不怕,特别是程序员,那么C语言就是首先需要接触的.本模板是由西西为大家整理的C语言入门 ...
- python语言入门m-「数据挖掘入门系列」Python快速入门
Python环境搭建 本次入门系列将使用Python作为开发语言.要使用Python语言,我们先来搭建Python开发平台.我们将基于Python 2.7版本.以及Python的开发发行版本Anaco ...
最新文章
- java 产生的固体物的基础上 增删改的SQL声明
- 这款IDEA插件,可以让你用中文编码哟
- secureCRt中文乱码问题
- 标签的属性和样式属性有什么区别
- 2 HBase数据模型
- Android-完美解决在Activity中触摸返回键onBackPressed不能触发问题
- 买卖股票的最佳时机IV
- 如何搭建低延时、交互式的在线教育平台?(内附视频回放)
- 专题导读:学术大数据
- Sublime Text2 中文乱码
- java中this用法总结
- LeetCode.83. Remove Duplicates from Sorted List(删除单链表中的重复元素)
- python库中文手册_Python3.8.1标准库参考中文手册(The Python Library Reference) 高清pdf版...
- OFD文件在线阅读器
- 删除magisk模块
- 人大金仓数据库迁移步骤
- 备份自查-微博错误代码
- 如果你35岁恐慌了,那你真的该反思自己了···
- 十六进制编辑器HxD Hex Editor x64 v2.3.0.0
- sc-RNA seq与Illumina测序
热门文章
- windows云服务器部署web网站
- Atcoder CADDi 2018 Solution
- 【博学谷学习记录】超强总结,用心分享 | java基础
- 2023养老展,中福协养老展,中国国际养老服务业博览会
- 关于Windows10服务中没有SNMP Service问题以及SNMP没有安全选项的问题
- 【SqlServer】错误 0xc00470fe: 数据流任务: 产品级别对于 组件“源 - TestDB01$”(1) 而言不足
- 蠎周刊 188: Jays
- php 打开文件方式
- PHP—文件打开/读取
- BZOJ4887:[TJOI2017]可乐(矩阵乘法)