You are on page 1of 11

徐州工程学院

《程序设计基础》
实验报告
(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;

if( j3==0 ){printf("No answer");

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++;}

else if( *p>='a'&&*p<='z' )

{j++;}

else if( *p>='0'&&*p<='9' )

{m++;}
else if( *p==' ' )

{n++;}

else

{k++;}

p++;

printf("Number of uppercase letters is :%d\nNumber of lowercase letters is :%d\nNumber of


spacebars is :%d\nNumber of digits is :%d\nNumber of other characters is :%d\n",i,j,n,m,k);

运行结果截图:

实验题目 4:有 n 个人围成一圈,按顺序从 1 到 n 编号。从第一个人开始报数,报数 3 的人


退出圈子,下一个人从 1 开始重新报数,报数 3 的人退出圈子。如此循环,直到留下最后一
个人。问留下来的人的编号。

源代码:

#include<stdio.h>

int main()

int i=0,j=0;
int a[10000];

int n;

printf("Input n(n must be a natural number less than 10000):");

scanf("%d",&n);

if( n>10000||n<=0 )

printf("%d is out of range of valid values.\n",n);

else if( n>0&&n<=10000 ){

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];

}while( sum!=0 ); printf("Last No. is:%d\n",(i-1)%n+1);

}
return 0;

运行结果截图:

实验题目 5:从键盘输入一个正整数 n(n∈[1,10]),表示进行乘法运算的两个整形方阵的


阶。然后分别输入两个整形方阵 A 和 B,计算 A×B 后将结果输出到屏幕。

源代码:

#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;

运行结果截图:
二、实验总结(包括问题和解决方法、心得体会、意见与建议等)
循环考虑不够周到,总是少条件。
课后多加练习。
可以多在演草纸上练习,模拟计算。

实验评语 成绩:
日期: 年 月 日 教师:

You might also like