C语言博客作业--字符数组
一、PTA实验作业
题目1:7-1 字符串转换成十进制整数
1. 本题PTA提交列表
2. 设计思路(伪代码或流程图)
int i,j;char a[80],b[80];int flag1=0,flag2=0;long number;其中flag2为是否有负号的判断标志,flag1为输出结果正负的判断标志
输入以’#‘结束的字符串a[]
遍历数组a[i], 滤去非16进制数
如果a[i]=='-'&&flag2==0 flag1=1;
如果为16进制数,b[j]=a[i] ; flag2=1 ; j++;
结束符b[j]='\0';
将新字符串逐个转换,存放在number中
如果flag1==1,输出0-number
否则 输出number
end
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
- 一开始没有设置判断其正负的标志,输出结果都为整数
- 后来设置了一个标志flag,答案部分正确,通过思考发现,只要字符串中只要有负号,结果都是负的,因此,再设置另一个标志,判断负号是否出现在第一个16进制数前
- 设置flag1和flag2,用两个if语句,如果在负号出现前已经有16进制数,flag2=1;要令flag1=1,需同时满足a[i]==’-‘且flag2=0;得到正确结果;
题目2:7-2 统计一行文本的单词个数
1. 本题PTA提交列表
2. 设计思路(伪代码或流程图)
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
- 提交显示段错误和运行时错误,试了很多改正,最后发现数组长度太小,导致错误
- 改正后得到正确答案
题目3:7-12 IP地址转换
1. 本题PTA提交列表
2. 设计思路(伪代码或流程图)
char s[32];int a[4]; int j=0,count=-1;sum=0,i
输入数组s[]
遍历数组s[]
count++;
sum=sum+(s[i]-48)*pow(2,7-count);
如果count==7
a[j]=sum;j++;count=-1;sum=0;
continue;
按格式输出a数组
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
- 一开始输入字符串用gets(),在Dev c上运行可以,但是提交PTA是显示运行时错误
- 后改用scanf("%s",)输入,答案就正确,鉴于两者的输入差别,应选择用scanf
二、截图本周题目集的PTA最后排名
三、同学代码结对互评
1.互评同学名称
- 朱杰伟
2.我的代码、互评同学代码截图
- 我的代码
- 杰伟的代码
3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题
- 区别:我是先判断每个元素是否在A到Z的范围,如果是,再判断它是否为元音,不是则count++; 而杰伟是判断元素是否为元音字母,否则,再判断它不是空格或感叹号,且又在A到Z之间,count++;
- 我更喜欢自己的代码,缩小范围,逐步判断,杰伟的代码没什么错误,只是思路上不一样而已。
四、本周学习总结
1.你学会了什么?
1.1指针变量如何定义(设计代码可以用markdown代码符号渲染)?
指针变量定义时要使用指针声明符*,例如
int *p; char *q; char *p,*q;
1.2 指针加法运算运用在哪种情况,2个指针变量能否相加?
- 指针加法运用在其指向的地址元素时,例如输入数组时
int *p,a[10];
p=a;
for(i=0;i<10;i++,p++)
scanf("%d",*p);
- 指针之间可以相减,但不可以相加:两个同一类型的指针变量是可以相减的,他们的意义表示两个指针指向的内存位置之间相隔多少个元素(注意是元素,并不是字节数)
1.3 指针不赋初值,直接使用,会出现什么情况,请用DEVC验证,并截图展示?
- 程序崩溃过不了
1.4 课堂派上关于分离浮点数的整数部分和小数部分那题,请用DEVC验证实现,并在此贴图展示,同时说明哪句是指针变量做函数形参,函数实参应该怎么表示。指针变量做函数形参有什么用处?
- 指针变量做函数形参:void splitfloat(float x,int *intpart,float *fracpart)
- 函数实参:splitfloat(number,&intpart,&fracpart)
- 用处:可以在函数中对实参进行修改,同时可以返回多个返回值;
1.5 请把课本的冒泡排序的函数改成指针变量做形参格式,并把代码写在底下,注意用markdown语法渲染
#include<stdio.h>
void bubble(int *a,int n);
int main()
{
int n,a[8];
int i;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
bubble(a,n);
for(i=0;i<n;i++)
printf("%3d",a[i]);
return 0;
}
void bubble(int *a,int n)
{
int i,j,t;
for(i=1;i<n;i++)
for(j=0;j<n-1;j++)
if(*(a+j)>*(a+j+1)){
t=*(a+j);
*(a+j)=*(a+j+1);
*(a+j+1)=t;
}
}
1.6 如何定义一个指针变量指向数组,如何用指针变量表示数组元素?
int a[10];
int *p;
p=a;
此时p为指向数组a的指针。*(p+n) (n=0,1,2......9)可表示数组元素。
1.7 如何定义字符指针指向字符串?指针指向字符串后,初始位置在哪里?
char *p;
char str[10] = "afjkfdhsjk";
p = str;
指针p指向字符串str的首地址.
1.8 利用字符指针操作字符串,如设计函数实现字符串连接,请在此贴图展示代码。说明指针表示字符的方法好处是什么?
- 字符串指针只占用一个可以存放地址的内存单元,存储字符串首字符的地址,而不是将字符串放到字符指针变量中去,总之,字符串指针可以指向一个不需要分配内存的地址
2.本周你不会内容有什么?
2.1 课堂派错题罗列及如何订正
- 拆分实数和整数的部分,自定义函数void splitfloat(float x,int *intpart,float *fracpart)
对指针的应用不熟练,后来看翁恺视频和书本订正;
*p=a+3;表示p的首地址是a[3],++p后,应该指向a[4]
2.2 其他不会的?打算怎么解决
- 查看书本,巩固基础知识,自己尝试着去做,实在没办法再请教同学,老师。
3.数组上机考试小结
3.1 那题错了,请罗列
3.2 错题如何订正,为什么错了
- 时间不够,在前两题函数题耗费了太多时间,导致后面两题题目都没来得及看,编程第二题题目没有看透,思路没正确,整题也就废了,希望考完后,冷静思考可以做出来,感觉自己无论是从思维还是编程能力还是找错能力都很差,这些没提高,成绩也就没戏了吧。