• C语言实验报告


    一、实验题目,设计思路,实现方法

    实验题目:十一次 11-7  十二次12-8 十三次 13-5 十四次 14-3 十五次 15-7

    设计思路:11-7:鞍点就是行最大列最小,分两点,一:只有一行一列则必然是鞍点,二:二维(行列大于1)。先从第一行开始找行最大,再在这个数字所对应的列中寻找列最小,若就是行最大,则输出该点的行列下标,不是则进入下一行继续寻找。

         12-8:计算字符长度,字符串排序,除去排好字符里的重复字符,并放入新的字符组里,然后输出

         13-5:计算字符串长度,i从0开始增,j从长度减一开始减,当i<j时,一直判断该两个位置的数是否相同,若有不同循环结束,输出不是回文,若一直循环到i>=j则输出是回文。

            14-3:值得注意的是要返回是的首地址,先找到s的首地址,然后t从首地址依次赋给s末地址及后面的地址。

                      15-7:根据规律,找到递归出口和递归调用函数。

    二、源程序

    11-7

    #include <stdio.h>  
    int main()  
    {  
        int a[6][6];//定义二维数组  
        int n;  
        scanf("%d",&n);  
        int i,j;  
        for(i=0; i<n; i++)  
            for(j=0; j<n; j++)  
            {  
                scanf("%d",&a[i][j]);  
            }  
        int k=0,y=0,flag=1,p=0;  
        if(n==1)  
            printf("0 0");//只有一个点时,一定是鞍点  
        else  
        {  
            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;  
                }  
            }  
            if(flag==0)  
                printf("%d %d",i,k);  
            else printf("NONE");  
        }  
        return 0;  
      
    }  

    12-8:

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include<math.h>
    int main()
    {
        int min,i,j,k=0;
        char str[80],str_pr[80],t;
        gets(str);
        int c;
        c=strlen(str);//strlen计算字符长度,头文件string.h
        for(j=0;j<c;j++){
            min=j;
            for(i=j+1;i<c;i++)
            if(str[min]>str[i])
            min=i;
            t=str[min];
            str[min]=str[j];
            str[j]=t;
        } //字符串排序
        for(i=0;i<c;i++){
            for(j=i;j<c;j++){
                if(((' '<=str[j]&&str[j]<='~'))&&(str[j]==str[i])){
                    str_pr[k]=str[j];
                    for(int x=0;x<c;x++){
                        if(str_pr[k]==str[x]){
                            str[x]=0;
                        }
                    }
                    k++;
                }
            }
        } //除去排好字符里的重复字符,并放入str_pr字符组里
        for(i=0;i<k;i++){
            printf("%c",str_pr[i]);
        } 
        return 0;
    }

    13-5:

    bool palindrome( char *s )
    {
        int len=strlen(s);
        int k=0,i=0,j=len-1;
        while(i<j){
            if(s[i]!=s[j])
            break;
            i++;
            j--;
        }
    
        if(i>=j)
        return true;
        else
        return false;
    } 

    14-3:

    char *str_cat( char *s, char *t )
    {
        while(*s!=0)
           s++;
        while(*t!=0){
            *s=*t;
            s++;
            t++;
        }
        *s='';
        return s;
    } 

    15--7:

    int f( int n ){
      if(n==0) return 0;
      else if(n==1) return 1;
      else {
      
        return f(n-2)+f(n-1);
      }
    }

     三、遇到的问题及解决方法、心得体会

    11-7

    遇到的问题:在寻找列最小时忽略了验证该数是否与行最大在同一行且为同一个

     解决方法:增加了验证了列最小的数所对应的行坐标是否等于行最大的行标

    12-8

    遇到的问题:删除重复字符并放入新的字符串中,在输出时,有出现乱码

     解决方法:问同学,重新整理思路,换了一种写法

    14-3

    遇到的问题:把简单的问题复杂化了

     解决方法:在同学的指点下成功完成了该代码

    15-7

    遇到的问题:初学还不是很懂递归的应用

    解决方法:多看看书里的写法,多练习

    心得体会:

    1、下学期要多多敲代码,特别是课本上的例题,用的做法很经典,而自己一直用笨方法解题,费时费力;

    2、多把时间放在PTA上,但也要经常复习课本的基础知识,温故而知新,基础知识就像我们搭建搭建房子的砖头一样,不起眼但缺一不可;

    3、手写代码依然存在较大问题,以后要锻炼自己的手写能力;

    4、不会就要多问问同学,如果遇到同学也不会的就问老师。

     

  • 相关阅读:
    [BZOJ3997][TJOI2015]组合数学(Dilworth定理+DP)
    [BZOJ4000][TJOI2015]棋盘(状压DP+矩阵快速幂)
    BZOJ2462[Beijing2011]矩阵模板(二维Hash)
    [BZOJ2458][BeiJing2011]最小三角形(分治)
    [HDU5354]Bipartite Graph(CDQ分治+并查集)
    [NOIP2017]时间复杂度(模拟)
    [Luogu2540][NOIP2016]斗地主增强版(搜索+DP)
    [Luogu1979][NOIP2013]华容道(BFS+SPFA)
    WQS二分题集
    [CC-XXOR]Chef and Easy Problem
  • 原文地址:https://www.cnblogs.com/lixueting0904/p/8342826.html
Copyright © 2020-2023  润新知