第七章数组上机作业

合集下载

C语言程序设计(第3版)何钦铭 颜 晖 第7章 数组

C语言程序设计(第3版)何钦铭 颜 晖 第7章  数组

第7章数组【练习7-1】将例7—3 程序中的break 语句去掉,输出结果有变化吗?假设输入数据不变,输出什么?解答:当去掉break 语句后,一旦找到数据将不跳出循环,而是继续往下找值为x 的元素,因此程序输出会有变化。

当输入数据仍为2 9 8 1 9 时,输出将是index is 1 index is 4。

【练习7—2】将数组中的数逆序存放.输入一个正整数n(1<n<=10),再输入n个整数,存入数组a中,输出最大值及其对应的最小下标,下标从0开始.试编写相应程序。

解答:#include<stdio。

h〉int main(void){int i,n,temp;int a[10];printf("Input n:");scanf(”%d",&n);printf(”Input %d integer:",n);for(i=0;i<n;i++)scanf(”%d”,&a[i]);printf(”After reversed:");for(i=0;i〈n/2;i++){temp=a[i];a[i]=a[n—1—i];a[n-1—i]=temp;}for(i=0;i〈n;i++)printf("%d ”,a[i]);return 0;}【练习7-3】求最大值及其下标.输入一个正整数n(1〈n<=10),再输入n个整数,存入数组a中,将先数组a中的这n个数逆序存放,在按顺序输出数组a中的n各元素.试编写相应程序.解答:#include〈stdio.h>int main(void){int i,index,n;int a[10];printf("Enter n:”);scanf(”%d",&n);printf(”Enter %d integrs:”,n);for(i=0;i〈n;i++)scanf("%d",&a[i]);for(i=n—1;i〉=0;i++)printf("%d ”,a[i]);return 0;}【练习7-4】找出不是两个数组共有的元素。

《C语言程序设计基础与实训教程》第7章:数组

《C语言程序设计基础与实训教程》第7章:数组

/webnew/
7.1.4 一维数组的应用举例
例7.5 将数组中的数按颠倒的顺序重新存放。要求,在操 作时只能借助一个临时存储单元而不能另外开辟数组。 分析:题目要求是按颠倒的顺序重新存放数据,而不是按 逆序输出。 可以使用两个变量i和j,i和j的初值分别为0和9,将a[i] 与a[j]对调,然后i++,j--,接着再将a[i]与a[j]对调。如些 重复操作,直到i>=j时,对调完成。 程序
分析:该数组元素的值是有规律的序列, ( 从 开始算起 开始算起) 分析 : 该数组元素的值是有规律的序列 , 第 i(i从0开始算起) 个 元素的值为: 元素的值为:10+2*i。 。 输出该数组时,由于该数组有30个元素,在一行中输出不太美观, 输出该数组时,由于该数组有 个元素,在一行中输出不太美观, 个元素 所以,这里我们选择每行输出6个元素。 所以,这里我们选择每行输出 个元素。 个元素
/webnew/
7.1.3 一维数组元素的引用
2.一维数组的输入与输出 一维数组的输入与输出 如何给数组元素赋值以及如何将数组元素的值输出是数 组最基本的操作。下面将讨论一维数组元素的输入与输出。 例7.1 定义一个五个元素的字符型数组,通过键盘给每 个元素赋值,并以相反的顺序的输出。 程序1 程序2 从上面的例子可以看出,一个数组中往往往包含较多的 数组元素,相同的赋值或输出操作将被重复多次进行,所以, 一维数组元素的输入与输出一般通过一重循环来实现。
/webnew/
7.1.3 一维数组元素的引用
注意: (1)数组元素的引用方式与数组说明符的形式非常相近,都是 “数组名[表达式]”形式,但两者的意义完全不同。 出现的位置不同。定义数组时,“数组名[表达式]”出现在 定义语句中,表示的是定义了一个名为“数组名”的数组,表达式的值 表示该数组中所包含元素的个数。作为数组元素的引用方式时,“数组 名[表达式]”出现在其它执行语句中,表示是数组中的下标为“表达式” 值的那个元素。 表达式的格式不同。定义数组时,“表达式”必须为常量表 达式。作为数组元素的引用方式时,表达式可以变量、常量或函数构成 的合法C表达式。 (2)在C语言中,起始下标规定为0,最大值应为:数组长度-1。 如果发生了下标越界的现象,可能破坏了其它存储单元的数据,甚至破 坏程序代码。 (3)下标必须是整型表达式,若为小数,则自动取整。如a[2.6] 系统自动默认为a[2]。

第七章 数组

第七章  数组

