2024年最全C语言高级教程-C语言数组(一),连续四年百度大数据开发岗必问面试题

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

  • 本文将介绍如何在C语言程序中使用数组,然后在编写程序使用数组时,如何通过一个名称来引用一组数值。

一、问题引入

  • 说明数组的概念及其作用的最好方法,是通过一个例子,来说明使用数组后程序会变得非常简单。这个例子将计算某班学生的平均分数。

要计算某班学生的平均分数,假设该班只有10位学生。 计算一组数字的平均值,要将它们全加起来,再除以数字的个数得到平均值:

  • 程序如下所示
#define \_CRT\_SECURE\_NO\_WARNINGS

#include "Main.h"

int main()
{
	system("color 3E");

    // 存储学生成绩值
    int grade = 0;              
   
    // 学生人数
    unsigned int count = 10;
                   
    // /成绩的总和
    long sum = 0L;
             
    // 成绩的平均值
    float average = 0.0f;

    for (unsigned int i = 0; i < count; ++i)
    {
        printf("输入第%d个学生成绩: ", i + 1);
        scanf("%d", &grade);
        sum += grade;                      // 把它加到sum
    }

    average = (float)sum / count;          // 计算平均值

    printf("\n十个学生的平均成绩是: %f\n", average);


	system("pause");
	return 0;
}

按F5调试结果如下

在这里插入图片描述

  • 如果只对平均值感到兴趣,就不需要存储上面的分数。这个程序将所有的分数全部 相加后,除以count(其值是10)。
  • 这个简单的程序只使用了一个变量grade来存储循环中 输入的每个分数。循环在i的值为0,1, 2, 3…9时执行,共迭代10次。
  • 假设要将这个程序编写成为一个更复杂的程序,需要输入一些数值,再输出每个人 的分数,最后输出平均分。
  • 在上面的程序中,只有一个变量。每次加一个分数,旧的分 值就被覆盖掉,不能再次使用。
  • 如何存储所有的分数?可以声明10个整数变量来存储分数,但是不能用for循环输 入这些数值。而必须添加代码,逐个读入这些数值。不过这样太繁琐。
  • 这时应该应用数组来解决数值存储的问题

二、什么是数组

  • 数组是一组数目固定、类型相同的数据项,数组中的数据项称为元素。
  • 数组中的元 素都是int、long或其他类型。
  • 下面的数组声明非常类似于声明一个含有单一数值的正常 变量,但要在名称后的方括号中放置一个数。

