Sunshine__sunny的快乐码奴生活
C语言入门指南
学习目标
- 后期服务
- JNI (C语言)
- C
- JAVA
- 编程思想
- 编程能力
C语言和C++的区别
- C面向过程
上课:
小王 | 走进教室 | 拿出电脑 | 开始听课 |
---|
- C++面向对象(移植 复用)
找对象:
教师 | 姓名 身高 年龄 授课 | 东哥 |
---|---|---|
学生 | 姓名 身高 年龄 选修课 | 小王 |
课程 | 变化 名称 | Android开发 |
地址 | 编号 座位数 | 5405 |
工具 | 型号 | 笔记本电脑 |
程序从 写出来——> 有结果的过程
开发工具IDE:
- DevC++
- Android Studio
- 创建项目 写代码
- 运行
- 结果
集成开发环境所要做的事
- 写代码——文本编辑器
#include<stdio.h>
int main()
{
printf("Hello world!");
return 0;
}
- 预编译——编译器(制定规则)
- 展开
- 编译——高级语言转化为 汇编代码
gcc -E test.c -o test.i -o test.s- 检查语法错误
- 转化为汇编代码
- 汇编——把汇编代码转化为二进制数据(0111011000101)
gcc -C test.s -o test.o- 转化为目标文件
- 链接——把所有的目标文件链接为可执行的程序
gcc -o test.o test
具体学习内容
include
宏:导入头文件(声明一些方法)
#include<stdio.h>
#include<stdbool.h>
- 如果系统已经提供某些功能的实现
只需要使用include将这些功能所在的头文件导入即可
<系统提供的类库>
stdio.h | stdlib.h | math.h | string.h |
---|
- “自己定义的头文件”
#include “calulate.h”(自己写的)- 编译器会首先从系统的类库中去查找{#include<stdio.h>}
若没有,再到自系统中去找,没有则报错
- 编译器会首先从系统的类库中去查找{#include<stdio.h>}
main(){}
- 函数=代码块=完成特定功能
(函数)[代码块]
int main()
{
return 0;
}
- 所有程序的入口点都是main函数
几个参数 | 备注 | |
---|---|---|
int返回值 | 记录当前程序的运行状态 | |
0 | 正常结束 | 资源自有分配 |
非0 | 异常结束 | 没收 |
main(int argc,char*argv[]) | 此为标准模板 | 即规定参数,main是系统给的 |
int argc | 参数个数 | argument count |
char *argv[] | 每个参数组成的字符串数组 |
int main(int argc,char*argv[])
{
printf("%d",argc);
printf("%s",argv[0]);
return 0;
}
记得
先 F11——编译
再F10——运行
变量
记录数据 ,保存数据
基本数据类型 (只能存一个值) | 描述 | 打印方式 | 16位 | 32位 | 64位 |
---|---|---|---|---|---|
int | 整型数据 eg.1 2 33 520 | %d | 2 | 4 | 4 |
long | 长整型 | %ld | 4 | 4 | 8 |
float | 单精度浮点数 eg. 1.5 23.0 | %f | 4 | 4 | 4 |
double | 双精度浮点数 eg.1.5 23.0 | %f | 8 | 8 | 8 |
char | 字符 eg. ‘l’ ‘o’ | %c | 1 | 1 | 1 |
string | 字符串 eg.“sunny” | ||||
short | 短整型 | 2 | 2 | 2 | |
bool | 真true/假false |
- 各个数据类型占用的 内容空间不同
可用 printf("%d\n",sizeof(int)) 查出 所占空间大小
#include<stdio.h>
#include<stdbool.h>
int main(int argc,char*argv[])
{
printf("%d\n",argc);
printf("%s\n",argv[0]);
printf("Hello World!\n");
printf("%d\n",sizeof(int));
printf("%d\n",sizeof(long));
printf("%d\n",sizeof(float));
printf("%d\n",sizeof(double));
printf("%d\n",sizeof(short));
printf("%d\n",sizeof(char));
printf("%d\n",sizeof(bool));
return 0;
}
变量的简单应用
int count=0;
count=3;
printf("%02d\n",count);
long size=230;
printf("%ld\n",size);
- %02d 不足两位的用0补齐
- %.2f 小数点后保留两位小数
float score=3.1415926;
printf("%.2f\n",score);
- 若用%d字符则对应的ASCII码值
char choose='c';
printf("%c\n",choose);
printf("%d\n",choose);
- 一个中文占两个字符
char choose=‘中’;
printf("%c\n",choose); - 非0即真,0即假
bool status=true;
printf("%d\n",status);
bool status=false;
printf("%d\n",status);
输入输出
- printf 向终端输出字符串
终端 console口
printf("Hello World!\n");
- scanf 接收终端输入 (字符串)
\n 换行
\t 一个缩进 - 缓冲区:输入输出流 IO流 cout cin
scanf 格式化输入
缓冲区: “123 456’\n’”
终端: 123 456’\n’
int a; //a=123
char b; //b=''
int a; //a=456
不要在scanf里加内容
用户输入时也要输入相同的内容
(如 -%d- 则要输入 -123- )
int pwd=0;
scanf("jack%d",&pwd);
printf("pwd=%d\n",pwd);
scanf("%d%d",&num1,&num2);也可以
不过要输入多次(两次)较为麻烦
下图为一次性输入格式
int num1,num2;
scanf("%d %d",&num1,&num2);
printf("%d %d\n",num1,num2);
if 语句
当某种条件成立才执行
if (条件 true非0/false0)
{
成立要做的事
}
运算符
运算符 | |||
---|---|---|---|
+ | 加 | ||
- | 减 | ||
* | 乘 | ||
/ | 除 /取整数部分 | 7/3=2…1 | 得2 |
% | 取余数部分 | 7/3=2…1 | 得1 |
float r=3/2;
print("%f\n",r);
x%5=0,1,2,3,4
续表 | ||
---|---|---|
&& | 且 | 两个同时成立 |
// | 或 | 只要一个成立 |
++ | 自增 | i++和++i不同 |
– | 自减 | |
== | 判断等于 | |
= | 赋值 | |
!= | 不等于 | |
+= / -= /*= / /= |
问号表达式
char c;
if(3>1){
c='y';
} else{
c='n';
}
也可以这样
c=3>1?'y':'n';
逗号表达式
result=表达式1,表达式2,表达式3
输出的是 最后一个 表达式3
int temp=20;
if(temp--,temp--,temp--)
{
printf("temp=%d\n",temp);
}
int temp=20;
int t2= (temp--,temp--,temp--);
if(t2)
{
printf("temp=%d\n",temp);
printf("t2=%d\n",t2);
}
switch语句
对比 | switch | if-else |
---|---|---|
功能 | 相同 | 相同 |
可读性 | 高 | 低 |
- switch的模板
switch(已经确定值的变量 int/char)
{
case 10 'c';
break;
case 10 'c';
break;
default;
break;
}
- 尝试使用
int a=0;
printf("请输入一个数字1-3:");
scanf("%d",&a);
switch(a)
{
case 1;
printf("你输入的是1\n");
break;
case 2;
printf("你输入的是2\n");
break;
default;
printf("你输入的是3\n");
break;
}
break 跳出当前循环语句
continue 结束当前循环 继续下一次循环
重要 | if | for循环 | while | 数组 | 指针 | 结构体 | 动态分配内存 |
---|
For 循环
for (循环控制变量;运行的条件;控制变量的变化)
注意:中间的部分必须要,其他部分可以省略,分号不能省
- 应用一:输出1-10之间的整数
for(int i=1;i<=10;i++)
{
printf("i=%d\n",i);
}
循环控制变量的定义和初始化只一次
变量的作用域 | 局部 | 全局 | 静态 |
---|---|---|---|
备注 | { int a { int a; printf(a); } } | 在函数代码块的最外面 |
循环控制变量什么时候变化/执行?
i++
i–
i+=2
答:当这一次循环结束时变化/执行
- 应用二:不断输出1-10之间的整数
for(int i=1;i<=10;)
{
printf("i=%d\n",i);
if(i==10)
{
i = 0;
}
i += 1;
}
for(int i = 1;i <= 10;i++)
{
printf("i=%d\n",i);
if(i==10)
{
i = 0;
}
}
for(int i = 1; i <= 10; i++)
{
printf("i = %d\n", i);
if(i=10)
{
i = 0;
}
}
以上三种均为同种结果
- 应用三:到 5 时跳出
for(int i = 1; i <= 10; i++)
{
if(i==5)
{
continue;
}
printf("i = %d\n", i);
}
Getchar
具体使用方法
- 当上一次有数据输入的情况下必须将上一次缓冲区里的内容清空 *
- 法一 :
[ getchar ();从终端接收一个字符 ]
scanf("%d");
123\n;
\n
getchar ();//拿走/n
getchar (); - 法二:
fflush(stdin);//刷新输入流
- 法一 :
- 可通过如下代码进行深入了解
int main()
{
char a;
printf("请输入a:");
scanf("%c", &a);
char b;
printf("请输入b:");
getchar();
scanf("%c", &b);
char c;
printf("请输入c:");
scanf("%c", &c);
printf("a=%c b=%c c=%c\n",a,b,c);
return 0;
}
数组
存储多个同种类的数据
- 数组的定义:
int array[] = {1,2,3,4};
int array[4];
int array[4] = {1,2};
- 必须明确知道数组元素的个数
因为系统为数组分配内存的时候必须明确大小
int array[];
- 数组的内存
- 数组的访问:
array[0]=2;
array[1]=233;
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int array[4];
srand(time(NULL));
for(int i = 0; i <4; i++)
{
int temp = rand() % 10;
array[i]=temp;
//printf("%d",i);
}
for(int i = 0; i <4; i++)
{
printf("%d ",array[i]); //放到上面的for循环也可
}
return 0;
}
还可以通过 Demo Three 来深入理解link.
未完待续。。。