第六章 利用数组处理批量数据
C语言程序设计第6章利用数组处理批量数据课件

q 例如
char str[13];
组
scanf("%S",Str);
如果输入以下12个字符
How are you?
H o w \0
C语言程序设计
@Soochow University
48
字符串的输入/输出
q利用puts/gets进行:
puts(数组名);—输出字符串,并将’\0’转换成换 行输出。
{9,0,0,0}}; int a[3][4]={{1},{5,6}};相当于 int a[3][4]={{1},{5,6},{0}};
C语言程序设计
@Soochow University
数 组
40
二维数组的初始化
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 等价于: int a[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12};
输出数组a
@Soochow University
数 组
31
一维数组应用举例
q 统计数字序列中0-9中各数值出现的次数
v 数字序列保存于一个整型数组中
q 任意从键盘上输入一个正整数(最大为65535),
请将它逆序输出
v 如:输入:64934 ; 则输出:43946
数
v 对每一个数进行如下处理
组
q 提取个位数字:
3
引言
q数组
v数组是有序数据的集合
v特点
q所有数据元素类型相同
数
q数据元素类型可以是基本数据类型和构造数据类型
q由数组名和下标确定具体的数据元素
组
C语言程序设计
@Soochow University
实验6 利用数组处理批量数据

实验6 利用数组处理批量数据班级电信132 学号201315100209 姓名许春欢一、实验目的①掌握一维数组和二维数组的定义、赋值和输入输出的方法;②掌握字符数组和字符串函数的使用;③掌握与数组有关的算法(特别是排序算法)。
二、实验内容编写以下程序并调试。
1、编写C程序:分别用①选择法和②冒泡法对10个整数排序。
(选择法可以参考邮件附件:第六章数组,冒泡法参考课本P147页)#include<stdio.h>#include<string.h>void main( ){ int i,j,t,a[10];printf("input 10 nubers:\n");for(i=0;i<10;i++)scanf("%d",&a[i]);printf("\n");for(j=0;j<9;j++)for(i=0;i<9-j;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}printf("the sorted numbers :\n");for(i=0;i<10;i++)printf("%5d",a[i]);printf("\n");}2、编写C程序:将一个数组中的值逆序重新排放。
#include<stdio.h>#include<string.h>void main( ){ int i,a[10];for(i=0;i<10;i++)scanf("%d",&a[i]);for(i=9;i>=0;i--)printf("%5d",a[i]);printf("\n");}3、有一篇文章,共有3行文字,每行有个80字符。
第06章利用数组处理批量数据zb

6.3.4 二维数组程序举例
将二维数组a转置后存放到 数组中并输出。 转置后存放到b数组中并输出 例6.4 将二维数组 转置后存放到 数组中并输出。 #include <stdio.h> void main() { int i,j,b[3][2],a[2][3]={1,2,3,4,5,6}; for(i=0;i<2;i++) for(j=0;j<3;j++) b[j][i]=a[i][j]; for(i=0;i<3;i++) {for(j=0;j<2;j++) printf(“%4d”, b[i][j]); /*输出 数组 输出b数组 输出 数组*/ printf(“\n”); } } [Return]
6.2.2 引用一维数组的元素
对已经定义的一维数组,只能逐个引用数组元素, 对已经定义的一维数组, 只能逐个引用数组元素 , 不能一次引用整个数组中的全部元素。 不能一次引用整个数组中的全部元素。 如:a[3]=10; t=a[3]+6; 引用数组元素的一般式为: 引用数组元素的一般式为:数组名 [ 下标表达式 ] 注意: 下标表达式应为整型常量或整型表达式。 注意: 1 下标表达式应为整型常量或整型表达式。 2 定义数组时的数组名 [ 常量表达式 ]和引用数 定义数组时的数组名 和引用数 虽然在形式上相似, 组元素的数组名 组元素的数组名 [ 下标表达式 ]虽然在形式上相似,但含 虽然在形式上相似 义和用法上是不同的。 义和用法上是不同的。如: int a[10]; /*定义数组长度为 定义数组长度为10*/ 定义数组长度为 a[8]=4; t=a[8]+6; /*引用数组元素 引用数组元素a[8]*/ 引用数组元素 思考: 可以吗? 思考: a[10]=4; 可以吗? [Return]
第6章 利用数组处理批量数据

