c语言基础语法教程:循环与数组编程入门详解

admin C语言 5


是不是很多新手学 C 语言时,遇到重复操作或处理多个数据就头疼?“想打印 1 到 100 的数字,难道要写 100 行 printf?”“存 5 个学生的成绩,定义 5 个变量太麻烦”“学了循环却不知道怎么和数组配合,代码写得又长又乱”?别慌,循环和数组是 C 语言里处理重复任务和批量数据的 “黄金搭档”,学会它们能让代码变简洁高效。今天兔子哥就带大家从基础语法到实战案例,吃透循环与数组,新手跟着做就行,一起往下看吧!

先说说:为啥循环和数组是 “黄金搭档”?


很多人学循环时觉得 “不就是重复做事吗”,学数组时觉得 “不就是存多个数吗”,但分开学总觉得用不上。其实循环能帮数组批量处理数据,数组能让循环操作更有意义,两者结合能解决 80% 的批量数据问题。

举个例子:没有循环和数组的麻烦


比如统计 5 个学生的成绩,没有数组就得定义 5 个变量:int s1, s2, s3, s4, s5;,输入时写 5 行scanf,计算平均分还要手动加起来,代码又长又容易错。有了数组和循环,几行代码就能搞定,这就是它们的优势。

循环与数组的核心作用,一张表看明白


语法核心作用适用场景新手学习重点
循环重复执行代码块,减少重复书写批量处理、迭代计算掌握循环条件和退出机制
数组存储多个同类型数据,统一管理成绩表、名单、统计数据学会定义、访问和初始化
循环 + 数组批量操作数组元素,高效处理数据数据统计、排序、查找用循环遍历数组,操作元素

做开发的老王说:“我刚开始学的时候,没少走弯路,用一堆变量存数据,后来学了数组和循环,代码量直接少了一半,还不容易错。” 所以新手一定要把这两个知识点吃透,它们是编程效率的关键。

循环语法入门:3 种常用循环,学会 for 循环就够新手用


C 语言有 for、while、do-while 三种循环,新手先重点学 for 循环,最常用也最容易控制,学会了再扩展其他循环。

1. for 循环:结构清晰,新手首选


