一、PTA实验作业
题目1:删除字符串中的子串
1. 本题PTA提交列表
2. 设计思路
定义字符型数组s[81]储存主串,sub[81]储存子串.
输入主串和子串
do loop
for(i=0,u=0; s[i] ;)
如果s[i]==sub[0]
for v=i+1 to s[v-i]=='\0' 如果 s[v]!=sub[v-i] ,break.
end for.
如果sub[v-i]=='\0',i=v.
end if
s[u++]=s[i++];
end for
s[u]='\0'.
until u==i.
输出删除子串后的主串 s .
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
- 提交的时候多粘贴了一次代码???
题目2:Left-pad
1. 本题PTA提交列表
2. 设计思路
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
- 一开始数组设置得不够大
题目3:正整数A+B
1. 本题PTA提交列表
2. 设计思路
定义judge(char n[])函数判断A或B是否满足条件,正确时返回它的值.
定义变量sum储存n转化为数字后的值,flag=1标记是否符合要求
for n[i]=n[0] to n[i]=='\0'
如果n[i]>='0'&&n[i]<='9', sum=10*sum+n[i]-'0';
否则 flag=0并推出循环
end for
如果 sum>1000 flag=0.
返回sum*flag.
main():
输入字符串A和B.
调用juge()函数判断A或B是否满足条件.
如果 judge(A)!=0 ,输出字符串A , 否则输出"?"
输出" + ".
如果 judge(B)!=0 ,输出字符串B , 否则输出"?"
输出" = ".
如果 judge(A)!=0&&judge(B)!=0 ,输出 judge(A)+judge(B) 的值,否则输出"?".
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
- 无问题
二、截图本周题目集的PTA最后排名。
三、同学代码结对互评
古风排版
我的代码
#include<stdio.h>
int main()
{
int n,m,sum;
static char s[1111];
scanf("%d ",&n);
gets(s);
for(sum=0; s[sum]; sum++);
m=sum/n+(sum%n>0);
for(int r=1;r<=n;r++){
//n行m列.
for(int c=m;c;--c){
if(s[n*(c-1)+r-1]) printf("%c",s[n*(c-1)+r-1]);
else printf(" ");
}
printf("\n");
}
return 0;
}
炳辉的代码
#include<stdio.h>
int main(){
int i=0,j,N,k=0,x,flag=0;
scanf("%d",&N);
getchar();
char a[N][1000],b[1001];
while((b[i]=getchar())!='\n') i++;
b[i]='\0';
int c;
if(i%N==0) c=i/N-1;
else c=i/N;
int r=0;
x=c;
while(b[k]!='\0'){
if(r<N) {a[r][c]=b[k];k++;r++;}
if(r==N) {c--;
r=0;
}
}
for(i=r;i<N;i++) a[i][c]=' ';
for(i=0;i<N;i++){
for(j=0;j<=x;j++) printf("%c",a[i][j]);
printf("\n");
}
return 0;
}
- 我的代码利用行、列的值与输出的值(即数组下标)之间的关系求解.
- 他用二维数组将字符串化成矩阵形式,将矩阵元素变为古风排版后输出矩阵.
- 思路不同,总体上我的代码比较简短.所以我更喜欢我的代码.
四、本周学习总结
1.你学会了什么?
1.1指针变量如何定义?
- 类型名 *指针名
1.2 指针加法运算运用在哪种情况,2个指针变量能否相加?
- 可以用于指针指向数组时,如 int *p=a; 则 *p为a[0] , *(p+1)为a[1].
- 2个指针变量无法相加
1.3 指针不赋初值,直接使用,会出现什么情况,请用DEVC验证,并截图展示?
- 程序将无法运行
1.4 课堂派上关于分离浮点数的整数部分和小数部分那题,请用DEVC验证实现,并在此贴图展示,同时说明哪句是指针变量做函数形参,函数实参应该怎么表示。指针变量做函数形参有什么用处?
- int *i 和 float *f 将指针i和指针p]作为形参.
- 实参用地址表示.
- 可以直接修改内存改变实参的值.
1.5 请把课本的冒泡排序的函数改成指针变量做形参格式,并把代码写在底下,注意用markdown语法渲染。
void bubblde(int *p,int n)
{
int i,j,t;
for(i=1;i<=n;i++)
for(u=0;u<n-i;u++)
if(*(p+u)>*(p+u+1)){
t=*(p+u);
*(p+u)=*(p+u+1);
*(p+u+1)=t;
}
}
1.6 如何定义一个指针变量指向数组,如何用指针变量表示数组元素?
- 定义指针时指向数组名. 如, int a[10],*p=a.
- 用 *(p+i) 表示 a[i].
1.7 如何定义字符指针指向字符串?指针指向字符串后,初始位置在哪里?
- 如 char *s="cpoint".
- 初始位置为字符串首元素的地址,如char *s="cpoint" 中 , s 指向 c.
1.8 利用字符指针操作字符串,如设计函数实现字符串连接,请在此贴图展示代码。说明指针表示字符的方法好处是什么?
- 可以实现对主函数的数据传递.
2.本周你不会内容有什么?
- p+n错写成q+n
- 刚做的时候不知道a是地址常量
3.数组上机考试小结
- 出现了一些细节错误,如十六进制里的字符"F"写成了小写的,还有定义数组时类型名写错了.