例题1:求10名同学的平均分。7_2.c
main( ) { int a[10]; int i ,sum=0,ave; for (i=0;i<10;i++) scanf("%d",&a[i]); /*类型说明符 数组名[常量表达式]
数组名为a,此数组有10个整型元素*/
/* a[0], a[1], a[2], a[3], a[4]
3. 如果输入多个字符串,则可用空格隔开
char str1[20],str2[20],str3[20]; scanf(“%s%s%s”,str1,str2,str3); 输入为 How are you str1中为“How”, str2 中为“are”, str3中为 “you”。
7.3.3字符数组举例: 从键盘输入一行字符串(<20),求字符串中 小写字母的个数。7-6.c main() {char str[20],len=0,i; 求这个字符串 scanf ("%s",str); 的长度? for (i=0; str[i]!='\0';i++) if (str[i]>='a'&&str[i]<='z') len++; printf ("\n%d",len); }
1 2 3 4 5 6 7 8 9 a[8] 10 a[9]
a[0] a[1] a[2] a[3] a[4]
a[5] a[6] a[7]
2. 不允许对数组的大小作动态定义,即数组的大 小不能是变量。 例如:下面是不合法的: int n; float a[n]; 3. 数组元素的使用与变量是一样的。可以赋值, 也可作各种运算,还可以输入和输出。 例如:a [0]=1 ; a[1]=a[0]型_char、实 型_float)的数据外, C语言还提供了构造类型 的数据,它们有:数组类型、结构体类型、共用 体类型。构造类型数据是由基本类型数据按一定 规则组成的。

【C语言】第七章作业

【C语言】第七章作业
修改源程序,把primer函数的定义放在main函数 之后,编译程。出现什么问题?如何修改?
如果要求输出100~200之间的素数,如何修改 main函数。
3.main函数实现
int main() { int i;
printf("100~200之间的素数有:"); for(i=100;i<=200;i++) if (primer(i)) printf("%d ",i);
{ printf("请输入一个大于2的整数:"); scanf("%d",&m);
} flag=primer(m); if (flag) printf("%d是素数。\n",m); else printf("%d不是素数。\n",m); return 0; }
3.运行程序
输入测试数据:17 输入测试数据:34 输入测试数据:2 输入测试数据:1 输入测试数据:0 分别测试程序的正确性。
convert(i); }运行结果是什么?
最小公倍数=(i*j)/最大公约数
1.最大公约数函数实现
int gongyue(int i,int j) { int t,r; if (j>i)
{t=i;i=j;j=t;} while( (r=i%j)!=0) {
i=j; j=r; } return(j); }
1.最小公倍数函数实现
int gongbei(int i,int j,int h) { return(i*j/h); }
9.运行程序
输入测试数据: I am No.201002,You are No.201003! 检测程序的正确性。 正确结果: 字母个数是:13 数字个数是:12 空格个数是:4 其它字符个数是:4

南昌大学第七章数组答案

南昌大学第七章数组答案

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};A.1DB.3C.9D.A. B.\"c:\\abc.dat\" C."c:\abc.dat" D."c:\\abc.dat"A. B.C. D.A. B.C. D.A. a[2][4]B. a[lC. a[l+l][0]D. a(2)(1) 确定A. a[0][2*1]B. a[l][3]C. a[4-2][0]D. a[0][4]A. 2B. 3C. 4D.A. 3 5 7B. 3 6 9C. 1 5 9 D 1 4 7A. j*m+iB. i*m+jC. i*m+j-1D. i*m+j+1 确定A. B.C. D.A.1DB.3C.9D.A. B.\"c:\\abc.dat\" C."c:\abc.dat" D."c:\\abc.dat"A. if(s1>s2)B. if(strcmp(s1,s2))C. if(strcmp(s2,s1)>O)D. if(strcmp(s1A. B.C. D.A. int a[3][ ];B. float a(3C. double a[1][4];D. float a(3)(4);A. a[2][4]B. a[lC. a[l+l][0]D. a(2)(1)A. 2B. 3C. 4D.A. 3 5 7B. 3 6 9C. 1 5 9 D 1 4 7A BC DA BC DA BC DA BC DA BD C整体赋值A BC DA BC DA BC DA BC DA BC DA BCD 值A B C DA B C DA B C DA B C DA) abcdefA) abcdA) abcdA) abcdef确定[C] 教师批改:36、给出以下定义:char x[ ]="abcdefg";char y[ ]={…a…,…b…,…c…,…d…,…e…,…f…,…g…};则正确的叙述为A)数组X和数组Y等价B)数组x和数组Y的长度相同C)数组X的长度大于数组Y的长度D)数组X的长度小于数组Y的长度确定[C] 教师批改:37、设有static char str[ ]="Beijing";则执行printf("%d\n", strlen(strcpy(str,"China")));后的输出结果为A) 5 B) 7C) 12 D) 14确定[A] 教师批改:38、请选出以下程序段的输出结果#include<stdio.h>main(){ char sl[10], s2[10], s3[10], s4[10];scanf("%s%s",s1,s2); gets(s3); gets(s4);puts(s1); puts(s2); puts(s3); puts(s4);}输入数据如下:(此处<CR>代表回车符)aaaa bbbb<CR>A bbbbB bbbbC) aaaa bbbbD ccccA BC DA不可以直接用数组名对数组进行整体输入或输出BC数组元素的下标超出所定义的下标范围时,系统将给出DA BC DA B C DA B C DA B C DA BC DA B C D。

第7章 数组 复习

第7章 数组 复习

第7章数组1.下列数组声明中,正确的是()。

(a)int a[5]={0}; (b) int a[ ]={0 1 2};(c) int a[5]=0; (d) int a[ ];2.下列数组声明中,正确的是()。

(a)int a[10];(b)int n = 10, a[n];(c)int N =10; int a[N];(d)int n; scanf(" %d ", &n); int a[n];3.已知int a[10];则对a数组元素引用不正确的是()。

(a)a[10] (b) a[3+5] (c) a[10-10](d) a[5]4.以下数组定义中,正确的是()。

(a)int a[2][3] = {1, 2, 3, 4, 5, 6, 7};(b)int a[ ][ ] = {{1, 2, 3},{4, 5, 6},{7, 8,9}};(c)int a[2][ ] = {1, 2, 3, 4, 5, 6};(d)int a[ ][4] = {6};5.若有定义: int a[3] = {0, 1, 2}; 则a[1]的值为()。

(a)0 (b) 1 (c) 2 (d)36.若有定义:inta[3][4]={{1,2},{0},{1,2,3}};则a[1][1]的值为()。

(a)0 (b) {1,2} (c) 1 (d)37.有如下定义int a[ ][3] = {1,2,3,4,5,6,7,8};则数组a 的行数是()。

(a) 2 (b) 3 (c) 4 (d) 无法确定的8.getchar( )函数的功能是从终端输入()。

(a)一个整型变量值(b) 一个实型变量值(c)多个字符(d) 一个字符9.设已定义chars[ ]="\"Name\\Address\023\n";,则字符串所占的字节数是()。

(a)19 (b) 15 (c) 18(d)1410.以下程序段运行后屏幕输出为()。

C语言--数组上机及答案

C语言--数组上机及答案

程序一:传值void swap(int a,int b){ int t;t=a; a=b; b=t;}main(){ int x=10,y=20;printf(“%d,%d\n”,x,y);swap(x,y);printf(“%d,%d\n”,x,y);}程序二:传地址void swap(int *a,int *b){ int t;t=*a; *a=*b; *b=t;}main(){ int x=10,y=20;printf(“%d,%d\n”,x,y);swap(&x,&y);printf(“%d,%d\n”,x,y);}上机练习1:现在一个数组存放10个整型数据(可以有相同),要求用户输入一个数,然后把数组中与其输入相同的数删除。

然后输出结果。

上机练习2:数组中有10个数,要求对数组进行排序,输出结果。

上机练习3:有10个学生的成绩存在数组中,请统计大于等于平均成绩的人数。

上机练习4:有10个学生的成绩存在数组中,请统计最高分,最低分,并将最高分和最低分学生的下标输出到屏幕上。

上机练习5:求a[M][N]数组四周的和。

#include <stdio.h>#define M 4#define N 5main( ){ int a[M][N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};…….}程序一:传值void swap(int a,int b){ int t;t=a; a=b; b=t;}main(){ int x=10,y=20;printf(“%d,%d\n”,x,y);swap(x,y);printf(“%d,%d\n”,x,y);}程序二:传地址void swap(int *a,int *b){ int t;t=*a; *a=*b; *b=t;}main(){ int x=10,y=20;printf(“%d,%d\n”,x,y);swap(&x,&y);printf(“%d,%d\n”,x,y);}上机练习1:现在一个数组存放10个整型数据(可以有相同),要求用户输入一个数,然后把数组中与其输入相同的数删除。

C语言程序设计上机指导第7章答案

C语言程序设计上机指导第7章答案

C语言程序设计上机指导第7章答案上机报告课程名称计算机程序设计基础(C语言) 专业班级电气1044姓名学号100441上机题目二维数组程序设计实验室机房同组人数 1 实验时间年月日成绩指导教师一、实验目的1、掌握二维数组的定义、引用和初始化方法。

2、掌握数组在实际问题中的应用。

二、实验内容(均要求给出运行结果)1、改错题(1)以下程序分别统计字符串str中大写字母和小写字母的个数,请改正程序中的错误。

#include “stdio.h”#include “string.h”void main(){ char str[80];int a,i;gets(str);for(i=0;str[i]!=’.’;i++){ if(str[i]>=’a’&& str[i]<=’z’) a++;if(str[i]>=’A’&& str[i]<=’Z’) a++;}printf(“%d,%d\n”, a, b);}程序清单:#include "stdio.h"#include "string.h"scanf(“%d”,&a[i][j]);for(i=1; i<n; i++)for(j=1; j<n; j++)printf(“%3d”, a[n][n]);printf(“\n”);}程序清单:#include "stdio.h"void main(){int a[3][3],i,j,n;scanf("%d",&n);for(i=0; i<n;i++)for(j=0; j<n; j++)scanf("%d",&a[i][j]);for(i=0; i<n; i++){for(j=0; j<n; j++)printf("%3d", a[i][j]); printf("\n");}}运行结果:2、填空题(1)以下程序是将字符串s中所有的空格字符删去,请填空。

C语言(第七章数组)

C语言(第七章数组)

对部分元素赋初值(前面的连续元素)。如: int b[10]={0,1,2,3,4};
表示数组元素的值为:
b[0]=0; b[1]=1; b[2]=2; b[3]=3; b[4]=4; 后5个元素的初值为0。
注意:不能只对不连续部分元素或后面的连续
元素赋初值。 语句: int a[10]={, , , , ,1,2,3,4,5};
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]; } printf("\n"); } printf("array b:\n"); for (i=0; i<=2; i++) { for (j=0; j<=1; j++) printf("%5d", b[i]j]); printf("\n"); } }
运行结果如下:
1
1
2
3
5
8
89
13
144
21
133
34
377
55
610
987
1597
1584
4181
6765
四、简单预处理指令
1. 指令格式:
#define 符号常量
2. 指令作用
文本串
用整型表达式替换程序中所有的符号常量。

上机练习_数组

上机练习_数组
上机练习:数组
课堂作业要求: 1、每个同学第一节课现场独立完成第一道题; 2、老师检查结果、打分; 3、第二道题为提高题。
字符数组和字符串:定义、相同点、不同点 例1 字符转化。要求从键盘输入一行字符串,存入 一字符串中,然后把该字符串内容复制到另外一个 字符数组中,最后输出处理好的字符数组。 例如: 例如: 键盘输入:I 键盘输入:I am a student. 存储:str1[]=“I student.” 存储:str1[]= I am a student. 复制:str2[]=“I student.” 复制:str2[]= I am a student. 要求:首先用循环语句实现,然后用字符串处理函 数实现。
字符串应用 输入一行字符,统计其中有多少个单词, 例2 输入一行字符,统计其中有多少个单词,单词之间 用空格分隔开。程Байду номын сангаас实现框图如下。 用空格分隔开。程序实现框图如下。

第7章--c++数组

第7章--c++数组

第七章数组数组是相同数据类型数据的集合。

通过数组名和下标可以访问数组中指定的元素。

7.1 一维数组一维数组只有一个下标,它可用于表示一个线性的数据队列。

在程序设计中要先声明数组,对它进行初始化,然后才能使用数组。

7.1.1 一维数组的声明一维数组的声明要解决三个问题。

第一、确定数组的数据类型。

第二、给数组定义一个名字,以便在程序中使用。

第三、指明数组的大小,也就是数组中元素的个数。

声明一维数组的一般形式如下:数据类型数组名[常量表达式]={初值表};7.1.2 一维数组的使用访问一维数组元素的一般形式是:数组名[下标表达式]下标表达式是一个整型表达式。

它是一个由整型常量、整型变量以及运算符组成的式子,也可以是返回值为整型值的函数调用。

C++规定,数组的下标从0开始,因此对于大小为N的一维数组,其下标的取值范围是0到N-1,其中0称为数组的下界,N-1称为数组的上界。

下标表达式的值应该在下标的取值范围之内,否则会产生不可预计的问题。

7.1.3一维数组的初始化通过在初值表中给出初值可以对数组元素进行初始化。

初值用一对花括号界定,初值之间用逗号进行分隔。

例7-4 int y[5]={1,2,3,4,5};1,2,3,4,5为初值表,该语句把y[0]、y[1]、y[2]、y[3]、y[4] 分别初始化为1、2、3、4、5。

通过初值表中初值的个数决定数组的大小,省略常量表达式。

例7-5 double d[]={1.5,2.3,5.6};该声明语句省略了常量表达式,数组的长度由初值表中初值的个数决定。

它说明了有三个元素的双精度数组d。

并且d[0]=1.5, d[1]=2.3, d[2]=5.6。

7.1.4 数组的运算以及数组作为函数参数1 数组的运算数组的运算最终都要归结到对数组元素的操作。

因此,数组的运算与其元素的数据类型以及系统或程序对该数据类型提供何种操作有关。

对于int、float、以及double类型的数组,赋值运算、各种算术运算、++、--等都是允许的,原因是C++提供的这些操作的操作语义支持这些数据类型的运算。

7章数组-上机练习题 -

7章数组-上机练习题 -

第七章数组——上机练习题
1、求20个整数的最大值、最小值以及平均值;
2、对N个整数进行升序或降序排列,N采用符号常量的形式定义。

3、编写程序,将数组a 内容按颠倒的次序重放。

4、求一个5*5的整型矩阵的左右两条对角线之和。

5、求一个已知二维数组中的数值最小的那个元素的值,并输出该元素所在的行号和列号。

6. 输出以下的杨辉三角形(要求输出10行)
【提示:分析各元素与其上一行元素在数值上的关系,以及它们的行列关系】7.从键盘上输入2个字符串,比较它们的大小,要求输出时按以下格式要求:
字符串1“……..”> (或< 或=) 字符串2“……..”
8.输入5个字符串,找出其中最小的那个字符串并输出。

9.输入5个字符串,找出其中长度最长的那个字符串并输出。

10.有一篇文章,共有3行文字,每行80个字符,要求分别统计出英文大写字母、英文小写字母、数字、空格以及其他字符的个数。

【选做题】已有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入到数组中。

【注意:定义数组的大小】
【提示:先判断输入的那个数num是否大于数组中的最大数,若大于将其放在数组的末尾;如果不大于,利用for循环将其与数组的各个元素a[i]比较,若某个元素a[i]大于此数num,将此数num放在a[i]的位置,并将第i个元素之后的所有元素下标依次加1,此时借用另一个中间变量j 】。

数据结构第三版第七章作业参考答案

数据结构第三版第七章作业参考答案

//栈指针置初值
do { while (t)
//将 t 的所有左结点进栈
{ top++;
St[top]=t;
t=t->lchild;
} p=NULL; flag=1; while (top!=-1 && flag)
//p 指e当前结点的前一个已fg



//h置 t 的fgij为已fg过
{ t=St[top]; if (t->rchild==p) { if (t==s)
7.1 设二叉树 bt 的一种存储结构如下:
1 2 3 4 5 6 7 8 9 10 lchild 0 0 2 3 7 5 8 0 10 1 data j h f d b a c e g i rchild 0 0 0 9 4 0 0 0 0 0
其中,bt 为树根结点指针,lchild、rchild 分别为结点的左、右孩子指针域,
Ctree(t->lchild,A,2*i);
//递归构造*t 的左子树
Ctree(t->rchild,A,2*i+1); //递归构造*t 的右子树
}
}
7.5 设计一个算法,将一棵以二叉链方式存储的二叉树 t 按顺序方式存储到数组 A 中。
解:由二叉树的顺序存储方式可知本题的递归模型f()如下:
f(t,A,i):A[i]=' ';
//顺序队首尾指针 //cm=1 表示二叉树为完全二叉树 //bj=1 表示到目前为止所有结点均有左右孩子
if (b!=NULL)
{ rear++;
Qu[rear]=b;
while (first!=rear) { first++;

c语言程序设计7_数组上机题分析

c语言程序设计7_数组上机题分析
Submits : 986 | Solved : 302 ★ ★ ★ ★ ★
Description 输入n(n<100)个整数,不排序直接查找并输出 所有重复的数字。

Sample Input 75432124 Sample Output 42
8

P1178 寻找重复数字
: 986 | Solved : 302 ★ ★ ★ ★ ★ Wrong-1 #define M Submits 100 程序 int main() { int n,a[M],i,j,count=0,b[M]={0},c=-1,d[M]; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&a[i]); 754321244 for(i=0;i<n;i++) for(j=i+1;j<n;j++) i j if(a[j]==a[i]) 000000000 { b[j]=1; if(b[i]==0) { c+=1; d[c]=a[i]; count++; break; } } if(count==0) printf("-1\n"); for(c=0;c<count-1;c++) printf("%d ",d[c]); printf("%d\n",d[c]); return 0; }
Input
输入一个整数n,表示这个测试实例的数值的个数,跟着输 入这n个实数。
Output
输出除去最大数和最小数后,剩下的数据的平均数,结果保 留2位小数。
17

C语言程序设计(第三版)谭浩强习题与答案 第七章

C语言程序设计(第三版)谭浩强习题与答案   第七章
printf("\n");}
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;

资料:《数组》上机实践内容

资料:《数组》上机实践内容

《数组》上机实践内容一、根据课上讲解内容,完成演示示例和课堂练习1、求数组最大值需求说明:使用数组和循环获取5位学员的成绩,使用int max;变量存储最大值。

以课上讲解的“打擂台”的思路使用循环求出数组的最大值,并如图所示输出。

2、向数组中插入一个元素需求说明:按照如下操作向数组中插入元素,实现效果如图所示:(1)将成绩保存在数组中;(2)通过比较找到插入位置;(3)该位置元素往后移一位;(4)插入新成绩;3、获取最低价手机价格需求说明:按照如下步骤:(1)定义数组存储价格,并利用循环输入;(2)定义变量min保存当前的最低价;(3)将min和数组中的其余元素依次比较;求出4家店的最低手机价格,显示效果如下图所示。

4、冒泡排序需求说明:冒泡排序时注意以下关键点:(1)5个数字如何存放:(数组,数组.length = 5)(2)控制比较多少轮:(外层循环,循环变量 i)(3)控制每轮比较多少次:(内层循环,循环变量 j)(4)交换数据;使用二重循环实现如图所示的冒泡排序。

5、冒泡排列学员成绩需求说明:在作业4的基础上,使用冒泡排序对键盘输入的5名学员成绩进行降序排列,排列效果如图所示。

6、Arrays类排序数组需求说明:正确使用Arrays的sort()方法为数组进行排序,效果如下图所示。

降序排列的写法可以参考for(int i=scores.length-1;i>=0;i--){}7、Arrays类排列字符需求说明:正确使用Arrays类的sort()方法排列一组字符,并使用Arrays 类的binarySearch(array, val)方法查找某个特殊字符在升序后数组中的位置,输出效果如下图所示。

8、二维数组计算班级成绩需求说明:根据3个班各5名学生某门课程的成绩,正确使用二维数组计算如图所示3个班各自的总成绩。

在这个程序中二维数组的第一维是班级,第二维是各班级的学生,与之对应的双重循环中,外层循环i为班级,内层循环j为各班级的学生。

计算机组成原理第7章作业答案

计算机组成原理第7章作业答案

(6)六种寻址方式中,立即寻址 指令执行时间最短,因为此时不需寻 址;
间接寻址指令执行时间最长,因 为寻址操作需访存一次到多次;
相对寻址便于程序浮动,因为此
时操作数位置可随程序存储区的变动 而改变,总是相对于程序一段距离;
变址寻址最适合处理数组问题,
因为此时变址值可自动修改而不需要 修改程序。
(7)为使指令寻址范围可扩大到 4M,需要有效地址22位,此时可将单 字长一地址指令的格式改为双字长, 如下图示:
当(N/26 + M/212 ) 1时,K最大, 则二地址指令最多有:
Kmax=16-1=15种(只留一种编码作 扩展标志用。)
讨论:此时,一地址指令条数为: N=(24 - K)×26 - M/26;
( M/26向上取整)。 零地址指令条数为: M = 216 - 212K - 26N; 当K最大时(K=15),一地址指 令最多有: Nmax=64 - 1=63种; 零地址指令最多有: Mmax=64种
7. 设指令字长为16位,采用扩展操 作码技术,每个操作数的地址为6位。 如果定义了13条二地址指令,试问还可 安排多少条一地址指令?
解:二地址指令格式如下:
4
6
6
OP
A1
A2
设二地址指令格式为该指令系统的 基本格式,4位操作码共有16种编码, 其中13种用来定义二地址指令,还剩3 种可用作扩展标志。如不考虑零地址指 令,该指令系统最多还能安排:
A
取指令(省)
EA MAR,读
寻址计算:
EA=(PC)-5 =4000H+FFFBH =3FFBH
A
M(EA) MDR
(ACC)+(MDR) ACC

c语言复习题及答案第七章数组

c语言复习题及答案第七章数组

第七章数组(8学时)学习目的与要求:1、 重点掌握一维数组的定义和引用;2、 基本掌握二维数组的定义和引用;3、 重点掌握字符型数组的定义与引用;4、 能正确使用字符串处理函数;5、 学会使用数组解决实际问题。

重点:1、 一维数组的定义与引用;2、 二维数组的定义与引用;3、 字符数组的定义与引用;第1讲知识归纳:1、一维数组的定义:类型说明符数组名[常量表达式];(1) (1)数组名后必须用方括弧[],用其他括弧均错误 ;(2) 方括弧中的常量表达式表示数组的元素个数;(3) 方括弧中的常量表达式,必须是能计算出具体数值,且不改变的常量,不能是变量;二、填空题1、下面fun 函数的功能是将形参 x 的值转换成二进制数,所得二进制数的每一位数放在一维数组中返回,二进制数的最低位放在下标为0的元素中,其它依此类推。

请填空。

fun(int x,int b[]){ int k=0,r;do{ r=x% 2;b[k++]=r;x/= 2j } while(x); }( 1996 年 4 月) 2 22、以下程序用来对从键盘上输入的两个字符串进行比较,然后输出两个字符串中第一个不相2、一维数组的引用:数组名[下标r ■」 \ for ( i =0 ; i<7 ; i printf((2)将整个字符串一次输入输出,用格式符 如^ chaLG1f10]; scanf (“ %s ” , c1); int num[N];(2003 年 9 月)25、有以下程序main (){ char a[ ]={ ‘a ' , ‘b ' , ‘c ' , ‘d ',i=sizeof(a); j=strle n( a);printf( “%d,%d b ” i,j);} 程序运行后的输出结果是()。

A ) 9,9B )8,9(2002 年 9 月) 21、C 22、C 23、D 24、B 25、D “ %c , c1[ i ]); %s ; 100]; D) int N=100; e ' , ‘f ' , ‘g ' , ‘h ' , ‘ 0' }; int i,j; C ) 1, 8 D ) 9, 8同字符的ASCII码之差。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第七章数组通过本章实验作业应达目标1.学习并掌握一维数组与二维数组的定义、使用及初始化方法。

2.熟练掌握字符数组和字符串的使用方法。

3.掌握数组的一种排序算法。

4.学会用数组保存多个相关的同类数据,并对这一组数据进行各类操作。

本章上交作业程序7_1.c、7_3.c、7_5.c、7_7.c上传至211.64.135.121/casp。

实验一一维数组的定义和简单应用【实验目的】学会定义一维数组,掌握一维数组的遍历操作,掌握在一组数组中求最大值、最小值的方法。

【实验内容】从键盘读入5个成绩到一个数组中,求其中的最大值,最小值和平均成绩。

在屏幕上显示输入成绩的提示信息,用键盘输入一个成绩,接着提示输入下一个,直到结束。

以7_1.c命名本程序并上交。

程序运行界面【实验提示】求最大(小)值通常用“打擂台”的方法。

首先设计两个变量,如max和min分别用来存放最大值和最小值,并将数组的首元素赋给这两个变量,这就是到目前为止的最大(小)值,然后利用循环依次比较其他的元素,总是将当前最大(小)值赋给max和min,直至比较到最后,max和min中的数据就是最大值和最小值。

求平均值还要设置一个变量sum,用来累加各元素的值。

实验二一维数组的排序【实验目的】熟练掌握一维数组三种基本排序方法:选择法,冒泡法,比较法。

【实验内容】从键盘上接收10个成绩,存放到一个一维数组score中,分别利用三种排序方法,将数组从小到大排序并在屏幕上显示排序结果。

分别以7_2_1.c、7_2_2.c和7_2_3.c命名三个程序。

【实验提示】所谓排序是指把一组杂乱无章的数据按照大小顺序排列。

将被排序的n个数据存放在一个数组中, 假如按升序排列。

我们将数组定义为a[n],数据存放在a[0] 到 a[n-1] 中。

1.比较排序法将a[0]与a[1]比较,若a[1]<a[0],则a[0]与a[1]交换,否则不变,再将a[0]与a[2]比较,同样小者交换到a[0],……如此比较下去至到a[0]与a[n-1]比较,小者放到a[0]中,第一轮比较n-1次,a[0]中的值就是n个数中最小者。

然后a[1]再与a[2]比较,方法同上,小者交换到a[1],……第二轮比较n-2次,这样a[1]也就确定了,第三轮a[2]与其后面的数比较,……,共比较n-1轮以后,数组中各元素的值就按升序排列好。

2.选择排序法选择排序法就是对比较法的改进。

它的算法思想是:仍然是a[i]与其后的a[j]进行比较,但是当比较出a[j]小于a[i]时,先不急于交换(因为a[j]并不一定是这一轮中最小的,可能还有更小的),用一个变量p记下j的下标(即第几个数),继续比较下去,将最小数的下标j存放在p中,一轮比较完毕,a[p]便是最小的,这样只要a[i]与a[j]交换即可。

一轮只交换一次,大大提高了程序的效率. 其中,一维数组既是数据的存放位置,也是交换的场所,这样可以很好的利用数据的内存空间。

3.冒泡排序法将要排序的数放在某一个数组中,如a[0]~a[n-1],然后比较数组相邻两元素的值,即a[0]与a[1]比较,假如按升序排列,且a[0]>a[1],则二者交换,否则不变,a[1]再与a[2]比较,前者大就交换,…,依次两两比较至到a[n-2]与a[n-1]比较,经过一轮以后,最大者“沉”到了最后,小数往上“冒”,所以得名“冒泡法”。

第二轮比较数组的前n-1个,即a[0]~a[n-2] 。

重复此过程,直到所有的元素比较完毕。

实验三一维数组元素的调换【实验目的】进一步加强对数组的应用。

【实验内容】找出数组中的最小数和次小数,并把最小数和a[0]中的数对调、次小数和a[1]中的数对调,其余数据位置不变。

例如,程序运行时若输入:2 4 6 11 3 9 7 0 5 8,则输出:0 2 6 11 3 9 7 4 5 8。

以7_3.c 命名本程序并上交,部分程序如下。

#define N 10main(){int a[N],i;for(i=0;i<N;i++)scanf("%d",__________ );………… /* 编写程序,实现功能 */for(i=0;i<N;i++)printf("%d ",a[i]);printf("\n");}【实验提示】本题既可以套用选择法排序,只排序两轮。

