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

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

2017-12-10 22:42 357 查看

一、PTA实验作业

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

1. 本题PTA提交列表



2. 设计思路

定义字符数组ch[1000],定义i用于循环,count用来数有几个单词,count1记录字符串有多长
输入字符串,并将字符串存储在字符数组中
如果ch[0]是空格,count=0
否则count=1
for i=0 to count1
如果ch[i]是空格或逗号,并且它们的下一个字符是字母或数字
count++
end for
输出count的值

3.代码截图



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



最开始是这几个测试点过不了,第一个测试点是正确的,后面两个测试点改了数组长度后就通过了,但是第一个测试点却变成了答案错误,而且不太理解到底错在哪,也不知道该往哪个方向去调试



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

1. 本题PTA提交列表



2. 设计思路



3.代码截图



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

最初的时候判断条件是ch[i]!='A'&&ch[i]!='E'&&ch[i]!='I'&&ch[i]!='O'&&ch[i]!='U'时,count就加一,在这样的判断条件下,如果出现空格,那么count也会加一,而空格不是辅音字母,应该忽略不计

题目3:7-10 正整数A+B

1. 本题PTA提交列表



2. 设计思路

定义两个字符数组c1[80],c2[80],定义i,j用于循环,flag1和flag2做是否为正整数的标记,num1为第一个正整数,num2为第二个正整数
当getchar()!='\n'时,
c1[i]=getchar;i++
end getchar
c1[i]='\0'
gets(c2)
for i=0 to c1[i]!='\0'
如果不是数字
flag1=1
否则
将该数字字符转成数字
end for
如果num1的值不在1-1000内,
flag1=0
对字符数组c2[80]做同样的操作
根据不同的flag1和flag2的值,输出相应的结果

3.代码截图





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

忽略了当数值不在题目要求范围内的情况,比如num1=0,num2=1001时,输出的应该都是问号,而我的代码输出的是1001,加上判断数字是否在题目要求范围的条件后就通过了

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



三、同学代码结对互评

1.互评同学名称

沈梦婷

2.我的代码、互评同学代码截图(此处截图核心代码就好,不一定截图全部代码,图上指明是谁的代码。)

同学的代码

#include<stdio.h>
int main()
{
char a[1000];
int i,count=0,flag=0;
gets(a);
for(i=0;(a[i])!='\0';i++)
if(a[i]==' ') flag=0;
else if(flag==0){
flag=1;
count++;
}
printf("%d",count);
return 0;
}

我的代码

#include<stdio.h>
int main()
{
char ch[1000];
int i,count,count1;
while((ch[i]=getchar())!='\n')
i++;
ch[i]='\0';
count1=i;
if(ch[0]==' ')
count=0;
else
count=1;
for(i=0;i<=count1;i++){
if((ch[i]==' '||ch[i]==',')&&(ch[i+1]>='a'&&ch[i+1]<='z'||ch[i+1]>='0'&&ch[i+1]<='9'))
count++;}
printf("%d",count);
return 0;
}

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

同学的代码巧妙的运用flag实现了对单词个数的统计,当读入单词的第一个字母时,flag=1,count=count+1,当读入第二个字母时,因为flag不等于0,所以count不会再增加,直到遇到空格,flag才又等于0,然后继续进行下去

而我的代码判断条件很麻烦,又没有全对,说明还有情况未考虑到。而且感觉用我这种方法很容易乱掉,一不小心就会错了

我更喜欢同学的代码

四、本周学习总结

1.你学会了什么?

1.1指针变量如何定义(设计代码可以用markdown代码符号渲染)?

int a,*p;
p=&a;

或者

int a;
int *p=&a;

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

偏移的时候

不能,2个指针变量相加是非法的

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

程序不能正常运行


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



指针变量做函数形参:void splitfloat(float x,int intpart,float fracpart)

函数实参:splitfloat(y,&intpart,&fracpart);

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

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

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

int a[8];
int *p;
p=a;

*p

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

char *s="point";

初始位置在该字符串的首字符

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

#include<stdio.h>
char Fun(char *c1,char *c2);
int main(){
char c1[]="abc",c2[]="123";
Fun(c1,c2);
puts(c1);
return 0;
}
char Fun(char *c1,char *c2){
int i=0,j,k=0;
while(c1[i]!='\0')
i++;
for(j=i;c2[k]!='\0';j++){
c1[j]=c2[k];
k++;
}
c1[j]='\0';
}

好处:直接对地址内的元素进行操作

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

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



第二空应该是p+n,当时在参考书上相似的内容,就直接把书本上的9写上去了

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

pta上字符数组的题目,有一些自己看的时候有点思路,但不知道该怎么写,有的是完全没有思路该怎么写,需要请教同学才能写出来。

身份证那题,刚开始不懂加权求和是什么意思,请教了同学后才知道。

对于还不会的题目,我想先自己再尝试着写一写,如果还是不会就上网查一下或者是请教同学。

3.数组上机考试小结

3.1 那题错了,请罗列?

jmu-c-二维数组转置并按列排序

IP地址转换

jmu-c-十进制转16进制

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

1.jmu-c-二维数组转置并按列排序

在对列进行排序的时候,我只用到了两层循环,会出现排序并没有排完的情况,应该要改成三层循环的,这样才能保证全部排序完全正确

2.jmu-c-十进制转16进制

用到的方法很麻烦又不对,只有输出的D是正常的,其他的都是乱码,想改又不知道咋改,借鉴了同学的方法做对的

3.IP地址转换



二进制转换成十进制的方法错误
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: