张照行 的第十一次作业

1.一开始还迷惑我们,假装很简单的样子。。。

#include<stdio.h>
void sum(int *p)
{
    int i,sum=0;
    for(i=0;i<5;i++)
        sum=sum+*p++;
    printf("%d",sum);    
} 
int main()
{
    int a[5]={1,9,2,8,10};
    int *p=a;
    sum(p);
    return 0;
}

2.一开始不知道改了题目还做了一下字符串的那个,好麻烦啊,比较字符串大小如果是一个个比的话就是二维数组还要对应着比,字符串之间要怎么比较的确是要考虑好多东西,还有字符串要互换位置也是又要想半天,后来看见换成字符了,但还是被空格和回车坑了,各种错误,各种想,各种改。。。相比上题难度翻了好几倍啊!

#include<stdio.h>
int main()
{
    char a[5],temp;
    char *p=a;
    int i,j; 
    for(i=0;i<5;i++)
        scanf("%c",&a[i]);
    for(j=0;j<5;j++)
    {
        for(i=4;i>0;i--)
        {
            if(a[i]<a[i-1])
            {
                temp=p[i];
                p[i]=p[i-1];
                p[i-1]=temp;
            }
        }
    }    
    for(i=0;i<5;i++)
        printf("%c\n",*p++);
    return 0;                        
} 

再上一个输入字符串排序版本的

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
    char *p[5];
    char str[100],*temp;
    int i,j;
    for(i=0;i<5;i++)
    {
        scanf("%s",str);
        p[i]=(char *)malloc(sizeof(char)*strlen(str));
        strcpy(p[i],str);
    } 
    for(j=0;j<5;j++)
    {
        for(i=1;i<5;i++)
        {
            if(strcmp(p[i],p[i-1])<0)
            {
                temp=p[i];
                p[i]=p[i-1];
                p[i-1]=temp;
            }
        }
    }
    for(j=0;j<5;j++)
        printf("%s\n",p[j]);
    return 0;
}

3.老师上课讲过的特别相似的,倒也还好。。。。

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int *p=new int[10];
    int i;
    for(i=0;i<10;i++)
        scanf("%d",&p[i]);
    for(i=0;i<10;i++)
        printf("%d    ",p[i]);
    free(p);            
    return 0;
}

4.又是这种古怪的题,一开始再次不能理解题目,没弄清初始化是个什么东西啊,然后指针还没有完全清楚,就一直试着编,瞎搞一通后脑袋里成功全是浆糊,还得继续试,慢慢也更熟悉了一些,就是有几个关键的地方老错,怎么换都不对,就卡在那里了,后来通过请教助教,查询,问人,最后又听了课之后,应该算是用指针初始化并打印出来二维数组了,,,难度max啊!

也是附上两个版本,一个是自定的初始化,一个是用户输入的初始化

#include<stdio.h>
int main()
{
    int a[10][10],i,j,n=0;
    int *p[10];
    for(i=0;i<10;i++)
        p[i]=a[i];
    for(i=0;i<10;i++)
    {
        for(j=0;j<10;j++)
        {
            p[i][j]=n++;
            printf("%d    ",p[i][j]);    
        }
        printf("\n");
    }        
    return 0;
}
#include<stdio.h>
int main()
{
    int a[3][3],i,j,n=0;
    int *p[3];
    for(i=0;i<3;i++)
        p[i]=a[i];
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            scanf("%d",&p[i][j]);    
        }
    }
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            
            printf("%d    ",p[i][j]);    
        }
        printf("\n");
    }        
    return 0;
}

本来我是感觉用户自己输入的会更难一些,因为我感觉我自己在尝试scanf时用指针遇到了更多的疑惑和问题,结果最后做下来的结果却是很相似的。。。就只是用了p[i][j],因为指针有这里有一些相似的代码是等价的,而有一些却不相同,这个我觉得大家都还不是特别的清楚,希望能看到更多版本,也希望助教后面可以给我们展示不同的版本。最后,我还有一个问题,我的第一个for循环里面是p[i]=a[i],它与p[i]=a[i][0]有什么区别,不应该都是指向数组首地址吗,为什么我用后者就会报错啊。

 

感想:指针感觉一下子就听不懂了,格式还是知道的太少了,不知道应该怎么用,听下来还好,但一做,就有很多小细节容易犯错,如果错的太多容易改了一处还错,就又把改了的给改回错的了,我们知道的还有些片面,感觉差别就在之前是没看到错误然后一直在找,现在是都不知道哪里错了,怎么改才是对的,看到错误都不知道是错的,这就难过了。希望之后多做能够让思路越来越清晰吧。

posted @ 2016-12-09 11:49  张照行-160809332  阅读(126)  评论(1编辑  收藏  举报