一维数组的定义和引用
0 a[0] 例:#include〈stdio.h〉 1 a[1] void main( ) 2 a[2] { int i,a[10]; 3 a[3] 4 a[4] for(i=0;i<=9;i++) 5 a[5] a[i]=i; 6 a[6] for(i=9;i>=0;i--) 7 a[7] 8 printf("%d ",a[i]); a[8] 9 a[9] } •注意:输入和输出数值型数组元素必须使用循环语句逐个 输入输出各下标变量,而不能用一个语句输出整个数组。 下面的写法是错误的: scanf("%d",a); printf("%d",a);
}
一维数组程序举例
例:求Fibonacci数列的前N项的值。 a1=a2=1 an=an-1+an-2 #include <stdio.h> #define NUM 20 void main( ) { int a[NUM]={ 1, 1 }; int j; for (j=2; j<NUM; ++j) a[j] = a[j-1]+a[j-2]; for ( j=0; j<NUM; j++) printf("%d\t", a[j]); }
二维数组的定义和引用
二维数组可被看作是一种特殊的一维数组: 它的元素又是一个一维数组 例如,把a看作是一个一维数组,它有3个元素: a[0]、a[1]、a[2] 每个元素又是一个包含4个元素的一维数组
a[0] a[1] a[2]
a[0][0] a[1][0] a[2][0]
a[0][1] a[1][1] a[2][1]
T-C-2-第6章_利用数组处理批量数据good

if语句用来控 制换行,每行 输出5个数据。
运行结果如下: 1 1 8 13 89 144 987 1597
2 21 233 2584
3 34 377 4181
5 55 610 6765
例题 6.3
假如有n个人,各人年龄不同,希望按年龄将他们 从小到大排列。
解题思路
这种问题称为数的排序(sort)。排序的原则有两 类,一类是‚升序‛,从小到大;一类是‚降序‛, 从大到小。我们可以把这个题目抽象为一般形式: 对n个数按升序排列 对一组数据进行排序的方法很多,本例介绍用‚起 泡法‛排序。‚起泡法‛的思路是如下
不能写成 float a[3,4],b[5,10];
6.3 二维数组的定义和引用 6.3.1 定义二维数组
C语言中,二维数组中元素排列的顺序是按行存放的,
即在内存中先顺序存放第一行的元素,再存放第二行
的元素。下图表示对a[3][4]数组存放的顺序。
a00 a01 a02 a03
a10 a11 a12 a13 a20 a21 a22 a23
3. 如果想使一个数组中全部元素值为0,可以写成:
int 或nt int a[10]={0,0,0,0,0,0,0,0,0,0}; a[10]={0};
说明:如果想使一个数组中全部元素值为1,可以写成: a[10]={1,1,1,1,1,1,1,1,1,1}; 但是不能写成:
int
a[10]={1*10};
将数组元素的初值依次放在一对花括弧内。经过上面的 定义和初始化之后,a[0]=0,a[1]=1,a[2]=2, a[3]=3,a[4]=4,a[5]=5,a[6]=6,a[7]=7, a[8]=8,a[9]=9。
2. 可以只给一部分元素赋值。 例如: int a[10]={0,1,2,3,4}; 定义a数组有10个元素,但花括弧内只提供5个初值, 这表示只给前面5个元素赋初值,后5个元素值为0。
C程序设计(第五版)-第6章利用数组处理批量数据课后习题答案

