admin 管理员组

文章数量: 1086019


2024年4月22日发(作者:网页开发的新趋势)

实验七-1 数组程序设计

班级: 学号: 姓名: 评分:

一.【实验目的】

1、熟练掌握使用一维数组编程的方法。

2、熟练掌握排序算术。

3、熟练掌握使用二维数组编程的方法。

4、进一步掌握C程序的调试方法和技巧。

二.【实验内容和步骤】

1、程序调试题

A.目标:进一步学习掌握程序调试的方法和技巧。

B.内容:从键盘输入一个正整数n(0

数组中,使该组数据仍然有序。改正程序中的错误,使其实现程序的功能。(注:程序文件保存在“调试

示例”文件夹中,文件名为error07_)

① 调试正确的源程序清单

#include

int main( )

{

int i, j, n, x, a[10];

printf("输入数据的个数n:");

scanf("%d", &n);

printf("输入%d个整数:", n);

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

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

printf("输入要插入的整数:");

scanf("%d", &x);

for(i = 0; i < n; i++){

if(x > a[i]) continue;

j = n - 1;

while(j >= i){ /* 调试时设置断点 */

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

j--;

} /* 调试时设置断点 */

a[i] = x;

break;

}

if(i == n) a[n]=x;

for(i = 0; i < n + 1; i++)

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

putchar('n');

return 0;

}

② 运行结果:(提示:通过屏幕截图,贴粘程序运行界面)。

2、完善程序,并调试运行程序

题目(1)求平均值。程序功能:从键盘上输入一个正整数repeat(0

个正整数n(1

件夹中)打开文件,在两条星线之间填入相应的代码,使程序完成该功能。

① 调试正确的源程序清单

//程序功能:从键盘上输入一个正整数 repeat (0

// 输入一个正整数n(1

//提示:除在指定位置添加语句之外,请不要改动程序中的其他内容。

#include

int main( )

{

int ri, repeat;

int i, n, sum;

float aver;

int a[10];

scanf("%d", &repeat);

for(ri=1; ri<=repeat; ri++)

{

scanf("%d", &n);

for(i=0; i

//请在两条星线之间填入相应的代码, 求数组a的平均值(使用循环结构)

/**************************************************************/

sum=0;

for(i=0;i

sum=sum+a[i];

aver=1.0*sum/n;

/**************************************************************/

printf("aver=%.2fn", aver);

}

}

② 运行结果:(提示:通过屏幕截图,贴粘程序运行界面)。

题目(2)求最大值及其下标。程序功能:从键盘上输入一个正整数repeat(0

输入一个正整数n(1

一,下标从0开始)。(注:程序文件保存在“第2题”文件夹中)打开文件,在两条星线之间填入

相应的代码,使程序完成该功能。

① 调试正确的源程序清单

//程序功能:从键盘上输入一个正整数 repeat (0

// 输入一个正整数n(1

//提示:除在指定位置添加语句之外,请不要改动程序中的其他内容。

#include

int main( )

{

int ri, repeat;

int i, index1, index2, n;

int a[10];

scanf("%d", &repeat);

for(ri=1; ri<=repeat; ri++)

{

scanf("%d", &n);

for(i=0; i

//请在两条星线之间填入相应的代码, 求数组a中的最大值、最小值及对应下标值(使用循环

结构)

/************************************************************************************/

index1=index2=0;

for(i=1;i

if(a[i]>a[index1])

index1=i;

if(a[i]

index2=i;

}

/************************************************************************************/

printf("max=%d,index=%dn", a[index1],index1);

printf("min=%d,index=%dn", a[index2],index2);

}

}

② 运行结果:(提示:通过屏幕截图,贴粘程序运行界面)。

题目(3)逆序输出。程序功能:从键盘上输入一个正整数repeat(0

个正整数n(1

程序文件保存在“第3题”文件夹中)打开文件,在两条星线之间填入相应的代码,使程序完成该

功能。

① 调试正确的源程序清单

//程序功能:从键盘上输入一个正整数 repeat (0

// 输入一个正整数n(1

// 例如:输入4 10 8,则输出8 10 4。

//提示:除在指定位置添加语句之外,请不要改动程序中的其他内容。

#include

int main( )

{

int ri, repeat;

int i, n, temp;

int a[10];

scanf("%d", &repeat);

for(ri=1; ri<=repeat; ri++)

{

scanf("%d", &n);

for(i=0; i

//请在两条星线之间填入相应的代码, 首尾交换数组a中各元素值(使用循环结构)

/**********************************************************************/

for(i=0;i

temp=a[i];

a[i]=a[n-i-1];

a[n-i-1]=temp;

}

/**********************************************************************/

for(i=0; i

printf("n");

}

}

② 运行结果:(提示:通过屏幕截图,贴粘程序运行界面)。

题目(4)交换最小值和最大值。程序功能:从键盘上输入一个正整数repeat(0

算:输入一个正整数n(1

然后输出交换后的n个数。(例如:输入4 10 8 1 6,则输出1 6 8 4 10)(注:程序文件保存在“第4题”文

件夹中)打开文件,在两条星线之间填入相应的代码,使程序完成该功能。

① 调试正确的源程序清单

//程序功能:从键盘上输入一个正整数 repeat (0

// 输入一个正整数n(1

后一个数交换,然后输出交换后的n个数。

// 例如:输入4 10 8 1 6,则输出1 6 8 4 10

//提示:除在指定位置添加语句之外,请不要改动程序中的其他内容。

#include

int main( )

{

int ri, repeat;

int i, index, n, t;

int a[10];

scanf("%d", &repeat);

for(ri=1; ri<=repeat; ri++)

{

scanf("%d", &n);

for(i=0; i

//请在两条星线之间填入相应的代码, 将最小值与第一个数交换,最大值与最后一个数交换。

//使用循环结构

/**********************************************************************/

index=0;

for(i=1;i

if(a[i]

index=i;

t=a[0];

a[0]=a[index];

a[index]=t;

index=0;

for(i=1;i

if(a[i]>a[index])

index=i;

t=a[n-1];

a[n-1]=a[index];

a[index]=t;

/**********************************************************************/

for(i=0; i

printf("n");

}

}

② 运行结果:(提示:通过屏幕截图,贴粘程序运行界面)。

题目(5)排序。程序功能:从键盘上输入一个正整数repeat(0

整数n(1

(注:程序文件保存在“第5题”文件夹中)打开文件,在两条星线之间填入相应的代码,使程序完

成该功能。

① 调试正确的源程序清单

//程序功能:从键盘上输入一个正整数 repeat (0

// 输入一个正整数n(1

// 例如:输入4 5 1 7 6,则输出7 6 5 4 1

//提示:除在指定位置添加语句之外,请不要改动程序中的其他内容。

#include

int main( )

{

int ri, repeat;

int i, index, k, n, temp;

int a[10];

scanf("%d", &repeat);

for(ri=1; ri<=repeat; ri++)

{

scanf("%d", &n);

for(i=0; i

//请在两条星线之间填入相应的代码, 将数组a按从大到小排序。

//使用循环结构

/******************************************************/

for(i=0;i

index=i;

for(k=i+1;k

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

index=k;

temp=a[i];

a[i]=a[index];

a[index]=temp;

}

/******************************************************/

for(i=0; i

printf("n");

}

}

② 运行结果:(提示:通过屏幕截图,贴粘程序运行界面)。

题目(6)矩阵运算。程序功能:从键盘上输入一个正整数repeat(0

个正整数n(1≤n≤6),再读入n阶方阵a,计算该矩阵除副对角线、最后一列和最后一行以外的所有元素之

和.(副对角线为从矩阵的右上角至左下角的连线)。例如,当n=4时,4阶方阵如下:

(注:程序文件保存在“第6题”文件夹中)打开文件,在两条星线之间填入相应的代码,使程序完

成该功能。

① 调试正确的源程序清单

//程序功能:从键盘上输入一个正整数 repeat (0

// 输入一个正整数n(1≤n≤6),再读入n阶方阵a,计算该矩阵除副对角线、最后一列

// 和最后一行以外的所有元素之和。

// 副对角线:从矩阵的右上角至左下角的连线。

//提示:除在指定位置添加语句之外,请不要改动程序中的其他内容。

#include "stdio.h"

int main( )

{

int ri,repeat;

int a[6][6],i,j,n,sum;

scanf("%d",&repeat);

for(ri=1;ri<=repeat;ri++)

{

scanf("%d",&n);

for (i=0;i

for(j=0;j

//请在两条星线之间填入相应的代码, 计算A矩阵中除副对角线、最后一列和最后一行以外的

//所有元素之和。

//副对角线:从矩阵的右上角至左下角的连线。

//使用循环结构

/*******************************************************************************/

sum=0;

for(i=0;i

for(j=0;j

if(i+j!=n-1)

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

/*******************************************************************************/

printf("sum=%dn",sum);

}

}

② 运行结果:(提示:通过屏幕截图,贴粘程序运行界面)。

2 3 4 1

5 6 1 1

7 1 8 1

1 1 1 1

sum=35 (2+3+4+5+6+7+8=35)

题目(7)矩阵运算。程序功能:从键盘上输入一个正整数repeat(0

个正整数n(1≤n≤10),输出一张20以内的加法口诀表。加数与被加数都不大于n,分列第一行和第一列(将

加数、被加数、和放入一个二维数组中,再输出该数组)。例如,当n=4时,输出结果如下:

(注:程序文件保存在“第7题”文件夹中)打开文件,在两条星线之间填入相应的代码,使程序完

成该功能。

① 调试正确的源程序清单

//程序功能:从键盘上输入一个正整数 repeat (0

// 输入一个正整数n(1≤n≤10),输出一张20以内的加法口诀表。

// 加数与被加数都不大于n,分列第一行和第一列

// (将加数、被加数、和放入一个二维数组中,再输出该数组)。

//提示:除在指定位置添加语句之外,请不要改动程序中的其他内容。

#include "stdio.h"

int main( )

{

int ri,repeat;

int i,j,n,a[10][10];

scanf("%d",&repeat);

for(ri=1;ri<=repeat;ri++)

{

scanf("%d",&n);

//请在两条星线之间填入相应的代码,将加数、被加数、和放入二维数组A中,其中:

//加数放在二维数组A的第1行,被加数放在二维数组A的第1列,和放在对应的交叉位置上。

//使用循环结构

/*****************************************************************************/

for(i=1;i<=n;i++)

a[i][0]=i;

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

a[0][j]=j;

for(i=1;i<=n;i++)

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

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

/*****************************************************************************/

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

{

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

if(i==0&&j==0) printf( "%-4c", '+'); //输出左上角的“+”号

else if(i==0||j<=i) printf( "%-4d", a[i][j]);//输出二维数组A的下三角元素

printf("n");

}

}

}

② 运行结果:(提示:通过屏幕截图,贴粘程序运行界面)。

题目(8)矩阵运算。程序功能:从键盘上输入一个正整数repeat(0

个正整数n(1≤n≤6)和n阶方阵a中的元素,如果a是上三角矩阵,输出"YES",否则,输出"NO"。(上三角

矩阵:即主对角线以下的元素都为0,主对角线为从矩阵的左上角至右下角的连线)。(注:程序文件保存在

“第8题”文件夹中)打开文件,在两条星线之间填入相应的代码,使程序完成该功能。

① 调试正确的源程序清单

//程序功能:从键盘上输入一个正整数 repeat (0

// 输入1个正整数n(1≤n≤6)和n阶方阵a中的元素,如果a是上三角矩阵,输出"YES",

// 否则,输出"NO"。

// 上三角矩阵:即主对角线以下的元素都为0,主对角线为从矩阵的左上角至右下角的连线。

//提示:除在指定位置添加语句之外,请不要改动程序中的其他内容。

#include "stdio.h"

#include "math.h"

int main( )

{

int ri,repeat;

int a[6][6],flag,i,j,n;

scanf("%d",&repeat);

for(ri=1;ri<=repeat;ri++)

{

scanf("%d",&n);

for (i=0;i

for (j=0;j

//请在两条星线之间填入相应的代码,判断二维数组A是否为上三角矩阵

//使用循环结构

/*************************************************************/

flag=1;

for(i=0;i

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

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

flag=0;

break;

}

/*************************************************************/

if(flag) printf("YESn");

else printf("NOn");

}

}

② 运行结果:(提示:通过屏幕截图,贴粘程序运行界面)。

题目(9)求矩阵每行元素之和。程序功能:从键盘上输入一个正整数repeat(0

算:输入2个正整数m和n(1≤m,n≤6),然后输入该m行n列矩阵a中的元素,分别求出各行元素之和,并

存入一维数组row中,再输出row。(注:程序文件保存在“第9题”文件夹中)打开文件,在两条

星线之间填入相应的代码,使程序完成该功能。

① 调试正确的源程序清单

//程序功能:从键盘上输入一个正整数 repeat (0

// 输入2个正整数m和n(1≤m,n≤6),然后输入该m行n列矩阵a中的元素,分别求出

// 各行元素之和,并存入一维数组row中,再输出row。

//提示:除在指定位置添加语句之外,请不要改动程序中的其他内容。

#include "stdio.h"

#include "math.h"

int main( )

{

int ri,repeat;

int flag,i,j,m,n,sum;

int a[6][6], row[6];

scanf("%d",&repeat);

for(ri=1;ri<=repeat;ri++)

{

scanf("%d%d",&m,&n);

for(i=0;i

for(j=0;j

//请在两条星线之间填入相应的代码,求出二维数组A中各行元素之和,并存入一维数组row

中。

//使用循环结构

/*********************************************************************************/

for(i=0;i

sum=0;

for(j=0;j

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

row[i]=sum;

}

/*********************************************************************************/

for(i=0;i

printf("sum of row %d is %dn",i,row[i]);

}

}

② 运行结果:(提示:通过屏幕截图,贴粘程序运行界面)。

题目(10)找鞍点(选作)。程序功能:从键盘上输入一个正整数repeat(0

入1个正整数n(1≤n≤6)和n阶方阵a中的元素,如果找到a的鞍点(鞍点的元素值在该行上最大,在该列上

最小),就输出它的下标,否则,输出"NO"(设a最多有1个鞍点)。(注:程序文件保存在“第10题”文

件夹中)打开文件,在两条星线之间填入相应的代码,使程序完成该功能。

① 调试正确的源程序清单

//程序功能:从键盘上输入一个正整数 repeat (0

// 输入1个正整数n(1≤n≤6)和n阶方阵a中的元素,如果找到a的鞍点,就输出它的下

标,

// 否则,输出"NO"。(设a最多有1个鞍点)

// 鞍点:元素值在该行上最大,在该列上最小。

//提示:除在指定位置添加语句之外,请不要改动程序中的其他内容。

#include "stdio.h"

int main( )

{

int ri,repeat;

int flag,i,j,k,row,col,n,a[6][6];

scanf("%d",&repeat);

for(ri=1;ri<=repeat;ri++)

{

scanf("%d",&n);

for(i=0; i

for(j=0; j

//请在两条星线之间填入相应的代码,查找二维数组A中的鞍点,并设置标志变量flag的值。

//使用循环结构

/*****************************************************************************/

flag=1;

for(row=0;row

col=0;

for(j=1;j

if(a[row][col]

col=j;

for(i=0;i

if(a[row][col]>a[i][col]){

flag=0;

break;

}

if(flag==1)

break;

}

/*****************************************************************************/

if(flag) printf("a[%d][%d]=%dn", row, col,a[row][col]);

else printf("NOn");

}

}

② 运行结果:(提示:通过屏幕截图,贴粘程序运行界面)。

题目(11)【水平考试题】程序文件保存在“第11题(水平考试题)”文件夹中),打开文件,该程序把一

个十进制整数转换成二进制数,并把此二进制数的每一位放在一维数组b中,然后输出b数组,(二进制数

的最低位放在数组的第一个元素中)。在两条星线之间填入相应的代码,使程序完成该功能。

① 调试正确的源程序清单

//程序功能:把一个十进制整数转换成二进制数,并把此二进制数的每一位放在一维数组b中,然后输

出b数组,(二进制数的最低位放在数组的第一个元素中)

//注意:请在提示处填上正确的代码,补充语句为一句

//提示:利用2辗转相除至结果为0,将余数从下向上倒序读出,就是结果

//如:十进制数10

//10/2=5 余0

//5/2=2 余1

//2/2=1 余0

//1/2=0 余1

//结果为1010

#include

void main()

{

//变量的定义,其中b[16]为数组,x为十进制数,r为余数,i为循环变量

int b[16],x,k,r,i;

//输入一个十进制数

cout<<"请输入一个十进制数:";

cin>>x;

//k为数组下标,初值为-1

k=-1;

do

{

r=x%2;

k++;

//请在两条星线之间填入相应的代码,完成二进制数的每一位放在一维数组b中

/**************************************************/

b[k]=r;

/***************************************************/

x/=2;

}

//请在两条星线之间填入相应的代码,完成循环条件的判断

/**********************************/

while(x!=0);

/**********************************/

for(i=k;i>=0;i--)

///请在两条星线之间填入相应的代码,完成存放二进制数组b的输出

/*******************************************/

cout<

/*******************************************/

cout<

}

② 运行结果:(提示:通过屏幕截图,贴粘程序运行界面)。

题目(12)【水平考试题】程序文件保存在“第12题(水平考试题)”文件夹中),打开文件,编写一个函

数,统计出具有n个元素的一维数组中,大于等于所有元素平均值的元素个数并返回它。在两条星线之间填

入相应的内容,使程序完成该功能。(注:要求使用for循环语句)

① 调试正确的源程序清单

//编写代码完成Count函数功能:统计出具有n个元素的一维数组中,大于等于所有元素平均值的元素

个数,并使用return语句把结果返回主函数。

//注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。补充语句不限一句,可多句。

#include

int Count(double a[], int n)

{

//请在两条星线之间填入相应的代码(注:要使用for循环语句)

/***********************************************/

int i,result=0;

float sum=0,avg;

for(i=0;i

sum=sum+a[i];

avg=sum/n;

for(i=0;i

if(a[i]>=avg)

result++;

return result;

/************************************************/

}

void main()

{

double a[10]={13.3,45.7,6,84.6,90.8,23,63.5,15,33,76};

int result;

result=Count(a,10);

cout<<"大于平均值的元素个数为:"<

}

② 运行结果:(提示:通过屏幕截图,贴粘程序运行界面)。

题目(13)【水平考试题】程序文件保存在“第13题(水平考试题)”文件夹中),打开文件,从键盘上输

入10个数据并保存到一个一维数组里,用一个函数求出该数组中最大值和最小值,并在主函数中输入与输

出。在两条星线之间填入相应的代码,使程序完成该功能。

① 调试正确的源程序清单

//程序功能:有一个一维数组,存放10个数据,用一个函数求出最大值和最小值,并在主函数中输入

与输出

//提示:除在指定位置添加语句之外,请不要改动程序中的其他内容。要求:补充语句处只写一条语句

#include

#define N 10 //定义符号常量N,表示数组元素的个数

void max_min(int a[],int *max,int *min);

void main( )

{

int i;

int array[10];

int m,n;

cout<<"input 10 data:";

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

{

cin>>array[i];

}

//请在两条星线之间填入相应的代码,完成函数调用,此函数功能为求最大值和最小值

/**************************************************/

max_min(array,&m,&n);

/***************************************************/

cout<<"max is :"<

cout<<"min is :"<

}

void max_min(int a[],int *max,int *min)

{

*max=*min=a[0];

int i;

for (i=1;i

{

if (*max

//请在两条星线之间填入相应的代码,求最大值max

/**************************************************/

*max=a[i];

/***************************************************/

if (*min>a[i])

//请在两条星线之间填入相应的代码,求最小值min

/**************************************************/

*min=a[i];

/***************************************************/

}

}

② 运行结果:(提示:通过屏幕截图,贴粘程序运行界面)。

题目(14)【水平考试题】程序文件保存在“第14题(水平考试题)”文件夹中),打开文件,程序的功能

是统计一个字符串中包含英文字母的个数。在两条星线之间填入相应的内容,使程序完成该功能。(注意:

不得改动其它代码,不得更改程序结构。)

① 调试正确的源程序清单

#include

#include

void main()

{char text[200];int n=0;

cout<<"输入一个字符串:"<

gets(text);

// *****************两条星线之间填入相应的内容***********

for(int i=0;text[i]!='0';i++)

if((text[i]>='a'&&text[i]<='z')||(text[i]>='A'&&text[i]<='Z'))

n++;

// ********************************************************

cout<<"英文字母的个数是:"<

}

② 运行结果:(提示:通过屏幕截图,贴粘程序运行界面)。

题目(15)【水平考试题】程序文件保存在“第15题(水平考试题)”文件夹中),打开文件,编写程序,

输入10个学生的考试成绩,然后输出不低于平均分的分数。(注意:不得改动其它代码,不得更改程序结构。)

① 调试正确的源程序清单

#include

void main()

{

//在函数内填写代码

int i;

float a[10],sum=0,avg;

cout<<"请输入10个成绩:"<

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

cin>>a[i];

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

sum=sum+a[i];

avg=sum/10;

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

if(a[i]>=avg)

cout<

cout<

}

② 运行结果:(提示:通过屏幕截图,贴粘程序运行界面)。

题目(16)【水平考试题】程序文件保存在“第16题(水平考试题)”文件夹中),打开文件,编写程序,

输入一个5行5列的矩阵M,然后将主对角线之外的上三角中的每个元素减1,下三角中的每个元素加1,并输

出新的矩阵M。(注意:不得改动其它代码,不得更改程序结构。)

① 调试正确的源程序清单

#include

void main()

{

//填写代码

int m[5][5],i,j;

cout<<"请输入5*5矩阵:"<

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

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

cin>>m[i][j];

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

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

if(i

m[i][j]=m[i][j]-1;

if(i>j)

m[i][j]=m[i][j]+1;

}

cout<<"变换后:"<

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

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

cout<

cout<

}

//填写代码

}

② 运行结果:(提示:通过屏幕截图,贴粘程序运行界面)。


本文标签: 程序 代码 数组 输入 功能