一、冒泡排序
原理:一 一比较,然后一 一排序
步骤较多
用于:升序,降序
未见新的程序,在之前数组、for循环,if判断,的基础上加入三杯水交换变量。
终端输入五个数,存入数组arr中,进行降序排列。
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[])
{
int arr[5] = {90,21,132,6,34};
int i,j;
int temp=0;//定义中间变量,用于三杯水交换
for(i=1;i<5;i++)//循环外层的躺数
{
for(j =0;j<5-i;j++)//循环次数
{
if(arr[j]>arr[j+1])//判断相邻两项大小
{
//交换数据
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
//循环打印数据验证
for(i=0;i<5;i++)
{
printf("%d\t",arr[i]);
}
printf("\n");
return 0;
}
二,一维字符数组(字符串)
1、字符串常量赋值给一维字符数组,字符串
char arr[] ={'a','b','c','d'};//一维字符数组
char brr[] = "hellowolrd"; //字符串最后会自动补一个'\0'。代表字符串的结束的标志
2、字符串的输入与输出
新学的程序gets()和puts() (无越界保护)
之前学习的
getchar() 单个字符的输入
putchar() 单个字符的输出
scanf() 格式化输入(char、int、float) 不能输入空格,遇到空格,直接截断,只显示空格之前 printf() 格式化输出
格式gets(数组名);
gets(arr);
练习:
.终端输入若干字符存入数组中,以回车作为结束的标志,求数组逆置后的结果 示例: "abcde" "edcba" 变量的交换。
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[])
{
char arr[30]="";
int len=0;
gets(arr);
char b[30]="";
char temp;
int i;
for(i=0;arr[i] != '\0';i++)//求长度的
{
len++;
}
for(i=0;i<len/2;i++)//循环交换的次数
{
temp = arr[i];
arr[i] = arr[len-1-i];
arr[len-1-i] = temp;
}
puts(arr);
return 0;
}
三、函数族(新程序)
1.strlen() 功能: 求实际长度(不带'\0') 替换sizeof(brr)/sizeof(char))
原型:size_t strlen(const char *s);
参数1:当前可以理解为是数组,其实是指针(地址)
2.strcat 功能:字符串拼接(替代了之前利用变量变化的拼接)
原型:char *strcat(char *dest, const char *src);
参数: char *dest 目标字符串的地址 ,目前理解为数组的首地址
char *src 源字符串的地址 ,目前理解为数组的首地址 返回值:
char *; 目前理解为数组的dest的首地址
作业
1、1. 在终端输入一个字符串,然后再输入一个字符a,计算这个字符串 中a有几个。
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[])
{//输入一串字符,再输入一个a,查找字符串中有几个a
char let;
char arr[30]="";
int num=0,i;
printf("请输入字符串");
gets(arr);//输入字符串
printf("请输入字符a");
scanf("%s",&let);//输入a
for(i=0;arr[i]!='\0';i++)//一个一个查找数组里的字符
{
if(arr[i]==let)
{
num++;
}
}
printf("个数为%d\n",num);
return 0;
}