• c博客作业 指针


    0.展示PTA总分

    在这里插入图片描述

    1.本章学习总结

    • 一维数组数组名即为地址

    • 二维数组名是个二级地址

    • 例:对a[3][4]来说 * ( *(a+i)+J)为a[i][j]的值

    • 通过指针传参可以改变多个变量的值

    • 指针变量的定义:类型名 * 指针变量名 其中类型名是指针指向数据的类型 指针变量名可随意 常用p 因指针翻译为pointer。

    • 指针变量的赋值:例:int i=2; int *p; p=&i; 指针必须赋值 否则造成内存混乱 若不知赋予什么值 可令指针为NULL

    • 指针作循环条件 通常再定义一个指针 例:

    void re(char *p)
    {
        char *p1;
        p1=p;
        for(;p1++;*p1!=0)
        {
            cnt++;
        }
    }
    
    • 两个变量值的交换:
    void exhcange(char *p1,char *p2)
    {
        char a=*p1;
        *p1=*p2;
        *p2=a;
    }
    
    • 指针的冒泡排序与数组没什么区别 将a[]换成*a即可
    • 常用字符串处理函数:
    • scanf() gets() fgets(array,number,stdin)这三个函数用来输入字符串 scanf函数遇到空格和回车结束 gets不安全会越界 最好用fgets 遇到回车结束 在字符串的后两位分别是 和 使用strlen时应减1
    • puts()函数与printf()函数 puts遇变为 其他无区别
    • 字符串复制函数strcpy(s1,s2) 用s2将s1覆盖 需要确保s1空间足够
    • 字符串链接函数 strcat(s1,s2) 将s2链接在s1后面
    • 字符串比较函数strcmp(s1,s2),注意其比较的是ASCII码 从数组首项开始一直比较到有一边出现了或有一个字符大小不一样结束 若S1>S2返回1;s1=s2 返回0;s1<s2返回-1
      函数原型:void *malloc(unsigned size)
      申请size长度的空间 若成功则返回指针 通常需强制类型转换
    • free()
      释放malloc函数申请的空间

    1.2本章学习体会

    • 指针是c语言的灵魂 且flexible and tough

    • 代码量2000行

    2.PTA实验作业

    6-8 计算最长的字符串长度 (15分)

    2.1.1 伪代码

    主函数
    int i, n;
        char *string[MAXN] = {NULL};
        定义字符数组 并赋值
        调用函数int max_len( char *s[], int n );
        通过下标法来选出最长的字符串 
        for(int i=0;i<n;i++){
            if(strlen(s[i])>max){
                max=strlen(s[i]);
            }
        }max初始化为0 每当有字符串的长度更长时 则交换
        最后返回max的值
    
    

    2.1.2 代码截图

    在这里插入图片描述

    2.1.3 总结本题的知识点

    本题是对下标法的灵活运用 将一个较为麻烦的题目变得简洁明了
    并设计指针传参 字符指针数组传参时 若是char *a[10]则函数括号里也应是char *a[]

    2.1.4 PTA提交列表及说明

    在这里插入图片描述
    错误:函数传参时只写了*s 原来没有用下标法而是将所有长度算出来存入数组并排序

    2.2 填充矩阵

    2.2.1伪代码

    观察输出样例 该函数应有三个循环 对应对角线 上三件和下三角
    首先将所有元素赋值3
    for (int i = 0; i < 4; i++) {
    		for (int j = 0; j < 4; j++) {
    			if (i + j<n-1) {
    				p[i][j] = 3;
    再将对角线元素赋值1
    else if (i + j == n - 1) {
    				p[i][j] = 1;
    			}
    最后将下三角赋值2
    else if (j + i>n-1) {
    				p[i][j] = 2;
    				}
    

    2.2.2 代码截图

    在这里插入图片描述

    2.2.3 总结本题的知识点

    对于指向二维数组的指针 可由int(*p)[n]=a定义 表示p是a[0]的地址
    *p即为a[0],**p为a[0][0] 且对于矩阵 可写出行与列的关系找函数关系

    2.2.4 PTA提交列表及说明

    在这里插入图片描述
    其实在编译器里错了很多次 主要是行与列的关系没有找精确

    2.3 6-5 字符串反正序连接 (10分)

    2.3.1伪代码

    #include <stdio.h>
    void fun (char *s, char *t);
    int main()
    { char s[100], t[100];
    scanf("%s", s);
    fun(s, t);
    printf("%s
    ", t);
    return 0;
    }
    \裁判使用 
    void fun (char *s, char *t){
        int cnt=0;
        char *c=s;
        while(*c不为0)
        {
        c++;
        cnt++;
        }
        //计算其长度
        知道长度后可从最后面往前逆序将元素放到另一个数组
        for(int i=cnt-1;i>=0;i--){
            *(t+k)=*(s+i);
            k++;
        }//
        最后再按顺序添加
        for(int i=0;i<len;i++)
        {
            *(t+k)=*(s+i);
            k++;
           
        }
        *(t+k)=0;
        并将最后一位赋值0
    

    2.3.2 代码截图

    在这里插入图片描述

    2.3.3 总结本题的知识点

    通过对指针的灵活运用 先计算字符数组长度 再逆序 存放 到另一个数组

    2.3.4 PTA提交列表及说明

    在这里插入图片描述
    第一次段错误忘记将k赋值0 第二次忘记在数组最后加上

    3.阅读代码

    在这里插入图片描述
    在这里插入图片描述
    这个代码将yyyy/mm/dd”加24小时制编程实现将其转换成”mm/dd/yyyy”加12小时制格式的字符串。

  • 相关阅读:
    计算排名人数
    显示出现次数
    正负数用不同颜色显示
    根据日期计算财政年度
    Sumifs函数区域参数的脾气
    HTTPPrint打印服务
    flutter心跳任务
    flutter开发Window应用
    flutter 强制屏幕坚屏显示
    flutter FutureBuilder应用
  • 原文地址:https://www.cnblogs.com/xzb011026/p/12052440.html
Copyright © 2020-2023  润新知