数组 选择排序 putchar gets

数组初始化:
定义一个数组,不完全初始化,那么未初始化的值都为0
定义一个数组,不初始化,里面全都是垃圾值

让数组全部初始化0   可以 int a[500] = {0};     

数组初始化错误:
int a[5] ;
b = {1,2,3,4,5}//这样严重不可以,因为b是一个地址

int b[5]= {1 ,   ,  2};//这样也不可以,不能中途出现未初始化的

地址+1:
int a[10];
printf("%p %p %p",  &a[0] , a , &a)   //这三个值一样

printf("%p %p %p",  &a[0]+1,  a +1, &a+1)   //不一样

a+1   代表第一个元素地址+1   相当于加了1个类型长度的字节 -------->  所以才有了a[1]
&a代表整个数组,+1 相当于加了10个类型长度的字节


可变长数组:
c89不支持可变数组,c99支持可变数组
c89不支持for(int i=0;i<10;i++) c99支持这样写

定义数组的时候,必须要知道数组的长度    int a[] ;//严重错误

定义数组长度的时候,最好使用宏 
#define N 5
int a[N];


获取数组的长度:

int a[] = {2 , 3 , 6 , 7 , 9 , 8 , 1 , 4 ,10 }; 
int len = sizeof(a)/sizeof(int);  //   或者sizeof(a)/sizeof(a[0]);
printf("%d\n",len);


数组间的赋值:
int a[5] = {1,2,3,4,5};
int b[5];
b = a;//严重错误,这是地址间的赋值,两个数组直接的赋值应该for,   

随机数:
srand(1);//生成随机数种子
rand();//根据种子来产生随机数  
在 stdlib.h


选择排序:
  1. void select_sort(int a[], int n)
  2. {
  3. int i, j, min, temp;
  4. for (i = 0; i < n; i++)
  5. {
  6. min = i;      //min表示的意思是最小值的下标
  7. for (j = i + 1; j < n; j++)
  8. {
  9. if (a[min] > a[j]) //每次都把最小的那个值 和 第一位的值 替换顺序
  10. {
  11. min = j;
  12. }
  13. temp = a[i];
  14. a[i] = a[min];
  15. a[min] = temp;
  16. }
  17. }
  18. }

维基百科的选择排序
  1. void selection_sort(int *a, int len)
  2. {
  3. int i, j, min, t;
  4. for (i = 0; i < len - 1; i++)
  5. {
  6. min = i;
  7. //查找最小值
  8. for (j = i + 1; j < len; j++)
  9.     if (a[min] > a[j])
  10. min = j;
  11. //交换
  12. if (min != i)
  13. {
  14. t = a[min];
  15. a[min] = a[i];
  16. a[i] = t;
  17. }
  18. }
  19. }
}



冒泡排序:

int main()
{
 int a[5] = {9,8,3,5,2};
 int i;
 printf("冒泡排序前:\n");
 for (i = 0; i < 5;i++)
 {
  printf("%d ", a[i]);
 }
             printf("\n");


 int m, n,temp;
 for (m = 0; m < 5 - 1;m++)
 {
  for (n = 0; n < 5 - 1 - m; n++)
  {
   if (a[n] > a[n + 1])
   {
    temp = a[n];
    a[n] = a[n + 1];
    a[n + 1] = temp;
   }
  }
 }

 printf("冒泡排序后:\n");
 for (i = 0; i < 5; i++)
 {
  printf("%d ", a[i]);
 }
 printf("\n");
 return 0;
}




putchar :
putchar('\n');//这里是单引号,如果用双引号,错误       含义是一次打出一个字符
printf("\n"); //这里是双引号,如果用单引号,错误

getchar:
//getchar 只能接收一个字符                            
 char ch;
 char tmp;
 while (1)
 {
  ch = getchar();
  tmp = getchar(); //过滤回车
  if (ch >= '0' && ch <= '9')
  {
   printf("你输入的是一个数字\n");
  }
  else if (ch >= 'a' && ch <= 'z')
  {
   printf("你输入的是一个小写字母\n");
  }
  else if (ch >= 'A' && ch <= 'Z')
  {
   printf("你输入的是一个大写字母\n");
  }
  else
  {
   printf("你输入的是其他字符\n");
  }
 }

gets :
gets(a) //a要是个指针 空格也能接收

puts:
int main()
{
    char ch[10];
    puts("please input your name:\n"); //注意,这里会有两个换行,因为puts会自动在后面增加一个\n
    gets(ch);
    puts(ch);
}




posted @ 2014-09-02 15:05  我爱背单词  阅读(169)  评论(0编辑  收藏  举报