C语言编程一维数组的使用
C语言第六章_数组_2

if (a[i]>a[i+1])
{temp=a[i];a[i]=a[i+1];a[i+1]=temp;14}
#include <stdio.h> main(){ /*对10个整数排序*/
int a[10]={9, 8, 5, 4, 2, 0, 6, 1, 3, 7}, i, k; for (k=1;k<10;k++)
f0=1 (n=0m) ain(){
f1=1
(n=1) int i; long f [20]={1,1};
0 f1n=fn-1f+[0f]n-2 (nfo2r) (i=2;i<20;i++)
1
1
f[1]
2
2
f[2]
f[i]=f[i-2]+f[i-1];
3
3
f[3]
for(i=0;i<20;i++)
4
数组是具有一定顺序的若干同数据类型变 量的集合体。数组要有名称,要有规模。
一.一维数组定义
类型说明符 数组名[常量];
例如:int a[6]; a = = &a[0]
a
内存映象:编译时分配一片连续的内 存空间,数组名为该空间的首地址— —常量地址。
0 a[0]
1 a[1]
2 a[2]
3 a[3]
1
4 a[4]
4
一行一行地存储所有的数组 5
a[0][1] a[0][2] a[0][3] a[1][0] a[1][1]
元素,数组名为该空间的首 6 a[1][2]
地址——地址常量。
7 a[1][3]
8
C语言一维数组

6
例题巩固
在C 语言中,引用数组元素时,其数组下标的 数据类型允许是 。 A)整型常量 B)整型表达式 C)整型常量或整型表达式 D)任何类型的表达式
C语言中,数组名代表 A.数组全部元素的值 B.数组首地址 C.数组第一个元素的值 D.数组元素的个数
合法的数组定义是 A.int a[ ]=”string”; B.int a[5]={0,1,2,3,4,5}; C.char a=”string”; D.char a[ ]={0,1,2,3,4,5};
以下程序的输出结果是________。 main( ) { int i,p=0,a[10]={1,5,9,0,-3,8,7,0,1,2}; for(i=1;i<10;i++) if(a[i]<a[p]) p=i; printf("%d,%d\n",a[p],p); } A) -3,4 B) 0,1 C) 9,2 D) 2,9
35
35
int a[5]
a[0] a[1] 第一轮 21 13 13 13 21 21
a[2] 90 90 90
a[3] a[4] 32 32 32 -1 -1 -1
13 13
21 21
32 32
90 -1
-1 90
第一轮的结果: 将最大的数移到了最后一个位置(n-1)。
int a[5]
a[0] a[1]
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] 0 1 2 3 4 5 6 7 8 a[9] 9
数组a
max = a[0];
32
32
定义
main()
{ int i, max, x[10];
C语言电子教案第六章一维数组

元素:属同一数据类型,用数组名和下标确定
6.1一维数组
一维数组的定义
定义方式:数据类型数组名[常量表达式];
例int a[6];
一维数组的引用
数组必须先定义,后使用
只能逐个引用数组元素,不能一次引用整个数组
数组元素表示形式:数组名[下标]
其中:下标可以是常量或整型表达式
(2)对前n-1个数进行第二趟冒泡排序,结果使次大的数被安置在第n-1个元素位置
(3)重复上述过程,共经过n-1趟冒泡排序后,排序结束
#include <stdio.h>
main()
{ int a[11],i,j,t;
printf("Input 10 numbers:\n");
for(i=1;i<11;i++)
printf("Minimum value is %d\n",min);
}
例用冒泡法对10个数排序
排序过程:
(1)比较第一个数与第二个数,若为逆序a[0]>a[1],则交换;然后比较第二个数与第三个数;依次类推,直至第n-1个数和第n个数比较为止——第一趟冒泡排序,结果最大的数被安置在最后一个元素位置上
c语言电子教案第六章一维数组
2
课
题
一维数组
教学目标
一维数组的定义,调用数组中的元素
教学重点
一维数组定义的方式,调用规则以及初始化
教学难点
一维数组的应用,多种方法对数组中的元素排序
课型
公共课
教学媒体
多媒体
教法选择
讲授,举例,演示
教学过程
教法运用及板书要点
C语言学习入门笔记之数组

数组笔记在程序设计中,把具有相同类型的若干变量按有序的形式组织起来。
这些按序排列的同类数据元素的集合称为数组。
在C语言中,数组属于构造数据类型。
一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。
因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。
1.一维数组的定义和引用1.一维数组的定义方式在C语言中使用数组必须先进行定义。
一维数组的定义方式为:类型说明符数组名[常量表达式];其中:类型说明符是任一种基本数据类型或构造数据类型。
数组名是用户定义的数组标识符。
方括号中的常量表达式表示数据元素的个数,也称为数组的长度。
例如:int a[10]; 说明整型数组a,有10 个元素。
float b[10],c[20]; 说明实型数组b,有10个元素,实型数组c,有20个元素。
char ch[20]; 说明字符数组ch有20 个元素。
对于数组类型说明应注意以下几点:1)数组的类型实际上是指数组元素的取值类型。
对于同一个数组,其所有元素的数据类型都是相同的。
2)数组名的书写规则应遵循标识符命名规则。
3)数组名不能与其它变量名相同。
例如:main(){int a; float a[10];……}是错误的。
4)方括号中常量表达式表示数组元素的个数,如a[5]表示数组a 有5 个元素。
但是其下标从0 开始计算。
因此5 个元素分别为a[0],a[1],a[2],a[3],a[4]。
5)常量表达式中可以包括常量和符号常量,不能用变量来表示元素的个数,也就是说,C语言不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。
例如:#define FD 5 main(){int a[3+2],b[7+FD];……}是合法的。
但是下述说明方式是错误的。
main(){int n=5; int a[n];……}6)允许在同一个类型说明中,说明多个数组和多个变量。
C语言程序设计教程一维数组应用

