if(m>a[i])
{
p=i;
break;
}
for(i=n;i>=p+1;i--)/*将插入位置之后的元素后移*/
a[i]=a[i-1];
}
/*插入*/
a[p]=m;
printf("插入%.2f后:
",m);/*输出插入后结果*/
for(i=0;iprintf("%.2f",a[i]);
printf("\n");
}
else
printf("数据超出范围");
}
二、二维数组实验
1.以下程序功能为:
将下列矩阵中的元素向右移动一列,最后一列移至第一列。
找出并改正以下源程序中错误,通过调试得出正确的运行结果。
146
81012
源程序(有错误的程序)
#include
#defineROW2
#defineCOL3
intmain()
{
inta[ROW][COL]={1,4,6,8,10,12};
inti,j,temp;
for(i=0;i{
temp=a[i][COL-1];
for(j=COL-2;j>=0;j--)
{
a[i][j]=a[i][j+1];/*调试时设置断点*///改为a[i][j+1]=a[i][j];
}
a[i][0]=temp;/*调试时设置断点*/
}
for(inti=0;i{
for(j=0;j
printf("%6d",a[i][j]);
printf("\n");
}
return0;
}
运行结果(改正后程序的运行结果)
614
12810
2.编程:
利用二维数组计算并打印一个n行的杨辉三角。
例如:
Inputn:
6
1
11
121
1331
14641
14101051
提示:
第一列及对角线上的元素都是1,其他元素通过计算得出:
如果用i表示行,j表示列,则第i行j列的元素
#include
voidmain()
{
inta[10][10]={0};//设最多10层
inti,j,n;
printf("请输入杨辉三角形的层数:
");
scanf("%d",&n);
if(n>10)
{
printf("层数超出范围");
return;
}
for(i=0;i{
a[i][0]=1;
a[i][i]=1;
}
for(i=2;ifor(j=1;j
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=0;i{
for(j=0;j<=i;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
3.编程:
通过键盘输入3行4列的二维数组,分别按行和按列输出数组。
例如:
Inputnumner:
1234
5678
910110
outputbyrow:
12345678910110
outputbycol:
15926103711480
#include
voidmain()
{
inta[3][4],i,j;
printf("请输入3X4整数矩阵:
\n");
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
printf("按行输出:
");
for(i=0;i<3;i++)
for(j=0;j<4;j++)
printf("%d",a[i][j]);
printf("\n");
printf("按列输出:
");
for(i=0;i<4;i++)
for(j=0;j<3;j++)
printf("%d",a[j][i]);
printf("\n");
}
4.编程:
输入一个m*n矩阵,求他们的各行元素之和。
例如:
Inputm,n:
22
Input2*2matrix:
45
56
sum[0]=9
sum[1]=11
提示:
设计一个一维数组ints[10],分别保存各行元素之和。
#include
voidmain()
{
inta[10][10],s[10]={0};//设定矩阵最大为10x10
intm,n,i,j;
printf("请输入矩阵的行数和列数:
");
scanf("%d%d",&m,&n);
if(m<0||m>10||n<0||n>10)
{
printf("行或列(1~10)值超出范围");
return;
}
printf("请输入%d*%d矩阵:
\n",m,n);
for(i=0;ifor(j=0;jscanf("%d",&a[i][j]);
//求各行之和并输出
for(i=0;i{
for(j=0;js[i]+=a[i][j];
printf("sun[%d]=%d\n",i,s[i]);
}
}
5.编程:
判断一个二维数组是否存在鞍点,若存在,则输出鞍点及其行号和列号;否则输出没有鞍点信息。
“鞍点”是指这样的元素:
它在本行是最大元素,而在本列是最小的元素。
Inputm,n:
22
Input2*2matrix:
45
56
i=0,j=1,saddlepoint:
5
提示:
找鞍点需要处理三件事情:
(1)找每行中最大值所在的列下标;
(2)判断该元素在本列上是否为最小;(3)判断是否找到了鞍点,若找到,输出。
#include
voidmain()
{
inta[10][10];//设定矩阵最大为10x10
intm,n,i,j,col,flag=0;
printf("请输入矩阵的行数和列数:
");
scanf("%d%d",&m,&n);
if(m<0||m>10||n<0||n>10)
{
printf("行或列(1~10)值超出范围");
return;//退出程序
}
printf("请输入%d*%d矩阵:
\n",m,n);
for(i=0;ifor(j=0;jscanf("%d",&a[i][j]);
for(i=0;i{
col=0;//找出第i行中的最大值所在列下标col
for(j=1;jif(a[i][col]col=j;
for(j=0;jif(a[i][col]>a[j][col])
break;
if(j==m)
{
flag=1;//有鞍点
printf("i=%d,j=%d,saddlepoint:
%d\n",i,col,a[i][col]);
}
}
if(flag==0)
printf("Nosaddlepoint!
\n");
}
三、字符串实验
1.以下程序功能为:
输入一个字符串,将其逆序输出。
找出并改正以下源程序中错误,通过调试得出正确的运行结果。
源代码(有错误的程序)
#include
#include
voidmain()
{
inti,j;
chars[80],result[80];
printf("Enterastring:
\n");
gets(s);
for(i=strlen(s)-1,j=0;i>=0;i--,j++)
{
result[j]=s[i];
}
result[j]='\0';//必须给字符串加上串结束标志
printf("Thisisreversestring:
\n");
puts(result);
}
运行结果(改正后的程序)
Enterastring:
asdfg
Thisisthereversestring:
gfdsa
2.编程:
任意输一个字符串保存在一维字符数组中,求其长度(不用strlen函数)。
例如:
Inputastring:
aadfdg
length=6
提示:
字符串的有效长度就是有效字符的个数,即数组中第一个‘\0’前面的字符个数。
#include
voidmain()
{
inti,len=0;
chars[80];
printf("请输入字符串,以回车键结束:
");
gets(s);
for(i=0;s[i]!
='\0';i++)
len++;
printf("字符串%s的长度为:
%d\n",s,len);
}
3.编程:
任意输入两个字符串分别保存在一维字符数组中,把第二个字符串连接到第一个字符串末尾(不用strcat函数)。
例如:
Inputtwostring:
asdfg
erty
afterstrcat:
asdfgerty
#include
voidmain()
{
inti,j;
chars1[80],s2[80];
printf("请输入字符串1以回车键结束:
\n");
gets(s1);
printf("请输入字符串2以回车键结束:
\n");
gets(s2);
for(i=0;s1[i]!
='\0';i++);/*定位第一个字符串的结束标志*/
for(j=0;s2[j]&&i<80;i++,j++)/*将s2接到s1后*/
s1[i]=s2[j];
s1[i]='\0';
printf("两个串连接后:
%s\n",s1);
}
4.编程:
从键盘读入两个字符串分别保存在一维字符数中,比较两个字符串大小(不用strcmp函数),输出较大的字符串。
#include
voidmain()
{
inti;
chara[80],b[80];
printf("请输入字符串1以回车键结束:
\n");
gets(a);
printf("请输入字符串2以回车键结束:
\n");
gets(b);
//逐个比较直到两个字符不同或其中一个字符串结束
for(i=0;a[i]&&b[i];i++)
{
if(a[i]!
=b[i])
break;
}
if(a[i]>b[i])
printf("第一个字符串%s大!
\n",a);
elseif(a[i]==b[i])
printf("两字符串相同!
\n");
else
printf("第二个字符串%s大!
\n",b);
}
5.编程:
任意输入一个字符串保存在一维字符数组中,判断里面数字字符的个数。
例如:
Inputastring:
adg4521gadg4adg
number:
5
#include
voidmain()
{
inti,n=0;
chars[80];
printf("请输入一个字符串以回车键结束:
\n");
gets(s);
for(i=0;s[i];i++)
if(s[i]>='0'&&s[i]<='9')
n++;
printf("字符串中包含的数字个数为:
%d\n",n);
}
6.编程:
从一个字符串中删除从某个特定字符开始的所有字符。
例如原字符串为"abcdefg",特定字符为'd',删除后的字符串为"abc
|
|