1. 程式人生 > >C語言基礎學習筆記day3

C語言基礎學習筆記day3

date:‘2018-9-9’ nandian:迴圈的巢狀

day5

@toc

一、一維陣列

1.定義陣列

#include<stdio.h>

int main()
{
  int array[10];  //定義了一個數組,陣列名為array,裡面有十個元素,從0-9;

  array[0] = 20;
  array[9] = 100;

  printf("%d\n",array[0]);
  printf("%d\n",sizeof(array));//一個整數四個位元組,所以這裡顯示是40
  
  return 0;
}

陣列本質就是:在記憶體中就是一個連續的空間;而且每個元素的型別是一樣的;

2.連續的賦值操作

int main()
{
  int i;
  for(i = 0;i < 10;i++)
  {
    array[i] = i;  
  }
  return 0;
}

3.陣列的初始化

int main()
{

/*陣列初始化的三種方式(挨個賦值,部分賦值,統一賦值)
  int array[10] = {1,1,3,5,5,6,9,6,8,5};//全部進行賦值
  
  int array[10] = {100,2,3,3,4,9};//定義一個數組的同時進行賦值初始化,這是部分初始化
 
  int array[10] = {0};  //將所有元素置為0
  //另一種置為0 的方法
  int i;
  for(i = 0; i < 10; i++)
 {
   array[i] = 0;
 }

*/
int i; for(i = 0;i < 10;i++) { printf("array[%d] = %d\n",i,array[i]); } return 0; }

4.求陣列中最大元素的值

將陣列中的第一個元素預設設定成最大的元素,然後讓各個元素進行比較;

int main()
{
  int array[5] = {2,3,5,6,7};
  int max = array[0];
  int i;
  for(i = 1;i < 5;i++) //想找最大的先遍歷一遍,因為第一的元素預設設定成最大值,所以這裡的迴圈從1開始;
  {
    if
(max < array[i]) max = array[i]; } printf("max = %d\n",max); return 0; }

5.求陣列中的最小值,並求出最小值的編號

int main()
{
  int array[5] = {2,3,5,6,7};
  int min = array[0];
  int index = 0;//在沒有遍歷陣列之前,預設陣列的第0號元素就是最小的元素;所以預設的地址也是0;
  int i;
  for(i = 1;i < 5;i++) //想找最小的先遍歷一遍
  {
    if(min > array[i])
      index = i;
      min = array[i];
  }

  printf("min = %d,index = %d\n",min,index);

return 0;

}


6.求陣列元素和


int main()
{
  int array[10] = {1,2,3,4,5,6,7,8,9,0};
  int i;
  int sum = 0;
  for(i = 0; i < 10; i++)
  {
    sum += array[i];
  }

  printf("sum = %d\n",sum);

  return 0;

}

7.列印陣列中大於平均值的所有的值與其下標 這個程式未確定

#include<stdio.h>

int  main()

{

  int  array[10]  =  {1,2,3,4,5,6,7,8,9,0};

  int  i;

  float  aver;

  int  sum  =  0;

  int  index  =  0;

  for(i  =  0;  i  <  10;i++)

  {

  sum  +=array[i];

  }

  aver  =  sum  /10.0;

  printf("The  following  elements  are  greater  than  the  average  value  of  the  array.  The  addresses  are:\n");

  for(i  =  0;i  <  10;i++)

  {

  if(array[i]  >aver)

  {

  index  =  i;

  printf("array[%d]  =  %d,index  =  %d\n",i,array[i],index);

  }

  }

}

8.陣列逆置

  • 實現單個元素的互換
#include<stdio.h>

int  main()

{

  int  array[10]  =  {1,2,3,4,5,6,7,8,9,0};

//部分交換

  int  i;

  int  tmp  =  array[0];

  array[0]  =  array[1];

  array[1]  =  tmp;

  for(i  =  0;i  <  10;i++)

  {

  printf("array[%d]=%d\n",i,array[i]);

  }

  return  0;

}

  • 實現陣列的前半部分和後半部分的互換
    • 法一:直接換元素
#include<stdio.h>

int  main()

{

  int  array[10]  =  {1,2,3,4,5,6,7,8,9,0};

  int  i;

  for(i  =  0;  i  <=  4;  i++)

  {

  int  tmp  =  array[i];

  array[i]  =  array[9-i];

  array[9-i]  =  tmp;

  }

  for(i  =  0;i  <  10;i++)

  {

  printf("array[%d]=%d\n",i,array[i]);

  }

  return  0;

}
  • 法二:通過換下標
 #include<stdio.h>

int  main()

