• C语言博客作业--字符数组


    一、PTA实验作业

    题目1:7-1 字符串转换成十进制整数

    1. 本题PTA提交列表

    2. 设计思路

    3.代码截图

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


    • 这个问题我看了好久,试了很多的的错误点,答案和我预料的一样,所以我重新看了一遍题目,发现曲解了题意
      把第一个十六进制字符之前存在字符“-”理解成第一个十六进制字符前一个存在字符“-”

    题目2:7-7 删除字符串中的子串

    1. 本题PTA提交列表

    2. 设计思路

    * 定义 i,j,k用于循环,count用于计数,s用于求子串的长度,s1=1,n=0;      //i,j,k用于循环 
      定义The_main_string[81];并且为0
      定义substring[81];并且为0
    * 输入主串和子串用gets(),并且s=strlen(substring);
    * for循环,进入下一步
      s1等于n;
    * for循环从i=0,直至主串为0,结束后i自增,进入下一步
       count=0
    * for循环j等于i,k等于0;直至主串不等于子串;结束后j自增,k自增
      count自增
    * 如果count等于子串长度s,那么对应主串的j-s+1个为0,且将主串j+1剪切过去,并且n++
      end
      end
    * 如果s1等于n,退出循环
    * 输出主串
    

    3.代码截图

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


    对于这种情况,我直接将输出了几个值,在纸上重新模拟了程序运行的过程,发现其中有一些算法不合理,就改善了一下

    题目3:7-20 指定位置输出字符串

    1. 本题PTA提交列表

    2. 设计思路

    * 定义ij由于循环,n,数组d用于记录下标,字符数组a,字符形bc
    * 用gets输出a ,输出b,c
    * for i为0,直至a【i】为0进入下一步,i自增
      如果a[i]等于b,d【j++】=i
      如果a[i]等于c,n=i;
    end
    * 输出a[0]到n数组a的值
    

    3.代码截图

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

    本题用来一个printf语句来查看遇到b与遇到c的下标,刚开始并没有n变量,后来发现当如果是112211,1,2
    这样子的输入,下标会变换,所以用n来记录与才最后相等的下标

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

    三、同学代码结对互评

    我的代码

    杰伟的代码

    • 我和他的思路的一样,代码也足够简洁。
    • 其中在覆盖子串这一问题上我是靠调用库函数中的剪切,杰伟是利用循环左移,这两种方法看个人习惯吧

    四、本周学习总结

    1.你学会了什么?

    • 我学好了指针,其中也明白之前不懂的内存的问题,就是一个变量一个地址,地址的所在地也可以用指针来存放,指针对于的
      地址也可以知道
    • 我也会学会用新的库函数的复制剪切

    1.1指针变量如何定义(设计代码可以用markdown代码符号渲染)?

    int a,*p=&a;
    

    1.2 指针加法运算运用在哪种情况,2个指针变量能否相加?

    • 用于指针指向数组,指针自增表示数组的下一个
    • 指针变量不能相加,没有意义
      1.3 指针不赋初值,直接使用,会出现什么情况,请用DEVC验证,并截图展示?

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

    • 指针变量做函数形参 void spllitfloat(float x,int* intpart,float* fracpart)
    • 函数实参spllitfloat(x,&realnumber,&decimalfraction);
    • 可以在调用函数中改变主函数的值
      1.5 请把课本的冒泡排序的函数改成指针变量做形参格式,并把代码写在底下,注意用markdown语法渲染。
    #include<stdio.h>
    void bubble(int *p,int n);
    int main()
    {
        int a[100],n,i;
        scanf("%d
    ",&n);
        for(i=0;i<n;i++)
        scanf("%d",&a[i]);
        bubble(a,n);
        for(i=0;i<n;i++){
        	printf("%d ",a[i]);
    	}
        return 0;
    }
    void bubble(int *p,int n)
    {
    	int i,j,t;
    	for(i=1;i<n;i++){
    		for(j=0;j<n-i;j++){
    			if(*(p+j)>*(p+j+1)){
    			t=*(p+j);
    			*(p+j)=*(p+j+1);
    			*(p+j+1)=t;
    	       }
    		}
    	}
    }
    

    1.6 如何定义一个指针变量指向数组,如何用指针变量表示数组元素?

    int a[10],*p;
    p=a;
    *(p+1) 等价为a[1] 
    

    1.7 如何定义字符指针指向字符串?指针指向字符串后,初始位置在哪里?
    char *p="point";

    • 初始位置是在p的地址
      1.8 利用字符指针操作字符串,如设计函数实现字符串连接,请在此贴图展示代码。说明指针表示字符的方法好处是什么?
    #include<stdio.h>
    int main()
    {
        char *p1="how are ";
        char *p2="you";
        printf("%s%s",p1,p2);
        return 0;
    }
    
    • 可以减少代码量
    • 可以减少内存 的占用量
      2.本周你不会内容有什么?
    • 我不太懂 char *p[]的使用
    • 我对于数组的0使用的不是很好

    2.1 课堂派错题罗列及如何订正。

    • 对于这道题,当时没有真正理解指针指向数组的关系,和理解题目的意思,老师指正后,恍然大悟。

    • 这道题也没有理解指针与数组的关系,听完老师上完课,才明白数组名本身也是一个地址,只不过不能改变罢了

    2.2 其他不会的?打算怎么解决
    其他的都懂了。

    3.数组上机考试小结

    • 这次考试的败笔是在6-2 jmu-c-二维数组转置并按列排序,其中我的算法是没有错的,但是当时在考试一直以为
      我的冒泡排序法出错,在纸上模拟了程序的运行过程发现没有错误,后来一直看,过了好久,才看到我在a[i]^=a[i+1]
      =a[i]=a[i]这个过程i+1忘记了。

    3.1 那题错了,请罗列?

    3.2 错题如何订正,为什么错了?

    #include <stdio.h>
    int main()
    {
        int a;
        scanf("%d",&a);
        printf("%X
    ",a);
        return 0;
    }
    
    #include<stdio.h>
    int main()
    {
    	int n,i=-1,j=0;
    	static int a[10000]={0};
    	char b[1000];
    	scanf("%d",&n);
    	do{
    		a[++i]=n%16;
    		n=n/16;
    	}while(n!=0);
    	for(j=0;j<=i;j++){
    		switch(a[j]){
    			case 1:b[j]='1';break;
    			case 2:b[j]='2';break;
    			case 3:b[j]='3';break;
    		        case 4:b[j]='4';break;
    		    	case 5:b[j]='5';break;
    		    	case 6:b[j]='6';break;
    		        case 7:b[j]='7';break;
    			case 8:b[j]=8;break;
    		        case 9:b[j]='9';break;
    			case 10:b[j]='A';break;
    		        case 11:b[j]='B';break;
    		        case 12:b[j]='C';break;
    		        case 13:b[j]='D';break;
    		        case 14:b[j]='E';break;
    		        case 15:b[j]='F';break;
    		}
    	}
    	for(i=i;i>=0;i--)
    	printf("%c",b[i]);
    	return 0;
    }
    
    • 这道题刚开始设计思路的时候是想通过创建一个字符数组来存放16进制的1至F/f,另外一个字符数组用来存放结果,
      后来由于时间不够用,就没写完,回到宿舍就突然想起来,可以直接用上面的代码来运行。
  • 相关阅读:
    c# 网络编程
    .net基础------抽象类和接口区别
    自己开发插件-------- 待续...........
    js 学习笔记 (this ,扩展方法,匿名函数)
    meta
    微信公众号支付接口-JSAPI
    跨境电商-311xml报文生成 更新到2018-10
    MooTools 异步请求验证
    微信JS-SDK 接口调用与 php 遇到的坑
    php 与 jquery中$.post()与attr()方法的简单实例 amaze modal 模态窗口
  • 原文地址:https://www.cnblogs.com/guobaoqing/p/8012895.html
Copyright © 2020-2023  润新知