0x00
0x01 小数
十进制形式
指数形式 aEn
长度固定float 4字节,double 8字节
%f %lf %e %le 默认保留六位小数
%g 输出结果简练
char 字符 长度1
变量存储字符串
char strs[]="一串字符串"
char *str2 = "另一串字符串"
下节预告c语言输入输出
输出
printf("%s",str)、puts(str)、pchar
输入
scanf(遇到空格结束)、gets(能读取空格)、getchar、(getche、getch(conio.h,不回显)没有缓冲区,直接输出)
在scanf("%s",str) 读入数据时,同样需要&
,只是字符串或者数组,本身就代表者地址,故不需要多加。
0x02 循环结构与选择结构
if(){
}
else if(){
}
else{
}
优先级,算数>关系>逻辑>赋值
switch(表达式){
case 整型数值1:语句1;
case 整型数值2:语句2;
default:语句n+1;
}
while(){
语句块
}
for(表达式1;表达式2;表达式3){
语句块
}
0x03 数组
int a[4]
scanf("%d",&a[i])
// 数组初始化 int a[4] = {1,2,3,4}
数组在初始化时,会将未赋值的值归0.
二维数组初始化 int a[3][2] = {{1,2},{3,4},{5,6}} = int[][2]
// 有序数组查询
for(i=0; i<10; i++){
if(nums[i] == num){
thisindex = i;
break;
}else if(nums[i] > num){
break;
}
}
C语言没有专门的字符串变量(就是int char),也没有string类型(java),通常用字符串数组存放字符串。-》(char a[])
注意,只有在初始化的时候才能一大串的赋值给数组。char a[] = "ABC I wanna to it" // 正确(再次赋值就只能一个一个来。)
字符串的结尾始终是'\0','\0'在ascii中是第0个字符 -》 NUL
没有'\0' 程序无法标记字符串的结束位置,会将后面的程序也当作字符串。
注意:局部数据的初始值是随机数,不是0
当未给字符串数组后面的数赋值,可能导致字符串停不下来,(不是0),将导致读入更多的数30大小硬是读入50个。
所以,手动赋0就可以解决,a[i] = 0 但是,最好的方法是初始化时, 将数组所有值初始化为0 a[30] = {0}
字符串的长度
#include<string.h> strlen(str)
字符串的一些函数的使用
strcat(str1,str2),字符串拼接,删除str1后面的'\0'
strcpy(str1,str2),str2 覆盖str1
strcmp(str1,str2) ,字符串比较,相同返回0,str1大,返回大于0的数,小则返回小于0的数。
冒泡排序数组
// 正常写法
int nums[10] = {4, 5, 2, 10, 7, 1, 8, 3, 6, 9};
int i, j, temp;
//冒泡排序算法:进行 n-1 轮比较
for(i=0; i<10-1; i++){
//每一轮比较前 n-1-i 个,也就是说,已经排序好的最后 i 个不用比较
for(j=0; j<10-1-i; j++){
if(nums[j] > nums[j+1]){
temp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = temp;
}
}
}
// 优化
//优化算法:最多进行 n-1 轮比较
for(i=0; i<10-1; i++){
isSorted = 1; //假设剩下的元素已经排序好了
for(j=0; j<10-1-i; j++){
if(nums[j] > nums[j+1]){
temp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = temp;
isSorted = 0; //一旦需要交换数组元素,就说明剩下的元素没有排序好
}
}
if(isSorted) break; //如果没有发生交换,说明剩下的元素已经排序好了
}
待补充
快速排序算法及代码
选择排序
插入排序
合并排序(归并排序)
顺序查找
二分查找(折半查找)