C语言第九次博客作业--指针

一、PTA实验作业

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

1.本题PTA提交列表

2. 设计思路

函数传入地址,给形参s
定义flag,i为循环变量,k为字符串数。
k=strlen(s)-1。
for i=0 to i<=k
    如果s[i]!=s[k],则flag=1。
        i++,k--
end
如果flag==0
    则返回true
其他
    则返回false

3.代码截图

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

  • 1.k的值没有算对。

    解决方法:将k=strlen(s)改为k=strlen(s)-1。

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

1.本题PTA提交列表

2. 设计思路

3.代码截图

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

  • 无。

题目3:6-11 报数

1.本题PTA提交列表

2. 设计思路

定义环境变量i,j=0,count=0,length,数组circle[MAXN],temp[MAXN]
for i=0 length=0 to  i<n
  circle[i]=i+1
  i++,length
 end
while(length>0)
  for i=0 to i<n
    若circle[i]不等于0
       则count++
    否则continue
    若count%3==0
       则temp[j]=circle[i]
       j++,circle[i]=0,length--
end
for i=0 to i<n
  j=temp[i]
  out[j-1]=i+1
end

3.代码截图

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

  • 对数组角标和对应的号码在做题过程中有点混乱。

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

三、阅读代码

代码一


本题对字串的处理通过j=i,k=0;str1[j]==str2[k];j++,k++,以及!str2[k+1]的判断,十分的巧妙。

代码二

#include <stdio.h>
#define MAXN 10

int ArrayShift( int a[], int n, int m );

int main()
{
    int a[MAXN], n, m;
    int i;

    scanf("%d %d", &n, &m);
    for ( i = 0; i < n; i++ ) scanf("%d", &a[i]);

    ArrayShift(a, n, m);

    for ( i = 0; i < n; i++ ) {
        if (i != 0) printf(" ");
        printf("%d", a[i]);
    }
    printf("
");

    return 0;
}
int ArrayShift( int a[], int n, int m ){
	int i,j,temp;
	for(i=1;i<=m;i++){
		temp=a[n-1];
		for(j=n-1;j>0;j--){
			a[j]=a[j-1];
		}
		a[0]=temp;
	}
	return 0;
}

这和我之前用的一下子都移动的方法不同,相比之下这个代码更简洁且可读性更高而且不用考虑特殊的输入情况,值得学习。

四、本周学习总结

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

  • 1.学会指针的基本使用。
  • 2.懂得了数组和指针的关系和联系。
  • 3.学会了字符串的一些函数。
  • 4.使用指针,减少了数组题目的代码长度。

2.罗列本周一些错题。

  • 1.
    一开始指针概念不熟悉,对指针的概念比较模糊。
  • 2.
    *a指的是指向地址的值。
  • 3.
    调用函数时,只有给出数组首地址即可。
原文地址:https://www.cnblogs.com/oracler0103/p/8037840.html