Professional Documents
Culture Documents
《程序设计基础》
实验报告
(2019-2020 学年 第 一 学期)
课程名称 程序设计基础
开课学院 信电工程学院
指导教师 陆杨
学生学号 20190505224
学生姓名 彭博
专业班级 19 计嵌 2
姓 名 彭博 班 级 19 计嵌 2 学 号 20190505224
时 间 11 月 7 号 地 点 敬信楼 501
实验名称 实验四 学 时 2
实验题目 1:用一个二维方阵(最小为 3X3,最大为 9X9)表示一片海域。方阵
中的元素只由 0 和 1 组成。1 表示海岸线。计算水面面积(即:不在 1 围起来的区
域中 0 的个数)。如下图所示 6X6 方阵表示的水面面积为 14:
000100
001010
010001
100010
101010
110100
上述方阵表示的海域满足下面两个要求:
1、小岛只有一个。
2、用 1 表示的海岸线是封闭的,但有可能是凸的,也有可能是凹的。
提示:
对于方阵中的任意一个元素 0,如果其位于同一行上的两个 1 之间,并且位于同
一列上的两个 1 之间,则该元素肯定在 1 围起来的区域中。否则就不在 1 围起来
的区域中,即属于水面。
源代码:
#include<stdio.h>
int main()
int m;
scanf("%d",&m);
int a[m][m];
int i,j,sum=0;
for( i=0;i<m;i++ ){
for( j=0;j<m;j++ ){
scanf("%d",&a[i][j]);
int c1;
for( c1=1;c1<(m-1);c1++ )
int first,last,c2,c3;
for( c2=0;c2<m;c2++ )
{
if( a[c1][c2]==1 )
first=c2;
break;
for( c2=0;c2<m;c2++ )
if( a[c1][c2]==1 )
last=c2;
c3=last-first+1;
c3=m-c3;
sum+=c3;
int c3,c4=0;
for( c3=0;c3<m;c3++ )
if( a[0][c3]==0 )
c4++;
sum+=c4;
for( c3=0,c4=0;c3<m;c3++ )
{
if( a[m-1][c3]==0 )
c4++;
sum+=c4;
printf("%d",sum);
return 0;
运行结果截图:
实验题目 2:求二维整型数组的“鞍点”。二维数组的“鞍点”定义为:某个数是所在行的最大
值,并且是所在列的最小值。
源代码:
#include<stdio.h>
int main()
int n,m,i1,i2,i3,i4,j1,j2,j3;
i2=0;
i4=0;
j3=0;
scanf("%d %d",&n,&m);
int a[n][m];
for(i1=0;i1<n;i1++){
for(j1=0;j1<m;j1++)
scanf("%d",&a[i1][j1]);
for(i1=0;i1<n;i1++){
for(j1=0;j1<m;j1++){
for(j2=0;j2<m;j2++){
if( a[i1][j1]>=a[i1][j2] ){
i2++;
if( i2==m ){
for(i3=0;i3<n;i3++){
if( a[i1][j1]<=a[i3][j1] ){
i4++;
}if( i4==n) {
printf("%d %d %d\n",a[i1][j1],i1+1,j1+1);
j3++;
}i2=i4=0;
return 0;
}
运行结果截图:
实验题目 3:输入一行文字,统计其中的大写字母、小写字母、空格、数字以及其他字符的个
数。
源代码:
#include<stdio.h>
void main()
char a[100];
char *p;
int i=0,j=0,m=0,n=0,k=0;
p=a;
printf("Input a string:");
gets (a);
while( *p!='\0' )
if( *p>='A'&&*p<='Z' )
{i++;}
{j++;}
{m++;}
else if( *p==' ' )
{n++;}
else
{k++;}
p++;
运行结果截图:
源代码:
#include<stdio.h>
int main()
int i=0,j=0;
int a[10000];
int n;
scanf("%d",&n);
if( n>10000||n<=0 )
for( j=0;j<n;j++ )
a[j]=1;
int k=0;
int sum=0;
do
k=k+a[i%n];
if( k==3 )
a[i%n]=0;
k=0;
sum=0;
i++;
for( j=0;j<n;j++ )
sum=sum+a[j];
}
return 0;
运行结果截图:
源代码:
#include<stdio.h>
int main()
{ int n,n1;
scanf("%d",&n);
int a[n][n];
int i,j,k,l,m,sum=0;
for( i=0;i<n;i++ ){
for( j=0;j<n;j++ ){
scanf("%d",&a[i][j]);
} int b[n][n];
for( i=0;i<n;i++ ){
for( j=0;j<n;j++ ){
scanf("%d",&b[i][j]);
} for( k=0;k<n;k++ ){
for( l=0;l<n;l++ ){
for( m=0;m<n;m++ ){
sum+=a[k][m]*b[m][l];
printf("%10d",sum);
sum=0;n1++;
if( n1%n==0 ){
printf("\n");
}return 0;
运行结果截图:
二、实验总结(包括问题和解决方法、心得体会、意见与建议等)
循环考虑不够周到,总是少条件。
课后多加练习。
可以多在演草纸上练习,模拟计算。
实验评语 成绩:
日期: 年 月 日 教师: