C/C++知识点之C语言博客作业--字符数组
小标 2018-09-19 来源 : 阅读 1120 评论 0

摘要:本文主要向大家介绍了C/C++知识点之C语言博客作业--字符数组,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

本文主要向大家介绍了C/C++知识点之C语言博客作业--字符数组,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

 一、PTA
题目1:人以类聚
1. 本题PTA提交列表

2.设计思路

3.代码截图

4.本题调试过程碰到问题及PTA提交列表情况说明

一开始写的代码是这样的
没有按学号从小到大输出小明喜欢同学的学号导致错误。

题目2:Left-pad
1.本题PTA提交列表

2.设计思路
int N,k=0,j=0,i
定义长度为100000的字符型数组a,c,以及一个字符型变量ch
输入N,ch
while(输入a[k]如果不为‘\n‘
    k++;
a[k]=‘\0‘
if N>=k 即要补足之后的长度大于原数组长度
    for i=0 to N
        if(i<N-k) c[i]=ch即c数组前面补为ch
        else c[i]=a[j] j++ 即c数组后面为a数组
    c[N]=‘\0‘
else 
    for i=k-N to a[i]!=‘\0‘ //只留下从结尾往开头数要求长度的数组元素
        c[j]=a[i]   j++
    c[j]=‘\0‘
for i=0 to c[i]!=‘\0‘
    输出c[i]
3.代码截图

4.本题调试过程碰到问题及PTA提交列表情况说明

数组定义时的大小不够,加了两次,才过

题目3:字符串转换成十进制整数
1.本题PTA提交列表

2.设计思路
定义两个长度为100字符数组 a,b
int i,j0,flag=0,flag标志是否存在有效-号
long number=0
while(输入a[i]a不等于‘#‘)
    i++
for i=0 to a[i]!=‘\0‘
    if(a[i]==‘-‘&&j==0)即存在有效-号
        flag=1
    if(a[i]为‘0‘到a‘9‘或者‘a‘到‘f‘或者‘A‘到‘F‘)
        b[j]=a[i]   j++
b[i]=‘\0‘
for j=0 to b[j]!=‘\0‘
    if(b[j]为‘0‘到‘9‘)
        number=number*16+b[j]-‘0‘
    if(b[j]为‘a‘到‘f‘)
        number=number*16+b[j]-‘a‘+10
    if(b[j]为‘A‘到‘F‘)
        number=number*16+bj]-‘A‘+10
if(flag==1&&number!=0)即有有效-号并且不为0
    输出-number
else
    输出number
3.代码截图

4.本题调试过程碰到问题及PTA提交列表情况说明

在-号的无效有效上判断错误,没有判断出时是在第一个十六进制字符前的-号才是有效的,同时代码flag初始化错误初始化为1,导致一直错误。后来认真读了代码才发现

二、截图本周题目集的PTA最后排名

三、同学代码结对互评
1.互评同学名称
严伟杰
2.我的代码、互评同学代码截图


3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题

思路不同:
我没有判断前十七位是否为数字,因为前十七位如果不为数字,那么最后的加权求和取余肯定与校验码不同。而严伟杰同学有判断前十七位是否为数字,我的代码算是耍了小聪明,但是比较简短,他的代码更加严谨。
变量定义不同:
我定义了a数组存放身份证为一维数组,每次输入都重新对它赋值。而严伟杰同学定义了一个二维数组,每次存放一行,在我看来是不必要的,这样导致数组占用内存空间大,效率低。
所以总体来说我更喜欢我的代码。

四、本周学习总结
1.你学会了什么?
1.1指针变量如何定义
如果指向整形变量则定义 int *p
如果指向字符型变量则定义 char *p
如果指向double形变量则定义 double *p
即指向什么类型的变量,就定义什么类型的指针
1.2 指针加法运算运用在哪种情况,2个指针变量能否相加?
运用在数组中,表示数组下标又一一位。两个指针变量不能相加
1.3 指针不赋初值,直接使用,会出现什么情况,请用DEVC验证,并截图展示?

程序运行错误,会崩溃
1.4 课堂派上关于分离浮点数的整数部分和小数部分那题,请用DEVC验证实现,并在此贴图展示,同时说明哪句是指针变量做函数形参,函数实参应该怎么表示。指针变量做函数形参有什么用处?

指针变量做函数形参的好处:在函数中可以改变主函数中指向的值,则可以间接实现传回多个数
1.5 请把课本的冒泡排序的函数改成指针变量做形参格式,并把代码写在底下,注意用markdown语法渲染。
#include
void bubble(int *a,int n);
int main(void){
    int n,a[8];
    int i;
    printf("Enter n(n<=8):");
    scanf("%d",&n);
    printf("Enter a[%d)]:",n);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    bubble(a,n);
    for(i=0;i<n;i++)
        printf("%3d",a[i]);
    return 0;
}
void bubble(int *a,int n){
    int i,j,t;
    for(i=1;i<n;i++){
        for(j=0;j<n-i;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+i) 即可表示a[i]
1.7 如何定义字符指针指向字符串?指针指向字符串后,初始位置在哪里?
char *p;
p="china";
初始位置为首字母的地址,这道题即为c的地址
1.8 利用字符指针操作字符串,如设计函数实现字符串连接,请在此贴图展示代码。说明指针表示字符的方法好处是什么?
#include
char Fun(char *a,char *b);
int main(){
    char a[]="china ",b[]="is the best";
    Fun(a,b);
    puts(a);
    return 0;
}
char Fun(char *a,char *b){
    int i=0,j,k=0;
    while(a[i]!=‘\0‘)
    i++;
    for(j=i;b[k]!=‘\0‘;j++){
        a[j]=b[k];
        k++;
    }
    a[j]=‘\0‘;
}
好处:可以返回多个值
2.本周你不会内容有什么?
2.1 课堂派错题罗列及如何订正

这题答案为D,由于数组名为指针常量,不能实现自增
2.2 其他不会的?打算怎么解决
对于指针指向数组时的情况,掌握的不够熟练,这周还做了一些别的题,发现寻找规律有时候是很重要的,如何优化代码,提高代码效率也很重要。解决方法:多做题,累积经验和解某些题目的方法。
3.数组上机考试小结
3.1 哪题错了,请罗列?
上机考试虽然得了满分,但是在IP地址转换那题,错把数组定义成整形,导致之后错误,浪费了一会儿时间。然后输出十六进制数,可以直接用 printf("%X",number) 这种形式,可以输出大写的十六进制。
3.2 错题如何订正,为什么错了?
粗心导致浪费时间,考试应认真检查代码,整理好自己的思路,而不是自己看自己的代码都不懂的样子

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程