冒泡排序
int arr[5]={11,23,2,66,34};
参加数据个数 比较次数
5 4 -------------------arr[4]
arr[0] arr[1] ----->arr[1]
arr[1] arr[2] ----->arr[2]
arr[2] arr[3] ----->arr[3]
arr[3] arr[4] ----->arr[4]
第二次比较
4 3 -------------------arr[3]
arr[0] arr[1]----->arr[1]
arr[1] arr[2]----->arr[2]
arr[2] arr[3]----->arr[3]
第三次比较
3 2 -------------------arr[2]
arr[0] arr[1]----->arr[1]
arr[1] arr[2]----->arr[2]
第三次比较
2 1 -------------------arr[1]
arr[0] arr[1]----->arr[1]
普通排序
#include<stdio.h>
int main()
{
int arr[5]={2,3,1,4,5};
int i,j,temp;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
{
if(arr[i]<arr[j])
{
temp=arr[j];
arr[j]=arr[i];
arr[i]=temp;
}
}
for(i=0;i<5;i++)
printf("%d\n",arr[i]);
}
//冒泡排序
#include<stdio.h>
int main()
{
int arr[5]={2,3,1,4,5};
int i,j,temp;
for(i=0;i<4;i++) //控制轮数
for(j=0;j<4-i;j++) //控制参与比较的元素个数
{
if(arr[j]<arr[j+1])
{
temp=arr[j+1];
arr[j+1]=arr[j];
arr[j]=temp;
}
}
for(i=0;i<5;i++)
printf("%d\n",arr[i]);
}
2.获取随机数
//获取0~100之间的随机数
srand(time(NULL));//此语句不能放在循环中,否则产生的随机数相同
int num = rang()%100;
3.字符串
(1)字符串常量
字符串是由双引号括起来的字符序列集合
"a" "hhh" "sadfgfda"
字符串的结束标志:'\0',其不显示但是存在!!!
(2) c中没有字符串所对应的数据类型,通常使用字符数组保存字符串
字符串
char arr[32]={"hello"}
char buf[32]="hjkadshkjfhdl*8968";
//字符数组
char af[32]={'q','a','r'};
//字符串数组
char arr[32]={"hello"};
注意:字符数组保存字符和保存字符串是有区别的;
字符串有‘\0’
(3) 字符串的输入和输出
scanf()/printf()----------> 占位符:%s
scanf()不能接受字符串中的空格
#include<stdio.h>
int main()
{
char ch;
printf("input blank:\n");
scanf("%c",&ch);
printf("hh%chh",ch);
char arr[32]={};
// char buf[5]={"hello"};
printf("input string:\n");
//字符串scanf() 不能接受空格
//字符类型单个空格用scanf可以输入
scanf("%s",arr);
printf("arr:%s\n",arr);
getchar() 吸收回车
}
(4) gets/puts
gets():从键盘输入
可以接受输入的空格
此函数有bug,不建议使用,
puts():输出字符串
自动换行,无须换行符
(5) fgets()/fpus() 没有bug
fgets():获得数据
arr;数组名,即一个地址
stdin:标准输入
sizeof(读取数据的大小,也可以直接用数字代替)
fputs():输出数据
stdout:标准输出
例子: 用法
#include<stdio.h>
int main()
{
char arr[128];
printf("input string:");
fgets(arr,sizeof(arr),stdin);
//读取数据的大小,也可以直接用数字代替
//fgets(arr,100,stdin);
fputs(arr,stdout);
return 0;
}
4.指针和字符串
#include<stdio.h>
int main()
{
char arr[32] = "hello";
char *p = arr;
printf("%s\n",arr);
printf("%s\n",p);
//常量可以直接使用,无需声明
//此处为指针重定向,即指向一个新地址
//原来的字符串“hello world‘并没有被改变
//常量字符串
char *pa = "hello,world";
printf("%s\n",pa);
//常量字符串 值不能被
pa[2]='t';
printf("%s\n",pa);
}
5.字符串相关函数
头文件:#include<string.h>
(1) strlen():计算字符串长度
'\0' 不计入字符串长度
注意区分和sizeof()的区别!!!
s
#include<stdio.h>
#include<string.h>
int main()
{
char arr[32]="hello,world";
printf("%s\n",arr);
//'\0'不计入 strlen的用法
int len_arr=strlen(arr);
printf("len = %d\n",len_arr);
printf("sizeof(arr) =%ld\n",sizeof(arr));
int str_len=strlen{"hello,world"};
printf("len = %d\n",str_len);
}
(2) trcpy(): 字符串拷贝
strcpy(buf,arr)
将arr的内容拷贝到buf中!!!
#include<stdio.h>
#include<string.h>
int main()
{
char arr[32]={"sadfdsga"};
char buf[32];
//原样拷贝 可查找man手册用法
//将arr的内容拷贝给buf
strcpy(buf,arr);
printf("%s\n",arr);
printf("%s\n",buf);
strcpy(buf,arr);
}
(3) strcmp():字符串的比较
int ret = strcmp(arr,buf)
若ret=0;则两字符串相等
若ret>0;则arr大于buf
若ret<0;则arr小于buf
#include<stdio.h>
#include<string.h>
int main()
{
char arr[16]="hello";
char buf[16]="world";
//比较 buf和arr比较 依次比较 大的减小的
//这里w的ascii码值大于h的 所以buf>arr
int ret=strcmp(arr,buf);
printf("ret1=%d\n",ret);
ret=strcmp(buf,arr);
printf("ret2=%d\n",ret);
//这里是一样的所以是0
char buf1[16]="world";
ret=strcmp(buf,buf1);
printf("ret3=%d\n",ret);
}
登陆密码:
#include<stdio.h>
#include<unistd.h>
int main()
{
char name[16]="123";
char passwd[16]="234";
char name_user[32];
char passwd_user[32];
printf("input name:");
scanf("%s",name_user);
printf("input passwd:");
scanf("%s",passwd_user);
if(strcmp(name,name_user)==0 &&
strcmp(passwd,passwd_user)==0)
{
printf("正在开机,请稍候、、、、\n");
sleep(3);
printf("welcome\\!");
}
else
{
printf("滚\n");
}
}
(4) strcat 字符串的拼接
将 后面数组的拼接到前面数组中
#include<stdio.h>
#include<string.h>
int main()
{
char arr[16]="123";
char buf[16]="234";
printf("arr:%s\n",arr);
printf("buf:%s\n",buf);
printf("=================\n");
strcat(arr,buf);
printf("arr:%s\n",arr);
printf("buf:%s\n",buf);
}
二、函数
//这是一个统计字符串的函数
#include<stdio.h>
#include<string.h>
int mylen(char *p) //形参 //函数名是随意的
{ // 但不能和系统函数重名
//char *pa = p;
int len=0;
while(*p!='\0') //这里是函数的定义
{ //这里是正常的语句
len++;
p++;
}
return len-1; //因为fgets带回车符 会计入输出里面
//所以返回时可以减1
}
int main()
{
char arr[32];
printf("input num:\n");
//scanf("%s",arr); //scanf输入不能有空格
fgets(arr,32,stdin);//fgets自带回车符
//函数的调用
int str_len=mylen(arr);
printf("str_len = %d\n",str_len);
return 0;
}