一、PTA实验作业

题目1:统计一行文本的单词个数

1.本题PTA提交列表

2.设计思路

定义字符数组存放输入的字符
定义整形变量count存放单词个数,len存放字符长度
输入字符串
计算字符个数
if 开头的字符是空格
    count=0
else
    count=1
for i=0 to len-1
    if 前一个字符是空格后一个字符非空格
    count加一
end for
输出count的值

3.代码截图

4.本题调试过程碰到问题及PTA提交列表情况说明

遇到的问题:数组长度定义不够大导致数组越界
解决方法:将数组长度由原来的80增加到1000即可

题目2:统计大写辅音字母

1.本题PTA提交列表

2.设计思路

定义字符数组str存放输入的字符串,ch存放从B到Z的大写字母
定义整型数组count存放辅音字母个数,i,j为循环变量
输入字符串
for i=0 to str[i]
    for j=0 to ch[j]
        if 输入的字符中含有辅音字母
        count加一
    end for
end for
输出count的值后换行

3.代码截图

4.本题调试过程碰到问题及PTA提交列表情况说明

遇到的问题:空字符串判断条件错误
解决方法:刚开始自己的写法判断条件有缺漏,判断范围只局限在大写字母内,不能判断% 、\等字符,后来参考的同学的判断思路,更改了自己的写法,精简了许多

题目3:删除字符串中的字串

1.本题PTA提交列表

2.设计思路

3.代码截图

4.本题调试过程碰到问题及PTA提交列表情况说明

遇到的问题:
解决方法:

二、截图本周题目集的PTA最后排名

三、同学代码结对互评

1.互评同学名称

徐宏伟

2.我的代码、互评同学代码截图

我的代码


同学的代码

3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题

首先,我和同学的思路基本相同,都是判断字符和连续空格问题;其次,我和同学的判断条件各有千秋,我是直接判断整个字符串和连续空格问题,而同学是拆分字符串,到字符为空格时停止再开始下次判断;我的思路比较剑走偏锋,如果中间条件一个判断错可能导致全部代码作废重写,而同学的思路就比较稳妥一点,拆分成一段一段的判断,比较不容易犯错;我个人比较喜欢效率高一点的代码,我更喜欢我的代码

四、本周学习总结

1.你学会了什么?

1.1指针变量如何定义

定义指针变量要使用指针声明符*,如int i,*p
int *p 代表指向整型变量
char *p 代表指向字符型变量
float *fp 代表指向单精度实型变量
double *dpl 代表指向双精度实型变量

1.2 指针加法运算运用在哪种情况,2个指针变量能否相加?

指针加法只要运用在地址的偏移,如*p=a+1
两个指针变量不能相加,否则会出现编译错误

1.3 指针不赋初值,直接使用,会出现什么情况,请用DEVC验证,并截图展示?

指针不赋初值就会出现运行错误,且容易使程序崩溃

1.4 课堂派上关于分离浮点数的整数部分和小数部分那题,请用DEVC验证实现,并在此贴图展示,同时说明哪句是指针变量做函数形参,函数实参应该怎么表示。指针变量做函数形参有什么用处?

void splitfloat(float x,int *intpart,float *fracpart)是指针变量做函数形参
splitfloat(number,&integral,&decimal)函数实参应该这样表示
指针变量做函数形参,不可以改变实参的值,但是可以改变指针指向变量的值

1.5 请把课本的冒泡排序的函数改成指针变量做形参格式,并把代码写在底下,注意用markdown语法渲染

#include<stdio.h>
void bubble(int *p,int n);
int main()
{
	int n,a[8];
	int i;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
	}
	bubble(a,n);
	for(i=0;i<n;i++)
	{
		printf("%3d",a[i]);
	}
	return 0;
}
void bubble(int *p,int n)
{
	int *i,*j,t;
	for(i=1+p;i<p+n;i++)
	for(j=p;j<p+n-1;j++)
	if(*j>*(j+1))
	{
		t=*j;
		*j=*(j+1);
		*(j+1)=t;
	}
}

1.6 如何定义一个指针变量指向数组,如何用指针变量表示数组元素?

