一、PTA实验作业
题目1:6-6 输出月份英文名
1. 本题PTA提交列表
2. 设计思路
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
答案错误:其中有一个月份的英文名的首字母大小写出现问题。
题目2:6-8 使用函数实现字符串部分复制
1. 本题PTA提交列表
2. 设计思路
定义整形变量ifor(i=0;i
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
答案错误:开始就把t的地址赋给s,导致错误。
解决方法:认真查看代码,发现开始的这一步有异常。尝试删除后正确。题目3:6-10 字符串串动变化
1. 本题PTA提交列表
2. 设计思路
定义字符变量Max为‘ ’,定义数组a定义整形变量i=0,count=0,indexfor(i=0;*(p+i);i++){ 如果*(p+i)大于Max,Max=*(p+i),index=i count++}把p[index]赋给a[0]for(i=0;i
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
开始这一块是这样循环,导致p的地址发生了改变,所以最后答案一直有问题, 经过调试发现了问题,询问同学,帮忙找出了错误。对循环体进行了改善使p的地址不变二、截图本周题目集的PTA最后排名。
三、阅读代码
- IP地址转换
一个IP地址是用四个字节(每个字节8个位)的二进制码组成。请将32位二进制码表示的IP地址转换为十进制
格式表示的IP地址输出#includeint main(){ char s[33],c; int sum=0,put[4],cnt=0; for(int i=1;i<=32;i++){ c=getchar(); sum=sum*2+c-'0'; if(i%8==0){ put[cnt++]=sum; sum=0; } } printf("%d.%d.%d.%d",put[0],put[1],put[2],put[3]); return 0; }
该代码利用ip地址规定的4个二进制转十进制的数定义了数组put来存放
用一句sum=sum*2+c-'0'直接实现字符和整形的转换和二进制和十进制的转换 在8个字符后重新赋值sum。代码很巧妙,所以很简短。- 课堂派指针
给定程序中,函数fun的功能是:将形参s所指字符串中的所有数字字符顺序前移,
其他字符顺序后移,处理后新字符串的首地址作为函数值返回。
#include#include #include #include 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
该代码用了两个数组,设置一个循环判断是否为数字,一个数组专门存放
数字。遍历完数组后用库函数strcat把两个数组结合,数字数组放前面就可以了 方法很简单,用库函数问题直接变简单了四、本周学习总结
1.自己总结本周学习内容
- 指针与数组共通,定义的指针如int *p,把p拿出来p[]就可以变成数组
- 定义的指针需要初始化,不然会出现问题。
- 定义一个指针指向另一个指针,对该指针进行赋值等操作,由于地址内容变化 只要有关该地址的指针都会变化
- 题目中要注意指针的地址问题,地址发生改变,还是对原地址操作会发生错误
2.罗列本周一些错题
- 原回答:fun(a,n) *n++;
- 正确答案:fun(a,&n)n=n+1 该函数定义的是指针,所以传递过去的应该是地址,所以n前要加& *n++表示地址加,而该题表示一个个数值所以是*n=*n+1
数组名是地址常量不能变
- 我的回答 Fun(a,x,&n) break; j>=i; a[*n+1}='\0'
- 正确答案 Fun(a,x,&n) break; j>i;n=n+1 循环个数没有判断好,应该是j>i 最后要加上n=n+1; 才能跳出循环