第六章:数组实训

简介: 第六章:数组实训

一、阅读程序题

1、代码

#include<stdio.h>
int main()
{
  int k, j, m, n, a[6][6], b[6];
  m = 3, n = 2;
  for (k = 0; k < m; k++)
  for (j = 0; j < n; j++)
    a[k][j] = k * n + j + 1;
  for (k = 0; k < m; k++)
  {
  b[k] = 0;
  for (j = 0; j < n; j++)
    b[k] += a[k][j];
  }
  for (k = 0; k < m; k++)
  printf("%3d", b[k]);
  return 0;
}

运行结果

306220cbca6940a48ab4b9024d4f1820.png

粗浅理解:第一题主要是一维数组和二维数组的定义和引用,引用是根据数组之间下标存储的值进行引用的,要清晰明白数组长度和数组下标的关系,二维数组同理。


2、代码

#include<stdio.h>
int main()
{
  int i, j, k, t, b[3][3] = { {9,8,7},{6,5,4},{3,2,1} };
  for (j = 0; j < 3; j++)
  for (k = 0; k < 2; k++)
    for (i = 0; i < 2; i++)
    if (b[i][j] > b[i + 1][j])
      t = b[i][j], b[i][j] = b[i + 1][j], b[i + 1][j] = t;
  for (i = 0; i < 3; i++)
  {
  for (j = 0; j < 3; j++)
    printf("%3d", b[i][j]);
  printf("\n");
  }
  return 0;
}

运行结果

83a7827eea8541ff805311a26ba4cc9e.png

粗浅理解:这一题主要是二维数组的定义,引用和初始化,把一个3×3的矩阵的行位置进行调换的一个代码,可以把它理解为3个一维数组进行逐级分解,减低维数,对于理解多维数组的存储方法,初始化及指针有很大帮助。


3、代码

#include<stdio.h>
int main()
{
  int i, j, a[4][4];
  for (i = 0; i < 4; i++)
    for (j = 0; j < 4; j++)
      if (i < j)
        a[i][j] = 1;
      else
        a[i][j] = i - j + 1;
  for (i = 0; i < 4; i++)
  {
    for (j = 0; j < 4; j++)
      printf("%3d", a[i][j]);
    printf("\n");
  }
  return 0;
}

运行结果

e71a34cfcb374873b0f417277276f1f5.png

粗浅理解:本题主要是对二维数组各个元素进行赋值,然后依次输出,要熟悉行下标和列下标的关系,就能基本理解本题的运行结果。


4、代码

#include<stdio.h>
#include<string.h>
int main()
{
  char a[7] = "a0\0a0\0"; int i, j;
  i = sizeof(a); j = strlen(a);
  printf("%d %d",i,j);
  return 0;
}

运行结果

a3e0634a5fbe4bfb85d303bb1a784363.png

粗浅理解:本题主要是对比sizeof()函数和strlen()函数的区别,前者计算字符串所占空间字节数,后者计算字符串长度,遇‘\0’结束。


5、代码

#include<stdio.h>
int main()
{
  int i, j, b[3][3] = { 0 };
  for (i = 0; i < 3; i++)
  {
  for(j=0;j<3;j++)
    switch (i - j + 2)
    {
    case 0:
    case 1:b[i][j] = 1; break;
    case 2:b[i][j] = 2; break;
    case 3:b[i][j] = 3; break;
    case 4:b[i][j] = 4; break;
    }
  }
  for (i = 0; i < 3; i++)
  {
  for (j = 0; j < 3; j++)
    printf("%2d", b[i][j]);
  printf("\n");
  }
  return 0;
}

运算结果

1b28eb56339946099d0fa1a37596ddb4.png

粗浅理解:这题也是对二维数组的进行赋值,利用两个for循环和switch语句对3×3的二维数组赋值,然后输出此数组的代码。


6、代码

#include<stdio.h>
int main()
{
  int a[3][3], b[3 * 3] = { 1,2 }, i, j;
  for (i = 2; i < 3 * 3; i++)
  b[i] = b[i - 1] + b[i - 2];
  for (i = 0; i < 3; i++)
  for (j = 0; j < 3; j++)
    a[j][i] = b[i * 3 + j];
  for (i = 0; i < 3; i++)
  {
  for (j = 0; j < 3; j++)
    printf("%3d", a[i][j]);
  printf("\n");
  }
  return 0;
}

运行结果

dd61c59a5c884938bc54d1ddc4e27c48.png

粗浅理解:此题主要是对一维数组进行赋值,然后再根据一维数组的值,把一维数组的值依次赋值给二维数组,然后输出结果。主要注意的是对二维数组进行赋值时的行下标和列下标的位置问题,然后根据一维数组表达式的值对二维数组赋值。

二、编程题

