文档库

最新最全的文档下载
当前位置:文档库 > 数组作业

数组作业

实验6 数组

姓名:学号:1107082106

专业:计算机科学与技术班级:物联网

同组人:无实验日期:2011/12/02

【实验目的与要求】

?掌握一维数组和二维数组的定义、赋值和输入输出的方法。

?掌握字符数组和字符串函数的使用。

?掌握与数组有关的算法。

【实验内容与步骤】

1.程序改错题

(1)下列程序的功能为:为指定的数组输入10个数据,并求这些数据之和。请纠正程序中存在错误,使程序实现其功能,程序以文件名sy6_1.c存盘。

#include

void main()

{

int n=10,i,sum=0;

int a[n];

for(i=0;i<10;i++)

{

scanf("%d",a[i]);

sum=sum+a[i];

}

printf("sum=%d\n",sum);

}

请给出正确的程序:

#include

void main()

{

int n=10,i,sum=0;

int a[10];

for(i=0;i<10;i++)

{

scanf("%d",&a[i]);

sum=sum+a[i];

}

printf("sum=%d\n",sum);

}

请给出程序运行测试结果:

数组作业

(2)下列程序的功能为:将字符串b连接到字符串a。请纠正程序中存在错误,使程序实现其功能,程序以文件名sy6_2.c存盘。

#include

void main( )

{

char a[]="wel",b[]="come";

int i,n=0;

while(!a[n])

n++;

for(i=0;b[i]!='\0';i++)

a[n+i]=b[i];

printf("%s\n",a);

}

请给出正确的程序:

#include

void main()

{

char a[10]="wel",b[10]="come";

int i,n=0;

while(a[n]!='\0')

n++;

for(i=0;b[i]!='\0';i++,n++)

a[n]=b[i];

a[n]='\0';

printf("%s\n",a);

}

请给出程序运行测试结果:

数组作业

2.程序填空

(1)以下程序的功能是:采用二分法在给定的有序数组中查找用户输入的值,并显示查找结果。请填写适当的符号或语句,使程序实现其功能,程序以文件名sy6_3.c存盘。

#include "stdio.h"

#define N 10

void main()

{

int a[ ]={0,1,2,3,4,5,6,7,8,9},k;

int low=0,high=N-1,mid,find=0;

printf("请输入欲查找的值:\n");

scanf("%d",&k);

while (low<=high)

{

mid=(low+high)/2;

if(a[mid]==k)

{

printf("找到位置为:%d\n",mid+1);

find=1;

}

if(a[mid]>k)

__________________;

else

__________________;

}

if(!find)

printf("%d未找到\n",k);

}

请给出正确的程序:

#include

#define N 10

void main()

{

int a[]={0,1,2,3,4,5,6,7,8,9},k;

int low=0,high=N-1,mid,find=0;

printf("please num:\n");

scanf("%d",&k);

while(low<=high)

{

mid=(low+high)/2;

if(a[mid]==k)

{

printf("fine place: %d\n",mid+1);

find=1;

break;

}

if(a[mid]>k)

high=a[mid];

else

low=a[mid]+1;

// printf("%d %d\n",low,high);

}

if(find==0)

printf("%d null\n",k);

}

请给出程序运行测试结果:

数组作业

(2)以下程序的功能是:采用选择排序法对随机产生的20个100以内的无序整数按由大到小的顺序重新排列,并输出重新排列后的有序整数。请填写适当的符号或语句,使程序实现其功能,程序以文件名sy6_4.c存盘。

#define N 20

#include "stdio.h"

void main()

