计算机软件及应用C语言之数组课件_第1页
计算机软件及应用C语言之数组课件_第2页
计算机软件及应用C语言之数组课件_第3页
计算机软件及应用C语言之数组课件_第4页
计算机软件及应用C语言之数组课件_第5页
已阅读5页,还剩85页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

无求,自然不争。不争,自然无嗔。无嗔,自然少怨。少怨,自然多福。12/17/20221无求,自然不争。不争,自然无嗔。无嗔,自然少怨。少怨,自然多例如:inta[100];功能:一次定义了100个整型变量:a[0],a[1],…,a[99]例如:floatx[4][4];功能:一次定义了4×4=16个float型变量:x[0][0],x[0][1],…,x[3][3]数组:数组是一组类型相同的有序数据的集合用数组名和下标来唯一确定数组中的元素第六章利用数组处理批量数据2例如:inta[100];数组:数组是一组类型相同说明:1.类型说明符可以是int、char、float等2.数组名可以是任意合法的标识符3.数组大小由常量表达式确定4.常量表达式不允许包含变量5.数组元素的下标从0开始6.1怎样定义和引用一维数组一维数组的定义

类型说明符数组名[常量表达式]例如:inta[10];功能:定义了长度为10的整型数组a:a[0],a[1],...,a[8],a[9]3说明:1.类型说明符可以是int、char、float等6.一维数组元素的引用数组必须先定义,然后再使用数组元素的表示形式:

数组名[下标]下标可以是整型变量或整型表达式不能一次引用整个数组,只能逐个引用数组元素数组的使用(赋值和引用)需要与循环语句相结合数组的每一个元素相当于一个变量,且类型相同,相互独立4一维数组元素的引用4例6.1对10个数组元素依次赋值为0~9,然后逆序输出#include<stdio.h>intmain()

{ inti,a[10];/*定义数组*/for(i=0;i<=9;i++)a[i]=i;/*数组元素赋值*/for(i=9;i>=0;i--)printf(“%d”,a[i]);/*逆序输出*/return0;}算法思想:1.初始化:a[0]=0,a[1]=1,…,a[9]=92.逆序输出数组元素:a[9],a[8],…,a[0]5例6.1对10个数组元素依次赋值为0~9,然后逆序输出#i一维数组的初始化定义数组时对数组元素赋初值(一般初始化)例:inta[3]={0,1,2}只给数组中的部分元素赋初值例:inta[5]={0,1,2}将数组元素统一赋初值0例:inta[5]={0}对全部数组元素赋初值时,可以不指定数组长度例:inta[]={0,1,2}6一维数组的初始化6例6.2用数组来处理Fibonicci数列的前20项。#include<stdio.h>intmain(){ inti; longintf[20]={1,1}; /*部分赋初值*/

for(i=2;i<20;i++)f[i]=f[i-1]+f[i-2];

/*计算数组元素*/

for(i=0;i<20;i++)/*输出数组元素*/

{ if(i%5==0)printf(“\n”); printf(“%12ld”,f[i]); } return0;}思想:1.计算f[0]=f[1]=1;f[2]=f[1]+f[0];…;f[19]=f[18]+f[17] 2.输出数列元素7例6.2用数组来处理Fibonicci数列的前20项。#i算法思想:1.输入10个数到a[0],a[1],…,a[9]中2.10个元素,相邻两两比较,将最大的存到a[9]中3.9个元素,相邻两两比较,将最大的存到a[8]中 ………10.2个元素,相邻两两比较,将最大的存到a[1]中11.顺序输出数组a中的10个数a[0],a[1],…,a[9]例6.3用起泡法对10个数排序(由小到大)。10个元素的起泡算法需要进行9趟比较,每次将最大的元素放到最后第i趟比较需要进行n-i次两两比较8算法思想:例6.3用起泡法对10个数排序(由小到大)。10#include<stdio.h>intmain(){ inta[10]; inti,j,t; for(i=0;i<10;i++)scanf(“%d”,&a[i]);/*输入10个数组元素*/

