第一课 C语言简明教程
1序言:
1与Java、C#等高级语言相比,C语言使用简单但是也非常重要更容易出错,到目前为止基本上操作系统的内核代码超过百分之九十使用C语言完成,因此学好C语言是学好计算机这门课程的基础,特别是进入系统编程尤为明显。
今天是本人复习C语言课程的第一课,主要重新记录一下C语言的基础知识,这节课涉及到C语言的结构、变量以及类型、输入输出、条件判断以及循环知识。
2知识点:
2.1 C语言的结构
2.1.1 通常情况下C语言程序是由:
1.相关的代码注释,使用/* ··· */可注释单行或多行,也可以用//单行注释(C99标准);
2.定义相关变量,全局(静态)变量或局部(静态)变量;
3.具有返回值int的main入口函数;
4.如果使用外部函数则需要引入头文件;
5.可有可无返回值其他函数方法;
6.使用代码块表示程序的相关判断;
下面来看下代码;
#include <stdio.h> #调用系统函数则需要使用此头文件 /* 入口函数 */
int main(void) #程序入口函数main,此时参数值为void代表未传参数
{ #main入口函数从这里开始,代码块开始处
int data; #此data局部变量未初始化且后面未赋值如果直接输出其值是未知的
static int cdata; #未初始化局部静态变量为0存储与bass,以初始化的存储于data
char* p = "Hello World!\n"; #定义局部变量p并赋值
printf(p); #调用系统函数,此函数在stdio.h中
int flag = Show(p); #调用具有返回类型为int的自定义函数Show(char* p)
return 0; #该方法具有返回值int
} #main代码块结束处 /* Show函数
参数:char* p
返回值:int
*/
int Show(char* p)
{
printf(p);
return 1;
}, //全局变量
int golbal_data; #未初始化的变量(存储bss)为0,已初始化的全局变量存储在data
2.2 变量以及类型
2.2.1 数据类型
看如下图:
其中[]中括号代表可有可无;int类型范围取值是:-2^(32-1)至2^(32-1)-1,因此类推其他也是这样计算;int、float、double都是表示最少位数,因为跟操作系统位数有关,比如long intzai 32位操作系统下,跟int类型占用字节数是一样的,但是在64位下就不同,long int是8个字节的。当然还有一些类型比如iso c99扩展类型:int8_t总是8位,int16_t总是16位。可用sizeof(int)、sizeof(long)打印出其在当前平台下的占用字节数。一般尽量使用int类型:效率比较高;double精度够;尽量少用unsigned.
printf("%d\n",sizeof(int));
printf("%d\n",sizeof(long));
printf("%d\n",sizeof(char));
printf("%d\n",sizeof(float));
printf("%d\n",sizeof(double));
2.2.2 常量表示
2.2.2.1 常量分为:数值常量、字符常量、字符串常量、符号常量,看如下代码:
const int i = 123; #代表整型常量
const int i = 033; #代表整型常量使用八进制表示
const int i = 0x1; #使用十六进制表示
const float f = 1.2222f;#单精度浮点型
const double b = 123.1234567; #双精度浮点型
const char c = 'a'; #字符常量
const char cn = '\\'; #斜杠转义
2.2.2.1 看如下代码:
pirntf("%d\n",100); #整型直接表示
pirntf("%o\n",100); #八进制表示
pirntf("%x\n",100); #十六进制表示
pirntf("%f\n",1.1111f); #单精度表示,单精度常量用f表示
pirntf("%f\n",1.11111111L); #双精度用单精度表示只显示小数点6位数,常量后面使用L表示双精度
2.3 格式化输出
2.3.1 使用占位符输出,看如下代码:
int a = 100;
float f = 1.123456f;
double d = 1.12345678L;
char c = 'A'; printf("%d\n",a); #使用%d输出整型a;%u:表示无符号十进制;%ld代表长整型。其中前面可以加上数量比如%2d代表2位;
printf("%f\n",f); #使用%f输出浮点型f;%2f代表2位浮点型;%2.3f代表2位整数3位小数;%-2.3f同理前面不过且向左靠齐,小数点不够补0对齐。
printf("%c\n",c); #使用%c输出字符c;
具体可以看看这边文章。
2.4 条件判断
2.4.1 运算符
2.4.1.1 通常情况下我们常用的运算符优先级:
一级:(),[],.,->是按左至右顺序;
二级:-(负号),++,--,*(取值),&,!,~单目运算符是按右至左,这里特别注意++运算符跟--运算符有前置跟后置区分会影响结果;sizeof表达式;
三级:*,/,%是按左至右计算;
四级:+,-是按左至右计算;
五级:<<,>>是按左至右计算;
六级:>,>=,<,<=是按左至右计算;
七级:==,!=是按左至右计算;
还有一些这里就不一一列举了比如复合运算符,大家可以看看这边文章这比较详细了。
2.4.2 条件判断
2.4.2.1 常见条件判断,看如下几种:
int a = 0; #单if判断
if(a == 0)
{
//当a=0操作
} #if-else判断
if(a==0)
{
//当a等于0时操作
}
else
{
//当a不等于0时操作
} #if-elseif-else判断,中间可以有多个else if,最后的else也可有可无
if(a == 0)
{
#当a等于0时操作
}
else if(a == 1)
{
#当a等于1时操作
}
。
。
。
else
{
#前面条件不符合运行这,相当于默认操作
}
2.4.2.3 创建类型的逻辑判断,看如下:
int a = 0;
int b = 1;
int c = 2; if(a == 0 || b == 2) #因为是逻辑或会产生短路(一个为真结果就真不会再去判断b是否等于2)
{
#操作
} if(a == 0 && b == 2) #因为是逻辑与也会产生短路(1个为假时结果就为假不会再判断b是否等于2)
{
#操作
} if(a == 0 || b == 2 && c == 1) #因为&&运算符比较高,此相当于a == 0 || 0这样结果为真
{
#操作
}
2.4.2.3 switch条件
switch(variable)
{
case A:
//program code
break;
case B:
//program code
break;
case C:
//program code
break; #这个break语句一般情况都会有,当然不排除case one,case two都执行
…
default: #养成习惯最后的default一定要有即使没语句;
break;
} #这个variable关心最多的是什么类型,这里说下:int,char,short int,long int是不是就只是这几个呢,答案是:经过查看下ANSI它是只有一句话整型。也问了一下他人也只是说是能转换成整型的就可以,至于byte不知道怎么试,倒是补上
2.5 循环语句
2.5.1 for循环,看如下代码:
int a = 10;
int b = 0;
for(b=0;b < a; b++)
{
printf("%d\n",b)
}
2.5.2 while 以及do-while(),看如下代码:
#上面的for语句可以改写
int a = 10;
int b = 0;
while(b < a)
{
printf("%d\n",b);
} #也可以使用do-while()语句,但是结果却不一样因为这个语句先执行在判断所以它比前面的循环多了一次如下
int a = 10;
int b = 0;
do
{
printf("%d\n",b);
}while(b < a)
这节课的C语言基础就先到这里!
第一课 C语言简明教程的更多相关文章
- YAML语言简明教程
编程免不了要写配置文件,如果你还在用xml/ini/json,就有点过时了,怎么写配置也是一门学问. YAML 是专门用来写配置文件的语言,非常简洁和强大,远比 JSON 格式方便. 本文介绍 YAM ...
- 第一课 T语言关键字(版本TC5.0)
关键字 TC综合开发工具的语法里包含了大量的关键字,而且对TC综合开发工具支持的关键字都做了亮色处理,以便大家在写脚本的时候容易区分. 关键字在使用的时候,都有特定的作用,不能作为变量名.函数名等等使 ...
- [原创]零基础R语言教程---第一课---认识R语言
教程的录制的确是折腾了一番,一连录了二十多遍,有时候激动的说错了字,有时候不知道下一句说啥.. 不过好在第一课已经搞定了,哈哈. 虽然内容现在看起来还有点简单, 不过牛b也是一个过程嘛. 我会坚持下去 ...
- 2011斯坦福大学iOS应用开发教程学习笔记(第一课)MVC.and.Introduction.to.Objective-C
blog.csdn.net/totogo2010/article/details/8205810 目录(?)[-] 第一课名称 MVC and Introduction to Objective-C ...
- [原创]零基础R语言教程---第二课---R语言入门
这节教程简单描述了R语言中常用的数据类型, 向量,字符串,矩阵,列表,数据框,以及附带了一个小例子 对于这节课所附带的例子需要做下列补充: 1.这个例子面向于对整列的数据进行预测 2.如果你需要求单行 ...
- 【C语言探索之旅】 第三部分第一课:SDL开发游戏之安装SDL
内容简介 1.课程大纲 2.第三部分第一课: SDL开发游戏之安装SDL 3.第三部分第二课预告: SDL开发游戏之创建窗口和画布 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会 ...
- 【C语言探索之旅】 开宗明义及第一课:什么是编程?
内容简介 1.课程大纲 2.第一部分第一课:什么是编程? 3.第一部分第二课预告:工欲善其事,必先利其器 课程大纲 不知道为什么,一直对C语言有一种很深厚的“情怀”(类似老罗对锤子手机的那种),说 ...
- 基于R语言的结构方程:lavaan简明教程 [中文翻译版]
lavaan简明教程 [中文翻译版] 译者注:此文档原作者为比利时Ghent大学的Yves Rosseel博士,lavaan亦为其开发,完全开源.免费.我在学习的时候顺手翻译了一下,向Yves的开源精 ...
- C++自学教程第一课——你好世界,我是柠檬鲸。
C++系列教程现在在自己学校的一个博客平台发布,几个朋友一起搭建的 [C++基础教程系列](https://blog.ytmaxoj.org/cpp_basic_liuary-0/) 下面是原来的正文 ...
随机推荐
- CentOS7.1 安装Liberty之环境准备(1)
一.基础平台 1.一台装有VMware的windows系统(可联网) 2.CentOS 7.1 64bit镜像 二.最小化安装两台CentOS 7.1 的虚拟机controller.compute1, ...
- shell学习三十八天----运行顺序和eval
运行顺序和eval shell从标准输入或脚本中读取的每一行称为管道,它包括了一个或多个命令,这些命令被一个或多个管道字符(|)隔开. 其实嗨哟非常多特殊符号可用来切割单个的命令:分号(;),管道(| ...
- Java 反射机制[Field反射]
Java 反射机制[Field反射] 1. 反射概念及功能 反射就是把Java类中的各种成分映射成对应的Java类.比如一个Java类中用一个Class类的对象来表示. 一个类中的组成部分分为成员变 ...
- Oracle 常用性能监控SQL语句
1. --查看表锁 SELECT * FROM SYS.V_$SQLAREA WHERE DISK_READS > 100; 2. --监控事例的等待 SELECT EVEN ...
- python中函数参数*args和**kw的区别
1.函数与参数(实参) 在python中创建函数是def,创建函数名是def f(),f函数名字,def f(a,b),这里的a,b是两个参数,函数名是自定义的,参数也是自定义,随意就好.看图如下效果 ...
- spring boot 整合kafka 报错 Exception thrown when sending a message with key='null' and payload=JSON to topic proccess_trading_end: TimeoutException: Failed to update metadata after 60000 ms.
org.springframework.kafka.support.LoggingProducerListener- Exception thrown when sending a message w ...
- 修改sudoers权限之后无法sudo的最简单解决方法
网上百度一下进入recovery模式或是单用户模式仍然修改不了sudoers的权限, 后来终于在网上找到了一种最简单的方法,那就是 pkexec chmod 0440 /etc/sudoers
- Linux下RTL8723BE无线网卡驱动问题解决方法
的RT723BE这款无线网卡模块真是坑爹,岂止是坑爹,简直就是坑爹...... lspci -vnn 看网卡型号 一.安装问题: sudo apt-get install linux-headers- ...
- 使用maven搭建SSM框架
使用maven搭建SSM框架,首先得准备好maven环境. 搭建maven环境 第一步:下载maven http://maven.apache.org/download.cgi 下载后解压就可以了. ...
- iOS之block,一点小心得
作为一个iOS开发程序员,没用过block是不可能的.这次我探讨的是block原理,但是有些更深层次的东西,我也不是很清楚,以后随着更加了解block将会慢慢完善. 第一个问题,什么是block? 我 ...