• 8.3.2 通过数组首地址访问数组元素 设有如下定义:
int x[10],i; 通过上一节的叙述已知:数组名是数组的首地址,从而有:
第210页/共50页
x+0 等价于 &x[0] x+1 等价于 &x[1] … x+i 等价于 &x[i]
在得到地址后,可以通过间接访问运算符来引用地址所在的存储单元。 因此有:
第76页/共50页
本例题涉及的是对数组元素进行操作的基本算法。对一维数组各元素 的访问,通常是在单重循环中实现。通过循环变量与循环体内语句的配合,可 以灵活地、有选择地访问指定元素。
读者在阅读以下程序时,应理解数组元素下标与数组元素值的区别; 掌握如何用循环变量控制数组元素的下标;以及如何在连续输出的过程中控制 输出换行。
如有定义: int x[5],y[5],m=3;
则语句: x=&m; x=y; y++;
第143页/共50页
都是错误的。数组名x和y作为地址常量可以使用,不可以重新赋值。 而表达式:
x+1、y+2 则是合法的。它们表示以数组名为首地址增加一个偏移量后的地址值。
第154页/共50页
(2)就整体而言,每个数组元素都是数组这个集合中的一分子,由 于数组所占地址空间是连续的,通过数组名这个首地址就可以找到数组中的所 有元素;就个体而言,每个数组元素都可以看作是一个带下标的变量,它完全 可以像普通变量一样进行求地址运算。因此,用数组名表示的地址与数组元素 的地址之间就有如下关系:
int x[10],*p,i; 在执行了语句:p=x;或p=&x[0];后,指针p中存放的是数组x的首 地址。
C语言一维数组、二维数组、结构体的初始化