for(j=0;j<9;j++)/*起泡排序*/ { for(i=0;i<9-j;i++)/*实现1趟比较*/ if(a[i]>a[i+1])/*相邻两数比较,交换*/

{t=a[i];a[i]=a[i+1];a[i+1]=t;} } printf(“Thesortednumbers:\n”);for(i=0;i<10;i++)printf(“%d”,a[i]);/*输出*/ printf(“\n”); return0;}9#include<stdio.h>91010要习惯于改变自己,只有你变了,你的世界才会跟着变。鱼儿的世界在水中,鸟儿的世界在天空,你的世界在你力所能及的地方。12/17/202211要习惯于改变自己,只有你变了,你的世界才会跟着变。鱼6.2怎样定义和引用二维数组二维数组的定义类型说明符数组名[常量表达式][常量表达式]二维数组可以看做是一维数组的推广例:floata[3][4];b[5][10];功能:a为3行4列共12个float型元素的数组;b为5行10列共50个float型元素的数组。分析:二维数组a可以看作是一个长度为3的特殊一维数组,具有三个元素为a[0],a[1],a[2],而每个元素又是4个元素的数组名,即:元素a[0]又有元素a[0][0]、a[0][1]、a[0][2]、a[0][3];……126.2怎样定义和引用二维数组二维数组的定义例:floatfloata[3][4]中定义的二维数组,相当于定义了12个同种类型的元素(或变量):a[0][0]、a[0][1]、a[0][2]、a[0][3]a[1][0]、a[1][1]、a[1][2]、a[1][3]a[2][0]、a[2][1]、a[2][2]、a[2][3]在内存中排列顺序为:按行存放。先存放第一行元素,再存放第二行元素,…例:floata[2][3][4];定义2×3×4的三维数组a,有24个元素,分别为:a[0][0][0]、a[0][0][1]、a[0][0][2]、a[0][0][3]、a[0][1][0]、a[0][1][1]、a[0][1][2]、a[0][1][3]、…、a[1][2][3]、13floata[3][4]中定义的二维数组,相当于定义了12例:floatx[10][20],y[4][5][6];二维数组的引用数组名[下标][下标]每一个元素都是一个独立的变量每一个下标都是从0开始,不能超出定义的数组大小数组floatx[10][20]中无元素x[10][20]引用元素x[i][j]时,i值只能是0,…,9;j值只能是0,…,19引用元素y[i][j][k]时,i值只能是0,…,3;j值只能是0,…,4;k值只能是0,…,514例:floatx[10][20],y[4][5][6]例:inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

intb[3][4]={{1},{5,6},{9}};把第1个大括号内的数值赋给第1行元素,把第2个内的数值赋给第2行元素……没有初始化数值对应的元素自动初始化为0二维数组的初始化分行给二维数组赋初值可以将所有数据写在一个大括号内,按数组元素排列顺序对元素赋初值15例:inta[3][4]={{1,2,3,4},{5,6,例:inta[][4]={{1},{},{7,8,9}};

等价于:

inta[3][4]={{1},{},{7,8,9}};如果对全部元素赋初值,则第一维的长度可以不指定,但必须指定第二维的长度例:inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

等价于:

inta[][4]={1,2,3,4,5,6,7,8,9,10,11,12};分行赋初值时也可以省略第一维的长度问:inta[2][4][3]={1,2,3,4,5,6,7,8,9,10,11,12};

中的哪一个元素的值初始化为9?哪一个元素的值初始化为12?16例:inta[][4]={{1},{},{7,8,9}#include<stdio.h>intmain(){inta[2][3]={{1,2,3},{4,5,6}},b[3][2],i,j;

for(i=0;i<2;i++)for(j=0;j<3;j++)b[j][i]=a[i][j];

for(i=0;i<3;i++){printf(“\n”);for(j=0;j<2;j++)printf(“%5d”,b[i][j]);}return0;}例6.4将矩阵a转置后存到矩阵b中,其中二维数组程序举例算法:把a[i][j]赋值给b[j][i],其中i=0,1;j=0,1,2。17#include<stdio.h>例6.4将矩阵a转置后存例6.5有一个3×4的矩阵a,要求编程序求出其中值最大的那个元素的值及其所在的行号和列号,其中18例6.5有一个3×4的矩阵a,要求编程序求出其中值最大的那算法思想:把第一个元素a[0][0]作为临时最大值max,并记录它所在的行和列的下标把临时最大值max与每一个元素a[i][j]进行比较,若a[i][j]>max,把a[i][j]作为新的临时最大值,并记录它所在的行和列的下标;否则,继续比较当全部元素比较完后,max是整个矩阵全部元素的最大值19算法思想:19算法:1、max=a[0][0];row=0;colum=0;2、对所有的i=0,1,2和j=0,1,2,3重复执行:

如果a[i][j]>max,则max=a[i][j],row=i,colum=j3、输出max,row,colum,算法结束20算法:20#include<stdio.h>intmain(){inta[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};/*定义矩阵*/inti,j,row,colum,max;max=a[0][0];row=colum=0;for(i=0;i<=2;i++) /*比较元素*/{for(j=0;j<=3;j++)if(a[i][j]>max){max=a[i][j];row=i;colum=j;}

/*记录*/}printf(“max=%d,row=%d,colum=%d\n”,max,row,colum); /*按要求格式输出*/return0;}运行结果:max=10,row=2,colum=1表示最大值是10,它所在元素的下标为2和121#include<stdio.h>运行结果:max=10,r练习6.3求一个3×3矩阵对角线元素之和。#include<stdio.h>intmain(){ inta[3][3],sum=0; inti,j; printf(“enterdata:\n”); for(i=0;i<3;i++) for(j=0;j<3;j++)scanf(“%d”,&a[i][j]);

for(i=0;i<3;i++)sum=sum+a[i][i]; printf(“sum=%6d\n”,sum);return0;}22练习6.3求一个3×3矩阵对角线元素之和。#includ练习6.6输出杨辉三角(要求输出10行)。#include<stdio.h>#defineN11intmain(){ inti,j,a[N][N];

for(i=1;i<N;i++){a[i][1]=1;a[i][i]=1;}

for(i=3;i<N;i++) for(j=2;j<=i-1;j++)a[i][j]=a[i-1][j-1]+a[i-1][j];

for(i=1;i<N;i++) { for(j=1;j<=i;j++)printf(“%6d”,a[i][j]); printf(“\n”);} printf(“\n”);return0;}23练习6.6输出杨辉三角(要求输出10行)。#includ24242525筛选法求素数的算法思想:1.挖去12.用下一个未被挖去的数p去除p后面各数,把p的倍数挖掉3.检查p是否小于n,如果是,则返回(2)继续执行,否则算法结束4.剩下的数就是素数练习6.1用筛选法求100之内的素数。26筛选法求素数的算法思想:练习6.1用筛选法求100之内的素算法思想:1.输入10个数到a[0],a[1],…,a[9]中;2.把a[0],a[1],…,a[9]中最小的数交换到a[0]中;3.把a[1],a[2],…,a[9]中最小的数交换到a[1]中; ………10.把a[8],a[9]中最小的数交换到a[8]中;11.顺序输出数组a中的10个数a[0],a[1],…,a[9]。以上的第2-10步可以归纳为:对于i=0,1,…,8执行:

“把a[i],a[i+1],…,a[9]中最小的数交换到a[i]中”练习6.2用选择法对10个数排序(由小到大)。27算法思想:以上的第2-10步可以归纳为:练习6.2用选择法#include<stdio.h>intmain()/*选择法排序*/{ inta[10],t; inti,j;

for(i=0;i<10;i++) scanf(“%d”,&a[i]);

/*输入*/

for(i=0;i<=8;i++)/*选择排序*/ { for(j=i+1;j<=9;j++) if(a[i]>a[j]){t=a[i];a[i]=a[j];a[j]=t;} } for(i=0;i<10;i++)printf(“%d”,a[i]);/*输出*/ return0;}28#include<stdio.h>28思考题1.将数组a[10]的每一个元素依次循环向后移动k位。

如:1567循环向后移动1位得:7156

如:1567循环向后移动2位得:67152.使用循环结构方法判断一个长整型数有几位数。3.输入一个三位以内整数,求由它的各位数字组成的最大数。如:输入123,输出321;输入192,输出92129思考题29思考:如何计算两个矩阵之和?