for 循环的格式像 “三步走”:初始化变量→判断条件→更新变量,语法如下:
c
for (初始化; 条件; 更新) {// 循环体:要重复执行的代码}

比如打印 1 到 5 的数字:
c
#include int main() {int i;  // 定义循环变量// i从1开始,i<=5时循环,每次循环后i加1for (i = 1; i <= 5; i++) {printf("%d ", i);  // 打印当前i的值}printf("\n循环结束!");return 0;}

运行后会显示 “1 2 3 4 5 循环结束!”。i++i = i + 1的简写,新手要记住,更新部分不能少,不然会变成死循环。

2. while 循环:条件满足就循环


while 循环更简单,只需要判断条件,条件为真就一直循环:
c
#include int main() {int i = 1;  // 初始化变量while (i <= 5) {  // 条件:i<=5printf("%d ", i);i++;  // 别忘更新变量,否则死循环}printf("\n循环结束!");return 0;}

效果和 for 循环一样,但 while 循环的初始化和更新要写在外面,新手容易忘更新变量导致死循环,所以建议先练 for 循环。

3. do-while 循环:至少执行一次


do-while 循环先执行一次循环体,再判断条件,适合需要 “先做后判断” 的场景:
c
#include int main() {int i = 1;do {printf("%d ", i);i++;} while (i <= 5);  // 分号不能少return 0;}

新手用得少,知道有这种循环就行,重点还是 for 循环。


数组语法入门:存批量数据,就靠它了


数组能把多个同类型数据存在一起,用一个名字管理,访问时用下标,简单又高效。

1. 数组的定义:告诉电脑存啥数据、存多少


定义数组的格式:数据类型 数组名[长度];,比如存 5 个成绩:
c
int scores[5];  // 定义能存5个整数的数组,名叫scores

  • 数据类型:数组里所有元素的类型,比如 int、float;
  • 数组名:自己起的名字,和变量名规则一样;
  • 长度:要存的元素个数,必须是整数,新手别超过 1000,够用就行。

2. 数组的访问:用下标找元素,从 0 开始


数组的下标从 0 开始,比如scores[0]是第一个元素,scores[1]是第二个,以此类推:
c
#include int main() {int scores[3];  // 存3个成绩// 给数组赋值scores[0] = 85;  // 第一个成绩scores[1] = 92;  // 第二个成绩scores[2] = 78;  // 第三个成绩// 打印成绩printf("第一个成绩:%d\n", scores[0]);printf("第二个成绩:%d\n", scores[1]);return 0;}

新手常犯的错:下标越界,比如定义scores[3]却访问scores[3](应该最大是 2),会导致程序出错,记住下标从 0 开始,最大下标是 “长度 - 1”。

3. 数组的初始化:定义时直接赋值


可以在定义数组时直接赋值,更方便:
c
// 方法1:指定长度,逐个赋值int scores[3] = {85, 92, 78};// 方法2:不指定长度,根据赋值个数自动确定int scores[] = {85, 92, 78};  // 长度自动为3// 方法3:部分赋值,未赋值的元素默认为0int scores[5] = {85, 92};  // 后3个元素为0

初始化时元素之间用逗号隔开,用大括号包起来,新手推荐方法 2,不用算长度,不容易错。


循环 + 数组实战:统计学生成绩,批量处理数据


单独学循环或数组觉得简单,结合起来才能发挥大作用。咱们做个成绩统计案例:输入 5 个学生成绩,用循环存数组,再用循环算平均分,步骤详细,跟着做就能成。

步骤 1:理清思路,分三步实现


  1. 定义数组存 5 个成绩;
  2. 用循环输入 5 个成绩到数组;
  3. 用循环遍历数组,累加成绩算平均分。

步骤 2:写代码,实现功能


c
#include int main() {int scores[5];  // 存5个成绩int i;int sum = 0;    // 累加成绩float avg;      // 平均分// 第一步:用循环输入成绩for (i = 0; i < 5; i++) {  // 下标0到4,共5个元素printf("请输入第%d个学生的成绩:", i+1);  // i+1让显示从1开始scanf("%d", &scores[i]);  // 注意加&}// 第二步:用循环累加成绩for (i = 0; i < 5; i++) {sum += scores[i];  //  sum = sum + scores[i]}// 第三步:计算平均分并显示avg = sum / 5.0;  // 用5.0确保结果是小数printf("\n5个学生的平均分是:%.1f\n", avg);  // 保留1位小数// 额外:打印所有成绩printf("所有成绩:");for (i = 0; i < 5; i++) {printf("%d ", scores[i]);}return 0;}

步骤 3:运行测试,看效果


编译运行后:
  1. 按提示输入 5 个成绩,比如 80、90、75、85、95;
  2. 程序会计算平均分:(80+90+75+85+95)/5=85.0;
  3. 最后显示所有成绩,和输入的一致,说明成功了。

这个案例用循环解决了重复输入和累加的问题,用数组统一管理成绩,代码简洁又高效,比用 5 个变量存成绩强多了。

避坑指南:循环与数组常踩的 5 个坑,这样解决


新手用循环和数组时,很容易犯这些错误,兔子哥整理了原因和解决方法,遇到了照着改就行。

1. 循环死循环,程序停不下来


大多是循环条件没更新,比如for (i=1; i<=5; )忘了i++,或者while (1)里没break。解决:写循环时先确定 “循环什么时候停”,加更新语句,比如i++,或在循环体里加if (条件) break;强制退出。

2. 数组下标越界,程序崩溃


比如定义int arr[3]却访问arr[3],下标最大是 2,越界会导致程序出错。解决:循环遍历数组时,条件用i < 长度,比如for (i=0; i<5; i++),确保 i 不会超过最大下标。

3. 用 scanf 给数组赋值时忘加 &


scanf("%d", scores[i])会报错,数组元素是变量,需要用&取地址。解决:正确写法是scanf("%d", &scores[i]),记住数组名不用加 &,但数组元素需要加。

4. 数组初始化时元素个数超过长度


比如int arr[3] = {1,2,3,4},长度 3 却赋 4 个值,编译会警告。解决:初始化元素个数别超过定义的长度,或不指定长度让编译器自动计算,比如int arr[] = {1,2,3,4}

5. 循环变量未初始化,结果混乱


比如for (i=0; i<5; i++)没定义 i,或定义了没初始化。解决:在循环外定义并初始化变量,比如int i = 0;,确保循环从正确的起点开始。

自问自答:循环与数组常见问题


问:循环次数多了会影响程序速度吗?比如循环 1000 次。


答:一般不会!现代电脑处理循环很快,1000 次循环瞬间完成。但别写无意义的死循环,比如while(1)里没 break,会让程序卡住,新手要注意循环条件的合理性。

问:数组只能存整数吗?能存字符串或小数吗?


答:当然能!数组可以存任何数据类型:
  • 存小数:float heights[5] = {1.75, 1.80, 1.65};
  • 存字符:char gender[3] = {'男', '女', '男'};
  • 存字符串:char names[3][20] = {"张三", "李四", "王五"};(二维数组)
    新手先掌握整数数组,再扩展其他类型。

问:循环和数组结合时,怎么遍历数组更安全?


答:用数组长度控制循环次数最安全!比如定义int scores[5],循环条件用i < 5,或用sizeof算长度:int len = sizeof(scores)/sizeof(scores[0]);,然后for (i=0; i,这样就算改了数组长度,循环也不用手动改。

个人心得:多练 “循环 + 数组” 的组合,编程效率翻倍


兔子哥刚开始学的时候,总觉得循环和数组分开用很简单,一结合就出错,要么下标越界,要么循环次数不对。后来每天练一个小案例,比如统计成绩、打印数组、找最大值,练了一周就顺手了。
老王分享:“新手别害怕写长代码,循环和数组的核心是‘批量处理’,多写几个统计类的程序,比如算平均分、找最高分,自然就掌握了。遇到错误别慌,大多是下标或循环条件的小问题,打印变量值看看就知道错在哪。”
其实循环和数组不难,难的是懒得动手练。建议新手从每天写一个循环数组小程序开始,比如今天写成绩统计,明天写数组排序,慢慢就会发现它们的强大。当你能用几行代码处理几十上百个数据时,就会明白这两个知识点的价值了。
现在就打开编译器,试试用循环给数组赋值并打印,或者做个简单的成绩统计,动手练了才知道自己能行,加油!

标签: 黄金搭档 控制

发布评论 0条评论)

  • Refresh code

还木有评论哦,快来抢沙发吧~