(1)假设10个整数存储在数组a[10]中,要求把其中能被12整除的数标记为T,其他标记为F。标记存储在字符数组b[10]中下标相同的对应位置。试编写程序,实现以上功能,并输出两个数组。


代码

#include<stdio.h>
int main()
{
  int i, a[] = { 11,12,23,36,48,56,72,78,89,96 };
  char b[10];
  for (i = 0; i < 10; i++)
  {
  printf("%d  ", a[i]);
  if (a[i] % 12 == 0)b[i] = 'T';
  else b[i] = 'F';
  }
  printf("\n");
  for (i = 0; i < 10; i++)
  printf("%c   ", b[i]);
  return 0;
}

运行结果

d0f66d06220d4a39813e2911b191a79c.png

粗浅理解:此题根据要求先初始化一个有10个元素的一维数组,然后再定义一个字符数组用于存放字符‘T’和‘F’,先用for循环把已经初始化的a数组进行输出,然后判断a数组里的数是否能被12整除,能在字符数组b中存入字符‘T’,否则存入字符‘F’,第一个for循环结束后换行,再把b字符数组在a数组下面输出。


(2)编写程序,将输入的10名学生的成绩保存到数组中,求出其最高分、最低分及平均分。

#include<stdio.h>
int main()
{
  int i;
  float a[10], max = 0, min = 100, avg = 0;
  for (i = 0; i < 10; i++)
  {
  scanf("%f", &a[i]);
  if (a[i] > max)max = a[i];
  if (a[i] < min)min = a[i];
  avg = avg + a[i];
  }
  avg = avg / 10;
  printf("max=%.1f\n", max);
  printf("min=%.1f\n", min);
  printf("avg=%.1f\n", avg);
  return 0;
}

运行结果

4f94b8e9b36e47d5b7ce6e7741f04915.png

粗浅理解:根据题目要求,定义一个for循环,依次输入学生的成绩,存入a数组中,在其中用两个if判断语句判断最大值和最小值,再把总成绩累加到avg变量,结束for循环后进行求平均成绩,此时输入的10名学生成绩的最高分、最低分、平均分都以得出,依次输出即可。


(3)设计一个程序统计某个班全体学生3门课的考试成绩。要求能输入学生人数,并按编号从小到大的顺序依次输入学生的成绩,再统计出每门课程的全班总分、平均分及每个考生所在考试的总分和平均分。

#include<stdio.h>
int main()
{
  int i, j, n;
  float a[80][3], sumcj[80] = { 0 }, avg[4] = { 0 }, s[3] = { 0 };
  printf("Pease input rs:");
  scanf("%d", &n);
  for (i = 0; i < n; i++) {
  printf("Please input %d student cj:",i+1);
  scanf("%f,%f,%f", &a[i][0], &a[i][1], &a[i][2]);
  for (j = 0; j < 3; j++) {
    sumcj[i] = sumcj[i] + a[i][j];
    s[j] = s[j] + a[i][j];
  }
  }
  for (i = 0; i < n; i++) {
  printf("Sum=%.1f Avg=%.1f\n", sumcj[i], sumcj[i] / 3);
  }
  for (i = 0; i < 3; i++)
  printf("Sum=%.1f Avg=%.1f\n", s[i], s[i] / n);
  return 0;
}

运行结果

3579050ce48142018b342bc864d14b0e.png

粗浅理解:根据此题要求,需要一个二维数组记录全班学生的3门成绩,利用for循环依次输入每个学生的成绩,然后再嵌套一个for循环累加出每个学生的总分和每科成绩的总分,再利用for循环把每个学生的总分和平均分,每科的总分和平均分输出。

目录
相关文章
|
15小时前
|
存储 算法 搜索推荐
【C++面向对象——群体类和群体数据的组织】实现含排序功能的数组类(头歌实践教学平台习题)【合集】
1. **相关排序和查找算法的原理**:介绍直接插入排序、直接选择排序、冒泡排序和顺序查找的基本原理及其实现代码。 2. **C++ 类与成员函数的定义**:讲解如何定义`Array`类,包括类的声明和实现,以及成员函数的定义与调用。 3. **数组作为类的成员变量的处理**:探讨内存管理和正确访问数组元素的方法,确保在类中正确使用动态分配的数组。 4. **函数参数传递与返回值处理**:解释排序和查找函数的参数传递方式及返回值处理,确保函数功能正确实现。 通过掌握这些知识,可以顺利地将排序和查找算法封装到`Array`类中,并进行测试验证。编程要求是在右侧编辑器补充代码以实现三种排序算法
14 5
|
15小时前
|
C语言
【C语言程序设计——入门】基本数据类型与表达式(头歌实践教学平台习题)【合集】
这份文档详细介绍了编程任务的多个关卡,涵盖C语言的基础知识和应用。主要内容包括: 1. **目录**:列出所有关卡,如`print函数操作`、`转义字符使用`、`数的向上取整`等。 2. **各关卡的任务描述**:明确每关的具体编程任务,例如使用`printf`函数输出特定字符串、实现向上取整功能等。 3. **相关知识**:提供完成任务所需的背景知识,如格式化输出、算术运算符、关系运算符等。 4. **编程要求**:给出具体的代码编写提示。 5. **测试说明**:包含预期输入输出,帮助验证程序正确性。 6. 文档通过逐步引导学习者掌握C语言的基本语法和常用函数,适合初学者练习编程技能。
13 1
|
15小时前
|
存储 编译器 C语言
【C语言程序设计——选择结构程序设计】求一元二次方程的根(头歌实践教学平台习题)【合集】
本任务要求根据求根公式计算并输出一元二次方程的两个实根,精确到小数点后两位。若方程无实根,则输出提示信息。主要内容包括: - **任务描述**:使用求根公式计算一元二次方程的实根。 - **相关知识**:掌握 `sqrt()` 函数的基本使用方法,判断方程是否有实根。 - **编程要求**:根据输入的系数,计算并输出方程的根或提示无实根。 - **测试说明**:提供两组测试数据及预期输出,确保代码正确性。 - **通关代码**:包含完整的 C 语言代码示例,实现上述功能。 通过本任务,你将学会如何处理一元二次方程的求解问题,并熟悉 `sqrt()` 函数的使用。
15 5
|
14小时前
|
小程序 C语言
【C语言程序设计——基础】顺序结构程序设计(头歌实践教学平台习题)【合集】
目录 任务描述 相关知识 编程要求 测试说明 我的通关代码: 测试结果: 任务描述 相关知识 编程编写一个程序,从键盘输入3个变量的值,例如a=5,b=6,c=7,然后将3个变量的值进行交换,使得a=6,b=7,c=5。面积=sqrt(s(s−a)(s−b)(s−c)),s=(a+b+c)/2。使用输入函数获取半径,格式指示符与数据类型一致,实验一下,不一致会如何。根据提示,在右侧编辑器补充代码,计算并输出圆的周长和面积。
19 10
|
16小时前
|
存储 算法 安全
【C语言程序设计——选择结构程序设计】求阶跃函数的值(头歌实践教学平台习题)【合集】
本任务要求输入x的值,计算并输出特定阶跃函数的结果。主要内容包括: 1. **选择结构基本概念**:介绍if、if-else、switch语句。 2. **主要语句类型**:详细解释if、if-else、switch语句的使用方法。 3. **跃迁函数中变量的取值范围**:说明如何根据条件判断变量范围。 4. **计算阶跃函数的值**:通过示例展示如何根据给定条件计算函数值。 编程要求:在右侧编辑器Begin-End之间补充代码,实现阶跃函数的计算和输出。测试说明提供了多个输入及其预期输出,确保代码正确性。最后提供通关代码和测试结果,帮助理解整个过程。
12 0
|
15小时前
|
C语言
【C语言程序设计——循环程序设计】鸡兔同笼问题(头歌实践教学平台习题)【合集】
本教程介绍了循环控制和跳转语句的使用,包括 `for`、`while` 和 `do-while` 循环,以及 `break` 和 `continue` 语句。通过示例代码详细讲解了这些语句的应用场景,并展示了如何使用循环嵌套解决复杂问题,如计算最大公因数和模拟游戏关卡选择。最后,通过鸡兔同笼问题演示了穷举法编程的实际应用。文中还提供了编程要求、测试说明及通关代码,帮助读者掌握相关知识并完成任务。 任务描述:根据给定条件,编写程序计算鸡和兔的数量。鸡有1个头2只脚,兔子有1个头4只脚。
19 5
|
14小时前
|
存储 编译器 数据安全/隐私保护
【C++面向对象——类与对象】CPU类(头歌实践教学平台习题)【合集】
声明一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,以及两个公有成员函数run、stop。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。​ 相关知识 类的声明和使用。 类的声明和对象的声明。 构造函数和析构函数的执行。 一、类的声明和使用 1.类的声明基础 在C++中,类是创建对象的蓝图。类的声明定义了类的成员,包括数据成员(变量)和成员函数(方法)。一个简单的类声明示例如下: classMyClass{ public: int
27 13
|
运维 监控 架构师
第二章 软件过程与思想 第一节 基础
第二章 软件过程与思想 第一节 基础
|
8月前
|
算法
【软件设计师—基础精讲笔记9】第九章 算法设计与分析
【软件设计师—基础精讲笔记9】第九章 算法设计与分析
64 1
|
8月前
|
设计模式 存储 算法
【软件设计师—基础精讲笔记7】第七章 面向对象技术
【软件设计师—基础精讲笔记7】第七章 面向对象技术
140 1

热门文章

最新文章

下一篇
开通oss服务