C语言博客作业--字符数组
一、PTA实验作业
题目1:7-2 统计一行文本的单词个数
-
本题PTA提交列表
-
设计思路
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
第一次我以为最后的句号不算单词,后来找做对的同学用不同的几组数据试了一下才知道句号也算单词,然后又是段错误,我就把开始定义的数组长度弄长点就过了
题目2:7-6 Jack cheng的烦恼2
-
本题PTA提交列表
-
设计思路
int n,i,j,flag=0;
输入n的值
char bra[n];
输入数据
i for 0 to n-1
if 为左括号,变为字符0
j for 0 to n-1
if 为右括号,变为字符0,跳出循环
end
end
大括号处理方法同上
i for 0 to n-1//遍历数组,若不全为0,则未完全匹配
if 不为0,flag=1
if flag=0 输出True
else 输出false
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
开始我的思路是用一个标记遇到左括号就自增,遇到右括号就自减,最后判断该标记是否为0,后面发现这样不能正确配对,然后看了同学的思路,重新设计了一个思路
题目3:7-10 正整数A+B
-
本题PTA提交列表
-
设计思路
char A[80],B[80];
int i,j,flag1=0,flag2=0,x=0,y=0,k=0;
输入加数和被加数
历数A,B字符个数i,j
i for i-1 to 0
if A[i]不为数字,flag=1;跳出循环
x=x+(A[i]-'0')*pow(10,k++);//将字符型数字转为整型
if x不在1~1000内 flag1=1;//界定范围
k=0
B数组处理同上
if flag1=0且flag2=0 正常输出
else if flag1=1且flag2=0
左边不正常输出
else if flag1=0且flag2=1
右边不正常输出
else
全不正常输出
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
一开始没有看到数有范围,所以做的时候没给它界定范围,后来用临界条件试的时候发现问题,又仔细看了题目才恍然大悟
二、截图本周题目集的PTA最后排名
三、同学代码结对互评
1.互评同学名称
张志鑫
2.我的代码、互评同学代码截图(此处截图核心代码就好,不一定截图全部代码,图上指明是谁的代码。)
我的代码:
张志鑫的代码:
3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题。
这题原先他是错的,我帮他改了一下
他的思路就是先把第一行字符串给str2,记下他的长度,然后下面每一行字符串记下长度后与str2比较,如果比str2长,那么就将这个字符串赋给str2
他这个思路有点类似找最大值,思路很简单,就是麻烦点
四、本周学习总结
1.你学会了什么?
1.1指针变量如何定义(设计代码可以用markdown代码符号渲染)?
int *p
char *p
float *p
double *p
1.2 指针加法运算运用在哪种情况,2个指针变量能否相加?
数组中,比如int *p,a[10];p=a,这时p可以加上整型数,p+1,就是a[1]的地址,.指针之间可以相减,但不可以相加,两个同一类型的指针变量是可以相减的,他们的意义表示两个指针指向的内存位置之间相隔多少个元素
1.3 指针不赋初值,直接使用,会出现什么情况,请用DEVC验证,并截图展示?
1.4 课堂派上关于分离浮点数的整数部分和小数部分那题,请用DEVC验证实现,并在此贴图展示,同时说明哪句是指针变量做函数形参,函数实参应该怎么表示。指针变量做函数形参有什么用处?
1.5 请把课本的冒泡排序的函数改成指针变量做形参格式,并把代码写在底下,注意用markdown语法渲染。
void bubble(int *p,int n)
{
int i,j,t;
for(i=1;i<n;i++)
for(j=0;j<n-i;j++,p++)
if(*p>*(p+1))
{
t=*p;
*p=*(p+1);
*(p+1)=t;
}
}
1.6 如何定义一个指针变量指向数组,如何用指针变量表示数组元素?
int a[10],*p;
p=a;
p表示a[0],(p+1)表示a[1]以此类推
1.7 如何定义字符指针指向字符串?指针指向字符串后,初始位置在哪里?
char *p;
char str[10] = "afjkfdhsjk";
p = str;
初始位置指向字符串的首个字符
1.8 利用字符指针操作字符串,如设计函数实现字符串连接,请在此贴图展示代码。说明指针表示字符的方法好处是什么?
#include <stdio.h>
#define MAXN 80
char *strmcat( char *str1, char *str2 );
int main()
{
char s[MAXN], t[MAXN];
int m;
gets(s);
gets(t);
strmcat(s,t);
printf("%s\n",s);
return 0;
}
char *strmcat( char *str1, char *str2)
{
while(*str1)
str1++;
while(*str2)
{
*str1=*str2;
str1++;
str2++;
}
*str1='\0';
}
可以直接对地址内的元素进行操作
2.本周你不会内容有什么?
2.1 课堂派错题罗列及如何订正。
拆分实数的小数与整数部分那题,将指针赋了空指针,所以不能往里写东西
2.2 其他不会的?打算怎么解决
pta身份证那题有一个测试点不懂
int n,i,j=0,k,z,sum=0,flag1=0,flag2=0,a[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
scanf("%d",&n);
char Z,id[n*19],M[11]={'1','0','x','9','8','7','6','5','4','3','2'};
getchar();
for(i=1;i<=n;i++)
{
j=0;
flag1=0;
flag2=0;
Z=0;
z=0;
sum=0;
while((id[j]=getchar())!='\n')
{
if(id[j]<'0'||id[j]>'9')
flag2=1;
j++;
}
Z=id[j-1];
if(flag2==0)
{
for(k=0;k<17;k++)
sum=sum+a[k]*(id[k]-'0');
z=sum%11;
}
if((Z!=M[z])||flag2==1)
{
flag1=1;
for(k=0;k<18;k++)
printf("%c",id[k]);
putchar('\n');
}
}
if(flag1==0)printf("All passed");
return 0;
3.数组上机考试小结
3.1 那题错了,请罗列?
除了ip地址转换那题
3.2 错题如何订正,为什么错了?
6-1
6-2
7-2
7-3
7-4