• C博客作业--指针


    一、PTA实验作业

    题目1:6-3 统计大于等于平均分人数

    1. 本题PTA提交列表

    2. 设计思路(伪代码或流程图)

    int fun ( float *s, int n, float *aver )
         定义整型变量i,j;浮点型变量sum=0,ave
         遍历数组    sum=sum+*(s+i)
         求平均分    ave=sum/n*1.0
         n=0;
         遍历数组,若大于等于ave,n++
         *aver=ave
         返回n值
    

    3.代码截图

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

    • 一开始计算平均分ave的时候,用i-1作为个数,用Dev c验证的时候,答案是正确的,但是提交PTA时总是答案错误,想不明白为什么;

    • 后面找舍友帮忙解决,发现传过来的形参中n就表示成绩的个数,改用n后,答案依然正确,PTA提交也正确,和舍友讨论了很久,用i来表示的话最后值会莫名加1,本来i应该等于n的,但是用i答案错误,i-1答案正确,但PTA过不了,所以只能用n;

    题目2:6-5 判断回文字符串

    1. 本题PTA提交列表

    2. 设计思路(伪代码或流程图)

    定义一个指针*a=s,定义i=0,j=0,k=0;
    遍历数组 i++,a++;i,j都为数组长度
    a--;
    while(*s!='')
        如果*s==*a    k++;
        否则 返回FALSE;
        s++;a--;
    如果k==i    表示对称,返回TRUE
    

    3.代码截图

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

    • 这一题遇到了一个很头疼的问题,在编译器上调试的时候,主函数编译不过去,提交PTA显示编译错误,但是我觉得代码是没问题的,可是没法调试了,这很尴尬,想了很久没想出什么问题;
    • 后来在q群上发求助,同学说把typedef enum {false, true} bool;里面的false、true、bool都改成大写,返回值也用大写,而且在PTA里函数之前还要重新写这段代码,编译才过得去;

    题目3:6-10 字符串串动变化

    1. 本题PTA提交列表

    2. 设计思路(伪代码或流程图)

    3.代码截图

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

    • 这题虽然在PTA上面一次提交正确,但是在编译器上有过错误,主要是后移时j的初值取错了,应该是j=index,我开始用i=index-1;是一个不该犯的错误
    • 测试后重新看下代码,立马就发现问题了

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

    三、阅读代码

    1.吴军霖古风排版代码

    #include<stdio.h>
    int main()
    {
        int n,m,sum;
        static char s[1111];
        scanf("%d ",&n);
        gets(s);
        for(sum=0; s[sum]; sum++);
        m=sum/n+(sum%n>0);
        for(int r=1;r<=n;r++){ 
            //n行m列. 
            for(int c=m;c;--c){
                if(s[n*(c-1)+r-1]) printf("%c",s[n*(c-1)+r-1]);
                else printf(" ");
            }
            printf("
    ");
        }
        return 0;
    }
    
    • 这题代码量很少,但是方法很巧妙,也有点难理解,定义sum,用循环求出排版需要的列数m,m=sum/n+(sum%n>0)是最巧妙的地方,随后用嵌套循环逐列从右到左输出字符,这里巧妙的找到了行、列的值与下标之间的关系,遇到结束符输出空格,直到最后一行最后一列;

    2.删除字符子串的代码

    #include<stdio.h>
    int main()
    {
    	char s[81],sub[81];
    	gets(s);
    	gets(sub);
    	int i,j;
    	do{
    		for(i=0,j=0;s[i];i++){
    			if(s[i]=sub[0]){
    				for(int u=1;sub[u];u++)  if(s[i+u]!=sub[u]) break;
    			if(sub[u]='')   i=i+u;
    			}
    		}
    		s[u++]=a[i++];
    	}while(u!=i);
    	puts(s);
    	return 0;
    }
    
    • 利用三个循环,对数组进行重新构建,遍历母串,如果找到一个字符等于子串的第一个字符,判断接下去的字符是否都跟子串对应相等,如果不等,跳出循环,都相等,i就跳过一个子串的长度,s[u++]=a[i++]为构建数组的操作,不断循环判断,直到u==i;

    四、本周学习总结

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

    (1) 用指针表示数组,可以通过指针对数组进行操作;

    int a[10];
    int *p;
    p=a;
    //可以通过指针p对数组赋值,*(p+1)=1;即a[1]=1
    

    (2)将指针作为形参传入函数,可以在函数里用指针,对对应的实参进行操作,而且操作保留,可以返回多个值,例如;

    void fun(int *p,int *q);
     int main()
     {int a,b;
      scanf("%d%d",&a,&b);
      fun(&a,&b);
      printf("%5d%5d
    ",a,b);
      return 0;
     }
    void fun(int *p,int *q)
    {
    	int m,n;
    	m=*p%100;
    	n=*q%100;
    	*p=*p/100*100+n;
    	*q=*q/100*100+m;
    }
    

    (3)初步了解了结构,结构大概就是自己定义的一个数据类型,里面可以包含很多成员,成员的类型也可以多种;

    (4)如何定义结构类型(struct是关键字+结构名)

    struct point{
       double x;
       int y;
    };
    

    (5)结构的嵌套定义:

    struct date{
       int year,month,day;
    };
    struct student{
       int num;
       char name[10];
       int computer,english,math;
       double average;
       struct date addr;
    };
    

    (6)在main函数中可以定义结构变量,结构变量通过结构成员操作符“.”对某个成员进行引用,如果两个结构变量类型相同,也可直接赋值;如:

    
    struct student{
       int num;
       char name[10];
       int computer,english,math;
       double average;
    };
    int main(){
       struct student s1,s2;
       s1.num=2;
       s1,average=60.5;
       s1=s2;
    

    (7)上周第一次做流程图,一些简单的代码懂得用流程图来表示了,也学会了一些作图软件的基本操作;

    2.罗列本周一些错题



    • 这题主要对指针的运用还是不太熟练,指针p应该指向s,还有后面返回值应该返回p,a完全是我捏造出来的;


    • 调用函数需要一个返回值,所以要将结果赋给变量sum;

    • 这题对题目没有理解,导致都错了

    • 做得太急,这个函数不需要返回值,最后n=n-1表示删除后的最后一个元素;

    • 形参传的应该是n的地址,n表示地址,n++便是地址加1,应该用n=n+1;
  • 相关阅读:
    从SQL注入谈数据访问层
    Combobox下拉框两级联动
    C#IO流文件操作
    网络电视精灵思路分析
    简单工厂和单例设计模式浅解
    可扩展标记语言
    深入理解多态
    未将对象引用到实例
    Python 项目实践二(生成数据)第一篇
    Python 项目实践一(外星人入侵小游戏)第五篇
  • 原文地址:https://www.cnblogs.com/mayifang/p/8035038.html
Copyright © 2020-2023  润新知