C博客作业--指针

一、PTA实验作业

题目1:6-6 输出月份英文名

1. 本题PTA提交列表

2. 设计思路

3.代码截图

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

答案错误:其中有一个月份的英文名的首字母大小写出现问题。

题目2:6-8 使用函数实现字符串部分复制

1. 本题PTA提交列表

2. 设计思路

定义整形变量i
for(i=0;i<m-1;i++)
  执行m次循环将t的地址推到要求地方
while(*t)
	*(s++)=*t;  把值赋给s
 t++
循环结束也结束s

3.代码截图

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

答案错误:开始就把t的地址赋给s,导致错误。
解决方法:认真查看代码,发现开始的这一步有异常。尝试删除后正确。

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

1. 本题PTA提交列表

2. 设计思路

定义字符变量Max为‘ ’,定义数组a
定义整形变量i=0,count=0,index
for(i=0;*(p+i);i++){
  如果*(p+i)大于Max,Max=*(p+i),index=i
 count++}
把p[index]赋给a[0]
for(i=0;i<index;i++)
   把p中index前的值赋给a
for(i=index+1;i<count;i++)
 把p中index后的值赋给a
for(i=0;i<count;i++)
把a的值赋给p

3.代码截图

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


开始这一块是这样循环,导致p的地址发生了改变,所以最后答案一直有问题,
经过调试发现了问题,询问同学,帮忙找出了错误。对循环体进行了改善使p的地址不变

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

三、阅读代码

  • IP地址转换

一个IP地址是用四个字节(每个字节8个位)的二进制码组成。请将32位二进制码表示的IP地址转换为十进制
格式表示的IP地址输出

#include<stdio.h>
int main()
{
	char s[33],c;
	int sum=0,put[4],cnt=0;
	for(int i=1;i<=32;i++){
		c=getchar();
		sum=sum*2+c-'0';
		if(i%8==0){
			put[cnt++]=sum;
			sum=0;
		}
		
	}
	printf("%d.%d.%d.%d",put[0],put[1],put[2],put[3]);
	return 0;
	
}

该代码利用ip地址规定的4个二进制转十进制的数定义了数组put来存放
用一句sum=sum*2+c-'0'直接实现字符和整形的转换和二进制和十进制的转换
在8个字符后重新赋值sum。代码很巧妙,所以很简短。

  • 课堂派指针

给定程序中,函数fun的功能是:将形参s所指字符串中的所有数字字符顺序前移,

其他字符顺序后移,处理后新字符串的首地址作为函数值返回。

#include  <stdio.h> 
#include  <string.h> 
#include  <stdlib.h>
 #include  <ctype.h>
 char *Fun(char  *s);
 int main()
 {   
     char  s[80];   
      printf("Please input: ");   
      scanf("%s",s);   
      printf("\nThe result is: %s\n",Fun(s));  
      }
 char *Fun(char  *s) 
{  
     int  i, j, k, n;   
     char  *p, *t; 
     n=strlen(s)+1;   /* 字符串的长度,包括结束符标志 */  
     t=new char[n];   
     p=s;  
     j=0; k=0;  
     for(i=0; i<n; i++)  
     {     
       if(isdigit(s[i]))  /* 如果是数字 */     
       p[j++]=s[i];      
        else        
       t[k++]=s[i];  
        }  
       p[j]=t[k]='\0';   
       strcat(p,t);    
        return p;
    }

该代码用了两个数组,设置一个循环判断是否为数字,一个数组专门存放
数字。遍历完数组后用库函数strcat把两个数组结合,数字数组放前面就可以了
方法很简单,用库函数问题直接变简单了

四、本周学习总结

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

  • 指针与数组共通,定义的指针如int *p,把p拿出来p[]就可以变成数组
  • 定义的指针需要初始化,不然会出现问题。
  • 定义一个指针指向另一个指针,对该指针进行赋值等操作,由于地址内容变化
    只要有关该地址的指针都会变化
  • 题目中要注意指针的地址问题,地址发生改变,还是对原地址操作会发生错误

2.罗列本周一些错题

  • 原回答:fun(a,n)
    *n++;
  • 正确答案:fun(a,&n)
    n=n+1
    该函数定义的是指针,所以传递过去的应该是地址,所以n前要加&
    *n++表示地址加,而该题表示一个个数值所以是*n=*n+1

数组名是地址常量不能变

  • 我的回答 Fun(a,x,&n)
    break;
    j>=i;
    a[*n+1}='\0'
  • 正确答案 Fun(a,x,&n)
    break;
    j>i;
    n=n+1
    循环个数没有判断好,应该是j>i
    最后要加上n=n+1;
    才能跳出循环
posted @ 2017-12-15 19:49  圣多美  阅读(383)  评论(2编辑  收藏  举报