例如,输入6个整数到2×3矩阵a;输入6个整数到2×3矩阵b;计算c=a+b;输出矩阵a、b、c。如何计算两个矩阵之积?

例如,输入6个整数到3×2矩阵a;输入6个整数到2×3矩阵b;计算a×b得到3×3的矩阵c;输出矩阵a、b、c。30思考:303131例1charc[10];

c[0]=‘I’;c[1]=‘’;c[2]=‘a’;c[3]=‘m’;c[4]=‘’;

c[5]='h';c[6]='a';c[7]='p';c[8]='p';c[9]='y';数组状态c[0]c[1]c[2]c[3]c[4]c[5]c[6]c[7]c[8]c[9]Iamhappy字符数组是用来存放字符数据的数组每个元素相当于一个char型变量,存放一个字符数据,占用一个字节的空间字符数组的定义6.3字符数组32例1charc[10];

c[0]=‘I’;c[1]例charc[10]={‘I’,‘’,‘a’,‘m’,‘’,‘h’,‘a’,‘p’,‘p’,‘y’};字符数组的初始化逐个元素初始化数据少于数组长度,多余元素自动赋值’0’指定初值时,未指定数组长度,则长度等于初值个数c[0]c[1]c[2]c[3]c[4]c[5]c[6]c[7]c[8]c[9]Iamhappy33例charc[10]={‘I’,‘’,‘a’,‘m’例charc[10]={‘O’,‘K’};字符数组的初始化逐个元素初始化数据少于数组长度,多余元素自动赋值’0’指定初值时,未指定数组长度,则长度等于初值个数c[0]c[1]c[2]c[3]c[4]c[5]c[6]c[7]c[8]c[9]OK\0\0\0\0\0\0\0\034例charc[10]={‘O’,‘K’};字符数组例6.6输出一个已知字符串。#include<stdio.h>intmain(){charc[10]={‘I’,‘’,‘a’,‘m’,‘’,‘a’,‘’,‘b’,‘o’,‘y’};inti;printf(“\n”);for(i=0;i<10;i++)printf(“%c”,c[i]);return0;}字符数组的引用可以引用一个元素,得到一个字符输出结果:Iamaboy35例6.6输出一个已知字符串。字符数组的引用输出结果:I例“Good”的存储形式为:Good\0例charc[]={“Iamhappy”};charc[]=“Iamhappy”;都可以表示如下(数组长度为11):c[0]c[1]c[2]c[3]c[4]c[5]c[6]c[7]c[8]c[9]c[10]Iamhappy\0字符串和字符串结束标志在C语言中,用字符数组来对字符串进行操作处理,即,把字符串看做一个个的字符进行处理注意“字符串结束符”的位置36例“Good”的存储形式为:Good\0例charcharc[]=“Good”;

等价于:charc[]={‘G’,’o’,’o’,’d’,’\0’};\0dooGc[4]c[3]c[2]c[1]c[0]\0c[9]\0\0\0\0\0\0d

ooGc[10]c[8]c[7]c[6]c[5]c[4]c[3]c[2]c[1]c[0]charc[10]=“Good”;

等价于:charc[10]={‘G’,’o’,’o’,’d’,’\0’};注意:1、在有结束符‘\0’的情况下,只要知道数组名,就可以计算出保存的字符串的长度;

2、有时为了方便、统一起见,在使用字符数组时一般常常人为增加字符结束符‘\0’。37charc[]=“Goo例6.8输入一行字符,统计其中有多少个单词。单词之间用空格分隔开。字符数组应用举例基本算法:①输入一行字符到字符数组;②统计该字符串包含的单词数Count;③输出单词数Count。38例6.8输入一行字符,统计其中有多少个单词。单词之间用空格例6.8输入一行字符,统计其中有多少个单词。单词之间用空格分隔开。开始字符满足条件:①本身是字符,不是空格;②它的前一字符是空格或者它是串的第1个字符。考虑单词开始字符具有的特点是什么?扫描字符串的字符,遇到开始字符就把Count加1如何统计字符串(以\0结束)中含有多少个单词?观察字符串:“youareastudent”39例6.8输入一行字符,统计其中有多少个单词。单词之间用空格算法、程序如下:读入串到数组s中k=0;Count=0;s[k]!=0如果s[k]是单词的开始字符,则Count++。k++输出Count01#include<stdio.h>intmain(){intk,Count;chars[80];gets(s);for(Count=0,k=0;s[k]!=‘’;k++){if(s[k]!=‘‘){if((k==0)||(s[k-1]==‘‘))Count++;}}printf(“\nCount=%d”,Count);return0;}40算法、程序如下:读入串到数组s中k=0;Count=0;s[同样我们可以根据结束字符的特点来编程。

结束字符必须满足条件:

①本身是字符,不是空格;

②它的后一字符是空格或是串的结束符。编程留作练习。教材上的方法可以自己参考。41同样我们可以根据结束字符的特点来编程。

结束字符必须满足条件42424343补充知识:每一个变量都有内存地址,每一个数组元素也有内存地址,可以编程看出数组的各个元素的地址是连续的。#include<stdio.h>voidmain(){shortintx,a[3],y,b[2][2];printf("\n&x=%04u&y=%04u",&x,&y);printf("\na[3]:%04u%04u%04u",&a[0],&a[1],&a[2]);printf("\nb[2][2]:%04u%04u%04u%04u",&b[0][0],&b[0][1],&b[1][0],&b[1][1]);}运行结果:&x=65484&y=65492 a[3]:654866548865490 b[2][2]:6549465496654986550044补充知识:每一个变量都有内存地址,每一个数组元素也有内存地址实验报告三:函数的应用实验内容一:设计一个菜单程序:输入1—3以进入相应选择项:1.由计算机随机出1道四则运算题,用户答题;2.用户出题:输入带括号的整数四则混合运算,计算机答题;(此问要求用递归算法实现)3.退出。45实验报告三:函数的应用45无求,自然不争。不争,自然无嗔。无嗔,自然少怨。少怨,自然多福。12/17/202246无求,自然不争。不争,自然无嗔。无嗔,自然少怨。少怨,自然多例如:inta[100];功能:一次定义了100个整型变量:a[0],a[1],…,a[99]例如:floatx[4][4];功能:一次定义了4×4=16个float型变量:x[0][0],x[0][1],…,x[3][3]数组:数组是一组类型相同的有序数据的集合用数组名和下标来唯一确定数组中的元素第六章利用数组处理批量数据47例如:inta[100];数组:数组是一组类型相同说明:1.类型说明符可以是int、char、float等2.数组名可以是任意合法的标识符3.数组大小由常量表达式确定4.常量表达式不允许包含变量5.数组元素的下标从0开始6.1怎样定义和引用一维数组一维数组的定义

类型说明符数组名[常量表达式]例如:inta[10];功能:定义了长度为10的整型数组a:a[0],a[1],...,a[8],a[9]48说明:1.类型说明符可以是int、char、float等6.一维数组元素的引用数组必须先定义,然后再使用数组元素的表示形式:

数组名[下标]下标可以是整型变量或整型表达式不能一次引用整个数组,只能逐个引用数组元素数组的使用(赋值和引用)需要与循环语句相结合数组的每一个元素相当于一个变量,且类型相同,相互独立49一维数组元素的引用4例6.1对10个数组元素依次赋值为0~9,然后逆序输出#include<stdio.h>intmain()

{ inti,a[10];/*定义数组*/for(i=0;i<=9;i++)a[i]=i;/*数组元素赋值*/for(i=9;i>=0;i--)printf(“%d”,a[i]);/*逆序输出*/return0;}算法思想:1.初始化:a[0]=0,a[1]=1,…,a[9]=92.逆序输出数组元素:a[9],a[8],…,a[0]50例6.1对10个数组元素依次赋值为0~9,然后逆序输出#i一维数组的初始化定义数组时对数组元素赋初值(一般初始化)例:inta[3]={0,1,2}只给数组中的部分元素赋初值例:inta[5]={0,1,2}将数组元素统一赋初值0例:inta[5]={0}对全部数组元素赋初值时,可以不指定数组长度例:inta[]={0,1,2}51一维数组的初始化6例6.2用数组来处理Fibonicci数列的前20项。#include<stdio.h>intmain(){ inti; longintf[20]={1,1}; /*部分赋初值*/

for(i=2;i<20;i++)f[i]=f[i-1]+f[i-2];

/*计算数组元素*/

for(i=0;i<20;i++)/*输出数组元素*/

{ if(i%5==0)printf(“\n”); printf(“%12ld”,f[i]); } return0;}思想:1.计算f[0]=f[1]=1;f[2]=f[1]+f[0];…;f[19]=f[18]+f[17] 2.输出数列元素52例6.2用数组来处理Fibonicci数列的前20项。#i算法思想:1.输入10个数到a[0],a[1],…,a[9]中2.10个元素,相邻两两比较,将最大的存到a[9]中3.9个元素,相邻两两比较,将最大的存到a[8]中 ………10.2个元素,相邻两两比较,将最大的存到a[1]中11.顺序输出数组a中的10个数a[0],a[1],…,a[9]例6.3用起泡法对10个数排序(由小到大)。10个元素的起泡算法需要进行9趟比较,每次将最大的元素放到最后第i趟比较需要进行n-i次两两比较53算法思想:例6.3用起泡法对10个数排序(由小到大)。10#include<stdio.h>intmain(){ inta[10]; inti,j,t; for(i=0;i<10;i++)scanf(“%d”,&a[i]);/*输入10个数组元素*/