C语⾔⼀维数组、⼆维数组、结构体的初始化C语⾔数组的初始化表⽰⽅法⼀、C语⾔⼀维数组初始化:(1)在定义数组时对数组元素赋以初值。
如:static int a[10]={0,1,2,3,4,5,6,7,8,9};经过上⾯的定义和初始化后,a[0]=0,a[1]=1,… ,a[9]=9。
(2)初始化时可以只对⼀部分元素赋初值。
例如:static int a[10]={0,1,2,3,4};定义的数组有10个元素,但只对其中前5个元素赋了初值,后5个元素初值为0。
(3)将数组的元素值全部为0,可以⽤下⾯的⽅法:(⽅法⼀)int a[5] = {0}; // 将整型数组a的每个元素都初始化为0或者也可以⽤如下⽅法进⾏初始化:(⽅法⼆)int a[5] = {0, 0, 0, 0, 0}; // 初始化效果同上不能⽤: static int a[10]={0*10};如果对static型数组不赋初值,系统会对定义的所有数组元素⾃动赋以0值。
(4)在对全部数组元素赋初值时,可以不指定数组长度。
int a[]={0,1,2,3,4};相当于 int a[5]={0,1,2,3,4};⼆、C语⾔⼆维数组初始化:声明时给初始值叫初始化。
例如:int b[3][4]={1,2,3,4,5,6,7,8,4,4,4,4};声明后赋值,可以⽤赋值语句,b[0][0]=1; b[0][1]=2; b[0][2]=3; b[0][3]=4;b[1][0]=5; b[1][1]=6; b[1][2]=7; b[1][3]=8;三、C语⾔结构体初始化:1.typedef定义结构体typedef struct Student {agent age;char name[10];} Stu;2.创建结构体变量并初始化Stu s = {18,"rose"};//可以初始化,设置age为1,s为⼀个字符串.Stu s = {18};//初始化个数少于实际个数时,只初始化前⾯的成员。
C语言编程一维数组的使用

char m[20],n[20]; cin>>m>>n; int i = cmp(m,n); if (i == 0) cout <<"0"<<endl; if (i == 1) cout << "1"<< endl; if (i == -1) cout << "-1" << endl; return 0; } int cmp(char *s, char *p) { while (*s&&*p) { if (*s>*p) return 1; else if (*s < *p) return -1; else { if (*(s+1) == '\0' && *(p+1) != '\0') return -1; else if (*(s+1) != '\0' && *(p+1) == '\0') return 1; else if (*(s+1) == '\0'&&*(p+1)=='\0') return 0; else { s++,p++; continue; } } } } 5.编程序将输入的字符串删去空格输出。 编写程序:
for(j=i;j<10;j++) { max= ((a[j]>a[max])?j:max); } temp=a[max]; a[max]=a[i]; a[i]=temp; } printf("The arry after sort is:\n"); for(i=0;i<10;++i) { printf("%d,",a[i]); } printf("\n"); printf("Plesae input another number:"); scanf("%d",&temp); for(i=0;i<10;i++) { if(temp>a[i]) { break; } } for(j=10;j>=i;--j) { a[j]=a[j-1]; } a[i]=temp; for(i=0;i<11;i++) { printf("%d ",a[i]); } getchar(); return 0; }
C语言一维数组的定义和引用数组

