C语言博客作业--字符数组
一、PTA实验作业
题目1:7-1 字符串转换成十进制整数
1. 本题PTA提交列表
2. 设计思路
定义i,m控制循环
定义s[80]存原始的字符串,h[80]存筛选后的十六进制字符串
long number存放 最后的十进制结果
i=0;
h[0]='+';先让第一个字符为“+”
输入已#结尾的字符串s[80]
i++;
s[i]='\0';
m=0;
for i=0 to s[i]!='\0' {//筛选十六进制字符串
若有s[i]中有“-”号 {
判断h[0]第一个字符是否还是“+”(目的为判断这里的s[i]是不是在产生十六进制前的第一个负号)
h[0]='-';
m++;
}
}
else{
如果s[i]是十六进制字符则{
s[i]入h[m]内
m++;
}
}
}
结束字符h[m]='\0';
number=0;
for(i=0;h[i]!='\0';i++){//转为十进制
如果h[i]是数字型 number=number*16+h[i]-'0';
如果h[i]是小写字母a到f number=number*16+h[i]-'a'+10;
如果h[i]是大写字母A到F number=number*16+h[i]-'A'+10;
}
如果h[0]存放着负号先输出h[0]
输出number
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
- 如何识别出现十六进制字符前的第一个负号 解决办法:把新字符串的第一个字符先赋给一个符号,若发现第一个十六进制字符前没有负号就把该十六进制字符赋给第一个字符
- 进制转换 解决办法:看了课本的类似的题的代码,用字符减去该类型的第一个值的ASCII码,如数字类型减‘0’,字母类型减了之后还需要再加上10
题目2:7-3 找最长的字符串
1. 本题PTA提交列表
2. 设计思路
定义i控制循环,N表示N个字符串
输入N
定义count[N]存放每个字符串的字符数
定义s[100000]存放字符串
for i=0 to i<N {
定义一个 n=0 在接下来的循环中记录每行字符串的字符数
当s[m]不为回车时{
m++;
n++;
}
count[i]=n;
}
定义max=0来找count数组里面最大的值,flag记录最大的那个count值时的下标
for i=0 to N{
如果count[i]大于max{
max被count[i]替换
flag记录下此时的下标
}
}
输出 ("The longest is: ");
定义 add=0 来加上count[flag] 之前的所有count数组
for i=0 to flag{
add=add+count[i];累加
}
for i=add-max to add {
输出s[i]
}
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
题目3:7-5 统计大写辅音字母
1. 本题PTA提交列表
2. 设计思路
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
二、截图本周题目集的PTA最后排名。
三、同学代码结对互评
1.互评同学名称
刘博涵
2.我的代码、互评同学代码截图
3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题。
- 刘博涵同学用两个变量j和k分别记录出现首个字母和出现末尾字母时的下标,然后再在后一个循环中实现输出。
- 我的代码是在查找首字母时就开始输出了,查找与输出均在一个循环内
- 刘博涵同学的代码用了两个循环,我用了一个,考虑到内存因素,可能我的代码会更好一些
- 但从思维上,记录下标可能更简洁易懂,我的代码在考虑结束输出的条件时刚刚开始是错误的,是一个个尝试了才找到正确的结束条件。
四、本周学习总结
1.你学会了什么?
1.1指针变量如何定义(设计代码可以用markdown代码符号渲染)?
int a,*p;
p=&a;//p指向a
1.2 指针加法运算运用在哪种情况,2个指针变量能否相加?
- 指向下一个元素
- 指针之间可以相减,但不可以相加:两个同一类型的指针变量是可以相减的,他们的意义表示两个指针指向的内存位置之间相隔多少个元素
1.3 指针不赋初值,直接使用,会出现什么情况,请用DEVC验证,并截图展示?
程序崩溃
1.4 课堂派上关于分离浮点数的整数部分和小数部分那题,请用DEVC验证实现,并在此贴图展示,同时说明哪句是指针变量做函数形参,函数实参应该怎么表示。指针变量做函数形参有什么用处?
#include<stdio.h>
void splitfloat(float x,int *i,float *f){
*i=(int)x;
*f=x-*i;
}
int main (void)
{
int i,*ip=&i;
float f,x,*fp=&f;
scanf("%f",&x);
splitfloat(x,ip,fp);
printf("intpart:%d\nfracpart:%f",i,f);
return 0;
}
1.5 请把课本的冒泡排序的函数改成指针变量做形参格式,并把代码写在底下,注意用markdown语法渲染。
1.6 如何定义一个指针变量指向数组,如何用指针变量表示数组元素?
int a[2],*p;
p=&a[0];//p指向a[0]
printf("%d",*p);//输出a[0]
1.7 如何定义字符指针指向字符串?指针指向字符串后,初始位置在哪里?
char a[2],*p;
p=&a[0];//p指向a[0]
printf("%d",*p);//输出a[0]
1.8 利用字符指针操作字符串,如设计函数实现字符串连接,请在此贴图展示代码。说明指针表示字符的方法好处是什么?
2.本周你不会内容有什么?
2.1 课堂派错题罗列及如何订正。
设变量定义为 int a[2]={1,3}, p=&a[0]+1;,则p的值是( )。
A.2 B.3 C.4 D.&a[0]+1
错选D 正确答案B
对&a[0]+1的定义不清晰 实际上这里的p指向a[1]
2.2 其他不会的?打算怎么解决
3.数组上机考试小结
3.1 那题错了,请罗列?
7-1 IP地址转换
7-2 jmu-c-十进制转16进制
7-3 jmu-c-输出字符间的字符子串
3.2 错题如何订正,为什么错了?
这三题是关于字符型数组的输入输出的题目,我这三题是没有思路去做,在考试当天对于字符串的输入输出都还不太明白,本周末有刻意看了课本上字符串的相关内容。7-1老师上课都讲过了...做不出来很不应该,7-2和7-3目前已重做。