for(j=0;j<9;j++)/*起泡排序*/ { for(i=0;i<9-j;i++)/*实现1趟比较*/ if(a[i]>a[i+1])/*相邻两数比较,交换*/

{t=a[i];a[i]=a[i+1];a[i+1]=t;} } printf(“Thesortednumbers:\n”);for(i=0;i<10;i++)printf(“%d”,a[i]);/*输出*/ printf(“\n”); return0;}54#include<stdio.h>95510要习惯于改变自己,只有你变了,你的世界才会跟着变。鱼儿的世界在水中,鸟儿的世界在天空,你的世界在你力所能及的地方。12/17/202256要习惯于改变自己,只有你变了,你的世界才会跟着变。鱼6.2怎样定义和引用二维数组二维数组的定义类型说明符数组名[常量表达式][常量表达式]二维数组可以看做是一维数组的推广例:floata[3][4];b[5][10];功能:a为3行4列共12个float型元素的数组;b为5行10列共50个float型元素的数组。分析:二维数组a可以看作是一个长度为3的特殊一维数组,具有三个元素为a[0],a[1],a[2],而每个元素又是4个元素的数组名,即:元素a[0]又有元素a[0][0]、a[0][1]、a[0][2]、a[0][3];……576.2怎样定义和引用二维数组二维数组的定义例:floatfloata[3][4]中定义的二维数组,相当于定义了12个同种类型的元素(或变量):a[0][0]、a[0][1]、a[0][2]、a[0][3]a[1][0]、a[1][1]、a[1][2]、a[1][3]a[2][0]、a[2][1]、a[2][2]、a[2][3]在内存中排列顺序为:按行存放。先存放第一行元素,再存放第二行元素,…例:floata[2][3][4];定义2×3×4的三维数组a,有24个元素,分别为:a[0][0][0]、a[0][0][1]、a[0][0][2]、a[0][0][3]、a[0][1][0]、a[0][1][1]、a[0][1][2]、a[0][1][3]、…、a[1][2][3]、58floata[3][4]中定义的二维数组,相当于定义了12例:floatx[10][20],y[4][5][6];二维数组的引用数组名[下标][下标]每一个元素都是一个独立的变量每一个下标都是从0开始,不能超出定义的数组大小数组floatx[10][20]中无元素x[10][20]引用元素x[i][j]时,i值只能是0,…,9;j值只能是0,…,19引用元素y[i][j][k]时,i值只能是0,…,3;j值只能是0,…,4;k值只能是0,…,559例:floatx[10][20],y[4][5][6]例:inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