long numbers[10];

  • 方括号中的数字定义了要存放在数组中的元素个数,称为数组维(array dimension)。 数组有一个类型,它组合了元素的类型和数组中的元素个数。因此如果两个数组的元素 个数相同、类型也相同,这两个数组的类型就相同。
  • 存储在数组中的每个数据项都用相同的名称访问,在这个例子中,该名称就是
    numbers。
  • 要选择某个元素,可以在数组名称后的方括号内使用索引值。
  • 索引值是从0开始的连续整数。0是第一个元素的索引值,前面numbers数组的元素索引值是0~9。索
    引值0表示第一一个元素,索引值9表示最后一个元 素。因此数组元素可表示为numbers[0]、
    numbers[1]、numers[…numbers[9]。

如下图所示

在这里插入图片描述

三、使用数组

  • 下面将使用数组知识用于解决平均分问题。
  • 使用数组可以存储所有要平均的分数。即存储所有分数,以便重复使用它们。

现在重写这个程序,计算10个分数的平均值:
代码如下所示:

#define \_CRT\_SECURE\_NO\_WARNINGS

#include "Main.h"

int main()
{
	system("color 3E");
	
    // 存储学生成绩的数组
    int grades[10];

    // 学生人数
    unsigned int count = 10;
                   
    // /成绩的总和
    long sum = 0L;
             
    // 成绩的平均值
    float average = 0.0f;

    printf("输入十个学生的成绩分数值:\n");   
    
    for (unsigned int i = 0; i < count; ++i)
    {
        printf("输入第%d个学生成绩--> ", i + 1);
        scanf("%d", &grades[i]);               
        sum += grades[i];                      
    }

    average = (float)sum / count;              // 计算平均值

    printf("\n十个学生的平均成绩是: %.2f\n", average);

	system("pause");
	return 0;
}


按F5调试结果如下

在这里插入图片描述

  • 程序由常见的#include <stdio.h>开始,因为这里要使用printf()和 scanf()函数。
  • 在main()函数的一开始,声明一个包含10个整数的数组,然后是一些计算所需的变量:
    // 存储学生成绩的数组
    int grades[10];

    // 学生人数
    unsigned int count = 10;
                   
    // /成绩的总和
    long sum = 0L;
             
    // 成绩的平均值
    float average = 0.0f;

  • count变量是unsigned int类型,因为它必须非负。
  • 然后,用下面的语句提示输入分数:
printf("输入十个学生的成绩分数值:\n");   

  • 接下来,用一个循环读入数值且累加它们:
 	for (unsigned int i = 0; i < count; ++i)
    {
        printf("输入第%d个学生成绩--> ", i + 1);
        scanf("%d", &grades[i]);               
        sum += grades[i];                      
    }

  • for循环采用标准格式,只要i小于count,循环就继续执行。循环的计数是从0到9,
    而不是从1到10,所以可以直接使用循环变量i访问数组的每个成员。
  • 使用函数scanf()将输入的每个值读入数组的元素i中:第1个值存储在number[0]中,第2个输入值存储到number[1]中…第10个输入值存储到number[9]中。
  • 在循环的每次迭代中,都会把读入的值加到sum中。当循环结束时,用下面的语句计算并显示平均值:
    average = (float)sum / count;              // 计算平均值

    printf("\n十个学生的平均成绩是: %.2f\n", average);

  • 计算平均值的方法用sum除以分数的个数count,count的值是10。

对这个程序还可以增加输入每个学生成绩的功能
增加的代码如下所示

    for (unsigned int i = 0; i < count; i++)
    {
        printf("第%d个学生的成绩是: %d\n", i, grades[i]);
    }

按F5调试结果如下

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

-1715629508801)]
[外链图片转存中…(img-c74QvUCS-1715629508801)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

很多同学对咱们C语言的课程、学习存在着很多误解,而且很多同学还不知道《C语言高级教程》后面的课程安排是什么,因此这里并做个说明。有同学“别人都说开发数据库系统、Web系统还是Java、C#等最流行,咱们用C语言学了开发也不是浪费吗?”、“C语言不是做嵌入式开发、操作系统等底层的东西吗?”、“我们为什么不讲C语言的嵌入式开发?”、“人家都学Web开发,咱们这学C语言开发C/S的程序不是落伍了吗?”。 确实在实际工作中,由于C语言的门槛比较高,很少有实际项目用C语言进行数据库系统、Web系统等的开发的。但是我不止次强调“学习时学东西和工作时学东西是不样的”。 工作以后选用的技术、语言定是选择做合适、最方便做所从事方面的,比如开发Web程序肯定首选PHP、Java、.net,开发底层系统肯定首选C/C++,开发桌面系统肯定首选VB、Delphi,也就是“用合适的语言做合适的事情”; 但是对于在校生来说则是“用最熟悉的语言做所有事情”。初学编程的人最容易在语言的表层陷入 太长时间,如果要学数据库开发了就要去学Delphi、PB,又要学Web开发了就又去学Java、.net,又要学底层开发了就又去学C/C++, 可是每门语言都没深入,最后真正要学的数据库开发、Web开发、底层 开发等等没怎么学会,倒是把大量的时间浪费在学这些基础语法上,浪费了宝贵的时间, 这也是我痛 恨目前很多大学课程安排的个原因。因此我的倡导就是对于在校生来说则是“用最熟悉的语言做所 有事情”,我甚至建议大学只学门C语言就够了,然后就教大家用C语言做所有的方面。
高级进阶c语言教程 目录 1. C 语言中的指针和内存泄漏 5 2. C语言难点分析整理 10 3. C语言难点 18 4. C/C++实现冒泡排序算法 32 5. C++中指针和引用的区别 35 6. const char*, char const*, char*const的区别 36 7. C中可变参数函数实现 38 8. C程序内存中组成部分 41 9. C编程拾粹 42 10. C语言中实现数组的动态增长 44 11. C语言中的位运算 46 12. 浮点数的存储格式: 50 13. 位域 58 14. C语言函数二维数组传递方法 64 15. C语言复杂表达式的执行步骤 66 16. C语言字符串函数大全 68 17. C语言宏定义技巧 89 18. C语言实现动态数组 100 19. C语言笔试-运算符和表达式 104 20. C语言编程准则之稳定篇 107 21. C语言编程常见题分析 108 22. C语言编程易犯毛病集合 112 23. C语言缺陷与陷阱(笔记) 119 24. C语言防止缓冲区溢出方法 126 25. C语言高效编程秘籍 128 26. C运算符优先级口诀 133 27. do/while(0)的妙用 134 28. exit()和return()的区别 140 29. exit子程序终止函数与return的差别 141 30. extern与static存储空间矛盾 145 31. PC-Lint与C\C++代码质量 147 32. spirntf函数使用大全 158 33. 二叉树的数据结构 167 34. 位运算应用口诀和实例 170 35. 内存对齐与ANSI C中struct内存布局 173 36. 冒泡和选择排序实现 180 37. 函数指针数组与返回数组指针的函数 186 38. 右左法则- 复杂指针解析 189 39. 回车和换行的区别 192 40. 堆和堆栈的区别 194 41. 堆和堆栈的区别 198 42. 如何写出专业的C头文件 202 43. 打造最快的Hash表 207 44. 指针与数组学习笔记 222 45. 数组不是指针 224 46. 标准C中字符串分割的方法 228 47. 汉诺塔源码 231 48. 洗牌算法 234 49. 深入理解C语言指针的奥秘 236 50. 游戏外挂的编写原理 254 51. 程序实例分析-为什么会陷入死循环 258 52. 空指针究竟指向了内存的哪个地方 260 53. 算术表达式的计算 265 54. 结构体对齐的具体含义 269 55. 连连看AI算法 274 56. 连连看寻路算法的思路 283 57. 重新认识:指向函数的指针 288 58. 链表的源码 291 59. 高质量的子程序 295 60. 高级C语言程序员测试过的十六道最佳题目+答案详解 297 61. C语言常见错误 320 62. 超强的指针学习笔记 325 63. 程序员之路──关于代码风格 343 64. 指针、结构体、联合体的安全规范 346 65. C指针讲解 352 66. 关于指向指针的指针 368 67. C/C++ 误区:void main() 373 68. C/C++ 误区二:fflush(stdin) 376 69. C/C++ 误区三:强制转换 malloc() 的返回值 380 70. C/C++ 误区四:char c = getchar(); 381 71. C/C++ 误区五:检查 new 的返回值 383 72. C 是 C++ 的子集吗? 384 73. C和C++的区别是什么? 387 74. 无条件循环 388 75. 产生随机数的方法 389 76. 顺序表及其操作 390 77. 单链表的实现及其操作 391 78. 双向链表 395 79. 程序员数据结构笔记 399 80. Hashtable和HashMap的区别 408 81. hash 表学习笔记 410 82. C程序设计常用算法源代码 412 83. C语言有头结点链表的经典实现 419 84. C语言惠通面试题 428 85. C语言常用宏定义 450
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值