C语言博客作业--字符数组
一、PTA实验作业
题目1:7-3 找最长的字符串
1. 本题PTA提交列表(要提交列表,不是结果)
2. 设计思路
{
定义变量i,n,flag,max
输入字符串数n
定义数组 num[n]存放每个字符串长度
定义字符数组 str[n][80]
for i=0 to i=n-1 {
输入str[i];
计算str[i]长度存于num[i];
i++;
}
max=num[0];
for i=0 to i=n-1 {
if num[i]>max{
max重新赋值max=num[i];
记下最长串所在位置flag=i
}
}
输出结果
}
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
本题没有碰到问题
题目2:7-6 Jack cheng的烦恼2
1. 本题PTA提交列表
2. 设计思路
{
定义整形变量i,j,n;
定义字符数组str[5001];
输入字符个数n;
输入字符串;
for i=0 to i=n-1 i++{
if str[i]为')'或'}'
输出False
结束程序return 0;
if str[i]=='('{
for j=i+1 to j=n-1 j++{
if str[j]为')'{
令str[i] str[j]都为空字符
}
}
}
if str[i]=='}'{
for j=i+1 to j=n-1 j++{
if str[j]为'}'{
令str[i] str[j]都为空字符
}
}
}
}
输出 True
}
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
本题没有碰到问题。
PTA提交列表说明:
0分的答案错误是输出没有大写.
本来我的思路中没有
for i=0 to i=n-1 i++{
if str[i]为')'或'}'
输出False
结束程序return 0;
而是遍历完数组后,再遍历一遍看是不是全为空字符,这样效率很低,写伪代码的时候想到可以直接在第一次遍历是结束
题目3:7-7 删除字符串中的子串
1. 本题PTA提交列表
2. 设计思路
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
碰到的问题:
该错误点是因为重新遍历的时候i的初值问题,若令i=0;进入下一次循环时,i的值为1,这样判断就有问题
解决办法:初始化时令i=-1
二、截图本周题目集的PTA最后排名
三、同学代码结对互评
1.互评同学名称:朱杰伟
2.我的代码、互评同学代码截图(此处截图核心代码就好,不一定截图全部代码,图上指明是谁的代码。)
我的代码截图:
同学代码截图:
3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题。
- -不同点:一看我的代码就更长,我的代码通过判断‘(’‘{’和‘)’'}' 是否成对出现,若是,则将两个都换成空字符,相当于连连看,但在遍历是一旦碰到'}'')'就判断为错误,因为若是正确的输入顺序一定已经被换成空字符,不会碰到‘}’')';而杰伟的代码中,分别假设'('')''{''}'为1,-1,2,-2,初始值count=0,通过判断然后加减,一旦count<0,说明出现输入顺序错误。
- 各自优势:感觉我的代码没有什么优势,杰伟的代码用了数学思维,把问题简化,而我的相比之下更加复杂。
- 更喜欢哪种代码风格:更喜欢杰伟的代码风格,把问题简化,容易理解。
四、本周学习总结
1.你学会了什么?
1.1指针变量如何定义(设计代码可以用markdown代码符号渲染)?
int *p;
1.2 指针加法运算运用在哪种情况,2个指针变量能否相加?
运用在:
int a[10]={1,2},*p;
p=a; //即p=&a[0],*p=1
p++; //此时p=&a[1],*p=2
两个指针变量不能相加
1.3 指针不赋初值,直接使用,会出现什么情况,请用DEVC验证,并截图展示?
程序会崩溃
1.4 课堂派上关于分离浮点数的整数部分和小数部分那题,请用DEVC验证实现,并在此贴图展示,同时说明哪句是指针变量做函数形参,函数实参应该怎么表示。指针变量做函数形参有什么用处?
形参:
int *intpart,float *fracpart
实参应该传地址:
&intpart,&fracpart
指针变量做函数形参能在函数中直接改变实参的值,且能返回多个函数值
1.5 请把课本的冒泡排序的函数改成指针变量做形参格式,并把代码写在底下,注意用markdown语法渲染。
void bubble(int *a,int n)
{
int i,j,t;
for(i=0;i<n-1;i++){
for(j=0;j<n-i-1;j++){
if(*(a+j)>*(a+j+1)){
t=*(a+j);
*(a+j)=*(a+j+1);
*(a+j+1)=t;
}
}
}
}
1.6 如何定义一个指针变量指向数组,如何用指针变量表示数组元素?
{
int *p,a[10];
p=a; //p=&a[0]
p++; //p=&a[i]
...
}
1.7 如何定义字符指针指向字符串?指针指向字符串后,初始位置在哪里?
{
char *p;
char a[10];
p=a; //p=&a[0]
p++; //p=&a[i]
...
}
初始位置在a[0]
1.8 利用字符指针操作字符串,如设计函数实现字符串连接,请在此贴图展示代码。说明指针表示字符的方法好处是什么?
#include<stdio.h>
void *strcat (char *s1, char *s2);
int main()
{
char s1[160],s2[80];
gets(s1);
gets(s2);
strcat(s1,s2);
puts(s1);
printf("\n");
return 0;
}
void *strcat (char *s1, char *s2)
{
char *p=s1;
while(*p)
p ++;
while(*s2!='\0'){
*p =*s2;
p ++;
s2++;
}
*p='\0';
}
2.本周你不会内容有什么?
2.1 课堂派错题罗列及如何订正。
本题没有用DveC验证,一看‘==’就选了
3.数组上机考试小结
3.1 那题错了,请罗列?
7-2 jmu-c-十进制转16进制
3.2 错题如何订正,为什么错了?
没有考虑到输入为0的情况。
while(j>0){
l=j%16;
if(l<10)
s[i]=l+'0';
else
s[i]=l-10+'A';
j/=16;
i++;
count++;
}
应该改用do-while循环.