C程序设计(第五版)-第6章利⽤数组处理批量数据课后习题答案1.⽤筛选法求100质数⼜称素数。
⼀个⼤于1的⾃然数,除了1和它⾃⾝外,不能被其他⾃然数整除的数叫做质数;否则称为合数(规定1既不是质数也不是合数)先解释⼀下筛选法的步骤:<1> 先将1挖掉(因为1不是素数)。
<2> ⽤2去除它后⾯的各个数,把能被2整除的数挖掉,即把2的倍数挖掉。
<3> ⽤3去除它后⾯的各数,把3的倍数挖掉。
<4> 分别⽤5…各数作为除数去除这些数以后的各数。
上述操作需要⼀个很⼤的容器去装载所有数的集合,只要满⾜上述条件,即2的倍数⼤于1的全部置0,3的倍数⼤于1的全部置0,4的倍数⼤于1的全部置0……⼀直到这个数据集合的末尾,这样⼀来不为0的数就是素数了,然后按下标在⾥⾯进⾏查找就好了1#include <stdio.h>2#include <windows.h>3int main()4{5printf("------------------\n");6int i, j, k, a[100];7// 先给100个数赋值8for (i = 0; i < 100; i++)9{10a[i] = i + 1;11}1213// 1不是质数也不是合数14a[0] = 0;1516for (i = 0; i < 100; i++)17{18for (j = i + 1; j < 100; j++)19{20// 把后⾯的数能整除前⾯的数赋值为021if (a[i] != 0 && a[j] != 0)22{23if (a[j] % a[i] == 0)24{25a[j] = 0; //把不是素数的都赋值为026}27}28}29}3031// 打印质数,每10个换⾏32for (i = 0; i < 100; i++)33{34if (k % 10 == 0)35{36printf("\n");37}38if (a[i] != 0)39{40printf("%d ", a[i]);41k++;42}43}4445return 0;46}2.⽤选择法对101#include <stdio.h>2#include <windows.h>3int main()4{5printf("请输⼊10个数:\n");6int minIndex, temp, a[10];78for (int i = 0; i < 10; i++)9{10scanf("%d", &a[i]);11}1213for (int i = 0; i < 10; i++)14{15minIndex = i;16for (int j = i + 1; j < 10; j++)17{18if (a[j] <= a[minIndex])19{20minIndex = j;21}22}2324temp = a[i];25a[i] = a[minIndex];26a[minIndex] = temp;27}2829printf("排序后结果:\n");3031for (int i = 0; i < 10; i++)32{33printf("%d ", a[i]);34}35return 0;36}3.求⼀个3*31#include <stdio.h>2#include <windows.h>3int main()4{5printf("请输⼊元素:\n");6int x, y, z, a[3][3];7for (int i = 0; i < 3; i++)8{9for (int j = 0; j < 3; j++)10{11scanf("%d", &a[i][j]);12}13}14printf("输出刚刚输⼊的元素:\n");15for (int i = 0; i <= 2; i++)16{17for (int j = 0; j <= 2; j++)18{19printf("%d\t", a[i][j]);20}2122printf("\n");23}24printf("\n");25// 计算对⾓线的合26for (int i = 0; i < 3; i++)27{28x += a[i][i];29}3031for (int i = 0, j = 2; i < 3; i++, j--)32{33y += a[i][j];34}35z = x + y;36printf("左上到右下对⾓线的合:%d\n", x); 37printf("右上到左下对⾓线的合:%d\n", y); 38printf("两条对⾓线之合:%d\n", z);39// 结果40// 请输⼊元素:41// 1 2 3 4 5 6 7 8 942// 输出刚刚输⼊的元素:43// 1 2 344// 4 5 645// 7 8 94647// 左上到右下对⾓线的合:1548// 右上到左下对⾓线的合:3149// 两条对⾓线之合:4650return 0;51}4.1#include <stdio.h>2#include <windows.h>3int main()4{5printf("------------------\n");6int t, x, a[5] = {1, 2, 4, 5, 6};78printf("请输⼊需要插⼊的数字:\n");9scanf("%d", &x);10for (int i = 0; i < 5; i++)11{12if (x < a[i])13{14t = a[i];15a[i] = x;16x = t;17}18printf("%3d", a[i]);19}20printf("%3d", x);2122return 0;23}5.讲⼀个数组的值按逆序重新存放。
C语言 第6章 利用数组处理批量数据2

第6章利用数组处理批量数据怎样定义和引用一维数组怎样定义一维数组⏹定义一维数组的一般形式为:类型符数组名[常量表达式];如int a[10];10个元素:a[0],a[1],a[2],…,a[9]int a[4+6]; 合法int n=10;int a[n]; 非法怎样引用一维数组元素⏹引用数组元素的表示形式为:数组名[下标]如a[0]=a[5]+a[7]-a[2*3] 合法int n=5,a[10];a[n]=20;一维数组的初始化⏹在定义数组的同时,给各数组元素赋值⏹int a[10]={0,1,2,3,4,5,6,7,8,9};⏹int a[10]={0,1,2,3,4};相当于int a[10]={0,1,2,3,4,0,0,0,0,0};⏹int a[10]={1,0,0,0,0,0,0,0,0,0};相当于int a[10]={1};⏹int a[5]={1,2,3,4,5};可写为int a[ ]={1,2,3,4,5};怎样定义和引用二维数组怎样定义二维数组⏹二维数组定义的一般形式为类型符数组名[常量表达式][常量表达式];如:float a[3][4],b[5][10];⏹二维数组可被看作是一种特殊的一维数组:它的元素又是一个一维数组⏹例如,把a看作是一个一维数组,它有3个元素:a[0]、a[1]、a[2]⏹每个元素又是一个包含4个元素的一维数组怎样引用二维数组的元素二维数组的初始化int a[3][4]={{1,2,3,4},{5,6,7,8}, {9,10,11,12}};int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};int a[3][4]={{1},{5},{9}};等价于int a[3][4]={{1,0,0,0},{5,0,0,0}, {9,0,0,0}};int a[3][4]={{1},{5,6}};相当于int a[3][4]={{1},{5,6},{0}};二维数组的初始化int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};等价于:int a[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12};int a[][4]={{0,0,3},{ },{0,10}};合法字符数组怎样定义字符数组⏹字符数组中的一个元素存放一个字符⏹定义字符数组的方法与定义数值型数组的方法类似怎样定义字符数组char c[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’;字符数组的初始化char c[10]={’I’,’ ’,’a’,’m’,’ ’,’h’,’a’,’p’,’p’,’y’};怎样引用字符数组中的元素字符串和字符串结束标志⏹为了测定字符串的实际长度,C语言规定了字符串结束标志’\0’⏹’\0’代表ASCII码为0的字符,它什么也不做⏹用它作为字符串结束标志不会产生附加的操作或增加有效字符,只起一个供辨别的标志char c[]={”I am happy”};可写成char c[]=”I am happy”;相当于char c[11]={”I am happy”};char c[10]={”China”};可写成char c[10]=”China”;从c[5]开始,元素值均为\0printf(”%s”,c);字符数组的输入输出⏹字符数组的输入输出可以有两种方法:❑逐个字符输入输出(%c)❑整个字符串一次输入输出(%s)⏹输出的字符中不包括结束符’\0’⏹用%s输出字符串时,printf函数中的输出项是字符数组名,不是数组元素名⏹如果一个字符数组中包含多个’\0’,则遇第一个’\0’时输出就结束⏹可以用scanf函数输入一个字符串⏹scanf函数中的输入项c是已定义的字符数组名,输入的字符串应短于已定义的字符数组的长度字符数组的输入char c[6];scanf(”%s”,c); China↙系统自动在China后面加一个’\0’char str1[5],str2[5],str3[5];scanf(”%s%s%s”,str1,str2,str3);How are you? ↙字符串处理函数1.puts函数----输出字符串的函数2. gets函数----输入字符串的函数3. strcat函数----字符串连接函数4. strcpy函数-字符串复制5. strcmp函数----字符串比较函数5. strcmp函数----字符串比较函数6. strlen函数----测字符串长度的函数7. strlwr函数----转换为小写的函数8. strupr函数----转换为大写的函数。
C语言程序设计课件第6章 利用数组处理批量数据

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"); }
先输出a[9],最 后输出a[0]
6.2.3 一维数组的初始化 P141
对数组元素的赋值既可以通过赋值语 句来实现,也可以在定义数组时同时 给予初值,这就称为数组的初始化
数组名的命名规则和变量名相同 常量表达式给出元素的个数 下标从0开始,如 int a[10];
a[0],a[1],a[2],…,a[9]
6.2.2 引用一维数组的元素 P140
必须先定义数组,才能引用数组中的 元素
只能逐个引用数组元素而不能一次引 用整个数组中的全部元素
6.2.2 引用一维数组的元素 P140
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; int a[3][4]={{1},{5},{9}};等价于 int a[3][4]={{1,0,0,0},{5,0,0,0},
{9,0,0,0}}; int a[3][4]={{1},{5,6}};相当于 int a[3][4]={{1},{5,6},{0}};
6.2.1 定义一维数组 P140
定义一维数组的方式为: 类型符 数组名[常量表达式];
数组名的命名规则和变量名相同 常量表达式给出元素的个数 下标从0开始,如 int a[10];
a[0],a[1],a[2],…,a[9]
6.2.1 定义一维数组 P140
定义一维数组的方式为: 类型符 数组名[常量表达式];
C语言-第6章 利用数组处理批量数据

第6章利用数组处理批量数据一、单项选择题1. 以下对一维数组a的正确说明是:A) char a(10); B) int a[]; C)int k=5,a[k]; D)char a[]={…a‟,‟b‟,‟c‟};2. 以下能对一维数组a进行初始化的语句是: ( C )A) int a[5]=(0,1,2,3,4,); B) int a(5)={}; C) int a[ ]={0,1,2}; D) int a{5}={10*1};3.在C语言中对一维整型数组的正确定义为。
A)int a(10); B)int n=10,a[n];C)int n;a[n]; D) #define N 10int a[N];4、已知:int a[10]; 则对a数组元素的正确引用是()。
A、a[10]B、a[3.5]C、a(5)D、a[10-10]5. 执行下面的程序段后,变量k中的值为int k=3, s[2];s[0]=k; k=s[0]*10;A) 不定值B) 33 C) 30 D) 106. 下列说法中错误的是A 构成数组的所有元素的数据类型必须是相同的B 用指针法引用数组元素允许数组元素的下标越界C 一维数组元素的下标依次是1、2、3……D 定义数组时的长度可以是整型常量表达式7. 若有以下数组说明,则数值最小的和最大的元素下标分别是()。
int a[12]={1,2,3,4,5,6,7,8,9,10,11,12};A)1,12 B)0,11C)1,11 D)0,128. 若有以下数组说明,则i=10;a[a[i]]元素数值是()。
int a[12]={1,4,7,10,2,5,8,11,3,6,9,12};A)10 B)9 C)6D)59. 假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,则数组x在内存中所占字节数是A) 3 B) 6 C) 10 D) 2010. 若有说明:int a[][3]={1,2,3,4,5,6,7}; 则数组a的第一维的大小为: ( )A) 2 B) 3C) 4 D)无确定值11. 若有说明:int a[][3]={{1,2,3},{4,5},{6,7}}; 则数组a的第一维的大小为: ( )A) 2 B) 3 C) 4 D)无确定值12. 以下定义语句中,错误的是A) int a[]={1,2}; B) char *a[3]; C) char s[10]=“test”; D) int n=5,a[n];13.下面程序段的输出结果是:int i;int x[3][3]={1,2,3,4,5,6,7,8,9};for (i=0;i<3;i++)printf("%d ",x[i][2-i]);A) 1 5 9 B) 1 4 7 C) 3 5 7D) 3 6 914. 对二维数组的正确定义是()A)int a[ ] [ ]={1,2,3,4,5,6}; B)int a[2] [ ]={1,2,3,4,5,6};C)int a[ ] [3]={1,2,3,4,5,6}; D)int a[2,3]={1,2,3,4,5,6};15.已知int a[3][4];则对数组元素引用正确的是______.A)a[2][4] B)a[1,3] C)a[2][0]D)a(2)(1)17.下面程序的输出结果是____。
y13c6-1

