C博客作业--指针

一、PTA实验作业

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

1. 本题PTA提交列表(要提交列表,不是结果)

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

    定义指针p、q,整型变量i用于循环,flag=1用于记录存在字母不相同的情况,n用来表示该字符串有多长
    当s[i]!='\0'时,数出该字符串有多长
    for p=s,q=s+n-1  to p<=q   
	如果*p!=*q
	  	flag=1并结束循环
    end for
    如果flag==1
	return false
    否则
	return true

3.代码截图(注意,截图,截图,截图。不要粘贴博客上。不用用···语法去渲染)

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

最初q的位置找错了,造成运行超时

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

1. 本题PTA提交列表(要提交列表,不是结果)

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

3.代码截图(注意,截图,截图,截图。不要粘贴博客上。不用用···语法去渲染)

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


最开始还数了该字符串有多长,然后提交上去是部分正确,后面把计算字符串有多长的去掉了就对了

题目3:6-11 报数

1. 本题PTA提交列表(要提交列表,不是结果)

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

    定义整型变量i用于循环,k=1,count用来记住报的数字是多少,number记录每次参与游戏的有几个人
    定义数组a[n];
    for  i=0 to i<n
        从1到n依次给每个人编号
    参与游戏的人数number大于等于1时
    for i=0   to  i<n
    如果a[i]等于0
        跳过后面的语句,继续下一次循环
    count++
    如果count==m
        a[i]赋值为0
        out[i]=k++记录第几个退出游戏
        count重新赋值为0
        人数number少1
    end for 

3.代码截图(注意,截图,截图,截图。不要粘贴博客上。不用用···语法去渲染)

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

这题想了很久都不知道要如何才能实现。后来参考了网上的代码,觉得豁然开朗,就模仿着写了。如果自己想,我估计想个好几天都想不出来。

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

三、阅读代码

1.

#include<stdio.h>
#include<string.h>
int main(void)
{
    char a[81];
    gets(a);
    char b[81];
    gets(b);
    char *p;    
    char c[81];
    while((p=strstr(a,b)) != NULL) { //strstr 找不到返回 NULL 
        *p = '\0'; // 指定连接下一步(连接函数)之前 a 的终止位置; 
        strcpy (c, p+strlen(b)); // strcat 函数中的两个传入参数的内存地址不能重叠,所以这里用 c 当作 temp 
        strcat (a, c);
    } 

    puts(a);
    
    return 0;
}

用strstr判断是否存在子串,存在的话就用函数返回第一次匹配的字符串的地址,如果是自己做会用for语句来找出第一个字母相同的地方,然后判断后面的字母是不是也相同,如果都相同,就记住第一个字母的位置,然后再将子串删除,别人的做法明显方便简洁多了

2.

#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;
}

这题用到了isdigit这个函数判断是否为数字,在没学过这个函数之前,我们的做法都是判断是否大于0并且小于9,用这个函数,可以让我们的代码更加简洁,很值得学习

四、本周学习总结

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

1.这周新学了结构,结构的定义如下

    struct 结构名 {
      类型名 结构成员名1;
      类型名 结构成员名2;
      ···
     类型名 结构成员名n;
};

在定义嵌套的结构类型时,必须先定义成员的结构类型,再定义主结构类型

2.学了新的操作符“.”,结构变量可以通过结构成员操作符“.”对其某个成员进行引用。结构成员运算符的优先级属最高级别。
当两个结构变量的类型相同时,可以直接赋值,将一个结构变量的所有成员值都复制给另一个

3.学习了一些常见的字符串操作函数,如
strcar连接2个字符串
strcmp比较2个字符串的对应字符是否相等
strcpy将一个字符串复制到另一个字符串上
strlen计算字符串的长度
strchr在字符串中找到第一次出现要找的字符的首地址
strstr在母串中找到第一次出现子串的首地址

2.罗列本周一些错题。


第二处循环条件错误没改出来


第一空赋值错误,在做题的时候不是很清楚该赋值哪个

posted @ 2017-12-17 16:58  hoppp  阅读(260)  评论(3编辑  收藏  举报