经典C语言谭浩强版第七章数组
c程序设计(谭浩强)第七章习题答案
int i;
float ave=0;
for(i=0;i<10;i++)
ave=ave+a[i][n]/10;
return ave;
}
void max(float a[][5]) //最高分的学生和课程
{
int i,j,row,colum;
float max=a[0][0];
for(i=0;i<10;i++)
# include <stdio.h>
# include<math.h>
# include<string.h>
/*int yue(int a,int b) //求最大公约数
{
int i,min;
min=a>b?b:a;
for(i=min;i>0;i--)
{
if(a%i==0&&b%i==0)
{
return i;
if((mid%2)!=1) //因职工号序号为奇数,故强制把序号转为奇数
mid-=1;
if(strcmp(b,a[mid])>0) //不能写b>a[mid]
{min=mid+2;}
else if(strcmp(b,a[mid])<0) //不能写b<a[mid]
{max=mid-2;}
else
{printf("职工姓名为:%s\n",a[mid-1]);break;}
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
printf("%-2d",b[i][j]);
C语言程序设计第四版第七章答案谭浩强
C语言程序设计第四版第七章答案谭浩强第七章用函数实现模块化程序设计第七章函数7.1写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果两个整数由键盘输入。
ma某yuehu(m,n)intm,n;{inti=1,t;for(;i<=m&&i<=n;i++){if(m%i==0&&n%i==0)t=i;}return(t);}minbeihu(m,n)intm,n;{intj;if(m>=n)j=m;elej=n;for(;!(j%m==0&&j%n==0);j++);returnj;}main(){inta,b,ma某,min;printf("entertwonumberi:");canf("%d,%d",&a,&b);ma某=ma某yuehu(a,b);min=minbeihu(a,b);printf("ma某=%d,min=%d\n",ma某,min);}7.2求方程的根,用三个函数分别求当b2-4ac大于0、等于0、和小于0时的根,并输出结果。
从主函数输入a、b、c的值。
#include"math.h"floatyihigen(m,n,k)floatm,n,k;{float某1,某2;某1=(-n+qrt(k))/(2某m);某2=(-n-qrt(k))/(2某m);printf("twohigeni某1=%.3fand某2=%.3f\n",某1,某2);}floatdenggen(m,n)floatm,n;{float某;某=-n/(2某m);printf("denggeni某=%.3f\n",某);}第七章用函数实现模块化程序设计float某ugen(m,n,k)floatm,n,k;{float某,y;某=-n/(2某m);y=qrt(-k)/(2某m);printf("two某ugeni某1=%.3f+%.3fiand某2=%.3f-%.3fi\n",某,y,某,y);}main(){floata,b,c,q;printf("inputabci");canf("%f,%f,%f",&a,&b,&c);printf("\n");q=b某b-4某a某c;if(q>0)yihigen(a,b,q);eleif(q==0)denggen(a,b);ele某ugen(a,b,q);}7.3写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的消息。
谭浩强 c语言程序设计(第七章)
13 27 76 13 30 27 27 97 30 76 97 第
27 30 97 30 97 初 始 关 键 字 n=8
第 一 趟 趟 趟 二 三 第
第 四 趟 趟 五
第 六 趟
第 七 趟
第
10
第七章 数组
#include <stdio.h> main() { int a[11],i,j,t; printf("Input 10 numbers:\n"); for(i=1;i<11;i++) scanf("%d",&a[i]); printf("\n"); 假 for(i=1;i<=9;i++) for (j=1;j<=10-i;j++) if(a[j]>a[j+1]) {t=a[j]; a[j]=a[j+1]; a[j+1]=t;} printf("The sorted numbers:\n"); for(i=1;i<11;i++) printf("%d ",a[i]); }
{
#include <stdio.h> 1 f[0] 0 main() 1 f[1] 1 { int i; 2 2 int f[20]={1,1}; f[2] 3 3 for(i=2;i<20;i++)f[3] 4 5 f[4] f[i]=f[i-2]+f[i-1]; 5 for(i=0;i<20;i++;\n"); printf("%12d",f[i]); } } 19 f[19] f[19]
C语言程序设计(谭浩强版)第7章
for(j=0;j<9;j++) for(i=0;i<9-j;i++) 程序运行结果如下: if (a[i]> 0 4 8 12 65 -76 100 -45 123↙ t=a[i];a[i]=a[i+1]; the sorted numbers: a[i+1]=t; -76 -45 0 1 4 8 12 65 100 123 } printf(″the sorted numbers :\n″); for(i=0;i<10;i++) printf(″%d ″,a[i]); printf(″\n″); }/*程序结束*/
2.一维数组元素引用的程序实例 程序实例
#include <stdio.h> void main() { int i,a[10]; for (i=0; i<=9;i++) a[i]=i; for(i=9;i>=0; i--) printf("%d ″,a[i]); printf("\n″); }
运行结果如下: 9876543210 程序使a[0]到 a[9]的值为0~9, 然后按逆序输出。
第七章 数组
7.1 一维数组的定义和引用 7.2 二维数组的定义和引用 7.3 字符数组
7.1 一维数组的定义和引用
一个班学生的学习成绩 一行文字 一个矩阵 这些数据的特点是: 1.具有相同的数据类型 2.使用过程中需要保留原始数据 C语言为这些数据,提供了一种构造数据类型:数 组。所谓数组就是一组具有相同数据类型的数据的 有序集合。
2. 可以只给一部分元素赋值。 例如: int a[10]={0,1,2,3,4}; 定义a数组有10个元素,但花括弧内只提供5个初值, 这表示只给前面5个元素赋初值,后5个元素值为0。 3. 如果想使一个数组中全部元素值为0,可以写成: 0 : int a[10]={0,0,0,0,0,0,0,0,0,0}; 不能写成: int a[10]={0*10};
谭浩强C语言第7章
第i+1个元素的地址&a[i]可写成a+i。
§7.1 一维数组的定义及引用 一维数组的初始化: C语言允许在定义数组的时候初始化数组,形式为: 类型 数组名[宽度] = { 数值表 };
初始化时,需注意几点: 如:int a[5]={ 0,1,2,3,4 }; • 数值表是用逗号分隔的,最后一项后面没有逗号。 • 当数值表中数值个数小于宽度时,其余元素会被 自动初始化为0; • 存字符串的字符数组允许下列的初始化简写形式: int a[5]={ 1,2 }; 等价于int a[5]={ 1,2,0,0,0 }; char ch[6]=“Hello”;
§7.2 二维数组的定义及引用 二维数组的引用:
地址引用:
• 二维数组的数组名代表该数组的首地址,即第1个 元素的地址。比如 a,实际上就是&a[0][0]。 • 二维数组元素在内存中按行存放,a[0]为第1行的 首地址。同样,a[1]为第2行的首地址,......, a[n-1]为第n行的首地址。
• 二维数组中任一元素a[i][j]的地址&a[i][j]等价 于a[i]+j。
§7.1 一维数组的定义及引用 二维数组的初始化: • 分行初始化
int
a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
• 很多程序员也喜欢这么写: 按数组在内存中的排列顺序 int a[3][3]={{1,2,3}, int a[3][3]={1,2,3,4,5,6,7,8,9}; {4,5,6}, {7,8,9}}; • 很多程序员也喜欢这么写: 可省略第一维的长度说明,长度由初值个数确定 int a[3][3]={1,2,3, int a[ ][3]={{1,2,3},{4,5,6},{7,8,9}}; 4,5,6, 注意:第二维的长度不能省略 练习:说出下面二维数组第一维的宽度及各元素的值: 7,8,9}; int b[ ][3]={1,2,3,4};
C语言程序设计_课件_第七章(适于清华谭浩强版)
注意:
(1) return(表达式); 和return 表达式;都 是正确的。 (2) 带返回值的函数只能返回一个值。 (3) 在函数定义时,允许使用多个return语句, 但是应尽量在末尾使用一个return语句。 (4) return语句中的表达式与函数的返回值类 型不匹配时,以函数定义时的返回类型为准。
问题的提出 函数基础 函数的定义 函数说明 函数调用 参数传递 程序举例 递归调用 变量的存储类别
7.1 问题的提出
例6.20它可以解决的问题有: ①输入若干个学生的姓名、某课程的期中 和期末成绩,并计算每个学生的总评成绩; ②计算总评成绩的分数段情况; ③输出所有学生的姓名、期中、期末和总 评成绩; ④查询某个学生的总评成绩。
函数调用时需要传递数据。调用函数要将 实参的值传送给被调用函数的形参。 若函数定义首部是 double power(double x,int n) /*函数定义 */ 调 用 形 式 是 可 以 是 power(y,m) , 也 可 以 是 power(3.0,5)。 其中,x和n是形式参数,y和m是实际参数,3.0 和可以是一个变量 名,因为变量名也构成一个表达式,形式参数只 能是变量名。当实际参数是变量名时,它与形参 的名称既可以相同,也可以不同,只是要注意, 在函数定义内部应该使用形参的名称。 (2) 实际参数与形式参数的参数个数、数据类型 和顺序都应该一致,如果数据类型不一致,系统 将按照自动转换规则进行转换。
7.3 函数的定义
7.3.1 函数的定义形式 在C语言中函数定义的形式有两种。
第一种:
函数返回值的数据类型说明 函数名称(带有类型说明的参数表)
{
函数内部数据说明; 语句;
}
第二种:
C语言程序设计第四版第七章答案-谭浩强
C语言程序设计第四版第七章答案-谭浩强第七章函数7.1写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果两个整数由键盘输入。
maxyueshu(m,n)int m,n;{ int i=1,t;for(;i<=m&&i<=n;i++){if(m%i==0&&n%i==0)t=i;}return(t);}minbeishu(m,n)int m,n;{int j;if(m>=n) j=m;else j=n;for(;!(j%m==0&&j%n==0);j++);return j;}main()整数,输出是否是素数的消息。
psushu(m)int m;{int i=2,t;for(;i<=m;i++)if(m%i==0&&i<m) break;if(m-i==0) t=1;else t=0;return m;}main(){int a,s;printf("enter sushu is \n");scanf("%d",&a);s=psushu(a);if(s==1) printf("a is sushu\n");else printf("s is not sushu\n");}7.4写一个函数,使给定的一个二维数组(3×3)转置,即行列互换。
int zhuangzhi(b)int b[3][3];{int i,j,t;for(i=0;i<3;i++)for(j=0;j>=i&&j<3-i;j++){t=b[i][j];b[i][j]=b[j][i];b[j][i]=t;}}main(){int a[3][3];int i,j;for(i=0;i<3;i++)for(j=0;j<3;j++)scanf("%d",&a[i][j]);for(i=0;i<3;i++){for(j=0;j<3;j++)printf(" %d",a[i][j]);printf("\n");}zhuangzhi(a);for(i=0;i<3;i++){for(j=0;j<3;j++)printf(" %d",a[i][j]);printf("\n");}}7.5写一函数,使输入的一个字符串按反序存放,在主函数中输入输出字符串。
谭浩强版C语言课件第7章数组
7.2.4 二维数组程序举例 将一个二维数组a × 转置存到另一个二维数组b × 例1 将一个二维数组 2×3转置存到另一个二维数组 3×2 a[n]
char name[0]; float weight[10.3]; float array[-100];
7
7.1.2 一维数组的引用
可以自由地存取。 数组元素的使用与单个变量相同,可以自由地存取。
数组元素的表示形式: 数组名[ 下标] 数组元素的表示形式: 数组名 下标 如a[3]
3
数组及其相关概念
数组是一组有序的、类型相同的数据的集合, 数组是一组有序的、类型相同的数据的集合, 是一组有序的 这些数据被称为数组的元素 数组的元素。 这些数据被称为数组的元素。
4
· 数组是同类型变量的集合,共用一个名字,用下标区 数组是同类型变量的集合,共用一个名字 同类型变量的集合 一个名字, 分; · · 每个变量称作数组元素; 每个变量称作数组元素; 按下标递增顺序在内存中存放; 按下标递增顺序在内存中存放;
2
2. 使用数组解决问题 定义一个变量,包含 个数据 称为数组变量。 个数据, 定义一个变量,包含26个数据,称为数组变量。 main() { int i,sum=0,a[26]; for(i=0;i<26;i++) scanf(“%d”,&a[i]); for(i=0;i<26;i++) sum=sum+a[i]; printf("%d",sum); }
16
7.2
二维数组的定义和引用
7.2.1 二维数组的定义
• 定义二维数组的一般方式: 定义二维数组的一般方式:
数组名[常量表达式1][常量表达式2] 1][常量表达式2]; 类型说明符 数组名[常量表达式1][常量表达式2];
谭浩强C程序设计(第三版)课件_第7章_数组
C程序设计(第三版)
7
例如: int n;
scanf(“%d″,&n);
int a[n];
/*在程序中临时输入数 组的大小 */
数组说明中其他常见的错误:
① float a[0]; /* 数组大小为0没有意义 */ ② int b(2)(3); /* 不能使用圆括号 */ ③ int k, a[k]; /* 不能用变量说明数组大小*/
14
7.1.4一维数组程序举例
例7-1:用数组来处理,求解Fibonacci数列。
Fibonacci数列公式:已知: a1=a2=1an=an-1+an-2 即:1,1,2,3,5,8,13
程序实例: #include <stdio.h> void main()
{ int i; int f[20]={1,1};
144
233
987 C程序设1计59(7第三版) 2584 16
if语句用来控 制换行,每行 输出5个数据。
3 34 377 4181
5 55 610 6765
程序举例2:用起泡法对10个数排序(由小到大)。
第 一 趟 比 较
经过第一趟(共5次比较与交换)后,最大的数9已“沉 底” 。然后进行对余下的前面5个数第二趟比较,
C程序设计(第三版)
8
2.一维数组在内存中的存放 一维数组: float mark[100];
低地址
86.5
92.0
每个数据元素占用
77.5
的字节数,就是基Βιβλιοθήκη 52.0类型的字节数.
一个元素占4个字节
.
.
高地址
94.0
C程序设计(第三版)
c程序设计 谭浩强 第07章课件
7.2.3 二维数组的初始化
可以用下面的方法对二维数组初始化:
(1) 按行分段赋值。如 int a[3][4]={{1,2,3,4},{5,6,7,8},{9, 10,11,12}}; 这种赋初值方法比较直观,把第1个花括弧内的数据给 第1行的元素,第2个花括弧内的数据赋给第2行的元 素……即按行赋初值。
//输出源数组,并转换成目标数组 printf("source array:\n"); for (i=0;i<2;i++) {
for (j=0;j<3;j++) {
printf("%5d",arrSource[i][j]); arrDest[j][i]=arrSource[i][j]; } printf("\n"); }
在实际问题中有很多量是二维的或多维的, 因此C语言 允许构造多维数组。多维数组元素有多个下标, 以标识 它在数组中的位置。 本小节只介绍二维数组,多维数组 可由二维数组类推而得到。
7.2.1 二维数组的定义 一般形式:
类型说明符 数组名[常量表达式][常量表达式]; 例如:int a[3][4],b[5][10]; 定义a为3×4(3行4列)的数组,b为5×10(5行10列)的数
int i; int f[20]={1,1}; for(i=2;i<20;i++)
f[i]=f[i-2]+f[i-1]; for(i=0;i<20;i++) {
if(i%5==0) printf("\n"); printf(“%10d",f[i]); } }
运行结果如下:
1
C语言程序设计(第三版)谭浩强习题与答案 第七章
7.6打印出以下杨辉三角形(要求打印出10行)。
1
11
121
1331
14641
15101051
∶
∶
main()
{ static int m,n,k,b[15][15];
b[0][1]=1;
for(m=1;m<15;m++)
{for(n=1;n<=m;n++)
{ b[m][n]=b[m-1][n-1]+b[m-1][n];
for(i=0;i<10;i++)
printf("%5d",a[i]);
}
或
main()
{static int a[10],i,j,k,t;
for(i=1;i<11;i++)
scanf("%d",&a[i]);
for(j=1;j<10;j++)
for(i=1;i<=10-j;j++)
if (a[i]>a[i+1])
{ i=i-1;
j=j+1;
if((i<1)&&(j>n))
{ i=i+2;
j=j-1;
}
else
{ Байду номын сангаасf(i<1) i=n;
if(j>n) j=1;
}
if(a[i][j]==0) a[i][j]=k;
else
{ i=i+2;
j=j-1;
a[i][j]=k;
C语言程序设计_谭浩强_第二版_CH07
第七章 数组
7.3字符数组 7.3.6字符串处理函数 (5)strcmp(字符数组1,字符数组2) strcmp(str1,str2); (6)strlen(字符数组) strlen(str); (7)strlwr(字符串) strlwr(str); (8)strupr(字符串) strupr(str);
C程序设计
第七章 数组
主讲人:兰强
ቤተ መጻሕፍቲ ባይዱ
第七章 数组
主要内容: 一维数组的定义和引用 二维数组的定义和引用 字符数组
第七章 数组
7.1.1 一维数组的定义 类型说明符 数组名[常量表达式]; 例如:int a[10]; 表示定一个一维数组a,有10个元素。 注意: (1)数组数组的元素是从下标从0开始的。 a[0],a[1],a[2],……,a[9]。 (2)数组的大小必须是常量表达式,不允许 使用变量来表示数组的大小。
第七章 数组
7.3字符数组 7.3.4字符串和字符串结束标志 用’\0’来作为字符串结束标志。 可以用char c[]={“I AM HAPPY”};来对数 组初始化。 等价于 char c*+=,‘I’,’ ’,’A’,’M’,’ ’,’H’,’A’,’P’,’P’,’Y’,’\0’-;
第七章 数组
7.3字符数组 7.3.5字符串的输出输出 (1)逐个字符输入输出,用格式符”%c”输入或 输出一个字符。 使用函数:putchar(),getchar() (2)将整个字符串一次输入或输出,用”%s”格 式符。 使用函数:puts(),gets()
第七章 数组
7.3字符数组 7.3.6字符串处理函数 (1)puts(字符数组) puts(str); (2)gets(字符数组) gets(str); (3)strcat(字符数组1,字符数组2) strcat(str1,str2); (3)strcpy(字符数组1,字符数组2) strcpy(str1,str2);
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
for(j=1; j<=40 ; j++) { scanf(“%d”,&s); sum=sum+s; }
ave=sum/40; printf(“ave=%f”,ave); }
假设现在要求保存每个学生的 成绩,那就不能只使用一个变 量s了,而需要40个变量,但这 样一来输入、输出、计算都会 变得繁琐. 在这种情况下,我 们可以使用数组类型,说明一 个含有40个元素的数组,每个 数组元素存放一个成绩,成绩 的输入、输出、计算都可通过 循环来实现
}
7 a[5 4]
a[6
]
可编辑ppt
7
a[7
例2: 用数组求fibonacci(斐波纳契)数列的前20个数
main( ) { int i , f[20]={1,1};
for ( i=2 ; i<20 ; i++) f[i]=f[i-2]+f[i-1];
for ( i=0; i<20 ; i++) { if ( i%4=”, f[i] );
27
2
2
12
a[1] 7
927
752
45
14
21
a[2] 2
952
745
514
41
4
a[3] 5
945
714
51
5
5
a[4] 4
914
71
7
7
7
a[5] 1
91
9
9
9
9
初始状态 第1
第2
第3
第4
第5
冒泡排序方法:轮依次比较轮相邻的两轮个数,将轮小数放前面轮,
大数放后面. n个数排序需要进行n-1轮比较, 从第1轮到
变量x的, 实际上a[5]是 不存在的, 如果执行了
会破坏数组以外其他变量的值 a[5]=72, 会将x原有的
正确数据覆盖掉
可编辑ppt
5
三、 一维数组的初始化 1. 概念 : 在定义一维数组时对各元素指定初始值称为
数组的初始化 如: int a[5] = { 1 , 3 , 5 , 7 , 9 } ; 2. 说明 (1) 对数组的全体元素指定初值, 初值用 { } 括起来, 数据
如: int a[5] = { 0 , 0 , 0 , 0 , 0 } ;
更简单的写法: int a[5]={ 0 } ;
可编辑ppt
6
例1: 输入一个数据,在已知数组中查找是否有该数据
main()
x9
{ int i , x ;
int a[10]={ 5, 8, 0, 1, 9, 2, 6, 3, 7, 4 };
可编辑ppt
2
#include <stdio.h> main( ) { int j , sum , s[40] ;
二、数组的概念 1.数组:由具有相同类型的
固定数量的元素组成的结构
float ave ; sum=0;
for(j=0; j<=39 ; j++) { scanf(“%d”,&s[j]);
2.数组元素:每一个数组元素 都是一个变量,为了与一般 的变量相区别,我们称数组
元素为下标变量
sum=sum+s[j]; } ave=sum/40;
3.下标变量在数组中的位置
序号称下标
printf(“ave=%f”,ave); }
可编辑ppt
3
7.1 一维数组的定义和引
一、 一维数组的定义用
1. 格式 : 类型标识符 数组名 [ 常量表达式] ;
(4) 常量表达式中不能包含变量,
:
常量表达式的值不能是实数
a[9
]
可编辑ppt
4
二、 数组元素的引用
1. 引用形式 : 数组名[ 下标 ]
1010 95 a[0
]
2. 说明
1012
(1) 下标可以是整型常量或整型表达式 1014
80 66
a[1 ]
如: a[1] , a[2*3]
1016 75 a[2
(2) 数组定义为 int a[5] , 数组长度为5 1018 84 ]
而下标在0 ---- 4之内, 即a[0] ---- a[4] 注意: 如果出现 a[5] = 72 ; 编译时不会 1020
72
aa] [[53 ]
指出错误, 系统会将a[4]后下一
a[4
个
假设这个存储空间] 是
存储单元 赋值为72, 但这样可能
第七章 数组
• 引言 • 7.1 一维数组的定义和引用 • 7.2 二维数组的定义和引用 • 7.3 字符数组
可编辑ppt
1
引言
一、数组的引入 为了便于处理一批类型相同的数据,引入了数组类型
例:某班有40名学生,求该班成绩的平均分
#include <stdio.h> main( ) { int j , sum , s ;
2. 说明
例: int a[10] ;
(1) 数组名是用户定义的标识符,
1010 95 a[0
数组名表示了一个存储区的首地址
]
(即第一个数组元素的地址)
1012 80
a[1
(2) 数组长度 : 指数组中元素的个数 1014 66 ]
(3) 数组元素的下标由零开始
:
: a[2
数组a 有10个元素: a[0] , a[1] … a[9] 1028 84 ]
第n-1轮, 各轮的比较次数依次为:n-1次、n-2次 … 1次
可编辑ppt
9
#include <stdio.h>
main( ) { int a[6] , i , j , t;
输入6个数据
for ( i=0 ; i<6 ; i++) scanf(“%d”, &a[i] );
f[0] 1
f[1] 1
f[2] 02
f[3] 03
f[4] 05
f[5] 08 ::
f[19 ]
67065
i=2 f[2]=f[0]+f[1]
i=3 f[3]=f[1]+f[2]
i=4 f[4]=f[2]+f[3]
}
}
可编辑ppt
8
例3: 用冒泡排序法对6个数进行排序(从小到大)
a[0] 9
79
scanf(“%d”, &x);
5 a[0 ]
8 a[1
0]
for ( i=0 ; i<10 ; i++) if ( x==a[i] )
1 a[2 9]
{ printf(“find!\n”); break;
}
2 a[3 ]
6 a[4
3]
if ( i==10 ) printf(“no find!\n”);
之间用逗号分开. 在这种情况下, 可以不指明数组的 长度, 系统会根据{ }内数据的个数确定数组的长度 如 : int a[ ] = { 1 , 3 , 5 , 7 , 9 } ;
(2) 对数组中部分元素指定初值 ( 这时不能省略数组长度 ) (3) 使如数: 组in中t 的a全[5部] =元{素1 ,初3始, 5值};都为 0