C/语/言/自/学/笔记
Hello World!
#include <stdio.h>int main()
{printf("Hello World!\n");return 0;
}
程序框架(学习函数之前都要用到)
#include <stdio.h>int main()
{return 0;
}
变量
- 变量定义的一般形式
<类型名称> <变量名称>;
int a;
int a,b;
- 变量名称(标识符)
标识符只能由字母、数字、下划线组成
数字不可以出现在首位
C语言的关键字不可用 - 变量赋值
int a=b; //将b的值赋予a,与 b=a 不同。
- 变量初始化
<类型名称> <变量名称> = <初始值>;
int a=0;
int b=0;
int a=0,b=0;
常量
const int AMOUNT = 100; // const修饰符 C99!
scanf 输入
- 出现在" "中的内容是需要输入的内容
int a=0;
int b=0;
scanf("%d %d",&a,&b); //输入 1 2
scanf("%d,%d",&a,&b); //输入 1,2
数据类型
整数
int a;
scanf("%d",&a);
printf("%d",a); // %d说明后面有一个整数要输出在这个位置上
浮点数
- printf(%m.nf) 控制小数位数
https://blog.csdn.net/xjp_xujiping/article/details/55818048 - 当浮点数和整数放在一起运算时,C会将整数转换成浮点数,然后进行浮点数的运算。
- 示例:
printf("%f",10/3*3.0); // 9.000000
printf("%f",10/3*3); // 0.000000
printf("%f",10/3.0*3); // 10.000000
- 法一:
int a=10;
printf("%d",a/3); // 3 商取整
printf("%f",a/3); // 结果永远是0.000000
printf("%f",a/3.0); // 3.333333
- 法二:
double a=10; //或 float a=10; 相当于a=10.0
scanf("%lf",&a); //输入时需注意 %lf
printf("%f",a/3); // 相当于 10.0/3
(%)p
- 地址
运算符
算术运算
- % 取余
- = 优先级最低
结合关系:自右向左。 - 单目取负/单目不变
结合关系:自右向左。
int a*+b; // 自右向左
int a*-b; // 自右向左
sizeof
- 给出某个类型或变量在内存中所占据的字节数
sizeof(int)
sizeof(i)
&
- 获得变量的地址,它的操作数必须是变量
- 地址的大小是否与 int 相同取决于编译器
- 数组
相邻的数组单元之间的地址永远相差4
&a == a == &a[0]
关系运算
- ==
- !=
- 优先级:比算术运算低,比赋值运算高
- == / != 的优先级比其他的低
- 当两个值的关系符合关系运算符的预期时,关系运算的结果为1,否则为0
printf("%d\n",1==2); // 1
printf("%d\n",1>2); // 0
printf("%d\n",1<2); // 1
逻辑运算
- ! 逻辑非
!a
- && 逻辑与
若左边是false则不进行右边运算 - || 逻辑或
若左边true则不进行右边运算
条件运算
- ? 自右向左
- , 优先级最低
将,右边的值作为结果
int i;
i=1+1,2+2; // i=2
i=(1+1,2+2); // i=4
( i=0, j=10; i < j; i++, j-- )
复合赋值
- a++ 是a+1以前的值
- ++a 是a+1以后的值
示例1
int a=1;
int b=1;
printf("a++=%d,a=%d\n", a++, a); // a++值为1,a值为2
printf("++b=%d,b=%d\n", ++b, b); // ++b值为2,b值为2
示例2
int a=1;
int t1=a++; // t1=1, a=2
int t2=++a; // t2=3, a=3
判断
if-else
if (条件成立) {
…
} else {
…
}
switch-case
switch (<控制表达式>) {
case <常量>:
…
break;
case <常量>:
…
break;
default:
…
break;
}<控制表达式><常量>只能是整数结果
循环
while循环
while (条件成立) {
…
}
do-while循环(注意 ; )
do
{
<循环体语句>
} while (<循环条件>);
for循环
for (<初始动作>;<循环条件>;<循环体>) {
…
}
其他
- goto
goto out ;
…
out : //放在需要结束的循环外面
随机数
#include <stdio.h>
#include <stdlib.h>
#include <time.h>int main()
{srand(time(0));int a=rand();printf("%d\n",a);return 0;
}
- 示例:猜数游戏
#include <stdio.h>
#include <stdlib.h>
#include <time.h>int main()
{srand(time(0));int number=rand()%100+1; //可通过 x%n 来限定随机数的范围int count=0;int a;printf("猜一个1到100之间的数。\n");do{count++;printf("第%d次猜测:",count);scanf("%d", &a);if( a>number ){printf("你猜的数大了。\n");}else if( a<number ){printf("你猜的数小了。\n");}} while(a!=number);printf("恭喜你猜对了!");return 0;
}
数组
一维数组
- 有效范围 [ 0 ,数组大小-1]
- 集成初始化时的定位 C99!
int a[10]={[0]=2,[2]=3,6
}; //其他位置补零
二维数组
- 例:int a[3][5] 为3行5列的矩阵
for ( int=0; i<3; i++ ) {for ( j=0; j<5; j++ ) {a[i][j]=i*j;}
} //二维数组的遍历
- 二维数组的初始化
列数必须给出,行数可以省略,若省略表示补零
int a[][5]={{0,1,2,3,4},{2,3,4,5,6}, //最后的 , 可以存在
}; //也可不带{}
数组大小
sizeof(a)/sizeof(a[0])
搜索
- 结构体
#include <stdio.h>int amount[]={1,5,10,25,50};
char *name[]={"penny","nickel","dime","quarter","half-dollar"};struct{int amount;int *name;
} coins[]={{1,"penny"},{5,"nickel"},{10,"dime"},{25,"quarter"},{50,"half-dollar"}
};int search(int key,int a[],int len)
{int ret=-1; //没找到k时输出-1for(int i=0;i<len;i++){if(key==a[i]){ret=i;break;}}return ret;
}int main()
{int k; //需要查询的值scanf("%d",&k);for(int i=0;i<sizeof(coins)/sizeof(coins[0]);i++){if(k==coins[i].amount){printf("%s\n",coins[i].name);break;}}return 0;
}
- 二分搜索(有序数组)
int search(int key,int a[],int len)
{int ret=-1; //没找到k时输出-1int left=0;int right=len-1;while(right>left){int mid=(left+right)/2;if(a[mid]==k){ret=mid;break;} else if(a[mid]>k{right=mid-1;} else{left=mid+1;}}return ret;
}int main()
{int k; //需要查询的值scanf("%d",&k);......return 0;
}
数组排序
- 选择排序
- 冒泡法
函数
- 调用函数
<函数名>(参数值) //()不可省略
- 声明
<函数类型> <函数名>(参数值) ;
- void f(void);
表示此函数不接受参数 - void f();
表示f函数的参数未知
数学问题
猜数
- 二分法
100以内的数最多猜7次可得正确答案
最大公约数
- 辗转相除法
求a、b的最大公约数
1、若b==0,计算结束,最大公约数是a
2、否则,计算c=a%b,让a=b,b=c
3、回到步骤一
指针
指针与数组
int a[]={0};
int *p=a;
p==&a[0]
*p==a[0]
p[0]==a[0]
- 函数参数表中的数组实际上是指针,即a[ ]可以用*a代替,以下四种函数原型是等价的:
int sum(int *ar, int n);
int sum(int *, int);
int sum(int ar[], int n);
int sum(int [], int);
- 数组变量是const的指针,不能被赋值
其它
- 将Dev C++改为C99标准,参考 https://blog.csdn.net/artechtor/article/details/1788699
- 若使用 Dev C++ 4.9.9.2
system("pause"); // 在程序运行完成后,窗口还能留下
- ANSI C
只能在代码开头定义变量
不支持“//”注释
持续学习ing…
C/语/言/自/学/笔记相关推荐
- 客户说发货慢怎么回复_?沐言恋爱学:当女生说“我累了”,怎么回复最合适?...
沐言恋爱学:当女生说"我累了",怎么回复最合适? 学员提问: 沐言解答: 01 兄弟 你在考虑该怎么回复她之前 你需要做的不仅仅是直接读懂她的字面意思 而是需要了解事情背景 比如: ...
- 沈逸老师ubuntu速学笔记(2)-- ubuntu16.04下 apache2.4和php7结合编译安装,并安裝PDOmysql扩展...
1.编译安装apache2.4.20 1 第一步: ./configure --prefix=/usr/local/httpd --enable-so 2 第二步: make 3 第三步: sudo ...
- C 语 言制定了一套 ANSI 标准
随着微型计算机的日益普及, 出现了许多 C 语言版本. 由于没有统一的标准,使得这些 C 语 言之间出现了一些不一致的地方. 为了改变这种情况, 美国国家标准研究所(ANSI)为 C 语 言制定了一套 ...
- commit在c语言中的作用,【单选题】SQL语 言 中 COMMIT语句的主要作用是( )
A. 结束程序 B. 返回系统 C. 存储数据 D. 提交事务...
[单选题]SQL语 言 中 COMMIT语句的主要作用是( ) A. 结束程序 B. 返回系统 C. 存储数据 D. 提交事务 更多相关问题 [判断题]骨与骨之间一般用关节和韧带连接起来. A. 正确 ...
- java 宣传语_Java语 言 的 特 点
Java到 底 是 一 种 什 么 样 的 语 言 呢? Java是 一 种 简 单 的 面 象 对 象 的 分 布 式 的 解 释 的 健 壮 的 安 全 的 结 构 中 立 的 可 移 植 的 性 ...
- C语言程序设计A重点,【艾学笔记】复习重点之C语言程序设计
原标题:[艾学笔记]复习重点之C语言程序设计 hello,大家好,欢迎来到小艾学习小组,想想暑假快到了,马上就要迎接期末考试了,大家对本学期新学的c语言程序设计有没有把握呢?面对充满逻辑数字的c语言, ...
- Autoware感知瞎学笔记(一)lidar_kf_contour_track
Autoware感知瞎学笔记(一)lidar_kf_contour_track 目录 代码分析: 一.雷达目标Kalman滤波器 1. lidar_kf_contour_track.cpp 2. li ...
- 2.3 文 法 和 语 言 的 形 式 定义
2.3 文 法 和 语 言 的 形 式 定义 2.3.1 形式语言 序列的集合称为形式语言.具体地说,每个形式语言都是某个字母表上按某种规则构成的所有符号串的集合,反之,任何一个字母表上符号串的集合均 ...
- 数字图像学笔记——13. 图像退化与复原(退化函数的评估方法:观察法、实验法、数学建模法与湍流导致的退化)
在对受到多种原因影响的图像进行复原时,我们经常需要先行评估对图像质量产生影响的退化函数,有时甚至需要尝试建模.通过这些手段,能够最大程度上恢复图像上的噪音,并重建高清的图像细节. 文章目录 线性位置不 ...
最新文章
- 数据查询和业务流分开_数据仓库介绍与实时数仓案例
- spring源码深度解析—Spring的整体架构和环境搭建
- 安装Uikit时ERROR in Entry module not found: Error: Can't resolve './src' in 'xxx'的解决思路
- JAVA模拟HTTP post请求上传图片
- android 自定义组合键,自定义快捷操作 安卓虚拟Home键设置技巧
- Windows下Node.js安装及环境配置
- Now, using the touch-screen smartphone in your hand
- 通向财务自由之路06_适应大环境的交易策略
- Numpy中常用函数
- 周立功USBCANFD_200U的Python调用
- java名字自动生成_[java]自动生成指定长度的英文名字
- QListview获取Item内容变化信号及内容
- MDM数据血缘设计方案
- vue3 动态获取屏幕尺寸
- 艾司博讯:拼多多诱导非官方交易怎么处理?
- 在Ignite中使用线性回归算法
- ! [rejected] Dev-1.1.1 -> Dev-1.1.1 (would clobber existing tag)
- codesourcery 和Linaro简介
- 解决Ueditor编辑器图片保存路径问题
- [SDOI2009]学校食堂Dining
热门文章
- Chrome浏览器插件Postman用法简介-Http请求模拟工具
- 如何用六个步骤封装Python代码包
- 中国计算机学会推荐国际学术期刊
- boseqc35能不能连电脑_Bose QC35二代怎么连接设备_bose qc35二代连接配对方法_智能家...
- 一文道破 结构体,枚举,联合
- python中def fun 定义函数列表_Python学习之 函数篇
- 邮件服务器有故障 英文,ClamAV 故障
- Oracle 10g在RHEL6上的另类安装方法
- MacOS 中解压缩(unzip)出现 illegal byte sequence 的解决方案
- PHP代码审计DVWA[JavaScript]