冒泡排序
- C语言在运行的时候,不会帮我们检查数组的下标。
- 冒泡排序:有n个数字,需要进行 n - 1 趟比较大小(元素的个数减去 1)。外层循环 for( int i = 0; i < count - 1; i ++)
- n 个数字 第一趟比较的次数是 n - 1 ,第n趟比较的次数是 n - 1 次。
- 比较的趟的序号 i 与 该趟比较的次数 n - 1 相加之和等于数组元素的个数。内层循环 for ( int j = 0; j < count - 1 -i ; j ++ )
- 需要比较的趟数 = 元素个数 - 1,也就是外层循环。
- 拿前者与后者与后者进行比较,如果前者比后者大就交换位置
-
//数组有20 个元素【 20 50 】,安升序排序
int a[] = { };
for (int i = ; i < ; i++) {
a[i] = arc4random() % ( - + ) + ;
printf(" a[%d] = %d \t",i,a[i]);
}
for (int i = ; i < ; i++) {
for (int j = ; j < - i; j++) {
if (a[j] > a[j + ]) {
int temp = a[j];
a[j] = a[j + ];
a[j + ] = temp;
}
}
}
printf("按升序排好序的数组:\n");
for (int i = ; i < ; i++) {
printf("a[%d] = %d \t ",i,a[i] );
} //数组有 10个元素【 10 40】,按降序排序
int a[] = { };
int count = ;
for (int i = ; i < ; i++) {
a[i] = arc4random() % ( - + ) + ;
printf("a[%d] = %d \t",i, a[i]);
}
for (int i = ; i < count - ; i++) {
for (int j = ; j < count - -i ; j++) {
if (a[j] < a[j + ]) {
int temp = a[j];
a[j] = a[j + ];
a[j + ] = temp;
}
}
}
printf("按降序排好序的数组:\n");
for (int i = ; i < ; i++) {
printf("a[%d] = %d \t ",i,a[i]);
}7.
//字符数组 字符型的数组 用来存放字符型的变量
char a[20] = "you are beautiful";
//字符串 就是一个字符数组
char carr[20] = {'i','z','v','f','r','r','r','r','r'};
//字符串的形式 比 字符数组 多一个 ’\o‘ 空格
-
char a1[] = "henan";
char a2[] = {'h','e','n','a','n'};
printf("%lu---%lu \n",sizeof(a1),sizeof(a2));//sizeof(); 使用的格式化输出符号是 %lu
- 在定义字符串字符个数的时候,要定义它为 可使用的个数+1 个。可以用 for 循环去遍历字符数组的元素。char cc[100]='' sddfgdfghdfh'' 字符串 int a = sizeof(cc)/ 1结果为 100个能够使用的,这是因为他已经定义为固定长度的了。字符串是双引号引起来的,实际上就是一个字符数组,他与字符数组的区别就是以 ‘\0’ 未结束标志。
- strlength(); 求字符串长度的函数 例如: ;
- 字符串拷贝 strcpy ( 拷贝字符串的目标, 要拷贝的字符串)他是整体替换
- 字符串拼接 strcat(拼接目标,拼接字符串) 就是用后面的 “ 拼接字符” 换替换 “ 拼接目标” 后面的 \0 。
- 字符串比较 strcmp (字符串1, 字符串2).分别把字符串1 字符串2),对应位置的字母取出来,然后用前面的对应的字母的Ascaii 减去 后面的字符串的对应的字母的Ascii 与0比较,一旦比较出大小就立即停止,大于0就是说 字符串1 大于 字符串2
- %s 是格式转换符printf(" %s ", 字符串);。
- 代码实战
-
char str[] = "my name chenshiya is";
// int max = 0, lsum = 0, length = 0, k = 0;
// for (int i = 0; i < 30; i++) {
// if (str[i] != ' ' && str[i] != '\0') {
// lsum++;//记录单词长度;
// }
// if (str[i] == ' ' || str[i] == '\0') {
// length = lsum;
// lsum = 0;
// if (length > max) {
// max = length;
// k = i; //标记最长单词的位置.
// }
// }
// }
// printf("\n最长的单词是:\n");
// for (int i = k - max; i < k; i++) {
// printf("%c", str[i]);
// }
// printf("\n");//求一个 2/1 3/2 5/3 8/5 13/8 21/13 .....的前20个数的和
int i;
float a, b, c, s; a = b = 1.0;
c = 0;
s = 0;
for(i = 0; i < 20; i++)
{
c = a + b;
s = s + c / a;
printf("%.0f/%.0f ", c, a);
b = a;
a = c;
}
printf("\n%f\n", s);难点是:写程序的方法的实现,比如说鞍点问题