C语言博客作业--字符数组
一、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地址转换
二进制转换成十进制的方法错误