C博客作业--指针

一、PTA实验作业

题目1:6-2 求出数组中最大数和次最大数

1. 本题PTA提交列表

1231973-20171217022933952-1651333065.png

2. 设计思路(伪代码或流程图)

函数部分:
    定义i,m,k ,t 
    for 1=0  to  1
        m=i;
     end;
     
    for  k=i+1v  to  n-1
        若  a[k]>a[m]
        则   t=a[k];
             a[k]=a[m];
             a[m]=t;
     end;

3.代码截图(注意,截图,截图,截图。不要粘贴博客上。不用用···语法去渲染)

1231973-20171217023003139-1245962840.png

4.本题调试过程以及提交列表的情况

一开始的时候没有想到可以用循环的嵌套,只用了单层循环,当a[i]>a[i+1]则让a[i]=index,先找到最大数,存放于index中,但是这样的话就不好找的次大数了,然后想到可以用循环的嵌套,第一次循环从a[0]开始,先找到最大数,将它与a[0]交换位置,第二次循环则从a[1]开始,找到最大数,将它与a[1]交换位置

题目2:6-5 判断回文字符串

1. 本题PTA提交列表

1231973-20171217023605499-1078947894.png

2. 设计思路(伪代码或流程图)

1231973-20171217135648280-1812586723.png

3.代码截图(注意,截图,截图,截图。不要粘贴博客上。不用用···语法去渲染)

1231973-20171217023634749-1649254358.png

4.本题调试过程以及提交列表的情况

这题是借鉴书上判断回文数的方法,但书上是用数组做,这题要求用指针,但方法都一样,在写代码时忘记计算字符串的长度,当时就直接写了k=k-1,但是没有k的初值,导致后面一直是部分正确。

题目3:6-10 字符串串动变化

1. 本题PTA提交列表

1231973-20171217023743702-670495188.png

2. 设计思路(伪代码或流程图)

函数部分:
    定义 i=0,最大字符max,*q
    max=p[0];
      遍历 p; 
       若 max小于*(p+i)
          max=*(p+i);
           q=P+i;
          i++;
    end;
        当q>p成立时,
            *q=*(q-1);
            q--;
    end;
         将最大字符放于首位

3.代码截图(注意,截图,截图,截图。不要粘贴博客上。不用用···语法去渲染)

1231973-20171217023815514-663032681.png

4.本题调试过程以及提交列表的情况

1231973-20171217113737514-1016775694.png
一开始时是想的先找到最大字符以及它的位置,然后循环将它前面的数向后移一位,再将最大字符赋值给a[0],但是这样原始的a[0]就会丢失,然后想到用 指针做,重新定义一个指针,使它指向最大字符,让最大字符前的字符均向后移一位,再将最大字符放于首位

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

1231973-20171217023030655-1624499419.png

三、阅读代码

实现字符串的连接
#include<stdio.h>
#include<string.h>
#define MAXS 10
char *str_cat( char *s, char *t );
int main()
{
       char *p;
      char str1[MAXS+MAXS] = {'\0'}, str2[MAXS] = {'\0'};
     scanf("%s%s", str1, str2);
      p = str_cat(str1, str2);
         printf("%s\n%s\n", p, str1);
     return 0;
}
char *str_cat( char *s, char *t )
{
       char *p;
       p=strcat(s,t);
     return (p);
}

上面的代码调用了strcat函数来实现字符串间的连接,并且定义了指针来指向字符串,这样不会占用太多的内存空间,如果是我写的话,应该是重新定义一个字符数组,然后将这两个字符串存到新定义的字符数组中,然后再循环输出,相对于上述代码来说的话过程比较繁琐,并且会占用较多的内存

查找星期
#include<stdio.h>
#include<string.h>
#define MAXS 80
int getindex( char *s );
int main()
{
        int n;
         char s[MAXS];
       scanf("%s", s);
       n = getindex(s);
      if ( n==-1 ) printf("wrong input!\n");
      else printf("%d\n", n);
     return 0;
}
int getindex( char *s )
{
             char a[7][MAXS]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
              int i;
               for(i=0;i<7;i++)
             {
                   if(strcmp(a[i],s)==0)
               return (i);
        }
             if(i==7)
                  return (-1);
      }

上述代码也是运用了数组与指针相结合的方式,并且调用了比较大小的函数strcmp,这样可以很容易的判断出输入的数字是否可以代表星期,若可以,则输出对应的星期英文名称。

四、本周学习总结(1分)

1.自己总结本周学习内容。