{

int a[N],i,j,k,t;

printf("排序前:\n");

for(i=0;i

{

a[i]=rand()%1000; //产生1-1000间的随机数

printf("%5d",a[i]);

}

for(i=0;i

{

k=i;

for(j=i+1;j

if(_________________)

k=j;

if(_________________)

{

t=a[k];

a[k]=a[i];

a[i]=t;

}

}

printf("排序后:\n");

for(i=0;i

printf("%5d",a[i]);

}

请给出正确的程序:

#include

#define N 20

void main()

{

int a[N],i,j,k,t;

printf("before:\n");

for(i=0;i

{

a[i]=rand()%1000;

printf("%5d",a[i]);

}

printf("\n");

for(i=0;i

{

k=i;

for(j=i+1;j

if(a[j]>a[k])

k=j;

if(k!=i)

{t=a[k];a[k]=a[i];a[i]=t;} }

printf("after:\n");

for(i=0;i

printf("%5d",a[i]);

printf("\n");

}

请给出程序运行测试结果:

数组作业

3.程序编写

(1).用筛法求1~1000之间的素数。

eratosthenes筛法流程图:

创建整数组x[1000],i ,j

For i=0;i<=999;i++

x[i]=i+1

x[0]=0挖掉第一个数

For j=1;j<999;j++

1

For i=j+1;i<=999;i++

x[i]=0

For i=0;i<=999;i++

1

打印x[i]

请给出程序源码:

#include

void main()

{

int x[1000],i,j,n;

for(i=0;i<=999;i++)

x[i]=i+1;

x[0]=0; 0

x[i]%x[j]

x[i]≠0 x[i]% x[j]0

x[j]≠0 x[i]% x[j]

for(j=1;j<999;j++)

if(x[j]!=0)

for(i=j+1;i<=999;i++)

if(x[i]%x[j]==0)

x[i]=0;

for(i=0,n=0;i<=999;i++)

{

if(x[i]!=0)

{

printf("%5d",x[i]);

n++;

if(n%15==0)

printf("\n");

}

}

printf("\n");

}

运行结果截图:

数组作业

(2).编写程序输入一个字符串,删除字符串中的所有数字字符后输出此字符串。【算法提示】

(1)定义一个一维字符数组;

(2)输入一串测试字符;

(3)依次判断数组中字符是否为数字(即>‘0’且<‘9’);

(4)若是则将后面所有字符依次往前移一位;

(5)输出整个字符串。

请给出程序源码:

#include

void main()

{

char a[40],t;

int i,j;

gets(a);

for(i=0;a[i]!='\0';i++)

if(a[i]>='0'&&a[i]<='9')

{

for(j=i;a[j+1]!='\0';j++)

a[j]=a[j+1];

a[j]='\0';

i--;

}

puts(a);

}

运行结果截图:

数组作业

(3).输入若干个整数存放在一维数组中,根据此数组构造两个数组a和b,要求a中存放数组x中所有的正数,b中存放数组中所有的负数,0舍弃,最后分别输出数组a和b 。

运行结构截图:

请给出程序源码:

#include

void main()

{

int a[3],b[3]={0},c[3]={0};

int d;

int i,j,n;

for(n=0;n<3;n++)

{

scanf("%d",&a[n]);

}

for(n=0,i=0,j=0;n<3;n++)

{

if(a[n]>0)

{b[i]=a[n];i++;}

else if(a[n]<0)

{c[j]=a[n];j++;}

}

for(i=0;b[i]!=0;i++)

printf("%d",b[i]);

printf("\n");

for(j=0;c[j]!=0;j++)

printf("%d",c[j]);

printf("\n");

}

运行结果截图:

数组作业

4.实验练习与思考题

(1).小孩分糖问题

10个小孩围成一圈分糖,老师分给第1个孩子10块,第2个孩子2块,第3个孩子8块,第4个孩子22块,第5个孩子16块,第6个孩子4块,第7个孩子10块,第8个孩子6块,第9个孩子14块,第10个孩子20块,然后所有的小孩同时将自己手中的糖分一半给右边的小孩,糖块数为奇数的人可向老师再要一块。

问:经过这样几次调整后大家手中的糖的块数都一样?每人各有多少块糖。(注:第i 个小朋友的右边是第i-1个小朋友,第1个小朋友的右边是第10个小朋友) 请给出程序源码:

#include

void main()

{

// i nt a[11]={0};

int a[11]={10,2,8,22,16,4,10,6,14,20,10};

int i=0,j,m=0,f=1;

for(i=0;m<10000;i++)

{

f=0;

for(j=1;j<10;j++)

if(a[i]!=a[j])

f=1;

if(i==10)

{

a[0]=a[10];

i=0;

}

if(a[i]%2==0)

{

a[i+1]=a[i+1]+a[i]/2;

a[i]=a[i]/2;

}

else

a[i]=a[i]+1;

m++;

if(i==0)

{

a[10]=a[0];

}

// if(m%10==0)

{

for(j=0;j<11;j++)

{

printf("%d ",a[j]);

}

printf(" %d\n",m);

}

}

printf("n=%d,m=%d\n",a[0],m-1);

}

运行结果截图:

不会.

(2)数的比较问题

假设在2*10的二维数组中存放了数据,其中各行的元素构成一个整数,如第一行元素构成整数1234507000。编写程序比较两行元素构成的整数大小。(规则:从高位起逐个比对应位数,若每位均相等,则两数相等;若遇到第一个不相等的数字,则数字大者为大) 例如:

1 2 3 4 5 0 7 0 0 0

1 2 3 7 4 2 6 0 0 0

运行结构截图:

请给出程序源码:

#include

void main()

{

int a[2][3]={{1,3,3},{1,2,4}};

int i;

for(i=0;i<3;i++)

if(a[0][i]>a[1][i])

{

printf("big is 1\n");

break;

}

else if(a[0][i]

{

printf("big is 2\n");

break;

}

}

运行结果截图:

数组作业

(3).矩阵最外圈元素之和问题

输入一个5行5列的矩阵,计算该矩阵最外圈元素之和。请给出程序源码:

#include

void main()

{

int a[5][5];

int i,j,s=0,n=1;

for(i=0;i<5;i++)

for(j=0;j<5;j++)

{

a[i][j]=n;

n++;

}

for(i=0;i<5;i++)

for(j=0;j<5;j++)

{

if(i==0||i==4||j==0||j==4)

s=s+a[i][j];

}

for(i=0;i<5;i++)

{

for(j=0;j<5;j++)

printf("%5d",a[i][j]);

printf("\n");

}

printf("%d\n",s);

}

运行结果截图:

数组作业

5.附加题

老虎机:假设有3*3个方格,编写程序,在程序运行后,在3*3个方格内随机显示符号三种符号“?、#、*”得分规则是在一条直线或斜线上有三个相同的图案则得一分,按y继续玩,每人玩三次,统计总得分。(其中?可以用’\1’输出)。

注:(1)可使用函数产生随机整数(函数请自己查找),让这个整数被3除,根据余数来判断应在指定位置上显示“?、#、*”中的哪一个,如余0显示?,余1显示#,余2显

示*。

(2)可考虑用用三维数组来存储三行三列的符号。

数组作业

请给出程序源码:

#include

#include

void main()

{

char a[3][3];

char c,d;

int b[3][3];

int i,j,k,r,y,s=0;

for(;;)

{

for(i=0;i<3;i++)

for(j=0;j<3;j++)

{

r=rand()%1001;

y=r%3;

b[i][j]=y;

switch(y)

{

case 0:a[i][j]=1;break;

case 1:a[i][j]='#';break;

case 2:a[i][j]='*';break;

}

}

for(i=0;i<3;i++)

{

for(j=0;j<3;j++)

printf("%c",a[i][j]);

printf("\n");

}

scanf("%c",&c);

if(c!='y')

break;

scanf("%c",&d);

}

}

//p80;

运行结果截图:

不会

数组作业
数组作业一 单项选择题(每题 2 分,共 40 分) 1 以下对一维整型数组 a...
数组作业参考答案
LOGO 数组作业参考答案 1、输入一个正整数n(1<n<=10),...
数组作业(answer)
数组作业答案一、选择题 1.以下为一维整型数组 a 的正确说明是_ d _. a...
数组作业(1)
数组作业一、 选择题 1. 在 Java 中,以下程序段能正确为数组赋值的是( ...
(完整版)数组作业2
(完整版)数组作业2_数学_高中教育_教育专区。1.以下程序段的功能是:数组前 ...
(完整版)数组作业3
(完整版)数组作业3_数学_高中教育_教育专区。1.编写程序,输入两个字符串,并...
数组作业
数组作业_工学_高等教育_教育专区。实 验 报 告 课程名称 ___ C 语言程序设计___ 实验项目 ___数组___ 实验仪器 ___计算机___ 系专 别___自动化......
数组作业答案
数组作业答案_其它课程_高中教育_教育专区。数组作业的相关习题 1、编写程序,产...
数组课后作业
数组课后作业_理学_高等教育_教育专区。1、 判断一个数组{1,2,3,1,0}...
数组作业1
数组作业1_其它_高等教育_教育专区。1.输入多项式 A(x)的系数,存放在数组...
数组作业
数组作业_英语_高中教育_教育专区。1. 用一维数组输入 N 个整数,然后将 这...
第六章 数组作业
第六章 数组作业_数学_高中教育_教育专区。第六章 数组 6.1 选择题 6.1...
数组作业
数组作业 1.读入 10 个数,输出偶数项及它们的和,输出奇数项及它们的平均数。...
数组作业
数组作业_计算机软件及应用_IT/计算机_专业资料。1、在一个长度为 n 的有序...
作业10-数组答案_其它_高等教育_教育专区。1. 选择法排序 1.1. 题目要...
数组作业和例题
数组作业和例题_理学_高等教育_教育专区。7.15 计算两个矩阵的和。 1 2 ...
数组作业
数组作业_电脑基础知识_IT/计算机_专业资料。Java 数组1.有一个整数数组...
Java数组作业
Java数组作业_计算机软件及应用_IT/计算机_专业资料。1、用数组求解 Fi...
作业10-数组答案_数学_高中教育_教育专区。. 1. 选择法排序 1.1. 题...