一、PTA实验作业
题目1:7-3 找最长的字符串
1. 本题PTA提交列表(要提交列表,不是结果)
2. 设计思路
{ 定义变量i,n,flag,max 输入字符串数n 定义数组 num[n]存放每个字符串长度 定义字符数组 str[n][80] for i=0 to i=n-1 { 输入str[i]; 计算str[i]长度存于num[i]; i++; } max=num[0]; for i=0 to i=n-1 { if num[i]>max{ max重新赋值max=num[i]; 记下最长串所在位置flag=i } } 输出结果 }
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
本题没有碰到问题
题目2:7-6 Jack cheng的烦恼2
1. 本题PTA提交列表
2. 设计思路
{ 定义整形变量i,j,n; 定义字符数组str[5001]; 输入字符个数n; 输入字符串; for i=0 to i=n-1 i++{ if str[i]为')'或'}' 输出False 结束程序return 0; if str[i]=='('{ for j=i+1 to j=n-1 j++{ if str[j]为')'{ 令str[i] str[j]都为空字符 } } } if str[i]=='}'{ for j=i+1 to j=n-1 j++{ if str[j]为'}'{ 令str[i] str[j]都为空字符 } } } } 输出 True }
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
本题没有碰到问题。
PTA提交列表说明:
0分的答案错误是输出没有大写.
本来我的思路中没有
for i=0 to i=n-1 i++{ if str[i]为')'或'}' 输出False 结束程序return 0;
而是遍历完数组后,再遍历一遍看是不是全为空字符,这样效率很低,写伪代码的时候想到可以直接在第一次遍历是结束
题目3:7-7 删除字符串中的子串
1. 本题PTA提交列表
2. 设计思路
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
碰到的问题:
该错误点是因为重新遍历的时候i的初值问题,若令i=0;进入下一次循环时,i的值为1,这样判断就有问题
解决办法:初始化时令i=-1
二、截图本周题目集的PTA最后排名
三、同学代码结对互评
1.互评同学名称:朱杰伟
2.我的代码、互评同学代码截图(此处截图核心代码就好,不一定截图全部代码,图上指明是谁的代码。)
我的代码截图:
同学代码截图:
3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题。
- -不同点:一看我的代码就更长,我的代码通过判断‘(’‘{’和‘)’'}' 是否成对出现,若是,则将两个都换成空字符,相当于连连看,但在遍历是一旦碰到'}'')'就判断为错误,因为若是正确的输入顺序一定已经被换成空字符,不会碰到‘}’')';而杰伟的代码中,分别假设'('')''{''}'为1,-1,2,-2,初始值count=0,通过判断然后加减,一旦count<0,说明出现输入顺序错误。
- 各自优势:感觉我的代码没有什么优势,杰伟的代码用了数学思维,把问题简化,而我的相比之下更加复杂。
- 更喜欢哪种代码风格:更喜欢杰伟的代码风格,把问题简化,容易理解。
四、本周学习总结
1.你学会了什么?
1.1指针变量如何定义(设计代码可以用markdown代码符号渲染)?
int *p;
1.2 指针加法运算运用在哪种情况,2个指针变量能否相加?
运用在:
int a[10]={1,2},*p; p=a; //即p=&a[0],*p=1 p++; //此时p=&a[1],*p=2
两个指针变量不能相加
1.3 指针不赋初值,直接使用,会出现什么情况,请用DEVC验证,并截图展示?
程序会崩溃
1.4 课堂派上关于分离浮点数的整数部分和小数部分那题,请用DEVC验证实现,并在此贴图展示,同时说明哪句是指针变量做函数形参,函数实参应该怎么表示。指针变量做函数形参有什么用处?
形参:
int *intpart,float *fracpart
实参应该传地址:
&intpart,&fracpart
指针变量做函数形参能在函数中直接改变实参的值,且能返回多个函数值
1.5 请把课本的冒泡排序的函数改成指针变量做形参格式,并把代码写在底下,注意用markdown语法渲染。
void bubble(int *a,int n) { int i,j,t; for(i=0;i<n-1;i++){ for(j=0;j<n-i-1;j++){ if(*(a+j)>*(a+j+1)){ t=*(a+j); *(a+j)=*(a+j+1); *(a+j+1)=t; } } } }
1.6 如何定义一个指针变量指向数组,如何用指针变量表示数组元素?
{ int *p,a[10]; p=a; //p=&a[0] p++; //p=&a[i] ... }
1.7 如何定义字符指针指向字符串?指针指向字符串后,初始位置在哪里?
{ char *p; char a[10]; p=a; //p=&a[0] p++; //p=&a[i] ... }
初始位置在a[0]
1.8 利用字符指针操作字符串,如设计函数实现字符串连接,请在此贴图展示代码。说明指针表示字符的方法好处是什么?
#include<stdio.h> void *strcat (char *s1, char *s2); int main() { char s1[160],s2[80]; gets(s1); gets(s2); strcat(s1,s2); puts(s1); printf("\n"); return 0; } void *strcat (char *s1, char *s2) { char *p=s1; while(*p) p ++; while(*s2!='\0'){ *p =*s2; p ++; s2++; } *p='\0'; }
2.本周你不会内容有什么?
2.1 课堂派错题罗列及如何订正。
本题没有用DveC验证,一看‘==’就选了
3.数组上机考试小结
3.1 那题错了,请罗列?
7-2 jmu-c-十进制转16进制
3.2 错题如何订正,为什么错了?
没有考虑到输入为0的情况。
while(j>0){ l=j%16; if(l<10) s[i]=l+'0'; else s[i]=l-10+'A'; j/=16; i++; count++; }
应该改用do-while循环.
来源:https://www.cnblogs.com/xzjj/p/8011958.html