C语言博客作业--字符数组
2017-12-10 22:48
260 查看
一、PTA实验作业
题目1:7-3 找最长的字符串
1. 本题PTA提交列表
![](https://images2017.cnblogs.com/blog/1232486/201712/1232486-20171210195532521-146855030.png)
2. 设计思路
![](https://images2017.cnblogs.com/blog/1232486/201712/1232486-20171210220910802-2010868397.png)
3.代码截图
![](https://images2017.cnblogs.com/blog/1232486/201712/1232486-20171210200110802-173305336.png)
4.本题调试过程碰到问题及PTA提交列表情况说明。
格式错误:对提供原文本的输出出现错误直接复制粘贴原文本就解决了问题
题目2:7-5 统计大写辅音字母
1. 本题PTA提交列表
![](https://images2017.cnblogs.com/blog/1232486/201712/1232486-20171210200951240-34573722.png)
设计思路
定义一个字符数组str,定义整形变量i,j,count统计个数,初值都赋为0 while((str[i]=getchar())!='\n') i++; str[i]='\0'; 输入字符串,最后结束 while(str[j]!='\0') 遍历数组 如果满足是大写且不是“A,E,I,O,U”这些字母 count++ j++ 输出count的值
3.代码截图
![](https://images2017.cnblogs.com/blog/1232486/201712/1232486-20171210201907255-137037644.png)
4.本题调试过程碰到问题及PTA提交列表情况说明
本题能较好完成。题目3:7-12 IP地址转换
1. 本题PTA提交列表
![](https://images2017.cnblogs.com/blog/1232486/201712/1232486-20171210202215208-87977261.png)
2. 设计思路
定义两个整形数组b,c,x放每8个转换过来的值 定义一个字符型数组a while((a[i]=getchar())!='\n') i++; a[i]=0; 输入IP地址,最后给数组结束 for(i=0;a[i];i++) 把字符数组a转为整形,用c储存 for(i=0;i<32;i++) 数组b储存数组c的值 x=x*2+b[k]; k++; 如果k到了8重置k=0 如果i<24,输出x值后面带点 如果i>32,直接输出x 重置x的值
3.代码截图
![](https://images2017.cnblogs.com/blog/1232486/201712/1232486-20171210203439240-375676595.png)
4.本题调试过程碰到问题及PTA提交列表情况说明。
开始是用k为7时重置值,答案错误。后来发现在前面我的k已经加了1要到8个所以改为k为8时重置
还有一个是每8个输出下面带点的问题。本来全都输出的是x带.
后面要去掉最后一个点,用了个分支结构用i判断就好了
二、截图本周题目集的PTA最后排名
![](https://images2017.cnblogs.com/blog/1232486/201712/1232486-20171210233050365-622376091.png)
三、同学代码结对互评
1.互评同学名称
李于程2.我的代码、互评同学代码截图
![](https://images2017.cnblogs.com/blog/1232486/201712/1232486-20171210205312302-1471299135.png)
![](https://images2017.cnblogs.com/blog/1232486/201712/1232486-20171210205334458-2064575717.png)
3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题。
首先同学的代码全篇没有注释,可读性较差。用了多个分支结构没有注释确实很难懂同学是设计了新的数组,用了多个分支结构去判断,一步步去完成要求
我的代码是直接整体考虑,也部分情况特殊如结尾的字符串删除。有一些思维量
比较之下我更喜欢自己的代码,可以比较清楚理解。可读性好一些
四、本周学习总结
1.你学会了什么?
1.1指针变量如何定义(设计代码可以用markdown代码符号渲染)?
如int *p char *p
1.2 指针加法运算运用在哪种情况,2个指针变量能否相加?
可以用于指针指向数组时2个指针变量不能相加
1.3 指针不赋初值,直接使用,会出现什么情况,请用DEVC验证,并截图展示?
程序奔溃![](https://images2017.cnblogs.com/blog/1232486/201712/1232486-20171210210910880-1817381723.png)
1.4 课堂派上关于分离浮点数的整数部分和小数部分那题,请用DEVC验证实现,并在此贴图展示,同时说明哪句是指针变量
做函数形参,函数实参应该怎么表示。指针变量做函数形参有什么用处?
int i 和 float f 将指针i和指针p]作为形参.
实参用地址表示.
可以直接修改内存改变实参的值
![](https://images2017.cnblogs.com/blog/1232486/201712/1232486-20171210211825521-862560716.png)
1.5 请把课本的冒泡排序的函数改成指针变量做形参格式,并把代码写在底下,注意用markdown语法渲染。
void bubblde(int *a,int n) { int *i,*j,t; for(i=1+a;i<a+n;i++){ for(j=a;j<a+n-1;j++){ if(*j>*(j+1)){ t=*j;*j=*(j+1);*(j+1)=t; } } } }
1.6 如何定义一个指针变量指向数组,如何用指针变量表示数组元素?
将数组名赋给指针变量名,例:int *p,a[8];p=a;
p+i==a[i]
1.7 如何定义字符指针指向字符串?指针指向字符串后,初始位置在哪里?
如 char *s="cpoint".
初始位置为字符串首元素的地址
1.8 利用字符指针操作字符串,如设计函数实现字符串连接,请在此贴图展示代码。
说明指针表示字符的方法好处是什么?
void link( char *str1, char *str2 ) { while(*str1) *str1++; while((*str1++=*str2++)) }
正确灵活地运用,可以有效地表示复杂的数据结构;能动态分配内存;方便地使用字符串
2.本周你不会内容有什么?
2.1 课堂派错题罗列及如何订正。
With regard to the array definition int a[4];,which expression among the following is wrong?A、 *a
B、 a[0]
C、 a
D、 a++
不清楚数组名的定义
数组名是地址常量,不能变化值 所以选D
有如下说明: int a[10]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, *P=a; 则数值为 9 的表达式是( )。 (2分)
A、 *P+9
B、 *(P+8)
C、 *P+=9
D、 P+8
指针表示值要加*;选择B
2.2 其他不会的?打算怎么解决
多看看课本自己理解请教他人
多看优秀代码
3.数组上机考试小结
3.1 那题错了,请罗列?
二维数组转置并按列排序数组元素的删除
输出字符间的字符子串
3.2 错题如何订正,为什么错了?
这几题没有时间去做。前面花太多时间了,一些错误看不出来一直在花时间其实就是效率的问题。
二维数组转置并按列排序
void trans_array(int a[][10],int n){ int i,j,temp; for(i=0;i<n;i++){ for(j=0;j<n;j++){ if(i<j){ temp=a[i][j]; a[i][j]=a[j][i]; a[j][i]=temp; } } } } void sort_array(int a[][10],int n){ int i,j,k,temp; for(j=0;j<n;j++){ temp=a[0][j]; for(i=0;i<n;i++){ for(k=i+1;k<n;k++){ if(a[i][j]>a[k][j]){ temp=a[i][j]; a[i][j]=a[k][j]; a[k][j]=temp; } } } }}
输出字符间的字符子串
#include<stdio.h> int main(void){ char a[100],ch1,ch2; int i,flag=0,index1=0,index2=0; gets(a); scanf("%c",&ch1); getchar(); scanf("%c",&ch2); getchar(); for(i=0;a[i];i++){ if(a[i]==ch1&&flag==0){ index1=i;flag++; } else if(a[i]==ch2&&flag==1){ index2=i;flag++;break; } } if(flag!=2)printf("no sub string!"); else{ for(i=index1;i<=index2;i++){ printf("%c",a[i]); } } return 0; }
数组元素的删除
#include<stdio.h> int main(void){ int n,k,a[100],i,x,j; scanf("%d",&n); for(i=1;i<=n;i++){ scanf("%d",&a[i]); } scanf("%d",&k); for(i=1;i<=k;i++){ scanf("%d",&x); for(j=x;j<n;j++){ a[j]=a[j+1]; } n--; } if(n==1)printf("%d",a[1]); else{ printf("%d",a[1]); for(i=2;i<=n;i++)printf(" %d",a[i]); } return 0; }