intb[3][4]={{1},{5,6},{9}};把第1个大括号内的数值赋给第1行元素,把第2个内的数值赋给第2行元素……没有初始化数值对应的元素自动初始化为0二维数组的初始化分行给二维数组赋初值可以将所有数据写在一个大括号内,按数组元素排列顺序对元素赋初值60例:inta[3][4]={{1,2,3,4},{5,6,例:inta[][4]={{1},{},{7,8,9}};

等价于:

inta[3][4]={{1},{},{7,8,9}};如果对全部元素赋初值,则第一维的长度可以不指定,但必须指定第二维的长度例:inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

等价于:

inta[][4]={1,2,3,4,5,6,7,8,9,10,11,12};分行赋初值时也可以省略第一维的长度问:inta[2][4][3]={1,2,3,4,5,6,7,8,9,10,11,12};

中的哪一个元素的值初始化为9?哪一个元素的值初始化为12?61例:inta[][4]={{1},{},{7,8,9}#include<stdio.h>intmain(){inta[2][3]={{1,2,3},{4,5,6}},b[3][2],i,j;

for(i=0;i<2;i++)for(j=0;j<3;j++)b[j][i]=a[i][j];

for(i=0;i<3;i++){printf(“\n”);for(j=0;j<2;j++)printf(“%5d”,b[i][j]);}return0;}例6.4将矩阵a转置后存到矩阵b中,其中二维数组程序举例算法:把a[i][j]赋值给b[j][i],其中i=0,1;j=0,1,2。62#include<stdio.h>例6.4将矩阵a转置后存例6.5有一个3×4的矩阵a,要求编程序求出其中值最大的那个元素的值及其所在的行号和列号,其中63例6.5有一个3×4的矩阵a,要求编程序求出其中值最大的那算法思想:把第一个元素a[0][0]作为临时最大值max,并记录它所在的行和列的下标把临时最大值max与每一个元素a[i][j]进行比较,若a[i][j]>max,把a[i][j]作为新的临时最大值,并记录它所在的行和列的下标;否则,继续比较当全部元素比较完后,max是整个矩阵全部元素的最大值64算法思想:19算法:1、max=a[0][0];row=0;colum=0;2、对所有的i=0,1,2和j=0,1,2,3重复执行:

如果a[i][j]>max,则max=a[i][j],row=i,colum=j3、输出max,row,colum,算法结束65算法:20#include<stdio.h>intmain(){inta[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};/*定义矩阵*/inti,j,row,colum,max;max=a[0][0];row=colum=0;for(i=0;i<=2;i++) /*比较元素*/{for(j=0;j<=3;j++)if(a[i][j]>max){max=a[i][j];row=i;colum=j;}

/*记录*/}printf(“max=%d,row=%d,colum=%d\n”,max,row,colum); /*按要求格式输出*/return0;}运行结果:max=10,row=2,colum=1表示最大值是10,它所在元素的下标为2和166#include<stdio.h>运行结果:max=10,r练习6.3求一个3×3矩阵对角线元素之和。#include<stdio.h>intmain(){ inta[3][3],sum=0; inti,j; printf(“enterdata:\n”); for(i=0;i<3;i++) for(j=0;j<3;j++)scanf(“%d”,&a[i][j]);

