C博客作业--指针
2017-12-17 21:57
309 查看
一、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