{

int  array[10]  =  {1,2,3,4,5,6,7,8,9,0};

int  i;

  int  min  =  0;//陣列的最小下標

  int  max  =  9;//陣列的最大下標

  while(min  <max)

  {

  int  tmp  =  array[min];

  array[min]  =  array[max];

  array[max]  =tmp;

  min++;

  max--;

  }

  for(i  =  0;i  <  10;i++)

  {

  printf("array[%d]=%d\n",i,array[i]);

  }

  return  0;

}

9.水仙花數 查詢100都1000之間的水仙花數;

#include<stdio.h>

int  main()

{

  int  i;

  for(i  =  100;  i  <  1000;i++)

  {

  int  i1  =  i%10;

  int  i2  =  i/10%10;

  int  i3  =  i/100;

  if(i1*i1*i1  +  i2*i2*i2  +  i3*i3*i3  ==  i)

  {

  printf("%d\n",i);

  }

  }

  return  0;

}

10.求一個數組中所有奇數元素之和

#include<stdio.h>

int  main()

{

  int  array[10]  =  {1,3,4,7,8,0,9};

  int  i;

  int  sum  =  0;

  printf("The  odd  numbers  in  the  array  are  as  follows:\n");

  for(i  =  0;  i  <  10;i++)

  {

  if(array[i]  %  2  !=  0)

  //if(array[i]%  2  ==  1)

  {

  sum  +=  array[i];

  printf("array[%d]  =  %d\n",i,array[i]);

  }

  }

  printf("sum  =  %d\n",sum);

  return  0;

}

11.求3-100中的素數

程式有問題 注:素數:除了1和本身均不能被任何數整除;(也就是相當於不能被2到i-1之間的任何數整除)

#include<stdio.h>

int  main()

{

  int  i;

  int  j;

  int  status  =  0;

  for(i  =  3;i  <  101;i++)

  {

  for(j  =  2;j  <  i;j++)

  {

  if((i%j  )==  0)

  {

  status  =  1;

  break;

  }

  }

  if(status  ==  0)

  {

  printf("%d\n",i);

  }

  }

  return  0;

}

素數

二維陣列

可以近似理解為表格;

1.二維陣列的定義

#include<stdio.h>

int main()
{

//先定義後賦值
  int array[2][3];//定義了一個二維陣列,相當於有兩個array[3] 
  array[0][0] = 0;//給第0行第0列賦值
  array[1][2] = 0;//給第1行第2列賦值

//定義的同時進行賦值
  int a[3][4] = {{1,2,3,4,},{5,6,7,8},{9,10,11,12}};
  int a[3][4] = {0};//將二維陣列中所有值全部置0
  
  return 0;
}

2.陣列大小

int main()
{
  int array[2][3] = {{1,2,3},{4,5,6}};
  printf("%d\n",sizeof(array));//整個陣列的大小為24
  printf("%d\n",sizeof(array[0])); //相當於第0行的大小,為12
  printf("%d\n",sizeof(array[0][0]));//相當於第0行第0列元素的大小,為4
 return 0;
}

3.陣列的值輸出

注意printf的位置

#include<stdio.h>

int  main()

{

  int  array[2][3]  =  {{1,2,3},{4,5,6}};

  int  i,j;

  for(i  =  0;  i  <  2;i++)

  {

  for(j  =  0;  j  <  3;j++)

  {

  printf("array[%d][%d]=  %d\n",i,j,array[i][j]);

  }

  }

  return  0;

}

4.求一個二維陣列的每行每列的和

注意printf的位置 每行的和:

int main()
{
  int array[3][5] = {{1,3,4,5,9},{4,9,5,0,8},{9,3,4,23,4}};
  int i,j;
  for(i = 0; i <3;i++)
  {
    int sum = 0;
    for(j = 0;j < 5;j++)
    {
      sum += array[i][j];
    }
    printf("%d\n",sum);
  }
  return 0;
}

每列的和:

int main()
{
   int array[3][5] = {{1,3,4,5,9},{4,9,5,0,8},{9,3,4,23,4}};
   int i,j;
   for(j = 0; j < 5; j++);
   {
     int sum = 0;
     for(i = 0; i < 3;i++)
     {
       sum +=array[i][j];
     }
   printf("%d\n",array[i][j]);
   }
  return 0;
}

5.氣泡排序

int main()
{
  int array[10] = {1,4,8,0,9,34,98,100,5,3};
  int i;
  int j;
  for(i = 0;i < 10;i++)
    {
      for(j = 1; j < 10-i;j++)
      {
        if(array[j-1] >array[j])
          {
            int tmp;
            tmp = array[j];
            array[j] = array[j-1];
            array[j-1] = tmp;
          }
      }
    }
    for(i = 0;i < 10;i++)
    {
    printf("array[%d] = %d\n",i,array[i]);
    }
  return 0;
}