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 错题如何订正,为什么错了

  • 时间不够,在前两题函数题耗费了太多时间,导致后面两题题目都没来得及看,编程第二题题目没有看透,思路没正确,整题也就废了,希望考完后,冷静思考可以做出来,感觉自己无论是从思维还是编程能力还是找错能力都很差,这些没提高,成绩也就没戏了吧。
posted @ 2017-12-10 11:12  晴天*  阅读(319)  评论(3编辑  收藏  举报