目录
1. 前言
1.1 什么是程序
1.2 认知延伸之程序和数据算法的关系
算法 + 数据结构 = 程序
进程/任务: 跑起来的程序叫做进程,动态概念
1.3 产生一个程序的过程
编程 -> 编译 -> 执行
编译: 预处理 -> 编译 -> 汇编 -> 链接
1.4 计算机语言
2. 初始
2.1 C语言开发环境
2.2 开发环境安装
2.3 C程序的基础框架
#include <stdio.h> // 编译预处理指令
#include <stdlib.h>
int main() // 程序的入口主函数main
{
// 你要写的代码
return 0; // 程序推出遣前返回给调用者(操作系统)的值
} // 程序(函数、功能)结束标志
2.4 变量
2.5 变量名 / 标识符
2.6 计算机的数据类型
2.7 printf打印
#include <stdio.h>
/*
注释
*/
int main()
{
int a = 3;
printf("你好,世界");
printf("%d", a); //占位符
}
#include <stdio.h>
int main()
{
int a = 3;
float f = 2.3;
char c = '#';
int data = 10;
int chushu = 3;
float result;
result = (float)data/chushu; //强制转换
a = 88;
printf("你好\n");
printf("16进制输出a=0x%x\n",a);
printf("float = %f\n",f);
printf("char:%c\n",c);
printf("a的地址:%p\n",&a);
printf("result:%f\n",result);
return 0;
}
//你好
//16进制输出a=0x58
//float = 2.300000
//char:#
//a的地址:000000000061FE14
//result:3.333333
2.8 printf exc
2.9 scanf输入
#include <stdio.h>
int main()
{
int data, data2, data3;
printf("请输入一个整数:\n");
scanf("%d", &data);
printf("输入完毕\n");
printf("你输入的数据是:%d\n", data);
printf("请输入3个数:\n");
/*
scanf中不要添加,
*/
scanf("%d%d%d",&data,&data2,&data3);
printf("你输入的数据是: data=%d,data2=%d,data3=%d\n",data,data2,data3);
return 0;
}
getchar:
#include <stdio.h>
/*
跟printf的区别:
1.自动加入换行符
2.printf支持多种输出,而puts只是输出字符串
*/
int main()
{
char c;
puts("请输入一个字符");
c = getchar();
puts("你输入的字符是");
putchar(c);
return 0;
}
ASIC码值
#include <stdio.h>
int main()
{
char a = 'a';
char b = 'b';
char A = 'A';
char B = 'B';
printf("%c, %c, %c, %c\n", a, b, A, B);
printf("a=%d, b=%d, A=%d, B=%d\n", a, b, A, B);
// Asic码值
puts("请输入一个大写字母\n");
scanf("%c", &a);
b = a + 32;
printf("你输入的字母对应的小写字母是 %c \n", a + 32);
printf("你输入的字母对应的小写字母是 %c \n", b);
getchar(); //吸收回车符
//当分多次连续scanf获得字符的时候,要注意回车符
putchar(getchar() + 32);
return 0;
}
3. 流程控制
3.1 if else
#include <stdio.h>
int main()
{
int money;
printf("输入收入:\n");
scanf("%d", &money);
if (money >= 100)
//==判断;=赋值
// 判断会转换为0/1(True/False)
{
printf("高收入!\n");
}
puts("谈话结束。");
printf("测试结果:%d\n", money >= 100);
return 0;
}
#include <stdio.h>
int main()
{
char cdata;
printf("请输入一个字符\n");
scanf("%c", &cdata);
if (cdata >= 97 && cdata <= 122)
{
printf("%c\n", cdata);
}
else if (cdata >= 65 && cdata <= 122)
{
printf("%c\n", cdata + 32);
}
else
{
printf("请输入正确的字符\n");
}
printf("done!\n");
return 0;
}
交换数值
#include <stdio.h>
int main()
{
int data1;
int data2;
int datatmp;
printf("请输入两个数:\n");
scanf("%d%d", &data1, &data2);
if (data1 > data2)
{
// 交换
datatmp = data1;
data1 = data2;
data2 = datatmp;
}
printf("%d,%d\n", data1, data2);
}
3.2 逻辑运算与或非
#include <stdio.h>
int main()
{
int a;
int b;
printf("请输入a,b两个数:\n");
scanf("%d%d", &a, &b);
if (a == 1 && b == 0)
{
printf("逻辑与");
}
if (a == 1 || b == 0)
{
printf("逻辑或");
}
if (!a)
{
printf("逻辑非");
}
return 0;
}
3.3 SwitchCase
#include<stdio.h>
int main()
{
int data;
printf("请输入一个数:\n");
scanf("%d",&data);
switch (data)
{
case 1:
puts("满足条件1的情况");
break;
case 2:
puts("满足条件2的情况");
break;
case 3:
puts("满足条件3的情况");
break;
default:
puts("满足其他情况");
break;
}
return 0;
}
3.4 While循环
#include <stdio.h>
int main()
{
int times = 10;
while (times) //当条件为真时执行
{
puts("times");
times--;
printf("times = %d\n",times);
}
return 0;
}
#include <stdio.h>
int main()
{
int sum = 0;
int data = 1;
while (data <= 100) // 当条件为真时执行
{
printf("data = %d\n", data);
sum = sum + data;
data++;
}
printf("sum = %d\n", sum);
return 0;
}
doWhile
#include <stdio.h>
int main()
{
int data = 0;
do{
printf("data test");
} while (data != 0);
return 0;
}
3.5 for循环
#include <stdio.h>
int main()
{
// 条件赋初值 判断临界值 条件改变
for (int i = 0; i < 100; i++)
{
//设置初始条件,只执行一次
//判断,执行循环体,条件改变
printf("%d\n", i);
}
}
#include <stdio.h>
int main()
{
int i = 0;
// 条件赋初值 判断临界值 条件改变
for (; i < 100;)
{
// 设置初始条件,只执行一次
// 判断,执行循环体,条件改变
printf("%d\n", i);
i++;
}
}
break
#include <stdio.h>
int main()
{
// int numOfPerson;
int totalMoney = 0;
int money;
for (int numOfPerson = 1; numOfPerson <= 1000; numOfPerson++)
{
printf("请输入捐款的数目:\n");
scanf("%d", &money);
totalMoney += money;
if (totalMoney >= 100000)
{
puts("募捐金额以达到。");
printf("总捐款人数是%d\n", numOfPerson);
printf("人均募捐:%f\n", (float)(totalMoney / numOfPerson));
break; //提前结束循环
}
}
return 0;
}
continue
#include <stdio.h>
int main()
{
for (int i = 100; i <= 200; i++)
{
if (i % 3 != 0)
{
continue; // 结束当前循环
}
printf("%d\n", i);
}
return 0;
}
嵌套循环
#include <stdio.h>
int main()
{
for (int i = 1; i <= 4; i++)
{
for (int j = 1; j <= 5; j++)
{
printf("%d ", i*j);
}
printf("\n");
}
return 0;
}
4. 数组
#include <stdio.h>
int main()
{
int a[10];
puts("初始化数组");
for (int i = 0; i < 10; i++)
{
a[i] = i + 100;
}
for (int i = 0; i < 10; i++)
{
printf("%d\n", a[i]);
}
puts("done");
}
#include <stdio.h>
int main()
{
int a[10];
puts("初始化数组");
for (int i = 0; i < 10; i++)
{
a[i] = i + 100;
}
for (int i = 0; i < 10; i++)
{
printf("address: %p, data: %d\n", &a[i], a[i]);
}
puts("done");
int b[5] = {1, 2, 3, 4, 5}; // 初始化
int c[5] = {1, 2, 3}; // 后面自动赋0
int d[10] = {0}; // 全部赋值为0
int e[] = {1, 2, 3, 4, 5}; // 根据赋值个数,确定数组长度
int size = sizeof(e) / sizeof(e[0]); //size关键字,计算数据的内存空间大小
printf("e的个数有:%d\n", size);
return 0;
}
逆序输出
#include <stdio.h>
int main(int argc, const char **argv)
{
int arr[10];
for (int i = 0; i < 10; i++)
{
arr[i] = i;
}
puts("当前数组是:");
for (int i = 0; i < 10; i++)
{
printf("%d\n", arr[i]);
}
puts("逆序输出:");
for (int i = 9; i >= 0; i--)
{
printf("%d\n", arr[i]);
}
return 0;
}
数列
#include <stdio.h>
int main(int argc, const char **argv)
{
int arr[30];
arr[0] = 0;
arr[1] = 1;
for (int i = 2; i < 30; i++)
{
arr[i] = arr[i - 1] + arr[i - 2];
printf("%d ", arr[i]);
}
printf("done");
return 0;
}
冒泡排序
#include <stdio.h>
int main(int argc, const char **argv)
{
int arr[] = {12, 5, 8, 16, 0, 1};
int temp;
int len = sizeof(arr) / sizeof(arr[0]);
for (int i = 0; i < len - 1; i++)
{
for (int j = 0; j < len - i - 1; j++)
{
if (arr[j] < arr[j + 1])
{
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
for (int i = 0; i < len; i++)
{
printf("%d ", arr[i]);
}
printf("done");
return 0;
}
简单选择排序
#include <stdio.h>
int main(int argc, const char **argv)
{
int arr[] = {12, 5, 8, 16, 0, 1};
int temp;
int len = sizeof(arr) / sizeof(arr[0]);
for (int i = 0; i < len - 1; i++)
{
for (int j = i + 1; j < len; j++)
{
if (arr[i] < arr[j])
{
temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
}
}
for (int i = 0; i < len; i++)
{
printf("%d ", arr[i]);
}
printf("done");
return 0;
}
二维数组
#include <stdio.h>
int main(int argc, const char **argv)
{
int a[2] = {1, 2};
int a1[2][3] = {{1, 2, 3}, {4, 5, 6}};
int a2[2][3] = {9, 8, 7, 6, 5, 4};
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
printf("%d,%d,%d \n", i, j, a1[i][j]);
}
}
printf("%d \n", a2[1][2]);
printf("done");
return 0;
}