zoukankan      html  css  js  c++  java
  • C博客作业--指针

    一、PTA实验作业

    题目1:6-2 求出数组中最大数和次最大数

    1. 本题PTA提交列表

    2. 设计思路

    定义变量i,j用于循环,t用于中间转换量,max表所求最大值 
        (外)for i=0 to 2 
              max=i 假设a[0]最大
    	    (内)for j=i+1 to n
       	            如果 a[j]>a[max]  max=j 最大下标改变 
    		a[i] 与 a[max] 交换 
        end for
    

    3.代码截图

    4.本题调试过程碰到问题及PTA提交列表情况说明

    • 完全错误,在查找最大值及与第一个数交换地方不对,思路上一开始打算把最大、最小值分别找出来,最后与第一、二个数进行交换,无法得出答案;
    • 重新组织思路,在找完第一个数之后,接着直接从第二个数与后面数相比较,进行内外循环;
    • 发现在实现一次的查找之后,次大数应直接从1开始,所以要在内循环里做改变,为使第二次能从1开始查,j=i+1;
    • 答案错误,次大值位置错,说明内循环与交换有问题,调试发现执行内循环时括号匹配错,在if(a[j]>a[max])判断时加上括号会使最大值换值出错;


    题目2:6-4 找最大值及其下标

    1. 本题PTA提交列表

    2. 设计思路

     定义变量i用于循环,max存放最大值 
    	初始化:i=0;max=0;*b=0;
        for i=1 to n-1
        	如果 a[i]>a[max] max=i 改变最大值下标	  
    	            a[max]=a[i] 交换 
        *b=max;
        end for
    

    3.代码截图

    4.本题调试过程碰到问题及PTA提交列表情况说明

    • 答案错误,,position的值未进行说明得出,不断调试,发现一是循环内条件出错以及返回值不相符;

    • 本题要求找最大值,一开始写成交换代码,没有下标返回,应该只要进行一次的对比,然后利用指针将对应最大下标max传回原来的内存中;

    题目3:6-7 过滤字符串只保留串中的字母字符

    1. 本题PTA提交列表

    2. 设计思路

    3.代码截图

    4.本题调试过程碰到问题及PTA提交列表情况说明

    • 答案错误,判断过滤不正确;

    • 调试,字符串的个数正确,新输出的字符串没发生变化,说明返回新的字符串过程错误,修改,使新的字符串赋值到原来的里面返回;


    二、截图本周题目集的PTA最后排名

    三、阅读代码

    代码1:
    冒泡排序:重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来;遍历数列的工作是重复地进行直到没有再需要交换;
    #include<stdio.h>
    #include<assert.h>
    #include<stdlib.h.h>
    int main(){
        TestBubbleSort(BubbleSort1);
        TestBubbleSort(BubbleSort2);
        system("pause");
        return 0;
    }
    void BubbleSort1(int *arr,int sz){//从头向尾遍历,相邻两数进行比较,将最大数(相对)沉入尾部(相对)
        int i = 0;
        int j = 0;
        assert(arr);
        for(i=0;i<sz-1;i++){
            for(j=0;j<sz-i-1;j++){
                if(arr[j]>arr[j+1]){
                    int tmp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = tmp;
                }
            }
        }
    }
    void BubbleSort2(int *arr,int sz){//从尾向头遍历,相邻两数进行比较,将最小数(相对)冒泡到头部(相对)
        int i = 0;
        int j = 0;
        assert(arr);
        for(i=0;i<sz-1;i++){
            for(j=sz;j>i;j--){
                if(arr[j]>arr[j-1]){
                    int tmp = arr[j];
                    arr[j] = arr[j-1];
                    arr[j-1] = tmp;
                }
            }
        }
    }
    //为了方便起见,将参数设定为一个函数指针
    void TestBubbleSort(void (*BubbleSort)(int *arr,int sz)){
        int arr[]={1,3,5,7,9,2,4,6,8,0};
        int i = 0;
        int sz = sizeof(arr)/sizeof(arr[0]);
        BubbleSort(arr,sz);
        for(i=0; i<sz; i++){
            printf("%d ",arr[i]);
        }
        printf("
    ");
    }
    int main(){
        TestBubbleSort(BubbleSort1);
        TestBubbleSort(BubbleSort2);
        system("pause");
        return 0;
    }
    程序分析:
    该代码功能:实现排序;
    优点:这两种方式相对来说容易理解,不属于复杂级的,而且利用函数进行解答,可以对函数进行巩固,也可以给对使用冒泡法不清楚的同学进行参考,掌握;
    
    代码2:
    #include<stdio.h> 
    int main()
    { 
        int a,b,num1,num2,temp; 
        printf("please input two number:
    "); 
        scanf("%d%d",&num1,&num2); 
        if(num1<num2){
            temp = num1;
            num1 = num2; 
            num2 = temp; 
        } 
        a=num1; 
        b=num2; 
        while(b!=0){ /*利用辗除法,直到b为0为止*/ 
        temp=a%b; 
        a=b; 
        b=temp; 
        }
      printf("gongyueshu:%d
    ",a);
      printf("gongbeishu:%d
    ",num1*num2/a); 
    }
    程序分析:
    该代码功能:输入两个正整数m和n,求其最大公约数和最小公倍数;
    优点:利用了辗转相除法,它处理大数时非常高效,它需要的步骤不会超过较小数的位数(十进制下)的五倍,熟悉它后可以也利用递归思想进行解题,提升代码能力;
    

    四、本周学习总结

    1.自己总结本周学习内容

    • 指针深入学习,应用指针,对指针进行初始化操作,初值置为空,指针与函数结合进行数组、字符串间的习题训练,更了解指针的用法;指针可以进行改变,对该指针进行赋值等操作,指向其他单元地址,从而表示不同的内容,表示数组时,*(p++)就可以逐个表示所表示数组内的值; 指针用于函数中时,又可以实现将数据返回到主函数中特定的值;
    • C语言常用字符串处理函数链接:http://m.blog.csdn.net/junyucsdn/article/details/50759021
    • 结构体学习,在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据,结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员,【注意】大括号后面的分号;不能少,这是一条完整的语句;
    一般形式:
       struct 结构体名{                   struct stu{
            结构体所包含                       int num; //学号
            的变量或数组                       char *name; //姓名                                                                    
      };                                     int age; //年龄
                                             char group; //所在学习小组
                                             float score; //成绩
                                        };
                                                           
    

    2.罗列本周一些错题

    课堂派错题1:

    此题错在对-->的使用在预习结构体时还不理解熟悉,选错;
    正确答案:D
    [解析]:通过结构体变量引用其成员用“.”,通过结构体指针引用其成员用“-->”,本题中选项A、B和C引用其成员变量都正确,选项D数组越界;

    课堂派错题2:

    #include <conio.h>
    #include <stdio.h>
    #define  M  20
    void  fun ( int a[ ], int x, ______1___ )
    {
    	int i,j;
    	for(i=0;i<*n;i++)
    	   if(____2____) 
    	       break;
       for(j=i;____3____;j++)
    	   a[j]=a[j+1];
       _______4______;
    }
    
    int main( )
    {
       int k, m, x, a[M];
      
       printf( "
    Please enter a number: " ); 
       scanf( "%d", &m );
       printf( "
    Please enter %d numbers(from small to large): ", m );
       for( k = 0; k < m; k++ )  
          scanf( "%d", &a[k] );
       printf ("
    Enter x :  "); 
       scanf ( "%d", &x );
       fun (a, x, &m );
       printf( "
    After deleter:
    " );
       for( k = 0; k < m; k++ ) 
           printf( " %d,", a[k] );
       printf("
    ");
       
    }
    参考答案:int *n
             a[i]==x
             j<*n-1
             *n=*n-1
    我的作答:int *n 
             n==0
             j<*n
            a[j]=''
    
  • 相关阅读:
    去除图片水印
    CALayer
    UIKit Animation
    CoreAnimation
    3DTouch
    键盘事件
    weChat聊天发送图片带有小尖角的实现
    webView 和 js 交互 之 屏蔽 样式
    iOS socket编程
    tableView尾部多处一部分空白高度
  • 原文地址:https://www.cnblogs.com/78tian/p/8030487.html
Copyright © 2011-2022 走看看