再一次小结C语言

来源:互联网 发布:域名别名查询 编辑:程序博客网 时间:2024/05/20 22:02

2017年11月13号

在开始前补充一下上一次的知识,对于const:不能通过const修饰只读变量,不能通过变量名去修改对应的内存里的数据。

使用const注意就近原则,const保护常量,而volatile是防止变量编译时被优化。


开始今天的总结,首先对于二维数组的总结,对于a[3][4],能表示a[1][1]的有:*(a[1]+1),其中a[1]表示第二行首地址元素; (*(a+1))[1] :这里a+1表示第一行家到第二行的收地址;*(&a[1][1])表示a[1][1]地址上的值。

下面是对一些函数的总结:

1、冒泡排序法
 #include <stdio.h>
  
 int main()
 {
     int a[5] = {0};
     int i, j, k;
     int length = sizeof(a)/sizeof(int); //求整个数组长度
 
     printf("please input numbers :\n");


      for(i = 0;i < length; i++)
      {
         scanf("%d", &a[i]);
       }
      for (i = 0;i < length - 1; i++)
      {
         for (j = 0; j < length - i - 1; j++)
         {
             if(a[j] > a[j+1])
             {
                 k = a[j];
                 a[j] = a[j+1];
                 a[j+1] = k;
             }
         }
      }
      for(i = 0; i < length; i++)
      {
          printf("%d", a[i]);
      }
     return 0;
 }
                                                                          
2、在一个数组指定位置插入一个字符
方法一 :此方法是将指定位置之前的字符复制进新的,而后为指定位置输入字符,再使用strcat ,连接后面的字符。
#include <stdio.h>
#include<string.h>


int main()
 {
  char str[20] = {0};
  char new[30] = {0};
  int num, i;
  char ch;
  printf("Please input :\n");
  scanf("%s%d%c",str, &num, &ch);


  strncpy(new, str, num - 1);
  new[num - 1] = ch;
  strcat(new, str + num - 1);


  printf("%s\n", new);


  return 0;
 }
方法二:此方法是将指定位置往后的字符分别向后位移,即分别向下一个地址赋值。
#include <stdio.h>
#include <string.h>


int main()
{
  char ptr[20] = {0};
  int num, i, length;
  char ch;


  printf("please input:\n");
  scanf("%s%d %c",ptr, &num, &ch);
  length = strlen(ptr);


  for(i = 0; i < length - num + 1; i++)
     {
        ptr[length - i] = ptr[length - i - 1];
     }
    ptr[num - 1] = ch;
    printf("%s\n",ptr);


    return 0;
 }
 
3、使用extern
主函数:
 #include <stdio.h>
 int num = 3;
 int main()
 {
     print();
     return 0;
  }
print函数:
#include <stdio.h>


extern num;
void print()
{


   printf("%d\n",num);
 
   
 }


4、strcmp
#include <stdio.h>
#include <string.h>


int main()
{
    char str[20] = {0};
    char ptr[20] = {0};
   
    scanf("%s%s", str, ptr);
    if (strcmp(str, ptr) > 0)
      {
         printf("%s>%s\n",str, ptr);
       }
    else if (strcmp(str, ptr) < 0)
      {
         printf("%s<%s\n",str, ptr);
       }
    else
      {
        printf("%s=%s\n",str, ptr);
       }
      return 0;
 }
   


对于strcpy

不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。

用赋值语句只能将一个字符赋给一个字符型变量或字符数组元素。

对于strcmp

作用是比较字符串1和字符串2, 两个字符串自左向右逐个字符相比(按ASCLL值大小相比较),直到出现不同的字符或遇到'\0'为止。

编写程序,实现strcmp()相同功能myStrcmp()函数

 #include <stdio.h>
   
  int myStrcmp( const char *str1, const char*str2)
   {
       while(*str1 && *str2 && (*str1 == *str2))
       {
           str1++;
           str2++;
       }
      return *str1 - *str2;
  }
  int main()
  {
      char str1[10];
      char str2[10];
      scanf("%s%s", str1, str2);
      printf("%d\n",myStrcmp(str1, str2));
      return 0;

   }