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