您的位置:首页 > 编程语言 > C语言/C++

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

2017-12-10 16:52 183 查看

一、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
;
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: