专升本C语言学习--第六章 数组

第六章 数组

是一种数据类型

数组的概念

  1. 数组是一组有序数据的集合。
  2. 用数组的名称和下标来表示数组。例如:a[4],a就是数组名称,4表示数组的下标。
  3. 同一数组中的每一个元素数据类型必须相同。

定义和引用一维数组

定义:数据类型 数组名称[常量表达式];

bear_sketch@2x
// 2020/11/08
// C
#include <stdio.h>
int main() {
  //定义一个10个空间的数组,每个数组元素为int类型
  int a[10];
  // int--->表示数组中的每一个元素都是int类型。
  // a--->数组名称(表示数组首元素的内存地址)。
  // 10--->表示数组中一共有10个元素。
  // 会在内存中开辟连续的10个内存空间,来存放int类型的元素值,每个元素占4个字节。
  // 引用数组
  a[0] = 100;
  // 数组的下标是从0开始的,9结束。
  // 0表示下标。标号
  a[1] = 10;
  for (int i = 0; i <= 9; i++) {
    printf("%d\t", a[i]);
  }
  printf("\n");
  printf("%d\n",a);
  printf("%d\n",a+1);
  printf("%d\n",a+2);
  return 0;
}

一维数组的初始化

// 2020/11/08
// C
#include <stdio.h>
int main() {
    int a[10]={1,2,3,4,5,6,7,8,9,10};
    for(int i=0;i<=9;i++){
        printf("%d\t",a[i]);
    }
    printf("\n");
    int b[10]={1,2,3};
    //如果给数组的部分元素进行赋值,没有赋值的元素系统会自动赋值为0
    for(int i=0;i<=9;i++){
        printf("%d\t",b[i]);
    }
    printf("\n");
    int c[10]={0};
    //全0数组
    for(int i=0;i<=9;i++){
        printf("%d\t",c[i]);
    }
    printf("\n");
    int d[]={1,2,3,4,5,6,7};
    for(int i=0;i<=6;i++){
        printf("%d\t",d[i]);
    }
  return 0;
}

例题:使用数组输出斐波那契数列前20项。

// 2020/11/08
// C
#include <math.h>
#include <stdio.h>
int main() {
  //斐波那契数列数组输出20项
  int a[20] = {1, 1};
  int i;
  for (i = 2; i <= 19; i++) {
    a[i] = a[i - 1] + a[i - 2];
  }
  for (i = 0; i <= 19; i++) {
    if (i % 5 == 0) {
      printf("\n");
    }
    printf("%d\t", a[i]);
  }
  return 0;
}

二维数组

一般形式

数据类型 数组名称[常量][常量]
bear_sketch@2x 2

// 2020/11/08
// C
#include <stdio.h>
int main() {
  int a[3][4];
  // a--->表示二维数组的名称,首行元素的地址
  // 3--->表示3行。
  // 4--->表示4列。
  // 行和列的下标都是从0开始的。
  // 数组的每一个元素在内存中都是连续存放的。
  // 按行存放。
  printf("%d\n", a);        //首行地址
  printf("%d\n", a + 1);    //第二行地址
  printf("%d\n", &a[0][0]); //首个元素的地址
  return 0;
}

二维数组赋初值

// 2020/11/08
// C
#include <stdio.h>
int main() {
  // 1.
  int a[3][4] = {{1, 2, 3, 4}, {4, 3, 2, 1}, {5, 6, 7, 8}};
  for (int i = 0; i <= 2; i++) {
    for (int j = 0; j <= 3; j++) {
      if (j % 4 == 0) {
        printf("\n");
      }
      printf("%5d", a[i][j]);
    }
  }
  printf("\n");
  // 2.
  int b[3][4] = {1, 2, 3, 4, 4, 3, 2, 1, 5, 6, 7, 8};
  for (int i = 0; i <= 2; i++) {
    for (int j = 0; j <= 3; j++) {
      if (j % 4 == 0) {
        printf("\n");
      }
      printf("%5d", b[i][j]);
    }
  }
  printf("\n");
  // 3.
  int c[3][4] = {{1, 2}, {4}, {5, 6, 7}};
  for (int i = 0; i <= 2; i++) {
    for (int j = 0; j <= 3; j++) {
      if (j % 4 == 0) {
        printf("\n");
      }
      printf("%5d", c[i][j]);
    }
  }
  printf("\n");
  // 4.全0的二维数组
  int d[3][4] = {0};
  for (int i = 0; i <= 2; i++) {
    for (int j = 0; j <= 3; j++) {
      if (j % 4 == 0) {
        printf("\n");
      }
      printf("%5d", d[i][j]);
    }
  }
  printf("\n");
  // 5.省略行值,但不能省略行值
  int e[][4] = {1, 2, 3, 4, 4, 3, 2, 1, 5, 6, 7, 8};
  // int e[3][] = {1,2,3,4,4,3,2,1,5,6,7,8};错误!!!!
  // int e[][] = {1,2,3,4,4,3,2,1,5,6,7,8};错误!!!!
  for (int i = 0; i <= 2; i++) {
    for (int j = 0; j <= 3; j++) {
      if (j % 4 == 0) {
        printf("\n");
      }
      printf("%5d", e[i][j]);
    }
  }
  printf("\n");
	return 0;
}

