C語言數(shù)組的練習(xí)題:涉及到數(shù)組插入、數(shù)組刪除、數(shù)組下標(biāo)數(shù)據(jù)的左移右移、數(shù)組排序、數(shù)組排序優(yōu)化、數(shù)組的數(shù)據(jù)拼接等等。
(1)函數(shù)基本使用: 函數(shù)基本定義、封裝、傳參、調(diào)用、局部變量、全局變量、只讀變量、靜態(tài)變量
(2)數(shù)組基本使用: 數(shù)組基本定義、使用賦值、字符串。
1. 數(shù)組基本知識
1. 概念: 同一個(gè)類型的集合。
2. 定義: int data[100]; //數(shù)組data里可以存放100個(gè)int類型
100必須是常量(C89)。定義數(shù)組時(shí),如果沒有賦初始值[]一定要填大小。
int data[]={1};
3.數(shù)組賦值: 只有在定義的使用才可以整體賦值。int data[10]={12,34,56,7,89};
4.數(shù)組下標(biāo)[]訪問從0開始。 比如: buff[100]; 下標(biāo)范圍: 0~99
5.數(shù)組的名稱就是首地址。int buff[100];
1.2 字符串?dāng)?shù)組
1. 字符串錄入: scanf(“%s”); gets() fgets
2. 頭文件: string.h
3. 從鍵盤錄入字符串的方法
scanf("%s",str); //從鍵盤上錄入字符串,字符串結(jié)尾: '\0'
gets(str); //從鍵盤上錄入字符串
fgets(str,100,stdin); //從鍵盤上錄入字符串 (標(biāo)準(zhǔn)輸入)
#include
int main(int argc,char **argv)
{
int int_data[100]={12,34,56,78}; //整型數(shù)組
char char_data[]={'A','B','C'}; //字符數(shù)組
char str1_data[]={'A','B','C','\0'}; //字符串?dāng)?shù)組
char str2_data[]="ABC";//字符串?dāng)?shù)組
printf("char_data=%d\n",sizeof(char_data)); //3
printf("str1_data=%d\n",sizeof(str1_data)); //4
printf("str2_data=%d\n",sizeof(str2_data)); //4
return 0;
}
字符串?dāng)?shù)組特性: 結(jié)尾有’\0’
2. 數(shù)組相關(guān)的題目(分析)
2.1 數(shù)組的數(shù)據(jù)插入
int a[]={1,2,3,4,5,6,7}; 在第2位數(shù)據(jù)后插入一個(gè)888
結(jié)果: 1,2,888,3,4,5,6,7
#include
int main(int argc,char **argv)
{
int data[10]={1,2,3,4,5,6,7,8,9};
//1,2,3,4,4,5,6,7,8,9
int addr;
int i;
printf("輸入插入的位置:");
scanf("%d",&addr);
/*1. 向后移動數(shù)據(jù),空出位置*/
for(i=8;i>=addr;i--)
{
data[i+1]=data[i];
}
/*2. 查看移動之后的效果*/
for(i=0;i<10;i++)printf("%d ",data[i]);
printf("\n");
data[addr]=888; //插入的數(shù)據(jù)
/*3. 最終效果*/
for(i=0;i<10;i++)printf("%d ",data[i]);
printf("\n");
return 0;
}
2.2 數(shù)組數(shù)據(jù)的刪除
int a[]={1,2,3,4,2,6,7}; 將第2位數(shù)據(jù)刪除掉
結(jié)果: 1,3,4,5,6,7
示例:
#include
int main(int argc,char **argv)
{
int data[10]={1,2,3,4,5,6,7,8,9,10};
//1,2,4,5,6,7,8,9,10,10
int addr;
int i;
printf("輸入刪除的位置:");
scanf("%d",&addr); //2
/*1. 向前移動,將數(shù)據(jù)覆蓋掉*/
for(i=addr-1;i<10-1;i++)
{
data[i]=data[i+1];
}
/*2. 查看移動之后的效果*/
for(i=0;i<9;i++)printf("%d ",data[i]);
printf("\n");
return 0;
}
2.3 變量排序
數(shù)組數(shù)據(jù)排序。從鍵盤上輸入一串?dāng)?shù)據(jù)(整數(shù)),從大到小排序,再輸出。int a[]={12,67,45,13,1,5}; 排序之后: 67,45,13,12,5,1
排序: 計(jì)算平均數(shù)。班級成績、溫度數(shù)據(jù)…
例子: 從鍵盤上隨機(jī)輸入3個(gè)數(shù),將3個(gè)數(shù)按照從大到小的順序輸出。
#include
int main(int argc,char **argv)
{
int a,b,c;
int tmp; //存放臨時(shí)數(shù)據(jù)
printf("請輸入3個(gè)數(shù):");
scanf("%d%d%d",&a,&b,&c); //以回車作為結(jié)束符號,以空格作為間隔符號
printf("源數(shù)據(jù):%d,%d,%d\n",a,b,c);
//從大到小
if(a)>
2.4 數(shù)組冒泡排序
#include
int main(int argc,char **argv)
{
int data[10];
int tmp; //存放臨時(shí)數(shù)據(jù)
int i,j;
int cnt=0; //排序比較的總次數(shù)
/*1. 錄入數(shù)據(jù)*/
printf("請輸入10個(gè)數(shù):");
for(i=0;i<10;i++)scanf("%d",&data[i]);
/*2. 打印源數(shù)據(jù):*/
printf("源數(shù)據(jù):");
for(i=0;i<10;i++)printf("%d ",data[i]);
printf("\n");
/*3. 冒泡排序*/
for(i=0;i<10-1;i++) //比較輪數(shù)
{
for(j=0;j<10-1-i;j++) //每一輪比較的次數(shù)
{
if(data[j]>data[j+1]) //從小到大
{
tmp=data[j];
data[j]=data[j+1];
data[j+1]=tmp;
}
cnt++;
}
}
/*4. 打印結(jié)果數(shù)據(jù):*/
printf("排序之后的數(shù)據(jù):");
for(i=0;i<10;i++)printf("%d ",data[i]);
printf("\n");
printf("排序的總次數(shù):%d\n",cnt);
return 0;
}
分析:
/*
data[]={1,2,3}
第一輪: [0]和[1] [1]和[2] 2 3 1 每一輪保證最小的數(shù)在最后
第二輪: [0]和[1] 3 2 1
*/
排序: 從大到小
1 2 3 4 5
第一輪:
(1) 2 1 3 4 5
(2) 2 3 1 4 5
(3) 2 3 4 1 5
(4) 2 3 4 5 1
第二輪:
(1) 3 2 4 5 1
(2) 3 4 2 5 1
(3) 3 4 5 2 1
(4) 3 4 5 2 1
第三輪:
(1) 4 3 5 2 1
(2) 4 5 3 2 1
(3) 4 5 3 2 1
(4) 4 5 3 2 1
第四輪:
(1) 5 4 3 2 1
(2) 5 4 3 2 1
(3) 5 4 3 2 1
(4) 5 4 3 2 1
2.5 冒泡排序優(yōu)化
#include
int main(int argc,char **argv)
{
int data[10];
int tmp; //存放臨時(shí)數(shù)據(jù)
int i,j;
int cnt=0; //排序比較的總次數(shù) 45:
int flag=0; //標(biāo)志位置
/*1. 錄入數(shù)據(jù)*/
printf("請輸入10個(gè)數(shù):");
for(i=0;i<10;i++)scanf("%d",&data[i]);
/*2. 打印源數(shù)據(jù):*/
printf("源數(shù)據(jù):");
for(i=0;i<10;i++)printf("%d ",data[i]);
printf("\n");
/*3. 冒泡排序*/
for(i=0;i<10-1;i++) //比較輪數(shù)
{
for(j=0;j<10-1-i;j++) //每一輪比較的次數(shù)
{
if(data[j]>data[j+1]) //從小到大
{
tmp=data[j];
data[j]=data[j+1];
data[j+1]=tmp;
flag=1;
}
cnt++;
}
if(flag==0) //不需要繼續(xù)排序
{
break; //跳出最外層循環(huán)
}
flag=0; //清除標(biāo)志位,方便第2次判斷
}
/*4. 打印結(jié)果數(shù)據(jù):*/
printf("排序之后的數(shù)據(jù):");
for(i=0;i<10;i++)printf("%d ",data[i]);
printf("\n");
printf("排序的總次數(shù):%d\n",cnt);
return 0;
}
分析:
data[]={1,2,3}
第一輪: [0]和[1] [1]和[2] 2 3 1 每一輪保證最小的數(shù)在最后
第二輪: [0]和[1] 3 2 1
2.6 數(shù)組數(shù)據(jù)的拼接(整數(shù))
int a[]={1,3,4,5,6,7}; int b[]={11,13,14,15,16,17};
將a和b拼接到c數(shù)組里。 最終int c[]={1,3,4,5,6,7, 11,13,14,15,16,17}
必須保證c數(shù)組空間足夠大。
示例代碼:
#include
int main(int argc,char **argv)
{
int src_data[10]={1,2,3,4,5};
int new_data[]={6,7,8,9}; //
int i;
for(i=0;i
審核編輯:湯梓紅
-
C語言
+關(guān)注
關(guān)注
180文章
7614瀏覽量
137712 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4346瀏覽量
62970 -
數(shù)組
+關(guān)注
關(guān)注
1文章
417瀏覽量
26028
發(fā)布評論請先 登錄
相關(guān)推薦
全方位距離雷達(dá)動態(tài)檢測系統(tǒng)的設(shè)計(jì)怎么設(shè)計(jì)
C語言入門教學(xué)之數(shù)組資料總結(jié)免費(fèi)下載
![<b class='flag-5'>C</b><b class='flag-5'>語言</b>入門教學(xué)之<b class='flag-5'>數(shù)組</b>資料<b class='flag-5'>總結(jié)</b>免費(fèi)下載](https://file.elecfans.com/web1/M00/69/07/pIYBAFvO-LmATNgXAADL3HGyt0E690.png)
C語言程序設(shè)計(jì)教程之數(shù)組使用練習(xí)和文件和輸入輸出的資料概述
![<b class='flag-5'>C</b><b class='flag-5'>語言</b>程序設(shè)計(jì)教程之<b class='flag-5'>數(shù)組</b>使用<b class='flag-5'>練習(xí)</b>和文件和輸入輸出的資料概述](https://file.elecfans.com/web1/M00/6F/37/pIYBAFvulLmAGJooAAA_sFiLb-E856.png)
評論