第4章数组上机作业汇总文档格式.docx
- 文档编号:21623102
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:17
- 大小:43.17KB
第4章数组上机作业汇总文档格式.docx
《第4章数组上机作业汇总文档格式.docx》由会员分享,可在线阅读,更多相关《第4章数组上机作业汇总文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
a[1],则二者交换,否则不变,a[1]再与a[2]比较,前者大就交换,…,依次两两比较至到a[n-2]与a[n-1]比较,经过一轮以后,最大者“沉”到了最后,小数往上“冒”,所以得名“冒泡法”。
第二轮比较数组的前n-1个,即a[0]~a[n-2]。
重复此过程,直到所有的元素比较完毕。
实验三一维数组元素的调换
进一步加强对数组的应用。
找出数组中的最小数和次小数,并把最小数和a[0]中的数对调、次小数和a[1]中的数对调,其余数据位置不变。
例如,程序运行时若输入:
24611397058,则输出:
02611397458。
以4_3.c命名本程序并上交,部分程序如下。
#defineN10
voidmain()
{inta[N],i;
for(i=0;
i<
N;
i++)
scanf("
%d"
__________);
…………/*编写程序,实现功能*/
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是否在数组内,若在,则在屏幕上输出其下标值。
若不存在,则在屏幕上显示“Notfound!
”。
假设数组a[10]的每个元素分别为{1,2,3,4,6,7,9,10,11,15},若从键盘上读入数x为9,则在屏幕上输出“thenumber’spositionis7”,若读入数为8,则屏幕上输出“Notfound!
1.顺序查找法编写的程序如下,请完善程序,并以4_4_1.c命名本程序。
#include<
stdio.h>
voidmain()
{inta[N]={1,2,3,4,6,7,9,10,11,15};
inti,x;
scanf("
&
x);
for(i=0;
if(_________)
{printf("
thenumber'
spositionis%d\n"
i+1);
_________;
if(i==N)
Notfound!
2.折半查找法编写的程序如下,请完善程序,并以4_4_2.c命名本程序并上交。
#include<
intlow,high,mid,i,x;
x);
for(low=0,high=N-1;
;
)
{mid=_________;
if(a[mid]==x)
mid+1);
break;
if(_________){printf("
Notfound\n"
_________;
}
if(a[mid]<
x)low=mid+1;
if(a[mid]>
x)_________;
【讨论与思考】
比较一下两种两种查找方法的优缺点。
实验五二维数组使用
掌握二维数组的使用方法。
一个小组五位同学,选修了相同的4门功课。
请输入每位同学的成绩,计算每位同学的总分,找出总分最高的同学是第几号同学,最后按总分对二维数组排序,并输出排序后的每位学生信息。
以4_5.cpp或4_5.c命名本程序并上交。
每位同学的信息如下表:
学号
S1
S2
S3
S4
total
1001
45
68
78
91
1002
65
84
88
1003
92
86
1004
66
74
73
81
1005
90
70
67
示例的输入输出窗口如下:
定义的二维数组需要保存学号与总分信息。
学号可以初始化的方式记录在第0列中。
本题涉及到求最大值与排序操作。
注意,排序交换数据时需要一整行都交换。
实验六统计指定字符个数
熟悉字符串的存取和结束标记。
编写程序从键盘上输入一个字符串和一个字符,统计所指定字符的个数。
例如:
从键盘输入字符串为"
abaaAAbcaaaca"
,指定字符为'
a'
,则在屏幕上输出结果是7。
以4_6.c命名本程序。
下面给出程序的部分代码。
#include<
{chara[200],b;
intnum;
puts("
Pleaseinputastring:
"
gets(a);
Pleaseenteracharacter:
b=getchar();
pirntf(“Theresultis%d\n”,num);
实验七从字符串中删字符
并掌握从一维数组中删除元素的方法。
编写程序从键盘上输入一个字符串和一个字符,实现从字符串中删除该字符。
,要删除的字符为'
,则在屏幕上输出"
bAAbcc"
。
请完善程序,并以4_7.c命名本程序并上交。
{chars[20],ch;
inti,j;
printf("
Pleaseinputastring:
gets(s);
Pleaseinputacharacter:
ch=getchar();
for(i=0;
_________;
i++)
{…………/*编写程序,实现功能*/
puts(s);
要考虑被删除的字符在字符串出现多次,而且连续排列的情况。
实验八数据加密
学习通过字符数据的ASCII值进行加密的方法。
某个单位要传递机密数据,数据是一组的整数数字(从键盘输入,长度不大于30个字符)。
在传递过程中是加密的,加密规则如下:
每位数字都加上5,然后用该和除以10的余数代替该数字。
在屏幕上显示加密后的数字。
以4_8.c命名本程序并上交。
输入数据327895123,
显示结果为:
872340678。
1.应用字符数组来解决该问题。
2.主程序中将各位数字以字符的形式存放,在加密的过程中应该注意‘0’跟0的区别。
实验九将数字字符串转换为相应实数
学习数字字符串与数值之间的转换问题。
将键盘上输入的一个数字字符串转换为相应的实数,在屏幕上输出。
转换时遇到第一个非数字字符时停止(不包含第一个小数点和起始的负号-)。
若输入字符串“123a45”,得到实数x=123.0;
若输入字符串“-123.45.765”,得到实数x=-123.45;
若输入字符串“123-56.78”,得到实数x=123.0;
若输入字符串“-.123”,得到实数x=-0.123。
下面给出不考虑负数的程序,请在下述程序的基础上补充完善为也能考虑负数的程序,并以4_9.c命名本程序。
voidmain()
{charstr[100];
inti,sign;
doublex,k;
gets(str);
/*str中存放的是一个数字字符串*/
sign=1;
k=0.1;
/*sign是一个标志,标识是否出现了第一个小数点*/
x=0;
str[i];
{if(sign==1)
if(str[i]>
='
0'
&
str[i]<
9'
)
x=x*10+(str[i]-48);
elseif(str[i]=='
.'
sign=0;
elsebreak;
elseif(str[i]>
{x+=(str[i]-48)*k;
k*=0.1;
}
elsebreak;
x=%lf\n"
x);
/*x中记录的是转换后得到的数值*/
只有起始的负号-才能作为负数标志,中间的-只能被看做非法字符,使转换结束。
实验十万年历问题
学会使用二维数组解决万年历问题。
已知1900年12月31号是星期一,编写程序,键盘输入1901~2300年内任意一个日期,程序输出这一天是星期几。
以4_10.c命名本程序。
1.第四章中有一个实验要求是给出当前日期,求出该日期是本年度中的第几天的程序。
大家可以回想以下那个程序中的case语句对应的每一个天数是如何得到的,我们将这个问题用数组来解决。
2.假设我们要求x年y月z日是星期几,必须知道两个日期相间隔的天数。
3.使用二维数组来存放每月的天数,第一行存放平年的每月天数;
第二行存放闰年的各月天数。
3.普通年份有365天,365%7=1;
所以求总天数时可以不必将年份差×
365天。
既然是万年历问题,就应能测任一日期。
如果要求能够测任何一日期(1900年之前和之后的任何一天)为周几,本题应如何处理?
注意前推和后推的方法有所不同。
第二部分结构体
通过本章实验作业应达目标
1.掌握结构类型变量与数组的定义和使用。
2.掌握使用结构变量名访问结构成员的方法。
实验一结构体类型的定义
理解并掌握结构体类型的概念和定义方法,测试这几种自定义类型变量所占内存空间的字节数,掌握各类变量的定义和引用。
定义一个结构体类型,其成员包括:
学号、姓名、性别(char型)、年龄、高数、计算机、物理、英语、总分、平均分。
同时定义一个该类型的变量,保存一个学生信息:
203212022李明f2187969285。
计算并保存该学生的总分与平均分。
请以4_11.c命名本程序并上交。
实验二结构体数组的管理程序(综合类)
掌握使用结构体数组组织与管理数据的方法。
以本章“实验一结构体类型的定义”中的结构体类型定义一个结构体数组,编写程序实现以下功能:
1.从键盘输入表4-1中数据给数组。
表4-1用以创建结构体数组的原始数据
姓名
性别
年龄
高数
计算机
物理
英语
总分
平均分
Jack
m
23
34
56
12
Sam
f
87
54
Marry
David
98
44
2.计算每个同学的总分和平均分,并在对应的结构体中填上数据。
3.根据每位学生的总分降序排列。
4.输出数组中的数据,每位同学一行。
请以4_12.c命名本程序并上交。
结构体类型在函数外定义,结构体数组在main()中定义。
三个函数都是对main()中定义的数组进行操作,因而函数的参数必须是指向结构体类型的指针,使用指针访问一维数组。
如果还未学习函数与指针,可以在main()中实现所有的功能。
功能段请加注释信息。
扩充编写排序程序,能按任意字段排序。
(怎样根据用户的键盘输入决定排序关键字?
如果我们需要对表中的数据进行增删应怎样操作?
体会使用数组组织数据的局限(增删不易,容量不能实现动态指定)。
第一部分数组习题
1.定义如下变量和数组:
intk;
inta[3][3]={1,2,3,4,5,6,7,8,9};
则下面语句的输出结果是()
for(k=0;
k<
3;
k++)printf("%d",a[k][2-k]);
A、357B、369C、159D、147
2.执行下面的程序段后,变量k中的值为()
intk=3,s[2];
s[0]=k;
k=s[1]*10;
A、不定值B、33C、30D、10
3.设有数组定义:
chararray[]="
China"
;
则数组array所占的空间为()
A、4个字节B、5个字节C、6个字节 D、7个字节
4.如下程序的输出结果是()
{intn[5]={0,0,0},i,k=2;
k;
i++) n[i]=n[i]+1;
%d\n"
n[k]);
A、不确定的值B、2C、1D、0
5.有如下程序
{inta[3][3]={{1,2},{3,4},{5,6}},i,j,s=0;
for(i=1;
for(j=0;
j<
=i;
j++) s+=a[i][j];
s);
该程序的输出结果是()
A、18B、19C、20D、21
6.以下程序的输出结果是()
{int i,x[3][3]={1,2,3,4,5,6,7,8,9};
i++) printf("
%d,"
x[i][2-i]);
A、1,5,9,B、1,4,7,C、3,5,7,D、3,6,9,
7.当执行下面的程序时,如果输入ABC,则输出结果是()
#include"
stdio.h"
string.h"
{charss[10]="
1,2,3,4,5"
gets(ss);
strcat(ss,"
6789"
%s\n"
ss);
A、ABC6789B、ABC67C、12345ABC6D、ABC456789
8.以下程序段的输出结果是()
chars[]="
\\141\141abc\t"
strlen(s));
A、9B、12C、13D、14
9.下面是对s的初始化,其中不正确的是()
A、chars[5]={“abc”};
B、chars[5]={‘a’,’b’,’c’};
C、chars[5]=“”;
D、chars[5]=”abcde”
10.以下程序的输出结果是____________________
{chars[]="
abcdef"
s[3]='
\0'
,s);
11.下列程序段的输出结果是_____________
{charb[]="
Hello,you"
b[5]=0;
%s\n"
b);
12.在C语言中,二维数组元素在内存中的存放顺序是_____________
13.设有定义语句“inta[3][4]={{1},{2},{3}}”,则a[1][1]值为_____________,a[2][1]的值为_____________
14.若在程序中用到“putchar()”函数时,应在程序开头写上包含命令_____________,若在程序中用到“strlen()”函数时,应在程序开头写上包含命令_____________
15.下面程序的功能是输出数组s中最大元素的下标,请填空。
voidmain()
{intk,p;
ints[]={1,-9,7,2,-10,3};
for(p=0,k=p;
p<
6;
p++)
if(s[p]>
s[k])_____________;
k);
}
16.以下程序执行时输入LanguageProgramming<
CR>
的结果是_____________
{charstr[30];
%s"
str);
str=%s\n"
}
17.以下程序可把输入的十进制长整型数以十六进制数的形式输出,请填空。
{charb[17]={"
0123456789ABCDEF"
};
intc[64],d,i=0,base=16;
longn;
Enteranumber:
%1d"
&
n);
do{c[i]=_____________;
i++;
n=n/base;
}while(n!
=0);
Transmitenewbase:
for(--i;
i>
=0;
--i)
{d=c[i];
%c"
b[____________];
18.以下数组定义中,错误的是()
A、inta[]={1,2,3};
B、inta[5]={1,2,3};
C、inta[3]={1,2,3,4};
D、inta[5],b;
19.以下数组定义中,正确的是()
A、intn=4,a[n]={1,2,3,4};
B、inta[][2]={1,2,3,4};
C、inta[2][]={1,2,3,4};
D、inta[][]={{1,2},{3,4}};
20.设有如下定义:
inta[8][10
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数组 上机 作业 汇总