也可以两次求最值再互换。

实验四一维数组的查找【实验目的】掌握数组的基本查找方法:顺序法和折半查找法。

【实验提示】查找是计算机中经常要遇到的一种操作,其含义是在一组数据中查找到所查数据的位置。

比较简单的是顺序查找法,效率较高的是折半查找法。

1.顺序查找法顺序查找也叫线性查找,当一组数据无序时,一般采用顺序查找。

其基本思想是:从数据集的第一个元素开始,依次将关键字x与数据集中的每一个元素进行比较,直到找到要找的数据。

或者数据集遍历完毕,没有找到匹配元素。

2.折半查找法若是已经排好序的数据,最好采用折半查找法。

折半查找法的基本思想是:首先取第一个元素a[low]和最后一个元素a[high]中间的那个元素a[mid]与x比较(其中mid=(low+high)/2 ),如果a[mid]==x则正好找到,否则要看x比a [mid]大还是小,因假设数组已按降序排好,则当x>a[mid]时,则要查找的x在数组的前半部分,这样数组的后半部分就不用去查找了,查找范围缩小为一半。

然后在前半部分再找一个中点,与x比较,如此一半一半缩小,如果x在数组当中,终能找到x==a[mid]。

由于每次缩小近一半的范围,所以数组的上、下界是要变化的,不妨用变量low、high、mid分别表示数组当前的上界、下界和中点。

