鸦领主 发表于 2020-12-18 15:05:17

C语言学习第九天 数组即练习(上)

本帖最后由 鸦领主 于 2020-12-23 15:22 编辑

(之所以定义一个数组是因为要同时定义多个同类型的变量,节省内存)

1.数组:
数组是一组具有相同数据类型的有序变量的集合,再内存中表现为一块连续的存储区域。

a)数组定义:普通变量定义后加[常量]
如:类型标识符 数组名[常量表达式]
       char         s      
而后的scanf_s("%s",s,sizeof(s)) s可以用&也可以不用
因为s是char数组,s本身指向这个数组首地址。
s里保存的本身就是个地址。&是取地址,所以可以用也可以不用


b)数组初始化:用{}给数组赋予初值
初始化元素的个数可以不全(用1个到总数个常量和变量)
未初始化全,把其余的归零
数组清零:char s={0}
不指定个数 int s[]={2,55,36,44}

c)求数组空间:
sizeof(数组)也可以说是sizeof(元素)*元素的个数
_countof(数组)用到#include <stdlib.h>

2.定义一个字符串数组,循环打印出每个数组的内容,一直到结尾符'\0'结束(\0占一个位置)
#include<stdio.h>
int main()
{
    char c;//定义一个20空间的字符串数组
    scanf_s("%s", &c,20);    //指定20个长度给scanf_s使用
    //或则使用sizeof(s)更方便,上面变化下面不用改动
    int i = 0;
      while (c!='\0')//到结尾符结束循环或者可以写成c!=0
      {
            printf("c[%d]:%c=%d 地址:0x%x\n",i,c,c,&c);
            i++;
      }
    return 0;
}


3.定义一个字符串数组,得出你输入的字符串的长度
#include<stdio.h>
int main()
{
    char c;
    scanf_s("%s", &c,sizeof(c));   
    int i = 0;
    while (c)//这里可以简化成这个样子
    i++;
    printf("你输入了%d个字符串", i);
    return 0;
}


4.定义一个字符串数组,将输入的字符串反序输出(①反一个输出一个,②全部反序再输出)
汉字反序的话就会变成另一个汉字,不再是原来的汉字


#include<stdio.h>
int main()
{
    char c;
    scanf_s("%s", &c,sizeof(c));   
    int i = 0;
    while (c)
      i++;
    while (i > 0)
      printf("%c",c[--i]);
      
    return 0;
}②
#include<stdio.h>
int main()
{
    char c;
    scanf_s("%s", &c,sizeof(c));   
    int i = 0;
    while (c)
      i++;
    int n=0;
    while (--i>n)
    {                                                      
       int t = c; //把n的值先给t                  
      c = c;//再把i的值给n               
      c= t;//最后把n也就是t的值给i      
      n++;
    }
    printf("%s", c);
    return 0;
}
}

123456789

i=9,n=1
t=n(t=1)
n=i(n=9)此时是 923456789
i=t(i=1)此时是 923456781

经过循环i--,n++
i=8,n=2
t=n(t=2)
n=i(n=8)此时是 983456789
i=t(i=2)此时是 983456721
....

5.定义一个整数数组,输入几个数字用00做结尾符,求出他们的总和和平局值
#include<stdio.h>
int main()
{
    int i;                           
    int n = -1;                        
    do                                    
    {                                                //没有办法像字符串一样一次性输入进去
      scanf_s("%d", &i[++n]);       //做一个循环,比如 40 30 55用00做结尾符
    } while (i != 00);                  //第一次把40放入i,再次循环把30放入i.....
    float f = 0;
    n = 0;
    while (i!=00)
    {
      f = f + i;
    }
    printf("总和是%0.1f平局值是:%0.2f", f, f / n);
    return 0;
}

6.定义一个整数数组,随便输入几个数字,实现冒泡排序
#include<stdio.h>
#include <stdlib.h>
int main()
{
    int i;
    int y = 0;
    printf("请随机输入%d个数字进行排序:\n", _countof(i));
    while (y < _countof(i))
    {
      scanf_s("%d", &i);
    }
//===================中间为核心算法
    y = 0;
    while (y< _countof(i)-1)
    {
      int n = 0;
      while (n < _countof(i) -1-y) //每执行一次外层循环那么10-1-0 ,10-1-1,10-1-2.....
      {                                           //不断减少内层循环的次数
            if (i > i)          //如果i=i也就是5那么i=i=6 不执行 ,然后n+1
            {                                 //i=6 i=7 不执行 n+1
                int t = i;      //i=7 i=3 执行代码ii交换位置,此时数字顺序是5 6 3 7 1 2 8 9 10 n+1
                i = i;// i=7 i=1 执行代码ii交换位置,此时数字顺序是5 6 3 1 7 2 8 9 10 n+1
                i = t;//          // .....
            }                                  // 最后数字顺序应该是5 6 3 1 2 7 8 9 10
            n++;                           //然后再次执行外层循环,再执行这个循环,同样原理
      }
      y++;
    }
//===================中间为核心算法
    int n = 0;
    while (n < _countof(i))
      printf("%d ", i);
    return 0;
}



页: [1]
查看完整版本: C语言学习第九天 数组即练习(上)