------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一:选择排序
1.选择排序原理:
![](https://img-blog.csdn.net/20150814144508004?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
2.选择排序的代码实现:
#include <stdio.h>
void selectSort(int arr[],int len);
int main(){
int a[10]={23,12,4,67,20,100,21,45,3,28};
selectSort(a,10);
//遍历输出数组
for(int i=0;i<10;i++){
printf("%d,"a[1]);
}
printf("\n");
return 0;
}
//选择排序
void selectSort(int arr[],int len){
int temp;
for(int i=0;i<len-1;i++){
for(int j=i+1;j<len;j++){
//交换依据
if(arr[i]>arr[j])
{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
二:折半查找
1.实现步骤:
![](https://img-blog.csdn.net/20150814144524083?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
2.折半查找的条件:
1)必须是一个有序的数组
2)当L>H时就说明查找失败了。
3.折半查找的代码实现:
4.使用折半查找法插入一个数据,返回要插入数据的位置,代码实现如下:
三:二维数组的定义
1.二维数组定义的一般形式:
类型输说明符 数组名[常量表达式1][常量表达式2]
2.注意事项:
1)数组名不能和变量名同名
2)数组长度可以是常量表达式
3)Xcode特有的定义数组的方式:int m=3,n=4; int arr[m][n];
4)宏定义写法: define M 3
int a[2+M][4];
四:二维数组的初始化
1.定义的同时初始化
1)完全初始化
int a1[2]={1,2};
int a[2][3]={{2,4,6},{22,77,3}}; //1.分段赋值
int a[2][3]={1,2,3,4,5,6}; //2.连续初始化
int a[][3]={{1,2,3},{4,5,6},{7,8,9}};//可以省略第一维
int a[][3]={1,2,3,4,5,6};//等同于a[2][3]
2)部分初始化
int a[3][4]={1}; //只有a[0][0]=1,其他位置为0
1 0 0 0
0 0 0 0
0 0 0 0
int a[3][4]={{1},{2},{3}};
1 0 0 0
2 0 0 0
3 0 0 0
int a[3][4]= {1,2,3,4,5};
1 2 3 4
5 0 0 0
0 0 0 0
2.先定义,后初始化
int a[3][4];
a[0][0] = 1;
...
...
a[2][3] = 12;
五:二维数组的存储细节
1.总字节数的求法:
1)总字节数=行*列*sizeof(数组类型);
2)总字节数=sizeof(数组名);
2.计算数组行的总字节数
第一行总字节数=sizeof(a[0]); //假如已经定义过int a[2][3];
3.每一行多少列
列数= 行总字节数/每个元素的字节
len = sizeof(a[0])/sizeof(int);
六:迷宫游戏
1.伪代码实现
//******定义变量
//1)定义变量,地图,存储用户输入的方向,小人位置
//2)先打印一遍地图
//3)提示用户游戏玩法
//*******要进行循环控制
//4)接收用户输入的方向
//5)判断用户输入了什么方向
//******判断小人能否移动
//6)判断小人是否能否移动
//核心要知道小人的下一个位置是否是路
//是路:
//让小人开始移动,移动核心:小人和路交换
//重新记录小人的当前位置
//不是路:什么也不做
//******判断是否走出来
//判断y的值是否==5
//是:提示已走出迷宫
//break;游戏结束
2.迷宫游戏代码实现
七:字符串的基本概念
1.字符串是位于双引号中的字符序列
2.在内存中以"\0"结束,所占字节比实际多一个字节
3.可以把一个字符常量赋值给一个字符变量,但是不能把一个字符串常量赋值给字符变量
4.C语言中没有字符串变量,可以用字符数组来存放字符串
八:字符数组
1.定义形式与前面介绍的数值数组相同
char 数组名[常量表达式];
2.字符数组的初始化
1)定义同时进行初始化
char ch[5]={'a','b','c','d','e'};
char ch[]={'a','b','c','d','e'};
char ch1[3]={'a'}; // a \0 \0
char ch2[5]={[3]='b'};
2)先定义后初始化
char ch3[3];
ch[0] = 'a';
ch[1] = 'b';
ch[2] = 'c';
3.引用(遍历)
3.字符数组是用来保存字符串的
字符数组的作用:
1)保存字符
2)保存字符串
//用字符数组保存字符串
第一种方法:char str[15]={"helloworld!"};
第二种方法:char str[15]="helloworld!";
第三种方法:char str[]="helloworld!";
1.选择排序原理:
2.选择排序的代码实现:
#include <stdio.h>
void selectSort(int arr[],int len);
int main(){
int a[10]={23,12,4,67,20,100,21,45,3,28};
selectSort(a,10);
//遍历输出数组
for(int i=0;i<10;i++){
printf("%d,"a[1]);
}
printf("\n");
return 0;
}
//选择排序
void selectSort(int arr[],int len){
int temp;
for(int i=0;i<len-1;i++){
for(int j=i+1;j<len;j++){
//交换依据
if(arr[i]>arr[j])
{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
二:折半查找
1.实现步骤:
2.折半查找的条件:
1)必须是一个有序的数组
2)当L>H时就说明查找失败了。
3.折半查找的代码实现:
#include <stdio.h>
int searchItem(int arr[],int len,int key);
int main(){
int a[]={3,4,12,20,21,23,28,45,67,100};
//查找key值为20
int loc = searchItem(a,10,45);
printf("loc=%d\n",loc);
return 0;
}
//使用折半查找查找一个数
int searchItem(int arr[],int len,int key){
//先定义变量
int low =0,high=len-1,mid;
//循环
while(low<=high){
//计算mid的位置
mid = (low+high)/2;
//判断key a[mid]
if(key>arr[mid]){
//key>a[mid] low = mid +1;
low = mid + 1;
}else if(key<arr[mid]){
//key<a[mid] high = mid -1;
high = mid -1;}
else
//key==a[mid] //return mid;
return mid;
}
}
//查找不到的情况
return -1;
}
4.使用折半查找法插入一个数据,返回要插入数据的位置,代码实现如下:
#include <stdio.h>
int searchItem(int arr[],int len,int key);
int main(){
int a[]={3,4,12,20,21,23,28,45,67,100};
//查找key值为20
int loc = searchItem(a,10,45);
printf("loc=%d\n",loc);
return 0;
}
//使用折半查找查找一个数
int searchItem(int arr[],int len,int key){
//先定义变量
int low =0,high=len-1,mid;
//循环
while(low<=high){
//计算mid的位置
mid = (low+high)/2;
//判断key a[mid]
if(key>arr[mid]){
//key>a[mid] low = mid +1;
low = mid + 1;
}else if(key<arr[mid]){
//key<a[mid] high = mid -1;
high = mid -1;}
else
//key==a[mid] //return mid=1;
return mid+1;
}
}
//查找不到的情况
return low;
}
三:二维数组的定义
1.二维数组定义的一般形式:
类型输说明符 数组名[常量表达式1][常量表达式2]
2.注意事项:
1)数组名不能和变量名同名
2)数组长度可以是常量表达式
3)Xcode特有的定义数组的方式:int m=3,n=4; int arr[m][n];
4)宏定义写法: define M 3
int a[2+M][4];
四:二维数组的初始化
1.定义的同时初始化
1)完全初始化
int a1[2]={1,2};
int a[2][3]={{2,4,6},{22,77,3}}; //1.分段赋值
int a[2][3]={1,2,3,4,5,6}; //2.连续初始化
int a[][3]={{1,2,3},{4,5,6},{7,8,9}};//可以省略第一维
int a[][3]={1,2,3,4,5,6};//等同于a[2][3]
2)部分初始化
int a[3][4]={1}; //只有a[0][0]=1,其他位置为0
1 0 0 0
0 0 0 0
0 0 0 0
int a[3][4]={{1},{2},{3}};
1 0 0 0
2 0 0 0
3 0 0 0
int a[3][4]= {1,2,3,4,5};
1 2 3 4
5 0 0 0
0 0 0 0
2.先定义,后初始化
int a[3][4];
a[0][0] = 1;
...
...
a[2][3] = 12;
五:二维数组的存储细节
1.总字节数的求法:
1)总字节数=行*列*sizeof(数组类型);
2)总字节数=sizeof(数组名);
2.计算数组行的总字节数
第一行总字节数=sizeof(a[0]); //假如已经定义过int a[2][3];
3.每一行多少列
列数= 行总字节数/每个元素的字节
len = sizeof(a[0])/sizeof(int);
六:迷宫游戏
1.伪代码实现
//******定义变量
//1)定义变量,地图,存储用户输入的方向,小人位置
//2)先打印一遍地图
//3)提示用户游戏玩法
//*******要进行循环控制
//4)接收用户输入的方向
//5)判断用户输入了什么方向
//******判断小人能否移动
//6)判断小人是否能否移动
//核心要知道小人的下一个位置是否是路
//是路:
//让小人开始移动,移动核心:小人和路交换
//重新记录小人的当前位置
//不是路:什么也不做
//******判断是否走出来
//判断y的值是否==5
//是:提示已走出迷宫
//break;游戏结束
2.迷宫游戏代码实现
#include <stdio.h>
#define COL 6
#define ROW 6
int main(){
//定义地图
char map[ROW][COL]={
{'#','#','#','#','#','#'},
{'#','O','#','#',' ',' '},
{'#',' ','#','#',' ','#'},
{'#',' ',' ','#',' ','#'},
{'#','#',' ',' ',' ','#'},
{'#','#','#','#','#','#'}
};
//保存用户输入的方向
char direction;
//定义变量定义小人当前位置
int i,j,currentX=1;
int currentY=1;
//定义变量保存路
char street = ' ';
char ch; //吸收换行字符
//打印一遍地图
for(i=0;i<ROW;i++){
for(j=0;j<COL;j++){
printf("%c",map[i][j]);
}
printf("\n");
}
//提示用户玩法
printf("请控制小人移动:w.上 s.下 a.左 d.右 q.退出 \n");
//要进行循环控制
while(1){
//4)接收用户输入的方向
scanf("%c",&direction);
scanf("%c",&ch);
//5)判断用户输入了什么方向
switch(direction){
case 'w':
case 'W':
//6)判断小人是否能否移动
if(map[currentX-1][currentY]==street)
{
//核心要知道小人的下一个位置是否是路
//是路:
//让小人开始移动,移动核心:小人和路交换
char temp;
temp = map[currentX][currentY];
map[currentX][currentY] = map[currentX-1][currentY];
map[currentX-1][currentY] = temp;
//重新记录小人的当前位置
currentX--;
}
//不是路:什么也不做
break;
case 's':
case 'S':
//6)判断小人是否能否移动
if(map[currentX+1][currentY]==street)
{
//核心要知道小人的下一个位置是否是路
//是路:
//让小人开始移动,移动核心:小人和路交换
char temp;
temp = map[currentX][currentY];
map[currentX][currentY] = map[currentX+1][currentY];
map[currentX+1][currentY] = temp;
//重新记录小人的当前位置
currentX++;
}
//不是路:什么也不做
break;
case 'a':
case 'A':
//6)判断小人是否能否移动
if(map[currentX][currentY-1]==street)
{
//核心要知道小人的下一个位置是否是路
//是路:
//让小人开始移动,移动核心:小人和路交换
char temp;
temp = map[currentX][currentY];
map[currentX][currentY] = map[currentX][currentY-1];
map[currentX][currentY-1] = temp;
//重新记录小人的当前位置
currentY--;
}
//不是路:什么也不做
break;
case 'd':
case 'D':
//6)判断小人是否能否移动
if(map[currentX][currentY+1]==street)
{
//核心要知道小人的下一个位置是否是路
//是路:
//让小人开始移动,移动核心:小人和路交换
char temp;
temp = map[currentX][currentY];
map[currentX][currentY] = map[currentX][currentY+1];
map[currentX][currentY+1] = temp;
//重新记录小人的当前位置
currentY++;
}
//不是路:什么也不做
break;
case 'q':
case 'Q':
return 0;
break;
default:
break;
}
//重绘地图
for(i=0;i<ROW;i++){
for(j=0;j<COL;j++){
printf("%c",map[i][j]);
}
printf("\n");
}
//******判断是否走出来
//判断y的值是否==5
if(currentY==5){
printf("恭喜你,走出了迷宫!\n");
break;
}
//是:提示已走出迷宫
//break;游戏结束
}
return 0;
}
七:字符串的基本概念
1.字符串是位于双引号中的字符序列
2.在内存中以"\0"结束,所占字节比实际多一个字节
3.可以把一个字符常量赋值给一个字符变量,但是不能把一个字符串常量赋值给字符变量
4.C语言中没有字符串变量,可以用字符数组来存放字符串
八:字符数组
1.定义形式与前面介绍的数值数组相同
char 数组名[常量表达式];
2.字符数组的初始化
1)定义同时进行初始化
char ch[5]={'a','b','c','d','e'};
char ch[]={'a','b','c','d','e'};
char ch1[3]={'a'}; // a \0 \0
char ch2[5]={[3]='b'};
2)先定义后初始化
char ch3[3];
ch[0] = 'a';
ch[1] = 'b';
ch[2] = 'c';
3.引用(遍历)
3.字符数组是用来保存字符串的
字符数组的作用:
1)保存字符
2)保存字符串
//用字符数组保存字符串
第一种方法:char str[15]={"helloworld!"};
第二种方法:char str[15]="helloworld!";
第三种方法:char str[]="helloworld!";