初识C 语言
程序语言
C语言是目前极为流行的一种计算机程序设计语言,它既具有高级语言的功能,又具有汇编语言的一些特性。支持ANSIC。
C语言的特点:通用性及易写易读 是一种结构化程序设计语言 具有良好的可移植性 语言功能丰富
语言程序的结构
用C语言编写的源程序,简称C程序。C 程序是一种函数结构,一般由一个或若干个函数组成,其中必有一个名为main()的函数,成为主函数。
#include< stdio.h> //包含一个叫stdio.h的文件
int main() //int是整型的意思 main前面的int表示函数调用返回一个整型值
{
printf("Hello,world\n");
return 0; //返回(整数)0
}
//#include是编译预处理命令,放在源程序的最前面,编译预处理命令后面不加分号
//printf()是系统提供的函数叫做库函数
//C程序的每条语句必须用一个分号结尾
C语言程序:计算机只能识别和执行由0和1组成的二进制的指令,而不能识别和执行用高级语言写的程序。为了使计算机能执行高级语言所写的程序,必须先用一种称为“编译程序”的软件,把源程序编译成二进制形式的“目标程序”,然后将该目标程序与程序的函数库和其他目标程序连接起来,形成可执行的程序才能被机器所执行。相对于目标程序,用高级语言编写的程序被称为“源程序”。
编译程序是把C语言源程序编译,连接生成可执行程序(.exe文件)
变量
变量是指在程序执行过程中,其值可以改变的量。一个变量用一个标识符(变量)表示,在内存中占据一定的存储单元,用于存放变量的值。变量必须向定义后使用,变量的值可以通过赋值的方法获取 和改变。
char 1个字节 //字符数据类型 %C--打印字符格式的数据
short 2个字节 //短整型 short int
int 4个字节 //整型 %d--打印整型十进制数据
long 4/8个字节 //长整型 C语言标准规定 Sizeofl(long)>=Sizeof(int)
long long 8个字节 //更长整型 (c99)
float 4个字节 //单精度浮点数 %f--打印浮点数字-打小数
double 8个字节 //双精度浮点数
定义变量的方法:
int age=150;
float weight=45.5f;
char ch='w‘; //ch-向内存申请一块空间名称
全局变量和局部变量
int num2=20;//全局变量-定义在代码块({})之外的变量
int main()
{
int num1=10;//局部变量-定义在代码块({})内部的变量
return 0;
}
//局部变量和全局变量的名字建议不要相同-容易产生误会,产生bug
//当全局变量和局部变量名字相同时,局部变量优先
#include<stdio.h>
int main()
{
//计算2个数的和
int num1=0;
int num2=0;
int sum=0; //C语言法规定,变量要定义在当前代码块的最前面
scanf(“%d%d,&num1,&num2”);//输入数据-使用输入函数scanf
//取地址符号&
sum=num1+num2;
printf(“sum=%d\n”,sum);
return 0;
}
C语言的字符常量是用单引号括起来的一个字符,如'a' 就是字符常量。注意,'a’和'A'是两个不同的字符。
字节:计算机中单位
bit-比特位
byte-字节
kb mb gb tb pb
进制之间的转换
一个字节=8个比特位的大小
二进制由0、1两个数字组成,逢二进一
八进制数由0~7八个数字组成
十六进制数由0~9十个数和A~F(或a~f)六个字母组成,逢十六进一
十进制转二进制:除2取余
十进制转八进制:除8取余
十进制转十六进制:除16取余
二 进制转十进制:从二进制最低位开始向高位依次将每一个标识位第0位开始......,以这个位数作为2的幂次方与对应位上的数(0或1)相乘之后累加的和就是其对应的十进制数
八进制数或十六进制数转换为十进制数是将2的幂次方换成8的幂次方或者16的幂次方
八进制转二进制:将每一位八进制转换成一个3位的二进制就可以得到
十六进制数转二进制数:将每一位十六进制数转换为为一个4位的二进制数就可以得到
常见的转义字符
\n 换行符,将光标从当前位置移到下一行的开头
\t 将光标移到下一位置的水平制表符
\b 退格符,将光标退回到前一列的位置
\r 回车符,将光标从当前位置移到本行的开头
\f 换页,将光标从当前位置移到下一页的开头
\\ 反斜杠字符(\)
\' 单引号字符(')
\" 双单引号字符(”)
\ddd 1~3位八进制数代表一个字符 0~7
\xhh 1~2位十六进制数代表一个字符
\v 垂直制表符
\? 在书写连续多个问号时使用,防止他们被解析成三个字母语 ??+)
\a 警告字符,蜂鸣
注释
1.代码中又不需要的代码可以直接删除,也可以注释掉
2.代码中有些代码比较难懂可以加一下注释文字
/* 分格 C语言的分格
*/ 不能嵌套注释
//C++ 可以注释一行也可以注释多行
Ctrl+K+C 注释
Ctrl+K+U 取消注释
常量
常量是在程序的执行过程中其值不变的量。在C语言中,常量不需要类型说明就可以直接使用,常量的类型是由常量本身隐含决定的。在C语言中,从其表现形式上将普通常量和符号常量。普通常量就是用数字或字母直接表示的常量,符号常量是用一个标识符来代表的常量。
1.普通常量有3类:数值常量,字符型常量和字符串常量
200:整型数值常量(十进制数)也叫字面常量
0350:整型数值常量(八进制数,以0开头)
Ox12,OXFFAA:(整型数值常量,以OX或Ox开头)
0.2:实数数值常量
‘a’:字符型常量
”Hello“:字符串常量
字符串 ”hello bit.\n“这种由双引号引起来的一串字符串称为字符串字面值,或者简称字符串。
注:字符串的结束标志是一个\o的转义字符 。在计算字符串长度的时候\o是结束标志,不算作字符内容。%s打印字符串
2.字符常量
在C语言程序中,可对常量进行名,即用符号代替常量,叫做符号常量,一般用大写字母表示,符号常量一经定义就可以代替常量使用。
符号常量可以用宏定义#define命令来实现: #define PI 3.1415926 /*定义圆周率*/
//#define 定义的标识符常量
定义了符号常量PI代表圆周率3.1415926,则在程序中需要使用数据3.1415926时,都可以用PI来代替。
//数据在计算机上存储的时候,存储的是2进制
//ASCII编码
// A-65 a-97 ASCII码值
3.枚举常量 enum
//枚举-一一列举
//性别:男,女,保密
//枚举关键字-enum
关键字
auto | break:停止循环 | case | char |
const:常变量 |
continue:继续循环 | default:默认 | do:循环 |
double | else | enum | extern:引入外部符号 | float | for | goto | if |
int | long | register:寄存器 | return:返回 | short | signed | sizeof | static:静态 |
struct:结构体关键字 | switch | typedef:类型定义 | union:联合体/共用体 | unsigned | void:无 空 | volatile | while |
// int 定义的变量是有符号的 signed int 等价于unsigned int num 无正负之分
//unsigned无符号数
数据的格式化输出和输入
1.数据的格式化输出
格式化输出函数printf()的功能是按指定的格式向终端(或系统默认的输出设备)输出若干个任意类型的数据。
printf()函数的一般形式为:printf(格式控制,[输出列表]);
其中,”格式控制“是用双引号括起来的字符串,也称”转换控制字符串“。它是由字符”%“、格式字符(如d、f、c等)和普通字符(原样输出的)组成。”输出列表“是一些与”格式控制“中的格式字符--对应的需要输出的变量或表达式。
int b=~a; //b是有符号的整形
//原码、反码、补码
//负数在内存中存储的时候,存储的是二进制的补码
printf(”%d\n“,b);
//使用的打印的是这个数的原码
//原码->反码 符号不变其他位按位取反
//反码->补码 反码加1得到补码
//补码->反码 补码减1 11111->11110
//反码->原码 符号不变其它按位取反 11110->10001 开头是1表示负数 开头是0的表示正数
//(在内存中)任何数字存的都是补码
//反码只是计算机的一个中间状态
//原码->反码->补码 只要是整数,内存中存储的都是二进制数
2.数据的格式输入
格式化输入函数scanf()的功能是用来从外部输入设备(通常是键盘),像程序中的变量输入一个或若干个任意类型的数据。
scanf()函数的一般形式为: scanf(格式控制,地址列表);
使用scanf()函数时要输入的变量名前要加取地址符号&
其中,”格式控制“的含义同printf()函数;”地址列表“是由若干个地址组成的列表,可以是变量的地址或字符串的首地址。
3.单个字符的输出和输入
函数putchar()和getchar()专门用来输出和输入字符型数据,使用时要包含头文件stdio。h。
输出单个字符函数putchar()
putchar()函数的功能是用于将单个字符输出到显示器上,其一般形式为:putchar(ch);
输入单个字符函数getchar()
getchar()函数的功能是从标准输入设备(键盘)读入一个字符。其一般形式为:ch=getchar()
其中,ch为一个字符型变量,把从键盘接收到的字符放到变量ch中。
运算符与表达式
单目操作符
! 逻辑反操作 假变真 真变假
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位)2进制
~ 对一个数的二进制按位取反
-- 前置、后置-- //x-- 后置--,先使用,再-- --x后置--,先--,再使用
++ 前置、后置++ // x++后置++,先使用,再++ ++x前置++,先++,再使用
*间接访问操作符(解引用操作符)
(类型)强制类型转换
赋值操作符:复合赋值符
+= -= *= /= &= ^= |= >>= <<=
关系运算符 !=不相等 ==相等
逻辑运算符 &&逻辑与 ||逻辑或 (有一个为真则为真)
赋值运算符 =
求字节数运算符:sizeof()//计算的是变量/类型所占空间的大小,计算数组大小,单位是字节 printf(”%d\n“,四则偶分(arr)),
移位操作符:<<左移 >>右移
位运算符:| 或 ^异或 &与(按位)
下标运算符:[ ] //int arr [10]={0}
(三目操作符)条件操作符:exp1?exp2:exp3;
// int mian ()
{
int a =10;
int b =20;
int max=0;
max=(a>b?a:b);
if(a>b)
max=a;
else
max=b;
return=0;
}
函数调用操作符()
int Add(intx,inty)
{
int z=0;
z=x+y:
return z;
}
int main()
{
int a=10;
int b=20;
int sum =Add (a,b);
return 0;
}
逗号运算符和逗号表达式
逗号运算符”,“作为C语言的一种特殊的运算符,也称为顺序求值运算符,它的作用是把多个表达式连接起来。用逗号运算符连接起来的式子称为逗号表达式 ,其一般形式为:表达式1,表达式2,...., 表达式n
表达式的求解过程:按照从左大有右的顺序逐个求解表达式1,表达式2,...,表达式n的值,而整个逗号表达式的值是最后一个表达式(表达式n)的值
宏定义
宏定义#define命令是C语言的一种预编程序命令,用来定义程序中使用的符号常量,一般写在源文件的开始部分,有带参数和不带参数两种使用形式
不带参数的宏定义。不带参数的宏定义是指用一个指定的标识符(宏名)来代表一个常量(宏体),其一般格式为:#define 标识符 字符串 其含义是将程序中该语句以后出现<字符串>来替代。
带参数的宏定义。不带参数的宏替换是一种简单的字符串常量替换,为了使宏替换更具灵活性,C语言中提供了带参数的宏定义,
其一般形式为:#define 宏名(参数表) 宏体
if-else语句
if-else语句是标准的if语句,用来实现双分支选择结构,其一般形式为:
if(条件)
{
语句体1
}
else //esle和它离的最近的if匹配
{
语句体2
}
指针变量的指针变量
1.指针变量的定义及初始化
一个变量在内存中的地址称为该变量的指针,变量的地址在程序执行过程中是不会发生变化的, 所以一个变量的指针是常量专门用来存放地址的变量称为指针变量,与简单变量一样,指针变量也是先定义后使用。一般而言,指针变量的定义形式为:类型标识符*指针变量名
同样,也可以在定义时为指针变量赋初值,即初始化。一般地,指针变量的定义及初始化形式为:类型标识符*指针变量名=&变量名
指针变量初始化后,该指针就指向了具体的变量,对变量的访问就可以通过指针变量完成。
2.指针运算
当一个指针指向一个变量时,程序就可以利用这个指针间接引用这个变量,间接引用的格式为: *指针变量
其中,*是间接引用运算符,为单目运算符,优先级与++、--相同,他可以访问指针变量所指向的变量的值。
3.指针变量作为函数的参数
指针变量作为函数的实参时,将变量的地址传递到行参中,是一种地址传递方式。在函数体中改变行参时,不能够改变实参指针变量的值,但是可以改变该指针变量所指变量的值
// int main
{
int a=10;//申请了4个字节的空间
//printf(“%p\n”,&a);
int*p=&a // int告诉我们p是一个什么样的指针变量 *告诉我们p是一个指针变量 p是一个变量-指针变量
//printf(“%p/n”,p);
*p=20 //*-解引用操作符/间接访问操作符 *p 通过*p找到a
printf(“a=%d\n”,a);
return 0;
}
指针结构体的指针变量
一个结构体类型变量在内存中占有一段连续存储单元,这段内存单元的首地址就是该结构体变量的指针。可以用一个指针变量指向一个结构体变量,或指向结构数组中的元素。这样的指针变量称为指向 结构体的的指针变量。
1.指向结构体的指针变量
指向结构体的指针变量的定义,与普通指针变量的的定义完全一样,其一般形式:struct 结构类型名 *指针变量名
结构体变量的首地址就是该结构体变量的指针。用地址运算符&就可获得结构体变量的指针。将一个指针变量指向结构体变量的一般形式为:指针变量名=&结构体变量名
就使指针变量指向了结构体变量,从而对结构体成员的访问就可通过指针变量来实现。
2.结构体变量成员的访问形式
结构体变量名.成员名
(*结构体指针变量名).成员名
结构体指针变量名->成员名
3.指向结构体数组的指针变量
类似于用指向结构体变量的指针,间接访问结构体成员一样,也可以用指向结构体数组及其元素的指针来处理结构体数组。
//char name[ 20]; name是个数组不能直接改
// struct Book b1={“C语言程序设计”,55};
// strcpy(b1.name,“C++”); strcpy-string copy-字符号拷贝-库函数-string.h
//printf("%s/n",b1.name);
4.指向结构体的指针变量作为函数参数
类似于普通指针变量作为函数参数一样,用指向结构体的指针变量作实参时,属于“地址传递”方式
初识C 语言的更多相关文章
- 初识 go 语言:方法,接口及并发
目录 方法,接口及并发 方法 接口 并发 信道 结束语 前言: go语言的第四篇文章,主要讲述go语言中的方法,包括指针,结构体,数组,切片,映射,函数闭包等,每个都提供了示例,可直接运行. 方法,接 ...
- 初识 go 语言:数据类型
目录 数据类型 指针 结构体 数组 切片 切片的方法 映射 函数闭包 结束语 前言: go语言的第三篇文章,主要讲述go语言中的数据类型,包括指针,结构体,数组,切片,映射,函数闭包等,每个都提供了示 ...
- 初识 go 语言:语法
目录 语法 for 循环 if 语句 switch 语句 defer 语句 defer 栈 结束 前言: go语言系列第二篇,主要讲述go语言的语法,如循环,if判断,swich语句,defer语句, ...
- 初识 go 语言
目录 go简介 安装 hello world 函数 变量 常量 可见性规则 结束 前言: 最近组内要试水区块链,初步方案定为使用fabirc来弄,而fabric的智能合约就是用go写的,借此机会正好学 ...
- 《Go并发编程实战》读书笔记-初识Go语言
<Go并发编程实战>读书笔记-初识Go语言 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在讲解怎样用Go语言之前,我们先介绍Go语言的特性,基础概念和标准命令. 一. ...
- 第二百五十八节,Tornado框架-逻辑处理get()方法和post()方法,初识模板语言
Tornado框架-逻辑处理get()方法和post()方法,初识模板语言 Tornado框架,逻辑处理里的get()方法,和post()方法 get()方法,处理get方式的请求post()方法,处 ...
- 01_初识C语言
第一章 - 初识C语言 基本了解C语言的基础知识,对C语言有一个大概的认识. 每个知识点就是简单认识,不做详细讲解. 1. 什么是C语言? C语言是一门通用计算机编程语言,广泛应用于底层开发.C语言的 ...
- 《玩转D语言系列》一、通过四个版本的 Hello Word 初识D语言
对于D语言,相信很多朋友还没听说过,因为它还不够流行,跟出自名门的一些语言比起来也没有名气,不过这并不影响我对它的偏爱,我就是这样的一种人,我喜欢的女孩子一定是知己型,而不会因为她外表,出身,学历,工 ...
- 第一、初识C语言
1·C语言强大而灵活,如python,LISP,FORTRAN,Perl,Logo,BASIC,PASACAL的编译器和解释器都是C语言编写的. 2·C语言的指针错误往往难以察觉,但这恰好告诉我们,一 ...
- 初识C语言
C语言是开发iOS软件的基础. 一.C语言简介 1. 简史 1) C语言于1972年发明,首次使用是用于重写UINX操作系统(UNIX以前主要是用汇编语言写的,它奠定了操作 ...
随机推荐
- 记事本默认编码改为UTF-8
前端时间发现用记事本直接创建的记录目标信息的TXT文本再用sublime打开变成了乱码,才发现编码有问题,记事本直接创建的文本编码竟然是ANSI编码. 于是动手将记事本默认编码改为UTF-8. 记事本 ...
- jenkins +docker+python接口自动化之jenkins容器下安装python项目所需要的库(三)
1.场景 1.centos系统,在docker的jenkins容器下安装python项目所需要的包 2.我们目前是搞接口自动化,代码放到码云上,运行环境是jenkins容器下,所以需要在jenkins ...
- STM32 获取系统时钟频率
//定义一个RCC_ClocksTypeDef 的结构体 RCC_ClocksTypeDef get_rcc_clock; //调用RCC_GetClocksFreq获取系统时钟状态 RCC_GetC ...
- js遍历出数组重复的数据,及重复的个数(简单有效)
const res={} ["s","s","a"].forEach((key)=>{ if(res[key]){ res[key]+ ...
- flutter 顶部导航tabbar自定义
本文使用tabbar实现顶部横向滚动多个菜单. 实现tabbar搜索框功能加功能按钮. 话不多说,上代码! import 'package:flutter/cupertino.dart'; impor ...
- Windows日常快捷键
Windows: 环境变量: Win+R,--> sysdm.cpl 计算器: Win+R,-->calc 服务:Win+R,-->services.msc 远程:Win+R,--& ...
- libev中的__attribute__优化
在学习libev的过程中,遇到了大量的__attribute__优化方式,此文章将它们做一个汇总和介绍,并会持续更新 1.unused:使编译器忽略未使用的函数或者变量 源码如下 1 //判断如果gc ...
- Git 提交(commit)没有自动生成Change-Id导致无法push
1). 检查仓储 .git/hook 下面是否有 commit-msg 文件,如果没有可以到下面的地址下载,或者把其他同事的commit-msg文件拷贝到你的.git/hook重新commit即可. ...
- shell相关基础面试题
用sed修改test.txt的23行test为tset: sed –i '23s/test/tset/g' test.txt 查看/web.log第25行第三列的内容. sed –n '25p' /w ...
- 3月1日Android开学学习
Android开发的简单控件 1.文本显示 2.视图基础 3.常用布局 4.按钮触控 5.图像显示 文本显示 (1)设置文本内容 1.在XML文件中通过属性Android:text设置文本 Andro ...