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]直接全部赋值
    改正
posted @ 2017-12-16 23:34  yawlc  阅读(268)  评论(0编辑  收藏  举报