printf("a[%d][%d]=%f\n",i,j,a[i][j]);}
}
3.多维数组的定义和在内存中的存放顺 序:
如 int a[2][3][4]; 共24个元素,在内存中排列的顺序是 :第三维变化最快,然后是第二维,第 一维最慢。
7.2.2 二维数组的引用 形式:数组名[下标][下标] 其中:下标是整型或字符型的常量,变量或表 达式。(定义时不能使用变量)
运行:input 6 numbers: 输入:9 8 5 4 2 0 输出:0 2 4 5 8 9
7.2 二维数组的定义和引用 7.2.1 二维数组的定义 1.一般形式:类型说明符 数组名[常量表达式][常量 表达式]
如:float a[3][4] 定义数组a具有三行四列 在C中,可将二维数组看着是特殊形式的一维数组。
int a[5] a[0], a[1], a[2], a[3], a[4] 5个元素 ,下标从0 ~ 4
注意:
在Turbo C 中超过定义的数组下标元素是可以引用的,系 统不作检查。
例T7-0-1.c
main( )
{int i, a[5];
for(i=0;i<=4;i++)
printf (a[%d]=%d\ n,i,a[i]=i+1);
int a[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};
max=a[0][0];
for(i=0;i<=2;i++)
for(j=0;j<=3;j++) if(a[i][j]>max) {max=a[i][j]; r=i;c=j}
1 2 34 a= 9 8 7 5
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三一维数组的使用【实验目的】1掌握一维数组、二维数组的定义和初始化方法。
2熟悉使用字符数组处理字符串处理的方法。
【实验内容】1.输入10个学生的成绩,求平均成绩,并将低于平均成绩的分数打印出来.编写程序:#include <stdio.h>void readdata (float score[10]){int i;printf("依次输入10个学生的成绩:\n");for(i=0;i<10;i++)scanf("%f",&score[i]);return;}float aver(float score[10]){float sum;int i;for(sum=0,i=0;i<10;i++)sum=sum+score[i];return(sum/10);}void printff(float score[10],float ave){int i;printf("低于平均分的成绩为:\n");for(i=0;i<10;i++)if(score[i]<ave)printf("%8.2f",score[i]);return;}main(){void readdata (float score[10]);float aver(float score[10]);void printff(float score[10],float ave);float ave,score[10];readdata(score);ave=aver(score);printf("average=%6.2f\n",ave);printff(score,ave);}2、将一个数组中的值按逆序重新存放。
例如,原来顺序为8,6,5,4,1。
要求改为1,4,5,6,8。
编写程序:#include <iostream.h>int main(){int i,j,a[5]={8,6,5,4,1},b[5];for(i=0,j=4;i<5,j>=0;i++,j--)b[j]=a[i];for(i=0;i<5;i++)a[i]=b[i];for(i=0;i<5;i++)cout<<a[i]<<"\t";}3、应用一维数组,对10个从键盘输入的数进行冒泡排序,使其按照从大到小的顺序输出。
编写程序:#include <stdio.h>int main(){int a[10];int i = 0,j=0;int max,temp;for(i=0;i<10;++i){printf("Please input the %dth number:",i+1);scanf("%d",&a[i]);}printf("The arry has been input is:\n");for(i=0;i<10;i++){printf("%d,",a[i]);}printf("\n");for(i=0;i<10;i++){max=i;for(j=i;j<10;j++){max= ((a[j]>a[max])?j:max);}temp=a[max];a[max]=a[i];a[i]=temp;}printf("The arry after sort is:\n");for(i=0;i<10;++i){printf("%d,",a[i]);}printf("\n");printf("Plesae input another number:");scanf("%d",&temp);for(i=0;i<10;i++){if(temp>a[i]){break;}}for(j=10;j>=i;--j){a[j]=a[j-1];}a[i]=temp;for(i=0;i<11;i++){printf("%d ",a[i]);}getchar();return 0;}4.编写一程序,从键盘任意输入两个字符串s1和s2,然后比较字符串的大小,若s1>s2,输出1;若s1=s2,输出0;若s1<s2,输出-1;#include <iostream>using namespace std;Int cmp (char *s, char *p);int main(){char m[20],n[20];cin>>m>>n;int i = cmp(m,n);if (i == 0)cout <<"0"<<endl;if (i == 1)cout << "1"<< endl;if (i == -1)cout << "-1" << endl;return 0;}int cmp(char *s, char *p){while (*s&&*p){if (*s>*p)return 1;else if (*s < *p)return -1;else{if (*(s+1) == '\0' && *(p+1) != '\0')return -1;else if (*(s+1) != '\0' && *(p+1) == '\0')return 1;else if (*(s+1) == '\0'&&*(p+1)=='\0')return 0;else{s++,p++;continue;}}}}5.编程序将输入的字符串删去空格输出。
编写程序:#include<iostream.h>void main(){char str[]="You are my friend";int i=0,j;while(str[i]!=NULL){if(str[i]==' '){j=i;while(str[j]!=NULL){str[j]=str[j+1];j++;}}i++;}cout<<str<<endl;}6.求一个4*4矩阵对角线元素之和。
编写程序:#include<stdio.h>main(){int i,j,sum=0,n=0;int a[4][4];printf("输入要计算的矩阵:\n");for(i=0;i<4;i++)for(j=0;j<4;j++){scanf("%d",&a[i][j]);}printf("要计算的矩阵为:\n");for(i=0;i<4;i++)for(j=0;j<4;j++){printf("%d ",a[i][j]);n++;if(n%4==0)printf("\n");}printf("\n");for(i=0;i<4;i++)for(j=0;j<4;j++){if(i==j)sum=sum+a[i][i];}printf("结果是" "%d\n",sum);}7.应用二维数组打印如图所示杨辉三角形。
11 11 2 11 3 3 11 4 6 4 1编写程序:#include<stdio.h>void main(){int i,j;int a[5][5];for(i=0;i<5;i++)a[i][0]=1;for(j=1;j<5;j++)a[0][j]=0;;for(i=1;i<5;i++)for(j=1;j<5;j++)a[i][j]=a[i-1][j-1]+a[i-1][j];;for(i=0;i<5;i++)for(j=0;j<=i;j++){printf("%4d",a[i][j]);if(j==i)printf("\n\n");}}8.找一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小。
(二维数组也可能没有鞍点)编写程序:#define H 5 有鞍点:#define L 5#include "stdio.h"void main(){int i,j,k;int a[H][L],min[H];int max[H],col=0;int super[H];for(i=0;i<H;i++)for(j=0;j<L;j++)scanf("%d",&a[i][j]);for(i=0;i<H;i++)max[i]=a[i][0];for(i=0;i<H;i++){ 没有鞍点:{ for(j=0;j<L;j++)if(a[i][j]>max[i]){max[i]=a[i][j];col=j;}}super[i]=col;}for(i=0;i<H;i++)for(k=0;k<H;k++){if(max[i]<=a[k][super[i]])min[k]=max[i];elsebreak;}printf("鞍点=%d\n",min[H-1]);}9.有一篇文章,共有3行文字,每行有80个字符。
要求分别统计出其中英文大写字母、小写字母、数字、空格以及其它字符的个数。
编写程序:#include <stdio.h>#include <string.h>main(){char a[100],b[100],c[100];int l1,l2,l3,d=0,x=0,s=0,k=0,q=0,i;printf("请输入第一行文字\n");gets(a);printf("请输入第二行文字\n");gets(b);printf("请输入第三行文字\n");gets(c);l1=strlen(a);l2=strlen(b);l3=strlen(c);for(i=0;i<l1;i++){ if(a[i]>='a'&&a[i]<='z') x++;if(a[i]>='A'&&a[i]<='Z') d++;if(a[i]>='0'&&a[i]<='9') s++;if(a[i]==' ') k++;}for(i=0;i<l2;i++){ if(b[i]>='a'&&b[i]<='z') x++;if(b[i]>='A'&&b[i]<='Z') d++;if(b[i]>='0'&&b[i]<='9') s++;if(b[i]==' ') k++;}for(i=0;i<l3;i++){ if(c[i]>='a'&&c[i]<='z') x++;if(c[i]>='A'&&c[i]<='Z') d++;if(c[i]>='0'&&c[i]<='9') s++;if(c[i]==' ') k++;}q=l1+l2+l3-x-d-s-k;printf("共有大写字母%d个,小写字母%d个\n,数字%d个,空格%d个,其他字符%d个\n",d,x,s,k,q);}实验收获:1.当一种方法无法继续时,可尝试换用其他方法试试。