C語言基礎學習筆記day3
阿新 • • 發佈:2018-12-13
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;
}