实验九 二维数组及字符数组程序设计
姓名:周咪咪 班级:11数字媒体技术(2) 学号:2011329700214 实验目的:
1、 掌握二维数组的定义和引用方法。
2、 掌握字符数组的定义和使用方法。
3、 掌握正确使用一维数组及字符数组编程。
实验内容:
1、 编写程序,输入两个正整数m和n(1≤m,n≤6),然后输入该m行n列矩阵a中的元
素,分别求出各行元素之和,并输出。
2、 编写程序,输入一个正整数n(1≤n≤6)和n阶方阵a中的元素,如果找到a的鞍点(鞍
点的元素值在该行上最大,在该列上最小),就输出它的下标;否则输出“NO”(设a最多有一个鞍点)。
3、 编写程序,输入一个以回车符结束的字符串(少于80个字符),过滤去所有的非十六进
制字符后,组成一个新字符串(十六进制形式),然后将其转换为十进制数后输出。 实验过程:
一、实验一
1、 算法思路:
(1)先定义数组,输入数据显示行列式。
(2)再用循环实现各行元素之和。
2、 程序清单:
#include<stdio.h>
int main(void)
{
int i,j,m,n,sum;
printf("enter m,n:");
scanf("%d%d",&m,&n);
int a[6][6];
printf("enter digit:");
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
printf("%4d",a[i][j]);
printf("\n");
}
{
sum=0;
for(j=0;j<n;j++)
sum=sum+a[i][j];
printf("\n");
printf("sum=%d",sum);
}
return 0;
}
3、 原始数据:
m=3,n=3
Enter digit:1 2 3 4 5 6 7 8 9
4、 运行结果:
5、 分析与思考:
(1)sum不要忘输初值。
(2)数组的定义为a[6][6]表示最多为6行6列。
二、实验二
1、算法思路:
先通过循环在行中找到最大数,记下此时的列数。
再根据列数,找到该列中的最小数。
判断最大数和最小数是不是相等,是的话输出该元素的下标,不是的话输出“no”。
2、程序清单:
#include<stdio.h>
int main(void)
{
int i,j,n,max,min,row,col;
printf("enter n(n<=6):");
scanf("%d",&n);
int a[6][6];
printf("enter digit:");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
{
for(j=0;j<n;j++)
printf("%4d",a[i][j]);
printf("\n");
}
for(i=0;i<n;i++)
{
max=a[i][0];
for(j=0;j<n;j++)
{
if(a[i][j]>max)
{
max=a[i][j];
row=i,col=j;
}
}
min=a[0][col];
for(j=col,i=0;i<n;i++)
{
if(a[i][j]<min)
min=a[i][j];
}
}
if(min==max)
{
printf("the row of number is:%d\n",row);
printf("the col of number is:%d\n",col);
}
else
printf("no\n");
return 0;
}
3、原始数据:
n=3
enter digit :2 4 8 2 3 9 4 5 70
4、运行结果:
5、分析与思考:
(1)在多重循环的程序中要注意加{ }的位置,否则会出错的。
(2)注意小错误,如:等于为"=="
三、实验三
1、算法思路:
(1)先定义数组a[81](前面80个为字符,最后一个为回车符)。
(2)再用循环判断语句实现滤去所有的非十六进制字符,形成新的字符串。
(3)再将字符型转换成十进制型输出。
2、程序清单:
#include<stdio.h>
int main(void)
{
char a[81],ch;
int b,i,j,sum=0,k=0,item=1;
i=0;
printf("enter string:");
ch=getchar();
while(ch!='\n')
{
if((ch>='0'&&ch<='9')||(ch>='a'&&ch<='f'))
{
a[i]=ch;
i++;
}
ch=getchar();
}
for(j=i-1;j>=0;j--)
{
if(a[j]>='0'&&a[j]<='9')
b=a[j]-'0';
else
b=10+a[j]-'a';
sum=sum+b*item;
item=item*16;
}
printf("%d\n",sum);
return 0;
}
3、原始数据:
输入123#ap
4、运行结果:
5、分析与思考:
(1)在转换数据类型时,要先对字符分类。
(2)要清楚十六进制字符的范围为"0~f"