3【指针】

(1)&是取地址运算符;
(2)指针变量的类型不是指指针变量本身的类型,而是指它所指向的变量的数据类型,不同类型指针变量所占的内存空间大小都是相同的
(3指针之间可以相减,比较大小但是不可以相加,指针相减得到的是地址间差多少个存储单元,为常量,不再是地址;地址的加法运算,即下移操作,若加一,则是增加一个存储单元;
(4)当p=&a后,p与a相同;&p与&a相同,是地址;&a与a相同,是变量;(p)++等价于a++,将p所指向的变量值相加一,p++等价于(p++)
(5)对指针进行初始化时需注意的几点:
a.把一个变量的地址作为初始化赋值给指针变量时,该变量必须在此之前已经定义。因为变量只有在定义后才被分配存储单元,它的地址才能赋给指针变量
b.可以用初始化了的指针变量给另一个指针变量做初始化
c.不能用数值作为指针变量的初值,但可以将一个指针变量初始化为一个空指针,例:int p=1000是错误的,而 int p=0,是将指针变量初始化为空指针,这里0是ASCII字符NULL的值; p=(int )1732表示将一个常量强制转换为指针
(6)
(a+i) 与a[i]等价

冒泡法:
        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 ;

    }

    }
选择法:
        void  choose( int a[ ] ,int n )
      {
              int  i , j ,t ;
               for ( i=1;i<n;i++)
                   for( j=j+1;j<n;j++)
                       if( a[ j ] < a [ i ]{
                               t=a[ i]; a [ j ]= a[ i ]; a [ i ] = t;
       }
      }
 
二分法:
          int Bsearch ( int  *p , int  n,int x)
    {
             int low ,high,mid;
              low=0;high=n-1;
             while   ( low < = high )  {
                   mid= (low+high)/2;
                    if ( x==p [ mid ] )
                           break;
              else  if ( x < p[ mid ] )
                    high = mid -1;
              else 
                    low= mid +1;
     }
          if ( low <= high )
              return mid;
           else
               return  -1;
    }
【常用的字符串处理函数】
(1)字符串复制函数 strcpy(s1,s2),例:
           int  i;
          char  s1 [80],s2 [80 ], from [80] = "happy";
             strcpy ( str1, from );
             strcpy ( str2; "key" );
      第三条语句调用了函数 strcpy()把from中的字符串复 制给str1;第四条语句把字符串常量“key”复制给str2后,数组str1中存放了“happy”,数组str2中存放了“key”
(2)字符串连接函数 strcat (s1,s2)
 s1必须是字符串数组基地址,参数s2可以是字符组名或是字符串常量。例:
     char  str1 [80] =" hello",str2[ 80], t [80 ] = " world";
        strcat ( str1, t );
         strcpy ( str2 , str1 );
         strcat ( str2,"!" );
   先调用函数strcat ()连接str1和t,结果放在str1中,再调用函数strcpy()将str1中的字符串赋给str2,最后调用函数strcat()连接str2和字符串常量“!”后,str2中存放了“hello world !”
(3)字符串比较函数strcmp(s1,s2)
   和函数strcpy()中对参数的要求不同,函数strcmp()中的参数s1和s2 可以是字符数组名或字符串常量。函数strcmp()返回一个整数,给出字符串s1和s2的比较结果:
   a. 若s1和 s2 相等,返回0;
   b.若s1大于s2,返回一个正数
   c.若s1小于s2,则返回一个负数
(4)字符串长度函数strlen(s1)
  参数s1可以是字符数组名或字符串常量。函数strlen()返回字符串s1的‘\0’之前的字符个数。即字符串的有效字符的个数(不包括字符结束符‘\0’)
【结构】
(1)结构类型定义的一般形式:
   struct  结构名 {
             类型名   结构成员1;
             类型名    结构成员2;
             ···
             类型名     结构成员n;
  };

例:
struct address { //定义结构地址
char city [ 10 ];
char street [ 20 ];
int code;
int zip;
};

(2)定义结构变量的三种方式:
a.单独定义: 即先定义一个结构类型,再定义这种类型的变量
b.混合定义:即在结构类型的同时定义结构变量,且这种定义的一般形式为:
            struct  结构名{
                   类型名   结构成员名1;
                   类型名    结构成员名2;
                      ··· 
                   类型名     结构成员名n;
           }结构变量名;
c.无类型名定义: 指在定义结构变量时省略结构名,例:
           struct   {
                 类型名  结构成员名1;
                 类型名   结构成员名2;
                  ...
                 类型名   结构成员名n;
           }结构变量名表;
2.罗列本周一些错题
指针课堂派复习作业

(1)
1231973-20171217021901311-1703252045.png
1231973-20171217022009889-756810120.png

1.gets(chrstr) 2.char p(错误原因:没有真正理解指针的用法,以为toupper是数组名)
3.
p (遍历p,直到p!=‘\0’)
4.toupper(
(p-1)(错误原因同二)

(2)
1231973-20171217022220811-1918825192.png
1231973-20171217022241124-1460813741.png

1.sum=Fun(s)(错误原因:该处为调用函数,且s是指针,本身就是地址,不用取地址符&)

2.s(isdigit是判断是否为数字字符,又将它看作是数组名)
3.sum=sum+
s-'0'(错误原因同二,若字符为数字字符,则将它转换为数字)

(3)
1231973-20171217022324561-208727482.png

1.Fun(a,x,&n)

2.break;
3.j>i;
4.n=n+1(由于插入了x后,需要再申请一个存储单元,所以指针n需指向下一个地址

(4)
1231973-20171217022540483-1918818202.png
1231973-20171217022600264-625058319.png

1.fun( a,&n)

2.n=n+1(错误原因:n++指的是指向的位置下移,而不是数值加一)

转载于:https://www.cnblogs.com/2223ch/p/8047824.html

以下是对提供的参考资料的总结,按照要求结构化多个要点分条输出: 4G/5G无线网络优化与网规案例分析: NSA站点下终端掉4G问题:部分用户反馈NSA终端频繁掉4G,主要因终端主动发起SCGfail导致。分析显示,在信号较好的环境下,终端可能因节能、过热保护等原因主动释放连接。解决方案建议终端侧进行分析处理,尝试关闭节电开关等。 RSSI算法识别天馈遮挡:通过计算RSSI平均值及差值识别天馈遮挡,差值大于3dB则认定有遮挡。不同设备分组规则不同,如64T和32T。此方法可有效帮助现场人员识别因环境变化引起的网络问题。 5G 160M组网小区CA不生效:某5G站点开启100M+60M CA功能后,测试发现UE无法正常使用CA功能。问题原因在于CA频点集标识配置误,修正后测试正常。 5G网络优化与策略: CCE映射方式优化:针对诺基亚站点覆盖农村区域,通过优化CCE资源映射方式(交织、非交织),提升RRC连接建立成功率和无线接通率。非交织方式相比交织方式有显著提升。 5G AAU两扇区组网:与三扇区组网相比,AAU两扇区组网在RSRP、SINR、下载速率和上传速率上表现不同,需根据具体场景选择适合的组网方式。 5G语音解决方案:包括沿用4G语音解决方案、EPS Fallback方案和VoNR方案。不同方案适用于不同的5G组网策略,如NSA和SA,并影响语音连续性和网络覆盖。 4G网络优化与资源利用: 4G室分设备利旧:面对4G网络投资压减与资源需求矛盾,提出利旧多维度调优策略,包括资源整合、统筹调配既有资源,以满足新增需求和提质增效。 宏站RRU设备1托N射灯:针对5G深度覆盖需求,研究使用宏站AAU结合1托N射灯方案,快速便捷地开通5G站点,提升深度覆盖能力。 基站与流程管理: 爱立信LTE基站邻区添加流程:未提供具体内容,但通常涉及邻区规划、参数配置、测试验证等步骤,以确保基站间顺畅切换和覆盖连续性。 网络规划与策略: 新高铁跨海大桥覆盖方案试点:虽未提供详细内容,但可推测涉及高铁跨海大桥区域的4G/5G网络覆盖规划,需考虑信号穿透、移动性管理、网络容量等因素。 总结: 提供的参考资料涵盖了4G/5G无线网络优化、网规案例分析、网络优化策略、资源利用、基站管理等多个方面。 通过具体案例分析,展示了无线网络优化中的常见问题及解决方案,如NSA终端掉4G、RSSI识别天馈遮挡、CA不生效等。 强调了5G网络优化与策略的重要性,包括CCE映射方式优化、5G语音解决方案、AAU扇区组网选择等。 提出了4G网络优化与资源利用的策略,如室分设备利旧、宏站RRU设备1托N射灯等。 基站与流程管理方面,提到了爱立信LTE基站邻区添加流程,但未给出具体细节。 新高铁跨海大桥覆盖方案试点展示了特殊场景下的网络规划需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值