image
在这里插入图片描述

字符数组

由于C语言中,没有定义字符串类型,所以通过字符数组定义字符串。

// 2020/11/08
// C
#include <stdio.h>
int main() {
  char a[10] = {'h', 'e', 'l', 'l', 'o'};
  // int中没有赋值的元素为0;char中没有赋值的元素为'\0'
  for (int i = 0; i <= 9; i++) {
    printf("%c", a[i]);
  }
  // printf("%s", a);
  printf("\n");
  char b[] = {"hello2"};
  for (int i = 0; i <= 5; i++) {
    printf("%c", b[i]);
  }
  printf("\n");
  char c[] = "hello3";
  for (int i = 0; i <= 5; i++) {
    printf("%c", c[i]);
  }
  printf("\n");
  printf("%s", c);
  return 0;
}

字符串的结束标志

C语言中规定,字符串中的结束标志为’\0’。 在定义字符串的时候,系统会自动的在字符串后加上’\0’,表示字符串的结束。

// 2020/11/08
// C
#include <stdio.h>
int main() {
  char str[] = "helloworld";
  str[5]='\0';
  //printf("%d",sizeof(str));--->11个字节,末尾自动增加'\0'表示字符串的结束。
  printf("%s\n",str);
  // 从数组第一个元素开始打印,直到碰到'\0'结束。
  for(int i=0;str[i]!='\0';i++){
      printf("%c",str[i]);
  }
  return 0;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

字符串的输入

#include <stdio.h>

int main() {
  char str1[5], str2[5], str3[5];
  scanf("%s%s%s", str1, str2, str3);// 其本身就是地址,不需要加地址符&
  printf("str1=%s,str2=%s,str3=%s\n", str1, str2, str3);
  return 0;
}

使用字符串处理函数

// 2020/11/08
// C
#include <stdio.h>
#include <string.h>
int main() {
  // 1.输出字符串的函数puts(字符数组)
  char str1[] = "made in china";
  puts(str1);
  // 2.输入字符串的函数gets(字符数组)
  char str2[10];
  gets(str2);
  puts(str2);
  // 3.字符串链接函数strcat(字符数组1,字符数组2)
  //功能:连接字符数组2连接到字符数组1中
  char str3[] = "hello";
  char str4[] = "world";
  strcat(str3, str4);
  puts(str3);
  // 4.字符串的复制函数strcpy(字符数组1,字符数组2)
  //功能:将字符数组2复制到字符数组1中。
  char str5[10];
  char str6 = "abcdef";
  strcpy(str5, str6);
  puts(str5);
  // 5.字符串的比较函数strcmp(字符数组1,字符数组2)
  //功能:比较两个字符串的大小
  //如果返回0:两个字符串相等
  //如果返回1:字符串1>字符串2
  //如果返回-1:字符串1<字符串2
  //规则:小写字母>大写字母,按照字典顺序,越往后越大
  //从字符串第一个不同的字母开始比较大小
  char str7[] = "BbBA";
  char str8[] = "BbBAB";
  printf("%d\n", strcmp(str7, str8));
  // 6.检查字符串的实际长度strlen(字符数组)
  char str9[] = "BbBAR"; // 6Byte
  printf("%d\n", strlen(str9));
  printf("%d\n", sizeof(str9));
  // 7.将字符串转换为小写strlwr(字符数组)Lowercase Uppercase
  char str10[] = "BBADF";
  strlwr(str10);
  puts(str10);
  //小写字母转大写
  strupr(str10); 
  puts(str10);

  return 0;
}

数组循环时的最后一个值

// 2020/11/16
// C
#include <stdio.h>
int main() {
  int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 15, 16};
  printf("%d\n", sizeof(a));
  printf("%d\n", sizeof(int));
  for (int i = 0; i < sizeof(a) / sizeof(int); i++) {
    printf("%3d", a[i]);
  }

  return 0;
}

⭐️例题:输入10个学生的成绩(整数),统计出成绩低于平均分的人数。

// 2020/11/08
// C
#include <stdio.h>
int main() {
  int stu[10]; //存放学生成绩
  for (int i = 0; i <= 9; i++) {
    // scanf("%d", &stu[i]);
    scanf("%d", stu + i);
  }
  //求平均分
  int sum = 0;
  for (int i = 0; i <= 9; i++) {
    // printf("%d\n", a[i]);
    sum += stu[i];
  }
  double avg = sum / 10.0;
  int num = 0;
  for (int i = 0; i <= 9; i++) {
    if (stu[i] < avg) {
      num++;
    }
  }
  printf("%d", num);
  return 0;
}

例题:求二维数组中的最大值及其行标和列标

在这里插入图片描述

