C博客作业--指针
一、PTA实验作业
题目1:6-5 判断回文字符串
1. 本题PTA提交列表
2. 设计思路
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
一开始k的初值设的为0,导致出错,计算有效长度k应从-1开始赋值
题目2:6-8 使用函数实现字符串部分复制
1. 本题PTA提交列表
2. 设计思路
定义整型变量i,num=0
for(i 0 to *(t+i)不为0,i加一){
num加一
if(num大于等于m)//m小于字符串的长度
*s++=*(t+i);//对*s赋值
}
*s为0结束
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
这个题一开始以为只要把第m个字符的地址传给指针t,输出t就可以了,发现这样是错误的,要把m后的每个字符内容都一一赋给t才可以。
题目3:6-11 报数
1. 本题PTA提交列表
2. 设计思路
定义整型变量i,j,num为0
for(i 0 to n-1)
out[i]赋值0//使数组out的每个元素都为0
while(j<n){//j表示出局顺序
for(i 0 to n-1){//元素为0表示还没有出局
if(out[i]为0)
num加一
if(num等于m){
out[i]=++j//使元素不为0,表示出局
num重新为0
}
}//当i=n时,i重新为0实现圆圈循环
}
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
一开始使数组out的每个元素都为1,发现后面的代码不好打,使数组out的每个元素都为0 的话,因为要使数组内容表示出局顺序,出局顺序都大于0,所以代码比较好打。
二、截图本周题目集的PTA最后排名。
三、阅读代码(找两篇优秀代码贴图展示,并说明该代码功能是什么,优点是什么?)
- 代码一
#include<stdio.h>
int mate(char ch[],int n);
int main(){
int i,n;
scanf("%d",&n);
char ch[n];
getchar();
for(i=0;i<n;i++)
scanf("%c",&ch[i]);
if(mate(ch,n)) printf("True");
else printf("False");
return 0;
}
int mate(char ch[],int n){
int i,count1=0,count2=0;
for(i=0;i<n;i++){
if(ch[i]=='(') count1++;
else if(ch[i]==')'){
if(count1==0) return 0;//不匹配
else count1--;//匹配
}
else if(ch[i]=='{') count2++;
else if(ch[i]=='}'){
if(count2==0) return 0;//不匹配
else count2--;//匹配
}
}
if(count1==0&&count2==0&&n!=0) return 1;
else return 0;
}
代码功能:判断括号是否遵循数学上括号的使用原则
优点:引入两个变量count1,count2来判断,一个前括号与后括号配对,出现前括号使count加一,在此情况下出现后括号使count减一,只有最后count1,count2都为0才表示遵循数学上括号的使用原则。若在count为0时,出现后括号则直接返回0结束函数。
- 代码二
#include <stdio.h>
#include<string.h>
int main(){
char s[500001];
gets(s);
int i,count=0;
i=strlen(s);//有效长度
char *p;
while(i>=0){
if(s[i]==' '){
if(s[i+1]!=' '&&s[i+1]!='\0'){//判断是否多空格
p=s+i+1;//指针赋值
count++;
if(count>1) printf(" ");//count为1时不输出空格
printf("%s",p);
}
s[i]='\0'; //输出一次后使输出的第一个字符为0,保证之后输出不输出之前的
}
else if(i==0&&s[i]!=' '){//第一个单词前没有空格,用i=0判断
p=s;
if(count>=1)printf(" ");
printf("%s",p);
}
i--;//递减
}
return 0;
}
代码功能:将句中所有单词的顺序颠倒输出
优点:使用strlen函数计算有效长度,并使用指针输出单词很灵活,在每次输出一次后使输出的第一个字符为0,保证之后输出不输出之前的,很巧妙,并使用count来控制是否输出空格。
四、本周学习总结
1.自己总结本周学习内容。
1.1字符串和字符指针
字符指针是指向字符串首字符的地址。
1.2字符串处理函数
- 头文件stdio.h
输入scanf("%s",s);getss(s);
输出printf("%s",s);puts(s); - 头文件string.h
字符串复制strcpy(s1,s2);
字符串连接strcat(s1,s2);
字符串比较strcmp(s1,s2);
字符串长度strlen(s1);
1.3结构的概念与定义
结构是一个数据类型,由结果成员构成
结构类型名=struct+结构名
1.4结构类型变量的储存空间
所占空间是各成员所占空间之和,
1.5结构变量的引用与赋值
引用格式:结构变量名.结构成员名
若两个结构变量具有相同类型,可直接相互赋值。
1.6结构数组
结构数组格式与二维数组的格式类似
引用格式:结构数组名[下标].结构成员名
数组元素之间可以相互直接赋值
1.7结构指针
结构指针就是指向结构变量的指针。
访问结构成员时(*p).等价于p->
2.罗列本周一些错题。
- 1
一开始不懂new char这个数组是什么意思,就蒙的填了一个指针t - 2
定义学生出生日期的结构体时成员类型没有定义好
改正
- 3
不能对books[2]直接全部赋值
改正