C语言博客作业--字符数组
一丶PTA实验作业
题目1:统计一行文本的单词个数
(1).PTA提交列表
(2). 设计思路
char 字符数组str[10000] int a[10000] ={0},i,j,count;
输入str[i] to str【i】等于‘\n’
str[i]='\0'
将0赋给j
i for 0 to str[i]不等于'\0'
如果str[i]>='0'且str[i]<='9'或str[i]>='a'且str[i]<='z' 或 str[i]>='A' 且 str[i]<='Z'或str[i]=='\''或str[i]=='.'
a[j]=1;
否则 j++;
end
i for 0 to j
如果a【i】=1//判断是否为单词
count++
end
输出count
(3).代码截图
(4).本题调试过程碰到问题及PTA提交列表情况说明
解题时未注意有多个空格的提示,刚开始以空位未结束标志计算单词,后来询问了一下同学换了一个思路解题以字母和字符 . '作为计算单词的标志
题目2:找最长的字符串
(1).PTA提交列表
(2). 设计思路
定义字符数组str1【10000】,str2【10000】;
int i,j,count1,count2,n
输入n
gerchar()//消除回车键的影响
i for 1 to n
count1=0
输入字符串str1
getchar()//消除回车键影响
while(str1[count1]不等于'\0'){ //计算字符长度
count1++;}
如果i为1
j for 1 to str[j]='\0'
str2[j]=str1[j]
end
count2=count1;
如果count1>count2 count2=count1
j for 0 to str[j]='\0'
str2[j]=str1[j]
输出str2
(3).代码截图
(4).本题调试过程碰到问题及PTA提交列表情况说明
在解决字符型输入时未考虑字符数组会将回车当作字符进行储存
题目3:统计大写辅音字母
(1).PTA提交列表
(2). 设计思路
(3).代码截图
(4).本题调试过程碰到问题及PTA提交列表情况说明
在判别是否为辅音大写字母时想用列举法一个个打出来,后来发现这样做太麻烦了,运行时也出现了问题,可以先判断他为大写字母,再用else除了五个元音字母的大写字母即可判别
二、截图本周题目集的PTA最后排名
三、同学代码结对互评
1.互评同学名称:黄炳炜
2.我的代码、互评同学代码截图
我的代码
同学的代码
3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?
他的代码与我的代码都是找最大字符长度的字符串储存在另一个字符数组中
但是他的操作步骤比我的简单,和他的代码比较后我第一次当i=1时将str1【】赋予str2【】的步骤是比较多余的,这是他思路比我更加清晰的点
比较喜欢他的代码吧,简洁明了
四、本周学习总结
1.你学会了什么?
1.1指针变量如何定义(设计代码可以用markdown代码符号渲染)?
数据类型名 *变量名
1.2 指针加法运算运用在哪种情况,2个指针变量能否相加?
数组 int *p=a时; 则 *p为a[0] ,此时p可以做加法应算, (p+1)就为a[1].
但是两个指针变量不能相加 p=p1+p2 是错误的
1.3 指针不赋初值,直接使用,会出现什么情况,请用DEVC验证,并截图展示?
1.4 课堂派上关于分离浮点数的整数部分和小数部分那题,请用DEVC验证实现,并在此贴图展示,同时说明哪句是指针变量做函数形参,函数实参应该怎么表示。指针变量做函数形参有什么用处?
# include<stdio.h>
void splitfloat(float x,int *intpart,float *fracpart);
int main()
{
int a,*intpart=&a;
float x,b,*fracpart=&b;
scanf("%f",&x);
splitfloat(x,intpart,fracpart);
printf("%d\n",*intpart);
printf("%f",*fracpart);
return 0;
}
void splitfloat(float x,int *intpart,float *fracpart)
{
*intpart=x/1;
*fracpart=x-*intpart;
}
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[100],*p=a;
*(p+i)=a[i]
用(p的加减数)即可以表示a【加减数】的数组元素
1.7 如何定义字符指针指向字符串?指针指向字符串后,初始位置在哪里?
char *p="hellow";
指针初始位置在‘h'
1.8 利用字符指针操作字符串,如设计函数实现字符串连接,请在此贴图展示代码。说明指针表示字符的方法好处是什么?
#include <stdio.h>
void connect( char *s1, char *s2 );
void main()
{
char *p1,*p2,s1[100],s2[100];
gets(s1);
gets(s2);
connect( char s1, char s2 );
printf("%s",s1);
}
void connect( char *s1, char *s2 )
{
for(p1=s1;*p1;p1++);
for(p2=s2;*p2;*p1++=*p2++);
*p1='\0';
}
2.本周你不会内容有什么?
2.1 课堂派错题罗列及如何订正。
被这题的表达式给迷惑了,仔细拆分后发现就是将*p指向数组a的起始为止,后将地址移到下一个a【1】
2.2 其他不会的?打算怎么解决
对于指针还是有点迷糊,多看看书和翁恺老师的视频
字符数组用gers 和puts还不明白,向同学请教
3.数组上机考试小结
3.1 那题错了,请罗列?
6-2 7-2 7-4
3.2 错题如何订正,为什么错了?
7-2 输出16进制只需输出%x即可以将十进制数转化成16进制
6-2的转置矩阵关键在于a【i】【j】与a【j】【i】进行交换