问题:如果x不在数组当中,最终怎样知道?【实验内容】在一个已经排好序的数组(升序)中,从键盘上输入某数x,查找x是否在数组内,若在,则在屏幕上输出其下标值。

若不存在,则在屏幕上显示“Not found!”。

假设数组a[10] 的每个元素分别为{1,2,3,4,6,7,9,10,11,15},若从键盘上读入数x为9,则在屏幕上输出“the number’s position is 7”,若读入数为8,则屏幕上输出“Not found!”。

1. 顺序查找法编写的程序如下,请完善程序,并以7_4_1.c命名本程序。

# include<stdio.h>#define N 10void main( ){int a[N]={1,2,3,4,6,7,9,10,11,15};int i,x;scanf("%d", &x);for(i=0;i<N;i++)if (________ ){printf("the number's position is %d\n",i+1);_________ ;}if(i==N)printf("Not found!\n");}2. 折半查找法编写的程序如下,请完善程序,并以7_4_2.c命名本程序。

#include<stdio.h>#define N 10void main( ){int a[N]={1,2,3,4,6,7,9,10,11,15};int low, high, mid, i, x;scanf("%d", &x );for(low=0,high=N-1;; ){mid =_________ ;if(a[mid]==x){printf("the number's position is %d\n",mid+1);break;}if( _________ ) { printf("Not found\n"); _________ ; }if (a[mid]< x ) low=mid+1;if (a[mid]> x ) _________ ;}}【讨论与思考】比较一下两种两种查找方法的优缺点。