例:求任意100个数中的最大值。 main() { int i,a,max; 用一个简单变量作为 max=-32768 数据结构,合理,算 法简单 for(i=1;i<=100;i++) { scanf(“%d”,&a); if(a>max) max=a; } printf(“\n max=%d”,max); }
数组中的各成员称数组元素,由数组名加下 标唯一地确定。 将一组数用一个名字代表,便于管理。 只有一个下标的数组称为一维数组; 可有二维数组、三维数组、…、七维数组。
如果有1000名学生,每个学生有一个成 绩,需要求这1000名学生的平均成绩。 用s1,s2,s3,……,s1000表示每个学生的 成绩,能体现内在联系。 数组名 C语言用方括号中的数字表示下标,如 用s[15]表示
f[i] = f[i-2] + f[i-1];//递推
}
2016年9月4日星期日11时39 分56秒 32
四、一维数组程序举例 [例]用数组求Fibonacci数列前20个数。
#include <stdio.h> void main() { 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("%12d",f[i]); } }
整型数组 int b[ ] = {100,98,…};
9
数组定义
数组是一个变量,存储相同数据类型的一组数据
int类型 博物架名 标识符
第6章 利用数组处理批量数据

#include <stdio.h> int main() { int a[2][3]={{1,2,3},{4,5,6}};
int b[3][2],i,j; printf("array a:\n"); for (i=0;i<=1;i++) { for (j=0;j<=2;j++)
{ printf("%5d",a[i][j]); b[j][i]=a[i][j];
它的元素又是一个一维数组 • 例如,把a看作是一个一维数组,它有3个元素:
a[0]、a[1]、a[2] • 每个元素又是一个包含4个元素的一维数组
a[0] a[0][0] a[1] a[1][0] a[2] a[2][0]
a[0][1] a[1][1] a[2][1]
a[0][2] a[1][2] a[2][2]
for(i=0;i<4;i++) if (a[i]>a[i+1]) { ……}
……
for(i=0;i<1;i++) if (a[i]>a[i+1]) { ……}
for(j=0;j<5;j++) for(i=0;i<5-j;i++) if (a[i]>a[i+1]) { ……}
#include<stdio.h> int main( ) {int a[10]; int i,j,t; printf("input 10 numbers :\n"); for (i=0; i<10; i++) scanf("%d",
实验六 利用数组处理批量数据

实验六利用数组处理批量数据
1实验目的
(1) 掌握一维数组和二维数组的定义、赋值和输入输出的方法。
(2) 掌握字符数组和字符串函数的使用。
(3) 掌握与数组有关的算法(特别是排序算法)。
2.实验内容
编程序并上机调试运行。
(1)一个班10个学生的成绩,存放在一个一维数组中,要求找出其中成绩最高的学生的成绩和该生的序号(本题是教材第6章习题6.2)。
(2)已知5个学生的4门课的成绩,要求求出每个学生的平均成绩,然后对平均成绩从高到低将各学生的成绩记录排序(成绩最高的学生的排在数组最前面的行,成绩最低的学生的排在数组最后面的行)(本题是教材第6章习题6.4)。
(3)有一篇文章,共有3行文字,每行有80个字符。
要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数(本题是教材第6章习题6.8)。
(4)有一行电文,已按下面规律译成密码:
A→Z a→z
B→Y b→y
C→X c→x
……
即第1个字母变成第26个字母,第2个字母变成第25个字母,第ⅰ个字母变成第(26-i+1)个字母。
非字母字符不变。
假如已知道密码是Umtorhs,要求编程序将密码译回原文,并输出密码和原文。
c语言程序设计第五版课后答案谭浩强第六章习题答案

c语⾔程序设计第五版课后答案谭浩强第六章习题答案第六章:利⽤数组处理批量数据1. ⽤筛选法求100之内的素数【答案解析】素数:约数为1和该数本⾝的数字称为素数,即质数筛选法:⼜称为筛法。
先把N个⾃然数按次序排列起来。
1不是质数,也不是合数,要划去。
第⼆个数2是质数留下来,⽽把2后⾯所有能被2整除的数都划去。
2后⾯第⼀个没划去的数是3,把3留下,再把3后⾯所有能被3整除的数都划去。
3后⾯第⼀个没划去的数是5,把5留下,再把5后⾯所有能被5整除的数都划去。
这样⼀直做下去,就会把不超过N 的全部合数都筛掉,留下的就是不超过N的全部质数。
因为希腊⼈是把数写在涂腊的板上,每要划去⼀个数,就在上⾯记以⼩点,寻求质数的⼯作完毕后,这许多⼩点就像⼀个筛⼦,所以就把埃拉托斯特尼的⽅法叫做“埃拉托斯特尼筛”,简称“筛法”。
(另⼀种解释是当时的数写在纸草上,每要划去⼀个数,就把这个数挖去,寻求质数的⼯作完毕后,这许多⼩洞就像⼀个筛⼦。
)【代码实现】//⽤筛选法求100以内的素数#include<stdio.h>int main(){int i, j, k = 0;// 将数组汇总每个元素设置为:1~100int a[100];for (i = 0; i < 100; i++)a[i] = i+1;// 因为1不是素数,把a[0]⽤0标记// 最后⼀个位置数字是100,100不是素数,因此循环可以少循环⼀次a[0] = 0;for (i = 0; i < 99; i++){// ⽤a[i]位置的数字去模i位置之后的所有数据// 如果能够整除则⼀定不是素数,该位置数据⽤0填充for (j = i + 1; j < 100; j++){if (a[i] != 0 && a[j] != 0){//把不是素数的都赋值为0if (a[j] % a[i] == 0)a[j] = 0;}}}printf(" 筛选法求出100以内的素数为:\n");for (i = 0; i < 100; i++){//数组中不为0的数即为素数if (a[i] != 0)printf("%3d", a[i]);}printf("\n");return 0;}【运⾏结果】2. ⽤选择法对10个整数排序【答案解析】选择排序原理:总共两个循环,外循环控制选择的趟数,内循环控制具体选择的⽅式。
第六章利用数组处理批量数据

A[2][0] A[2][1] A[2][2] A[2][3] A[2][2]
A[2][3]
八、二维数组的引用
引形式:
Array_Name[行标][列标] 注意:下标不能越界
九、二维数组的初始化 第size1-
第0行的 1行的元
初始化形式:
元素列表 素列表
type Array_Name[size1][size2]={{……}……{……}}
6_4
for(i=0;i<3;i++) { for(j=0;j<4;j++) printf("%8d",a[i][j]); printf("\n"); }
for(i=0;i<3;i++) for(j=0;j<4;j++) b[j][i]=a[i][j];
6_4
printf(“转置矩阵为:\n"); for(i=0;i<4;i++)
十二、字符数组函数
1、输入输出
1)逐个字符的输入输出,用循环处理,格式用%c 2)一次性输入输出,直接用%s格式,但是注意:
char str[10]; for(i=0;i<10;i++) scanf(“%c”,&str[i]);
max=a[0][0];
/*先假定a[0][0]最大*/
for (i=0;i<=2;i++)
for(j=0;j<=3;j++)
if(a[i][j]>max)
6_6
{ max=a[i][j]; row=i; colum=j;
第6章利用数组处理批量数据-2018级-6,3-ex

str[0] C h i n a \0 \0 \0 … \0 str[1] J a p a n \0 \0 \0 … \0 str[2] I n d i a \0 \0 \0 … \0
可以把str[0],str[1],str[2]看作3个一维字符数组 它们各有20个元素 可以把它们如同一维数组那样进行处理
{' ','*',' ','*'},{'*',' ',' ',' ','*'}, {‘ ’,‘*’,‘ ’,‘*’},{‘ ’,‘ ’,‘*’}}; int i,j; for (i=0;i<5;i++) { for(j=0;j<5;j++) printf(“%c”,diamond[i][j]); printf("\n"); } return 0;}
28
#include<stdio.h>
#include<string.h> int main ( )
用字符串函数时加
{ char string[20],str[3][20]; int i;
for (i=0;i<3;i++) gets (str[i]);
if (strcmp(str[0],str[1])>0)
c[0]c[1]c[2]c[3]c[4]c[5]c[6]c[7]c[8]c[9]
I
am
happy
11
6.4.1 定义字符数组及对其初始化 【Initialization】
char c[10]={’I’,’ ’,’a’,’m’,’ ’,’h’,’a’,’p’,’p’,’y’};
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
6.1 怎样定义和引用一维数组
例6.3 已知一组数(n个),找出其中最大者。
#include<stdio.h> int main( ) { int i, n ; float a[20], max; scanf(“%d”, &n); for( i=0; i<n; i++) scanf(“%f ”, &a[i]); max=a[0]; for(i=1; i<n; i++) if(max<a[i]) {max=a[i]; } printf(“Max=%f\n”, max); return 0;}
下界为 0,上界为 常量表达式-1
2013-8-20
第六章 利用数组处理批量数据
4
6.1 怎样定义和引用一维数组
例: int a[10]; float b[5]; 定义一维整型数组 a和实型数组b a数组中的元素是:a[0], a[1], a[2],
a[3], a[4], a[5], a[6], a[7], a[8], a[9];
2013-8-20 第六章 利用数组处理批量数据 10
6.1 怎样定义和引用一维数组
例6.4 对任意10个数按从大到小排序。(交换法) #include<stdio.h> int main( ) { float a[10], t; int i, j; for(i=0; i<10; i++) scanf(“%f ”, &a[i]); for(i=0; i<9; i++) for(j=i+1; j<10; j++) if(a[i]<a[j]) {t=a[i]; a[i]=a[j]; a[j]=t;} for(i=0; i<10; i++) printf(“%.2f ”, a[i]); return 0;}
2013-8-20 第六章 利用数组处理批量数据 6
6.1 怎样定义和引用一维数组
三、一维数组的初始化
1、在定义数组时,给数组元素赋初值。 例: int a[6]={1,2,3,4,5,6}; 2、可只给一部分数组元素赋初值。
例: int a[6]={1,2,3}; 3、未赋初值的数组,各元素值不确定。 4、初始化的数据个数确定时可以省略数组长度。 例: int a[ ]={1,2,3}; 5、数组中全部元素初始化为0 。 例: int a[6]={0};
第六章 利用数组处理批量数据 1
i=6
i=j
21
6.2 怎样定义和引用二维数组
例6.7打印以下的杨辉三角形。(要求打印出10行) #include<stdio.h> int main( ) {int y[10][10], i, j; for(i=0; i<10; i++) {y[i][0]=1; y[i][i]=1;} for(i=2; i<10; i++) for(j=1; j<=i-1; j++) y[i][j]=y[i-1][j]+y[i-1][j-1]; for(i=0; i<10; i++) {for(j=0; j<=i; j++) printf(“%5d”, y[i][j]); printf(“\n”); } 2013-8-20 第六章 利用数组处理批量数据 return 0;}
6.2 怎样定义和引用二维数组
三、数组元素
数组名[下标1][下标2]
a[0][0] a[0][1] a[0][2] a[0][3]
长度:12
a[0][0] a[0][1]
序号
78 66 88 85 98
12 a[1][0] a[1][1] a[1][2] a[1][3] 个 a[2][0] a[2][1] a[2][2] a[2][3] 连 续 存 四、二维数组元素在内存 储 中的存储形式 单 元 按行从上到下,行内 从左到右存放 利用数组处理批量数据 2013-8-20 第六章
13
6.2 怎样定义和引用二维数组
一、引入
姓名 张玉 王晶 李欣 英语
78 98 55
高数
66 67 76
物理
88 87 87
C 语言 85 77 90
二、定义
类型关键字 数组名[常量表达式1][常量表达式2] 例:int a[3][4];
2013-8-20
float b[5][10];
14
第六章 利用数组处理批量数据
b数组中的元素是:b[0], b[1], b[2], b[3], b[4]
2013-8-20 第六章 利用数组处理批量数据 5
6.1 怎样定义和引用一维数组
例6.1 对10个数组元素依次赋值为0,1,2,3, 4,5,6,7,8,9,要求按逆序输出。 #include <stdio.h> int 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″); return 0;}
2013-8-20 第六章 利用数组处理批量数据 9
6.1 怎样定义和引用一维数组
例6.3 已知一组数(n个),找出其中最大者(及其位置)。 #include<stdio.h> int main( ) { int i, n , position ; float a[20], max; scanf(“%d”, &n); for( i=0; i<n; i++) scanf(“%f ”, &a[i]); max=a[0]; position =0; for(i=1; i<n; i++) if(max<a[i]) {max=a[i]; position =i; } printf(“Max=%f\nPosition=%d\n”, max , position +1); return 0;}
2013-8-20 第六章 利用数组处理批量数据 11
6.1 怎样定义和引用一维数组
例6.4 对任意n个数按从大到小排序。(选择法)
#include<stdio.h> int main( ) { float a[100] , t ; int n, i , j , p ; scanf(“%d”, &n); for(i=0; i<n; i++) scanf(“%f ”, &a[i]); for(i=0; i<n-1; i++) { p=i; for(j=i+1; j<n; j++) if(a[p]<a[j]) p=j; if(p!=i){t=a[i];a[i]=a[p];a[p]=t;}} for(i=0; i<n; i++) printf(“%.2f ”, a[i]); return 0; }
一个矩阵
数组:是一组具有相同 数据类型的数据的有序 集合。
2013-8-20
2、使用过程中需要保留 原始数据
C语言为这些数据,提供 了一种构造数据类型: 数组。
3
第六章 利用数组处理批量数据
6.1符 数组长度 类型关键字 数组名[常量表达式];
二、数组元素
数组名[下标]
17
6.2 怎样定义和引用二维数组
例6.5 将一个二维数组行和列的元素互换,存到 另一个二维数组中。 例如:a= 1 2 3 4 5 6 1 4 b= 2 5 3 6
解题思路:将a数组中的元素a[i][j]存放到b数 组中的b[j][i]元素中。
2013-8-20
第六章 利用数组处理批量数据
18
6.2 怎样定义和引用二维数组
2013-8-20 第六章 利用数组处理批量数据 12
6.1 怎样定义和引用一维数组
例6.4 对任意n个数按从大到小排序。(冒泡法) #include<stdio.h> int main( ) { float a[100] , t ; int n, i , j , p ; scanf(“%d”, &n); for(i=0; i<n; i++) scanf(“%f ”, &a[i]); for(i=1; i<n; i++) for(j=0; j<n-i; j++) if(a[j]<a[j+1]) {t=a[j];a[j]=a[j+1];a[j+1]=t;} for(i=0; i<n; i++) printf(“%.2f ”, a[i]); return 0;} 2013-8-20 第六章 利用数组处理批量数据
a[0][2]
a[0][3] a[1][0] a[1][1] a[1][2] a[1][3] a[2][0]
67
87 77 55 76
a[2][1]
a[2][2] a[2][3]
87 90
15
6.2 怎样定义和引用二维数组
五、二维数组的输入/输出问题 1、输入
for ( i=0 ; i<3 ; i++ ) for ( j=0 ; j<4 ; j++ ) scanf ( "%d" , &a[i][j] ) ;
第六章 利用数组处理 批量数据
主讲人:卜文娟
主要内容
6.1 怎样定义和引用一维数组 6.2 怎样定义和引用一维数组 6.3 字符数组