// 2020/11/08
// C
#include <stdio.h>
int main() {
  int a[4][4] = {
      {23, 44, 12, 77}, {13, 2, 33, 12}, {23, 45, 12, 65}, {11, 9, 15, 78}};
  //打擂台
  int max = a[0][0];
  int x = 0;
  int y = 0;
  for (int i = 0; i <= 3; i++) {
    for (int j = 0; j <= 3; j++) {
      if (max < a[i][j]) {
        max = a[i][j];
        x = i;
        y = j;
      }
    }
  }
  printf("%d\n坐标:(%d,%d)", max, x, y);
  return 0;
}

image 8

// 2020/11/08
// C
#include <stdio.h>
int main() {
  float a[20] = {2, 3};
  float b[20] = {1, 2};
  for (int i = 2; i <= 19; i++) {
    a[i] = a[i - 1] + a[i - 2];
  }
  for (int i = 2; i <= 19; i++) {
    b[i] = b[i - 1] + b[i - 2];
  }
  double sum = 0;
  for (int i = 0; i <= 19; i++) {
    sum += a[i] / b[i];
  }
  printf("%f\n", sum);
  return 0;
}

例题:杨辉三角形(输出10行)

image 9

// 2020/11/08
// C
#include <stdio.h>
int main() {
  int a[10][10] = {0};
  for (int i = 0; i <= 9; i++) {
    a[i][0] = 1;
    a[i][i] = 1;
  }
  for(int i=2;i<=9;i++){
      for(int j=1;j<=9;j++){
          a[i][j]=a[i-1][j-1]+a[i-1][j];
      }
  }
  for (int i = 0; i <= 9; i++) {
    for (int j = 0; j <= i; j++) {
      printf("%5d", a[i][j]);
    }
    printf("\n");
  }
  return 0;
}

例题:求数列中的最小值

在这里插入图片描述

// 2020/11/09
// C
#include <stdio.h>
int main() {
  int a[3][4]= {{1, 2, 3, 4}, {9, 8, 7, 6}, {-10, 10, -5, 2}};
  int b = 0, x = 0, y = 0;
  for (int i = 0; i <= 2; i++) {
    for (int j = 0; j <= 3; j++) {
      if (b > a[i][j]) {
        b = a[i][j];
        x = i;
        y = j;
      }
    }
  }
  printf("min=%d,x=%d,y=%d\n", b, x, y);
  return 0;
}

例题:成绩总分、平均分、最高分、最低分

image 11

// 2020/11/09
// C
#include <stdio.h>
int main() {
  double grade[4];
  double sum = 0;

  for (int i = 0; i <= 3; i++) {
    scanf("%lf", &grade[i]);
  }

  double max=0;
  double min = grade[0];
  
  for (int i = 0; i <= 3; i++) {
    sum += grade[i];
  }
  for (int i = 0; i <= 3; i++) {
    if (min >= grade[i]) { 
      min = grade[i];
    }
  }
  for (int i = 0; i <= 3; i++) {
    if (max < grade[i]) {
      max = grade[i];
    }
  }
  printf("sum=%.2f,avg=%.2f,max=%.2f,min=%.2f\n", sum, sum / 4, max, min);

  return 0;
}

例题:1~200之间,既能被5整除又能被7整除的数

image 12

// 2020/11/09
// C
// 1~200之间,既能被5整除又能被7整除的数
#include <stdio.h>
int main() {
  for (int i = 1; i <= 200; i++) {
    if (i % 5 == 0 && i % 7 == 0) {
      printf("%5d", i);
    }
  }
  return 0;
}

例题:键盘输入10个学生的成绩,统计最高分、最低分、平均分

image 13

// 2020/11/09
// C
//键盘输入10个学生的成绩,统计最高分、最低分、平均分
#include <stdio.h>
int main() {
  double grade[10];
  for (int i = 0; i <= 9; i++) {
    scanf("%lf", &grade[i]);
  }
  double sum = 0;
  for (int i = 0; i <= 9; i++) {
    sum += grade[i];
  }
  double max = 0;
  for (int i = 0; i <= 9; i++) {
    if (max < grade[i]) {
      max = grade[i];
    }
  }
  double min = grade[0];
  for (int i = 0; i <= 9; i++) {
    if (min >= grade[i]) {
      min = grade[i];
    }
  }
  printf("avg=%.2f,max=%.2f,min=%.2f\n", sum / 10, max, min);
  return 0;
}

例题:由数字1,2,3,4组成,互不相同且无重复数字的三位数

image 14

// 2020/11/09
// C
#include <stdio.h>
int main() {
  int a[4] = {1, 2, 3, 4};
  for (int i = 0; i <= 3; i++) {
    for (int j = 0; j <= 3; j++) {
      if (i == j) {
        continue;
      }
      for (int z = 0; z <= 3; z++) {
        if (i == z || j == z) {
          continue;
        }
        printf("%5d", a[i] * 100 + a[j] * 10 + a[z]);
      }
    }
  }
  return 0;
}
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liangpi_hero

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值