C博客作业--指针

一、PTA实验作业

6-3 统计大于等于平均分人数

1. 本题PTA提交列表

2. 设计思路

  - 1.定义i用于循环,flag存放大于平均分人数,sum为总分数。
  - 2.使用for循环,累加sumfor(i=0;i<n;i++,s++){
		sum=sum+*s;
	}
  - 3.求平均值,存放于*aver中
  - 4.使用for循环,当数组中元素大于平均值时,flag++
        for(i=n-1;i>=0;i--,s--){
		if(*s>=*aver){
			flag++;
		}
	}
  - 5.return flag;

3.代码截图

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

第二个for循环中,刚开始调试,统计的人数不对,因为 i 所指的数组数和 s 所指的数组数不一致,当i 指向0时,s才刚刚知道s【1】,也就是少了一个,所以人数不对,多次调试和循环后在第二个for循环上加了一个 s--; 得到正确答案。

6-7 过滤字符串只保留串中的字母字符

1. 本题PTA提交列表

2. 设计思路

1.定义flag用于统计数字,temp用于统计字符个数
2.使用for循环,每次循环temp加一,
3.如果指针指向的数为阿拉伯数字,查看下一个是否阿拉伯数字,直到指针指向字符,将其赋给第一个遇见阿拉伯数字的指针
if(*ptr>='0'&&*ptr<='9'){
			if(*(ptr+flag)>='0'&&*(ptr+flag)<='9'){
				flag++;ptr--;temp--;//遇到阿拉伯数字temp--
			}
4.如果指正不指向阿拉伯数字,指针就指向指针地址加上flag
else
			*ptr=*(ptr+flag);//指针指向地址加flag,
5.当指针指向\0时退出循环
6.将此时指针指向的数改为\0
7.return temp-1

3.代码截图

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

  • 刚开始思路那里第三步当指针指向阿拉伯数字时我就将其赋为ptr+1;这样导致的问题时ptr+1可能也是阿拉伯数字而导致输出如图

  • 后来输出字符的数量有问题,我的代码只会把原数组的总字符量减2,也就是出现如下如所示的,明明只有六个字符,却输出9,所以重新定义整形数temp,统计字符个数

6-9 求子串在母串中最后一次出现的地址

1. 本题PTA提交列表

2. 设计思路

3.代码截图

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

  • 一开始无论如何都输出 no found! ,是因为很多的小问题使我的flag1永远都不等于0,也就是永远返回0,经过调试改回

  • 后来是无法输出字符串,经同学知道知道是我的返回地址写错了,因为我是倒着找字符的,此时指针指向的地址就是我要返回的地址,也就是 return s;就好了。

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

三、阅读代码

检查一个数能不能表示成两个质数之和

#include <stdio.h>
int prime(int n);
int main()
{
    int n, i, flag=0;
    printf("Enter a positive integer: ");
    scanf("%d",&n);
    for(i=2; i<=n/2; ++i)
    {
        if (prime(i)!=0)
        {
            if ( prime(n-i)!=0)
            {
                printf("%d = %d + %d\n", n, i, n-i);
                flag=1;
            }

        }
    }
    if (flag==0)
      printf("%d can't be expressed as sum of two prime numbers.",n);
    return 0;}int prime(int n)      /* Function to check prime number */{
    int i, flag=1;
    for(i=2; i<=n/2; ++i)
       if(n%i==0)
          flag=0;
    return flag;
}

四、本周学习总结

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

2.罗列本周一些错题。

Fun函数用来删除字符串中所有空格, 
如输入:  as df gghk lkj78, 
则输出:  asdfgghklkj78        
#include <stdio.h>
#include <ctype.h>
void Fun(char *str)
{
   int i,j;
   i=j=0;
   while(____2_____)
   {
	   if(str[i]!=' ')
		   str[j++]=str[i];
	   i++;
   }
   str[j]=___3____;
 }

int main()
{
  char str[81];
  int n;
  gets(str); 
  puts(str);
  _____1______;
  printf("*** str: %s\n",str);

}
参考答案
 Fun(str)
str[i]
'\0'
我的作答
fun(str)
str[i]!='\n'
'\0'
编写函数目的:a数组中存放n个由大到小的有序数, 
功能是把x插入a中,a数列中数仍然有序
#include <conio.h>
#include <stdio.h>
#define  M  50
void  Fun ( int a[ ], int x, int *n )
{
   int i,j;
   for(i=0;i<*n;i++)
      if(x>a[i])
	     _____2______
   for(j=*n;___3____;j--)
      a[j]=a[j-1];
   a[i]=x;
   ______4____;
}

void main( )
{
   int  a[M]={20,15,13,10,9,6,5}, x, n=7, k;
   scanf("%d", &x );
   _______1_____;
   for( k = 0; k < n; k++ )
      printf ("%d ",a[k] );
}
参考答案
 Fun(a,x,&n);
break;
j>i
*n=*n+1;
我的作答
fun(a[M],x,n)
a[i]=x;
j>=0
posted @ 2017-12-17 21:57  一叶落而秋将至  阅读(313)  评论(1编辑  收藏  举报