版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《C语言程序设计》教案PAGE1课题名称项目6任务6-1赛事评分数据更新计划课时4课时授课老师地点学情分析学生已掌握数组、函数、变量地址等基础知识,能够编写简单的数据输入输出程序。但对“指针”这一C语言核心概念完全陌生,难以理解“变量名”与“内存地址”的关系,对“间接访问”的思维模式感到抽象和困惑。好奇心强,期待用指针解决实际问题,但存在以下学情特点:优势:学生已掌握C语言基本数据类型(int/float/char)、printf/scanf输入输出、顺序结构与简单程序调试,能编写单值变量处理程序,对“赛事评分”生活化案例兴趣浓厚,具备Dev-C++基础操作经验与小组互助习惯。短板:对内存地址、指针概念完全陌生,难以理解“变量地址”“间接访问”的底层逻辑;易混淆指针变量与普通变量、混淆*在定义与解引用中的不同含义;常出现野指针、指针未初始化、误用指针类型等问题;对指针运算步长(由基类型决定)理解困难。思政需求:结合赛事评分数据的严谨管理场景,培养数据精准、规范操作的职业素养;理解指针“间接访问、灵活更新”的优势,树立“按图索骥、有序操作”的严谨工程思维;通过避免野指针、越界等错误强化内存安全意识与责任担当。教学目标知识目标掌握内存地址的概念,理解指针的本质是“存储地址的变量”;掌握指针的定义格式(基类型指针名)及三种初始化方式;掌握取地址运算符(&)和解引用运算符()的用法与含义;掌握指针与整数的加减运算规则(步长由基类型决定);掌握指针的自增(++)与自减(--)运算及前缀/后缀的区别;理解同类型指针相减的意义(元素个数差);掌握数组名作为指针常量的特性。能力目标能够为int、float、char类型的单值变量定义对应的指针并建立指向关系;能够通过指针解引用操作读取和修改普通变量的值;能够使用%p格式符正确打印内存地址,并对比直接访问与间接访问的结果;能够使用指针加减运算访问连续内存中的数据(如数组元素);能够使用自增/自减运算高效遍历数组或字符串;能够区分指针的“值”与指针的“类型”对运算的影响。素质目标培养“透过变量名看内存本质”的底层思维习惯;树立指针操作中的安全意识(避免野指针、空指针、越界访问);结合赛事评分场景,养成数据更新留痕、可追溯的严谨职业习惯;培养“以元素为单位”而非“以字节为单位”的指针思维;结合古代算筹计数与当代数据管理,树立精益求精的工匠精神。教学重点内存地址与指针变量的概念区分;指针定义、取地址、解引用的核心语法;通过指针修改单值变量(选手编号、单个打分、等级)的实操流程;指针加减运算的步长计算(如int*p;p+1偏移4字节);自增/自减在遍历数组中的应用;数组名作为指针常量的使用与限制。教学难点区分“指针变量本身”与“指针指向的数据”;理解&与*互为逆运算的关系;解引用操作(*p)在赋值语句左右两侧的不同含义;区分p++与*p++与*++p的优先级与执行顺序;理解指针减法结果为“元素个数”而非“字节数”。教学方法类比教学法(酒店房间类比内存)、讲授法、案例演示法、任务驱动法、问答互动法、图示法(地址偏移图)、对比法(前缀后缀对比)、小组互助纠错法教学工具计算机机房、Dev-C++软件、PPT课件、教材等教学过程第一课时:指针概念奠基与核心语法(45分钟)课程导入(5分钟)复习回顾:上学期(项目一~五)我们使用单个变量(int/float/char)存储单个评分数据,通过变量名直接读写。问题导入:如果希望在“不通过变量名”的情况下,灵活、间接地修改一个变量的值,C语言如何实现?引出“指针”概念。生动类比(PPT):把计算机内存比作一家巨大的酒店——存储单元是房间,内存地址是门牌号,普通变量是房间里的住客/物品,指针变量则是“记录门牌号的笔记本”。通过门牌号(地址)就能“按图索骥”找到并操作对应房间里的数据。任务引出:本节课进入任务6-1“赛事评分数据更新”,用指针来更新选手编号、单个评委打分、等级评定等单值数据。新知讲授(35分钟)(1)内存地址的概念(教材6.1.1)计算机内存由大量存储单元组成,每个单元有唯一编号,即内存地址(如同门牌号);内存地址通常以十六进制表示。32位系统地址范围0~2^32-1(4GB),64位系统更大。定义一个变量时,编译器按其数据类型分配连续内存空间,该空间的起始位置编号就是变量的内存地址。例如int型变量在大多数系统占4字节,其地址即首字节编号。(2)指针与内存地址(教材6.1.1,图6-1)“指针”通常指“指针变量”,是一种特殊变量;内存地址是标识存储单元的无符号整数(如0x1234),是指针变量存储的“内容”。核心关系:内存地址是“指向”某存储单元的“路标”,指针变量是“存放这个路标”的容器。如图6-1:0x1234是变量a的内存地址(门牌号),存储该地址的变量p才是指针变量(简称指针)。指针变量p存储a的地址(&a),通过p可间接访问a;温馨提示:内存地址是“固定标识”(可视为常量),指针变量的值(所存地址)可在运行中改变,可指向不同单元。(3)6-1普通变量和指针变量应用举例演示“定义变量→定义指针并指向它→直接访问与间接访问→间接修改→地址验证”的完整过程,验证指针的指向关系。#include<stdio.h>intmain(){//1.定义普通变量intnum=10;//2.定义指针变量p,初始化指向变量num(存储变量num的地址)int*p=#//3.直接访问变量与使用指针间接访问变量printf("直接访问变量num的值:%d\n",num);printf("使用指针间接访问变量num的值:%d\n",*p);//4.使用指针间接修改变量的值*p=20;printf("修改后,直接访问变量num的值:%d\n",num);//5.查看变量地址与指针存储的地址(验证指向关系)printf("变量num的地址:%p\n",(void*)&num);printf("指针p存储的地址:%p\n",(void*)p);return0;}运行结果:直接访问num=10;间接访问=10;修改后=20;&num与p地址均为000000000062FE14。说明:二者指向同一块内存,*p=20通过地址间接修改了num,且指针存储的地址与变量地址完全一致,验证了指向关系。(4)变量地址的获取(教材6.1.2-1,例6-2)语法:&变量名(取地址运算符&是获取变量指针的唯一合法方式)。打印地址必须严格使用%p格式符;若误用%d(十进制)或%x(十六进制),可能因系统位数/编译器差异导致地址截断、格式混乱。#include<stdio.h>intmain(){charc='A';//char类型变量,占1个字节inta=10;//int类型变量,占4个字节doubled=3.14;//double类型变量,占8个字节printf("变量c的地址:%p\n",&c);printf("变量a的地址:%p\n",&a);printf("变量d的地址:%p\n",&d);return0;}运行结果:c的地址…1F、a的地址…18、d的地址…10(地址随栈布局变化)。结论:不同类型的变量占用字节数不同(char1、int4、double8),地址分布受编译器与对齐规则影响。(5)指针的定义与初始化(教材6.1.2-2,例6-3、6-4)定义格式:数据类型*指针变量名;其中“数据类型”是指针的基类型,决定通过指针访问内存时一次读写的字节数(int4字节、char1字节);*是指针声明符,不是变量名的一部分(int*p;中变量名是p)。多指针定义:int*p1,*p2;中p1、p2都是指针;而int*p3,p4;中p4是普通int变量。三种初始化方式:①指向已定义变量int*p=&a;②初始化为空指针int*p=NULL;(NULL即0或(void*)0,不指向有效单元,不可解引用,使用前最好判空)③指向动态分配内存int*p=(int*)malloc(sizeof(int));(用完后需free释放,避免内存泄漏)。//例6-3定义并建立指向关系intnum=20;int*p;p=#//赋值的是“地址”,建立指向关系//例6-4通过指针访问变量(定义时即初始化)int*p=#printf("直接访问num:%d\n",num);//20printf("间接访问num(*p):%d\n",*p);//20*p=30;//间接修改printf("修改后num:%d\n",num);//30注意:若误写p=num;(把变量值当地址赋给指针),p会成为指向非法内存的“野指针”。初始化即建立指向,可避免野指针风险。3.思政融入(5分钟)赛事评分数据关系选手成绩,必须精准、规范。指针如同“按门牌号找房间”,操作前必须确认地址正确(指向有效数据),类比工作中“先核对其身份再操作”,培养严谨规范、责任到位的职业素养;NULL空指针机制提醒我们“无依据不操作”,守住数据安全底线。第二课时:指针的运算与常见误区(45分钟)复习导入(5分钟)提问回顾:指针变量定义格式?&与*的作用分别是什么?指针的三种初始化方式?问题导入:指针能否像普通变量一样做算术运算?如何用它访问数组的多个元素?引出指针运算。新知讲授(35分钟)(1)指针运算概述(教材6.1.2-3)指针运算结果需结合其基类型解析,核心目的是实现对连续内存空间的有序访问。支持的运算:指针与整数的加减(p±n)、自增自减(p++/--p)、同类型指针相减(p2-p1,计算元素个数差)。不支持的运算:指针之间的加、乘、除(在内存寻址中无实际物理意义,编译报错)。(2)指针与整数的加减运算(例6-5)语法:p+n/p-n;实际偏移“整数×基类型字节数”个单位。核心思想:以“元素”为单位移动,而非“字节”。#include<stdio.h>intmain(){intarr[]={10,20,30,40,50};int*p_add=arr;//指向数组首元素printf("初始地址:%p,值:%d\n",p_add,*p_add);p_add+=1;//指针加1(移动1个int元素=4字节)printf("p+1地址:%p,值:%d\n",p_add,*p_add);int*p_sub=&arr[4];//指向数组最后一个元素p_sub-=1;//指针减1printf("p-1地址:%p,值:%d\n",p_sub,*p_sub);return0;}运行结果:初始值10→p+1后值20(地址+4);末元素50→p-1后值40(地址-4)。验证了“按类型长度跳转”的步长规则,是遍历数组最常用、最高效的方法。(3)指针的自增与自减运算(例6-6)p++/++p等价于p=p+1,会改变指针自身的值。优先级规则:++高于*,因此*p++先返回*p(当前元素)再移动指针;*(++p)则先移动再取值。//例6-6节选:字符串遍历与前后缀区别charstr[]="Hello";char*p_str=str;while(*p_str){printf("%c",*p_str++);}//先取值后自增→Hellointarr_dec[]={10,20,30,40,50},*p_arr=&arr_dec[4];for(inti=0;i<5;i++){printf("%d",*p_arr--);}//反向遍历→5040302010运行结果:字符串遍历输出Hello;数组反向遍历输出5040302010。证明了++/--能高效改变指向,是遍历数据结构的关键操作。(4)指针与指针的减法(例6-7)同类型指针、且指向同一连续内存区域时,相减结果为二者相差的“元素个数”(非字节数)。计算公式:元素个数=地址差÷基类型字节数。intarr[5]={10,20,30,40,50};int*p1=&arr[1];//指向20int*p2=&arr[4];//指向50longbyte_diff=(char*)p2-(char*)p1;//字节差=12longelem_diff=p2-p1;//元素差=3(12÷4)printf("验证:%ld×%ld=%ld\n",elem_diff,(long)sizeof(int),elem_diff*sizeof(int));温馨提示:基类型相同的指针仅支持减法;指针加法在语法上不被允许(两地址相加产生无效地址);基类型不同的指针减法属非法操作,编译阶段报错。(5)常见误区(教材6.1.2-4)①对数组名执行自增或赋值(如arr++、arr=&x)——数组名是固定指向首元素的“地址常量”,不可修改,需用指针变量int*p=arr,通过p++实现灵活操作。②指针越界访问数组(如*(p+10))——偏移超出有效范围会指向非法内存,解引用可能崩溃,且编译器不拦截;应先算数组长度sizeof(arr)/sizeof(arr[0]),用循环控制偏移范围。③使用未初始化的指针操作数组(“野指针”)——未初始化指针存随机地址,直接操作(如*p=10)可能破坏内存;定义后需先指向有效数组地址(int*p=arr)或初始化为NULL,使用前确保指向有效地址。思政融入(5分钟)指针运算“越界一步”便可能访问非法内存、导致程序崩溃,如同工作中“越过权限边界操作”会酿成事故。培养边界意识、规则意识,严守程序与职业的“边界线”,杜绝越界违规操作。第三课时:任务6-1赛事评分数据更新——任务解读与代码剖析(45分钟)复习导入(5分钟)回顾:指针概念、定义初始化、&与*、指针运算与常见误区。任务引出:将指针应用于真实场景——赛事评分单值数据的灵活更新,完成教材P148图6-3所示功能。任务解读(10分钟)任务描述:作为赛事评分管理系统的基础实践,本任务聚焦指针的核心概念与基础应用。通过定义赛事场景中的单值评分数据(如选手编号、单个评委打分、等级),理解指针的本质是内存地址的引用,掌握指针的定义方法,实践通过指针获取和修改单值评分数据的操作,为后续处理批量评分数据奠定基础。任务要求:①定义int(选手编号)、float(单个评委打分)、char(等级)类型的单值变量,为每个变量定义对应类型的指针;使用&取址运算符将变量地址赋给指针,通过*解引用操作获取/修改变量值,对比直接访问变量与使用指针间接访问变量的结果。②分步输出变量的初始值及内存地址、指针存储的地址与解引用值、修改后的值;关键信息需标注“选手编号”“评委打分”等场景描述,用%p格式符输出地址且保证格式对齐。③代码规范:指针命名体现指向性,关键步骤添加注释。完整代码分步演示(25分钟)分段拆解教材任务实施代码,逐段演示运行效果,并同步标注易错点。#include<stdio.h>intmain(){printf("=======赛事评分管理系统的数据更新=======\n\n");//1.定义赛事单值评分变量(模拟基础评分数据)intplayer_id=2023;//选手编号(int类型)floatsingle_score=85.5f;//单个评委打分(float类型)charlevel='C';//等级(char类型)//2.定义指向变量的指针,绑定变量地址int*p_id=&player_id;float*p_single_score=&single_score;char*p_level=&level;//3.读取初始数据:验证指针与变量的指向关系printf("初始评分数据\n");printf("选手编号:值=%d,地址=%p(指针存址=%p)\n",*p_id,&player_id,p_id);printf("单个评委打分:值=%.1f,地址=%p(指针存址=%p)\n",*p_single_score,&single_score,p_single_score);printf("等级:值=%c,地址=%p(指针存址=%p)\n",*p_level,&level,p_level);//4.通过指针修改评分数据(模拟数据更新)*p_id=2025;*p_single_score=89.0f;*p_level='B';//5.查看修改后的数据(验证指针操作有效性)printf("\n修改后评分数据\n");printf("选手编号新值:%d(通过指针修改)\n",*p_id);printf("评委打分新值:%.1f(通过指针修改)\n",*p_single_score);printf("等级新值:%c(通过指针修改)\n",*p_level);return0;}分段讲解:第1段定义三种类型单值变量模拟评分数据;第2段定义对应指针并用&绑定地址;第3段通过解引用*p读取内存值,同时输出变量地址与指针存址,二者一致验证了绑定正确;第4段通过*p=新值向指针存储的地址写入新值,绕开变量名直接操作底层内存;第5段再次解引用读取,结果为修改后新值,验证有效。易错点同步讲解:①指针类型必须与指向变量类型严格一致(int*指向int,不能指向char);②输出地址必须用%p;③解引用前必须确保指针已指向有效变量,杜绝野指针;④float字面量加f后缀避免类型警告。成果展示+课堂总结(5分钟)核心回顾:指针间接访问=绕开变量名操作内存;&取址与*解引用是双翼;指针命名规范、初始化习惯至关重要。拓展思考:单值数据已能更新,但赛事中常有“多位评委打分”的批量数据,如何用指针高效遍历?——为任务6-2(数组指针与成绩统计)做铺垫。第四课时:程序实操与成果展示(45分钟)完整代码分步演示(10分钟)快速回顾任务6-1完整代码结构与关键语句;在Dev-C++中演示编译运行,展示“初始评分数据→修改后评分数据”的对比输出效果;强调注释规范、%p地址输出、指针类型匹配三处要点。学生自主编程+巡回指导(28分钟)学生任务:独立完成“赛事评分数据更新”程序,要求包含int/float/char三类指针,分步输出并对比直接访问与间接访问,模拟修改选手编号、评委打分、等级。分层实操:基础层完成三类指针的定义与读写;提高层增加格式对齐与“选手编号/评委打分”等场景标注;拓展层尝试增加第四个数据(如评委人数)并用指针更新。教师巡回解决共性问题:①指针未初始化即解引用(野指针崩溃);②指针类型与变量类型不匹配(如int*指向char);③误写*p=&a(应为p=&a,将地址赋给指针而非解引用);④%p与%d混用导致地址显示异常;⑤忘记包含stdio.h。小组互助:两人一组,一人写代码、一人设计测试用例(正常修改、边界值)交叉验证。成果展示+课堂总结(7分钟)抽取2-3份学生程序展示,点评指针命名、注释规范、输出对齐、间接访问正确性。总结核心:指针概念、&与*、三种初始化、指针运算与常见误区、任务6-1实战。布置作业:①完成教材P164思考与练习中指针基础相关选择题(如第1~4题);②预习“数组指针”,思考“如何用指针遍历多位评委的打分列表”。课后反思
课题名称项目6任务6-2实现赛事评分成绩统计计划课时4课时授课老师地点学情分析学生已掌握指针的基本运算,能通过指针遍历一维数组。但对“数组指针”的概念与“指针数组”容易混淆,对字符指针操作字符串的方法还不够熟练。学生已接触过数组和字符串,但尚未建立“用指针管理批量数据”的系统思维。存在如下学习特点:优势:已完成任务6-1,理解指针概念、定义、&/*、指针运算,能用指针操作单值评分数据,对指针间接访问有初步体会;具备Dev-C++基础与小组互助习惯。短板:对数组与指针的关系理解模糊,混淆数组名与指针;难以理解“数组名本质是首元素地址”;字符指针与字符数组区分不清(尤其赋值、可修改性、接收输入);对指针作为函数参数“突破值传递”的机制难以理解,易因未传长度导致越界;对字符串常量只读性认识不足。思政需求:结合赛事评分批量数据(多位评委、选手姓名)的规范统计场景,培养数据完整、统计严谨的职业素养;理解指针传参“高效共享、责任共担”的特性,树立模块化编程与数据安全底线意识。教学目标知识目标掌握数组地址规律,理解“数组名本质是首元素地址”;掌握数组指针定义及一维数组三种指针操作(偏移*(p+i)、自增*p++、下标p[i]);理解字符串两种存储方式(字符数组/字符指针),掌握字符指针定义、遍历、动态输入、函数传参;区分字符指针与字符数组(存储本质、赋值、可修改性、接收输入);掌握指针作为函数参数(普通变量/数组/字符串指针)的机制,理解值传递与地址传递区别。能力目标能够定义数组指针遍历批量评分数据;能够用字符指针管理选手姓名等字符串;能够设计评分统计函数,通过指针参数接收数组与字符串,计算总分、平均分并“带出”结果;能够排查数组指针越界、字符指针野指针、字符串常量误修改等错误;能够完成赛事评分成绩统计综合程序。素质目标结合赛事评分统计,养成数据完整、统计有据、结果可追溯的严谨习惯;树立模块化编程意识,理解“指针传参=责任共担”,强化协作与数据安全底线;培养分步拆解复杂业务、小组交叉测试校验的工匠精神。教学重点数组指针与一维数组三种指针操作;字符指针与字符数组的区别;指针作为函数参数(突破值传递,实现外部变量修改、批量数据传递)。教学难点“数组名即首元素地址”及数组退化为指针;字符指针与字符数组的差异(尤其接收输入与可修改性);指针函数参数中“通过指针间接修改实参”的机制;字符串常量只读性,避免误修改。教学方法讲授法、案例演示法、对比分析法、任务驱动法、小组互助纠错法教学工具机房电脑、Dev-C++、PPT、教材等教学过程第一课时:数组指针与一维数组操作(45分钟)课程导入(5分钟)复习回顾:任务6-1用指针操作单值数据(选手编号、打分、等级),通过&取址、*解引用间接访问。问题导入:赛事中有多位评委打分,数据是一组同类型的“数组”,如何用指针高效遍历?引出数组指针。类比:数组=酒店一层连续房间,数组指针=指向该层第一个房间的“笔记本”,顺着房间号递增即可访问每一位评委。新知讲授(35分钟)(1)数组地址与指针基础(例6-8,教材6.2.1)数组占用连续内存空间;数组的“起始地址”即首元素地址,其他元素地址是连续空间里的对应位置。//例6-8数组地址与指针基础验证intarrInt[3];doublearrDouble[2];printf("整型数组arrInt的起始地址为%p\n",arrInt);printf("整型数组arrInt的各元素地址为%p,%p,%p\n",&arrInt[0],&arrInt[1],&arrInt[2]);结论:所有数组的起始地址与首元素地址完全一致,印证“数组名本质是指向首元素的指针”;元素地址按类型字节数连续递增(int步长4、double步长8),体现数组“连续存储”特性。(2)数组指针的定义(例6-9,教材6.2.1)格式:类型说明符*指针变量名;让指针指向数组首元素(p=arr等价于p=&arr[0])。偏移规则:实际偏移字节数=整数×元素类型字节长度;arr[i]的本质就是*(arr+i)。//例6-9定义指向整型数组的指针intarr[5]={10,20,30,40,50};int*p;p=arr;//等价于p=&arr[0]printf("第1个元素:%d\n",*p);//arr[0]=10printf("第2个元素:%d\n",*(p+1));//arr[1]=20printf("第3个元素:%d\n",*(p+2));//arr[2]=30(3)字符数组的指针(例6-10)charstr[]="Hello";char*q=str;通过while(*q!='\0'){printf("%c",*q);q++;}即可遍历字符串。(4)一维数组的三种指针操作(例6-11/6-12/6-13)①指针偏移访问*(p+i):与arr[i]完全等价;②指针自增遍历*p++:效率更高,无需重复计算偏移;③指针下标访问p[i]:编译器自动转换为*(p+i),与arr[i]兼容。//例6-12指针自增方式遍历一维数组intarr[5]={10,20,30,40,50};int*p=arr;intlen=sizeof(arr)/sizeof(arr[0]);for(inti=0;i<len;i++){printf("%d",*p++);}//1020304050优先级提醒:++高于*,*p++先取当前元素再移动指针;若需先移动再取值用*(++p)。思政融入(5分钟)数组连续存储、按序访问,如同赛事评分按编号有序归档;指针遍历“不漏不重”对应完整盘点流程,培养全面细致、不遗漏数据的工作习惯,杜绝敷衍简化导致数据丢失。第二课时:字符指针(45分钟)复习导入(5分钟)回顾:数组指针与一维数组三种操作方式(偏移/自增/下标)。问题导入:选手姓名是文字(字符串),如何用指针高效管理?引出字符指针。新知讲授(35分钟)(1)字符串的存储和运算——两种方式(例6-14/6-15,教材6.2.2)字符数组:charinfoArr[50]="WelcometoCworld!";数组名=首元素地址,infoArr[i]≡*(infoArr+i);数组名是常量不可整体赋值(infoArr="..."报错)。
字符指针:char*pInfo="WelcometoCworld!";等价于先定义后赋值;二者输出效果一致。//例6-14字符数组方式
charinfoArr[50]="WelcometoCworld!";
printf("%s\n",infoArr);
printf("%s\n",infoArr+12);//从第13个字符起→world!
//例6-15字符指针方式
char*pInfo="WelcometoCworld!";
printf("%s\n",pInfo+12);//world!(2)字符指针和字符数组的差异(教材6.2.2-2)存储本质不同:字符指针存储字符串首地址,字符串存于以该地址开头的连续内存;字符数组由多个元素组成,直接存放整个字符串。赋值方式不同:字符指针支持先定义再赋值;字符数组仅支持定义时初始化,无法先定义再整体赋值。未初始化风险:指针变量未获取确定地址即使用是野指针(危险);但“直接给指针赋值字符串常量”合法安全(如char*st="...";也可先定义后赋值)。接收键盘输入的前提:字符数组定义时已分配固定空间,可直接scanf;字符指针若仅定义未分配空间(野指针),不能直接接收输入,需先指向有效空间(数组或malloc)。(3)字符指针的应用场景(例6-16/6-17/6-18)①基础遍历:例6-16统计字符串长度(char*pStr="CLanguageProgramming";while(*pStr!='\0'){count++;pStr++;}→22);②动态输入:例6-17malloc分配、scanf接收、free释放并置NULL避免悬空;注意scanf("%s")遇空格截断,含空格用fgets;③函数传参:例6-18printSubStr(char*pStr,intstartIndex)传首地址+起始下标输出子串,仅传4/8字节地址,效率极高。//例6-17动态内存接收输入(节选)
char*pInput=NULL;
pInput=(char*)malloc(50*sizeof(char));
if(pInput==NULL){printf("内存分配失败!\n");return1;}
scanf("%s",pInput);
printf("您输入的字符串:%s\n",pInput);
free(pInput);pInput=NULL;思政融入(5分钟)字符指针“共享同一块内存、高效传递”对应团队协作中信息高效共享;但字符串常量只读、不可随意修改,提醒我们在共享数据时应尊重“只读权限”、不篡改他人/原始数据,树立数据安全与诚信底线。第三课时:指针作为函数参数(45分钟)复习导入(5分钟)回顾:字符指针作参数传递字符串(例6-18)。问题导入:C语言函数默认“值传递”,函数内修改形参不影响实参,如何在函数内修改外部变量、甚至返回多个结果?引出指针参数。新知讲授(35分钟)(1)指向普通变量的指针作为函数参数(例6-19,教材6.2.3-1)值传递局限:形参是实参副本,修改不影响实参。指针参数:传递变量地址,函数内解引用*即可间接修改实参。典型应用:实现函数返回多个结果、优化大数据传递效率、修改外部变量状态。//例6-19用指针参数交换两个变量的值voidswap(int*a,int*b){inttemp=*a;*a=*b;*b=temp;}intmain(){intx=10,y=20;printf("交换前:x=%d,y=%d\n",x,y);swap(&x,&y);printf("交换后:x=%d,y=%d\n",x,y);//x=20,y=10return0;}(2)数组指针作为函数参数(例6-20/6-21)数组名作实参时自动退化为首元素指针,丢失长度信息,需额外传递长度参数。形参可声明为“元素类型指针”(int*p)或“不指定长度的数组”(intp[]),二者等价。//例6-20用指针参数操作数组voidprint_array(int*p,intlen){for(inti=0;i<len;i++)printf("%d",*(p+i));}//例6-21二维数组用数组指针保留列数voidprint_2d_array(int(*p)[5],introws){for(inti=0;i<rows;i++)for(intj=0;j<5;j++)printf("%d",p[i][j]);}(3)字符指针作为函数参数(例6-22/6-23)传递字符串首地址,依赖'\0'结束标志,避免整体复制、效率极高。注意:字符串常量(如*p="hello")只读,函数内不可修改;字符数组(chararr[]="test")可修改。//例6-22字符指针参数统计长度intstr_length(char*str){intlen=0;while(*str!='\0'){len++;str++;}returnlen;}//例6-23修改字符数组内容(小写转大写)voidto_upper(char*str){while(*str!='\0'){if(*str>='a'&&*str<='z')*str-=32;str++;}}思政融入(5分钟)指针参数“传递地址、共享内存”实现函数间高效协作,正如团队成员共享信息、共担责任;但“能修改”也意味着“需谨慎”——对外部数据的修改须经授权、守边界,培养权责清晰、审慎负责的工程伦理。第四课时:任务6-2赛事评分成绩统计——任务解读与实操(45分钟)任务解读(5分钟)任务描述:作为赛事评分管理系统的进阶实践,本任务聚焦数组指针、字符指针及指向普通变量的指针作为函数参数的综合应用。通过定义批量评分数据(如多位评委评分数组)和选手信息(姓名字符串),学习用数组指针遍历批量评分数据、用字符指针管理字符串的方法,掌握将指针作为函数参数传递批量数据的技巧,通过函数实现评分(如总分、平均分)统计功能,完善赛事评分管理系统的核心逻辑(教材P161图6-4)。
任务要求:①定义int型数组(存储3~5位评委打分数据)、char型数组(存储选手姓名),用数组指针指向评分数组、字符指针指向姓名字符串;设计评分统计函数,接收数组指针、长度及字符指针作为参数,实现总分计算、平均分计算功能。②输出选手姓名(字符指针访问)、各位评委打分(数组指针遍历)、函数计算后的总分与平均分;标注“原始评分列表”“函数计算结果”等关键信息,确保批量数据与计算结果对应清晰。③代码规范:指针命名体现用途,函数参数标注指针类型及含义。完整代码分步演示(15分钟)分段拆解教材任务实施代码,演示运行效果。#include<stdio.h>
//函数实现:计算总分与平均分(通过指针参数操作外部数据)
voidcalc_score_stats(int*scores,intlen,char*name,int*total,float*avg){
*total=0;
for(inti=0;i<len;i++)*total+=*(scores+i);
*avg=(float)*total/len;
}
intmain(){
pr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 地铁司机培训试卷及答案解析
- 2026年计算机网络安全专项题库
- 2026年造价工程师专业实务模拟试题
- 2026年公共安全与事故预防知识竞赛试题
- 2026年健康素养与疾病预防测试
- 2026年江苏省部编版七年级语文下册第12章综合测试卷
- 2026年消防安全与消防器材习题集
- 2026年辽宁省部编版高中政治下册时事政治专项训练
- 2026年江苏省人教版一年级语文下册第3单元同步练习题
- 2026年公共服务意识与素养考核试题
- 内蒙古森工集团笔试内容题目及答案解析
- 2026芯片设计标杆企业组织效能报告
- 2026年新疆医科大学第四附属医院(新疆维吾尔自治区中医医院)招聘编制外工作人员(125人)笔试备考题库及答案详解
- 2026-2030智能语音行业市场深度调研及发展趋势与投资前景研究报告
- 2026年全国保密教育线上培训考试题库(含标准答案)
- 检修班组长安全职责与管理能力提升培训
- GB/T 47551-2026塑料有害物质限量要求多溴联苯和多溴二苯醚
- 南京社区工作者考试题库答案
- 2025年融资担保公司《担保业务知识》真题及答案解析
- 2025年铁路桥隧工(技师)职业技能鉴定考试题库(含答案)
- 医院健康科普品牌矩阵的构建策略
评论
0/150
提交评论