c语言第二次实验报告

时间:2021-01-11 01:41:42

题目一:11-7 找鞍点

设计思路

1.输入一个二维数组

2.判断有几个点,如果只有一个则就是是鞍点

3.然后用for循环判断是否为行最大值,且为列最小值

4.输出

实现方法:

用双重for循环遍历比较大小,判断鞍点,也是整个程序最难的地方。

题目二:12-8 删除重复字符

设计思路:

1.定义二个数组,并赋初值为0

2.读取一个字符串

3.判断数组中被填充的位置,填充的是非0值,没填充的是0值

实现方法:

str1中每个字符的assic码作为str2的下标值,并把对应位置填充为1,同一个字符的assci值相同,所以这样就去掉了重复字符。

题目三:13-6 数组循环右移

设计思路:

1.定义一个空的数组

2.把右移后的原数组放入空数组

3.输出空数组

实现方法:

重定义一个数组,把处理过数据处理进去比较简便。

题目四:14-4 输出月份英文名

设计思路:

1.定义指针函数

2.按照n的数字返回字符串

3.如果为月份外数字则反NULL

实现方法:

简单暴力的return,避开了一些麻烦

题目五:15-3 函数实现字符串逆序

设计思路:额外设定一个指针,从后到前输入

实现方法:while循环调整指针的前后位置。

 

、部分源程序

11-7 找鞍点:

for(i=0; i<n; i++)
        {
            y=i;
            for(p=0; p<n; p++) //找行最大值
            {
                if(a[i][k]<=a[i][p])//数组元素之间比较,若比a[i][k]大,则将数组列标赋给k
                {
                    k=p;
                }
            }
            for(j=0; j<n; j++)//判断是否为列最小值
            {
                if(a[y][k]>a[j][k])//若此行最大值不是列所在最小值,把小的行标赋给y
                {
                    y=j;
                    break;
                }
            }
            if(i==y)//行最大且列最小,判断条件行标不改变
            {
                flag=0;
                break;
            }
        }

 12-8 删除重复字符

for(i=0;str1[i];i++)
{
str2[str1[i]]=1;//str1中每个字符的assic码作为str2的下标值,并把对应位置填充为1,同一个字符的assci值相同,所以这样就去掉了重复字符
}
for(i=0;i!=256;i++)
if(str2[i]==1)//判断数组中被str1填充的位置,填充的是非0值,没填充的是0值
printf("%c",i);//输出str2的下标值,对应str1中的字符值
putchar('\n');

  13-6 数组循环右移

int ArrayShift( int a[], int n, int m )
{
	int b[1000],i;
	for( i=0 ; i<n ; i++ )
	{
		if(m>n)
		
		while(m>n)
			m=m-n;
		
		if(i-m<0)
		b[i]=a[n-m+i];
		else
		b[i]=a[i-m];
	
	}
	for( i=0 ; i<n ; i++ )
	{
		a[i]=b[i];
	}
}

  14-4 输出月份英文名

char *getmonth( int n )
{
	if(n==1)
	return ("January");
	if(n==2)
	return ("February");
	if(n==3)
	return ("March");
	if(n==4)
	return ("April");
	if(n==5)
	return ("May");
	if(n==6)
	return ("June");
	if(n==7)
	return ("July");
	if(n==8)
	return ("August");
	if(n==9)
	return ("September");
	if(n==10)
	return ("October");
	if(n==11)
	return ("November");
	if(n==12)
	return ("December");
	else return (NULL);
	 
}

  15-3 函数实现字符串逆序

void f(char *s)
{ 
char c,*p,*q; 
p=q=s; 
  while (*q)
   q++;
   q--;
 while ( p<q ) {
  c=(*p);
  (*p)=(*q); 
  (*q)=c; 
  p++; 
  q--; 
  
  }
}

  三、遇到的问题和解决办法。

1.测试点没有考虑周全

2.编译过程小错误不断

3.遇到问题应及时想他人求助

4.不要累计问题