for(i=0;i<3;i++)sum=sum+a[i][i]; printf(“sum=%6d\n”,sum);return0;}67练习6.3求一个3×3矩阵对角线元素之和。#includ练习6.6输出杨辉三角(要求输出10行)。#include<stdio.h>#defineN11intmain(){ inti,j,a[N][N];

for(i=1;i<N;i++){a[i][1]=1;a[i][i]=1;}

for(i=3;i<N;i++) for(j=2;j<=i-1;j++)a[i][j]=a[i-1][j-1]+a[i-1][j];

for(i=1;i<N;i++) { for(j=1;j<=i;j++)printf(“%6d”,a[i][j]); printf(“\n”);} printf(“\n”);return0;}68练习6.6输出杨辉三角(要求输出10行)。#includ69247025筛选法求素数的算法思想:1.挖去12.用下一个未被挖去的数p去除p后面各数,把p的倍数挖掉3.检查p是否小于n,如果是,则返回(2)继续执行,否则算法结束4.剩下的数就是素数练习6.1用筛选法求100之内的素数。71筛选法求素数的算法思想:练习6.1用筛选法求100之内的素算法思想:1.输入10个数到a[0],a[1],…,a[9]中;2.把a[0],a[1],…,a[9]中最小的数交换到a[0]中;3.把a[1],a[2],…,a[9]中最小的数交换到a[1]中; ………10.把a[8],a[9]中最小的数交换到a[8]中;11.顺序输出数组a中的10个数a[0],a[1],…,a[9]。以上的第2-10步可以归纳为:对于i=0,1,…,8执行:

“把a[i],a[i+1],…,a[9]中最小的数交换到a[i]中”练习6.2用选择法对10个数排序(由小到大)。72算法思想:以上的第2-10步可以归纳为:练习6.2用选择法#include<stdio.h>intmain()/*选择法排序*/{ inta[10],t; inti,j;

for(i=0;i<10;i++) scanf(“%d”,&a[i]);

/*输入*/

for(i=0;i<=8;i++)/*选择排序*/ { for(j=i+1;j<=9;j++) if(a[i]>a[j]){t=a[i];a[i]=a[j];a[j]=t;} } for(i=0;i<10;i++)printf(“%d”,a[i]);/*输出*/ return0;}73#include<stdio.h>28思考题1.将数组a[10]的每一个元素依次循环向后移动k位。

如:1567循环向后移动1位得:7156

如:1567循环向后移动2位得:67152.使用循环结构方法判断一个长整型数有几位数。3.输入一个三位以内整数,求由它的各位数字组成的最大数。如:输入123,输出321;输入192,输出92174思考题29思考:如何计算两个矩阵之和?

例如,输入6个整数到2×3矩阵a;输入6个整数到2×3矩阵b;计算c=a+b;输出矩阵a、b、c。如何计算两个矩阵之积?

例如,输入6个整数到3×2矩阵a;输入6个整数到2×3矩阵b;计算a×b得到3×3的矩阵c;输出矩阵a、b、c。75思考:307631例1charc[10];

c[0]=‘I’;c[1]=‘’;c[2]=‘a’;c[3]=‘m’;c[4]=‘’;

c[5]='h';c[6]='a';c[7]='p';c[8]='p';c[9]='y';数组状态c[0]c[1]c[2]c[3]c[4]c[5]c[6]c[7]c[8]c[9]Iamhappy字符数组是用来存放字符数据的数组每个元素相当于一个char型变量,存放一个字符数据,占用一个字节的空间字符数组的定义6.3字符数组77例1charc[10];

c[0]=‘I’;c[1]例charc[10]={‘I’,‘’,‘a’,‘m’,‘’,‘h’,‘a’,‘p’,‘p’,‘y’};字符数组的初始化逐个元素初始化数据少于数组长度,多余元素自动赋值’0’指定初值时,未指定数组长度,则长度等于初值个数c[0]c[1]c[2]c[3]c[4]c[5]c[6]c[7]c[8]c[9]Iamhappy78例charc[10]={‘I’,‘’,‘a’,‘m’例charc[10]={‘O’,‘K’};字符数组的初始化逐个元素初始化数据少于数组长度,多余元素自动赋值’0’指定初值时,未指定数组长度,则长度等于初值个数c[0]c[1]c[2]c[3]c[4]c[5]c[6]c[7]c[8]c[9]OK\0\0\0\0\0\0\0\079例charc[10]={‘O’,‘K’};字符数组例6.6输出一个已知字符串。#include<stdio.h>intmain(){charc[10]={‘I’,‘’,‘a’,‘m’,‘’,‘a’,‘’,‘b’,‘o’,‘y’};inti;printf(“\n”);for(i=0;i<10;i++)printf(“%c”,c[i]);return0;}字符数组的引用可以引用一个元素,得到一个字符输出结果:Iamaboy80例6.6输出一个已知字符串。字符数组的引用输出结果:I例“Good”的存储形式为:Good\0例charc[]={“Iamhappy”};charc[]=“Iamhappy”;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论