实验五统计指定字符个数【实验目的】熟悉字符串的存取和结束标记。

【实验内容】编写程序从键盘上输入一个字符串和一个字符,统计所指定字符的个数。

例如:从键盘输入字符串为"abaaAAbcaaaca",指定字符为'a',则在屏幕上输出结果是7。

以7_5.c命名本程序并上交。

下面给出程序的部分代码。

#include <stdio.h>void main( ){char a[200], b;int num;puts("Please inp ut a string:");gets(a);puts("Please enter a character:");b=getchar( );………… /* 编写程序,实现功能 */pirntf(“The result is %d\n”, num);}实验六从字符串中删字符【实验目的】熟悉字符串的存取和结束标记。

并掌握从一维数组中删除元素的方法。

【实验内容】编写程序从键盘上输入一个字符串和一个字符,实现从字符串中删除该字符。

例如:从键盘输入字符串为"abaaAAbcaaaca",要删除的字符为'a',则在屏幕上输出"bAAbcc"。

下面给出程序的部分代码。

请完善程序,并以7_6.c命名本程序。

void main( ){char s[20], ch;int i,j;printf("Please input a string:\n");gets(s);printf("Please input a character:\n");ch=getchar();for( i=0; _________; i++ ){ …………/* 编写程序,实现功能*/}puts(s);}【实验提示】要考虑被删除的字符在字符串出现多次,而且连续排列的情况。

实验七数据加密【实验目的】学习通过字符数据的ASCII值进行加密的方法。

【实验内容】某个单位要传递机密数据,数据是10位以内的整数(从键盘输入)。

在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用该和除以10的余数代替该数字。

在屏幕上显示加密后的数字。

以7_7.c命名本程序并上交。

例如:输入数据327895123,显示结果为:872340678。

【实验提示】1.应用字符数组来解决该问题。

2.主程序中将各位数字以字符的形式存放,在加密的过程中应该注意‘0’跟0 的区别。

相关文档
最新文档