C语言博客作业--字符数组

一、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循环.

posted @ 2017-12-10 18:34  嘿嘿渣  阅读(470)  评论(6编辑  收藏  举报