int a[10],i,*p;
p=a;
for(i=0;i<10;i++)
*(p+i)=i;
或者
int a[10],i,*p
p=a;
for(i=0;i<10;i++)
*p=i;

1.7 如何定义字符指针指向字符串?指针指向字符串后,初始位置在哪里?

const char *p代表定义一个字符指针指向字符串,指向字符串的第一个字符

1.8 利用字符指针操作字符串,如设计函数实现字符串连接,请在此贴图展示代码。说明指针表示字符的方法好处是什么?

#include <stdio.h>
#include<string.h>
int fun(char *p,char *s);
int main()
{
    char a[80],b[80];
    scanf("%s%s",a,b);
    printf("%s",fun(a,b));
}
int fun(char *p,char *s)
{
	strcat(p,s);
}


指针表示字符好处是字符不会被覆盖

2.本周你不会内容有什么?

2.1 课堂派错题罗列及如何订正

刚开始以为这是找不同等式,后来才发现是找表达式错误
c选择中的*&point不是地址

2.2 其他不会的?打算怎么解决

对于指针作为函数形参的应用还不熟悉,经常写得格式错误,如p=&a经常写成*p=&a之类的;还有对指针的概念理解得还不是非常透彻,需要多多翻书打代码,多做一点相关的题目巩固一下自己的知识点

3.数组上机考试小结

3.1 那题错了,请罗列?

  • 错题1:jmu-c-输出字符间的字符子串
  • 错题2:数组循环右移
  • 错题3:删除数组中的元素

3.2 错题如何订正,为什么错了?

  • 错题1:将起始字符和终止字符定义成数组,当进入循环时,相应的内容会发生改变,不再是开始输入的那个字符,对比不出结果,这个致命错误直接导致当时考试输出不了结果
    改正后
#include<stdio.h>
int main()
{
	char ch[80];
	char start[80],end[80];
	int i,j,k,index1=0,index2=0,flag1=0,flag2=0;
	gets(ch);
	gets(start);
	gets(end);
	for(i=0;ch[i];i++)
	{
		if(start[i]==ch[i])
		{
		    index1=i;
		    break;
		}
		else if(start[i]!=ch[i]&&ch[i]=='\0')
		flag1=1;
	}
	for(j=0;ch[j];j++)
	{
		if(end[j]==ch[j])
		{
			index2=j;
			break;
		}
		else if(end[j]!=ch[j]&&ch[j]=='\0')
		flag2=1;
	}
	if(flag1==1||flag2==1)
	printf("no sub string!");
	else
	{
	    for(k=index1;k<index2;k++)
		printf("%c",ch[k]);
    }
}
  • 错题2:数组越界和值被覆盖
    改正前
int ArrayShift( int a[], int n, int m )
{
	int i,j,k=m,index=0;
	char b[80];
	for(i=0;i<m;i++) //将数储存在另一个数组 
	{
		b[i]=a[i];
	}
	for(j=0;j<m;j++) //后面的数移动到前面 
	{
		a[j]=b[n-m];
		m--;
	}
	for(i=k;i<n;i++) //前面的数移动到后面 
	{
		a[i]=b[index];
		index++;
	}	
}

改正后

int ArrayShift( int a[], int n, int m ){
	int i,j,temp;
	for(i=1;i<=m;i++){
		temp=a[n-1];
		for(j=n-1;j>0;j--){
			a[j]=a[j-1];
		}
		a[0]=temp;
	}
}
  • 错题3:没时间做最后一题,回来做了一遍
#include<stdio.h>
int main()
{
    int i,j,n,del1,del2;
    scanf("%d",&n);
    int num[n];
    for(i=0;i<n;i++)
    scanf("%d",&num[i]);
    scanf("%d",&del1);
    for(i=0;i<deln;i++)
    {
        scanf("%d",&del2);
        for(j=del2-1;j<n;j++)
        {
            num[j]=num[j+1];
        }
        n--;
    }
    for(i=0;i<n;i++)
    {
        if(i==0)printf("%d",num[i]);
        else printf(" %d",num[i]);
    }
    return 0;
}
 posted on 2017-12-10 16:52  Ljy1999  阅读(298)  评论(10编辑  收藏  举报