版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
选手得分计算——一维数组的定义、引用与初始化——目录CONTENTS01一维数组基础02实战:选手得分计算选手得分计算课程目标进入批量数据处理:一维数组的定义、引用与初始化。1定义方法掌握一维数组的定义与规则。2引用存储学会引用方式,理解存储特点。3初始化熟练使用数组的初始化方法。4实战应用用数组批量处理评委打分。01一维数组基础选手得分计算一维数组的定义类型数组名[整型常量表达式];例:floatscore[11];float(类型)指定元素为浮点型,可存储评委分数。score(数组名)遵循标识符命名规则,用于访问数组。[11](长度)表示数组包含11个元素,必须是整型常量。重要规则:数组长度必须是常量,不能是变量。选手得分计算定义方式正误对照错误写法intn=11;floatscore[n];n是变量,定义非法。推荐写法直接用数字常量floatscore[11];或#defineN11符号常量。用#defineN11定义符号常量,评委人数变动时只改一处。选手得分计算一维数组的引用与存储引用格式:数组名[整型表达式]下标从0开始元素是score[0]到score[10],访问score[11]会数组越界。连续存储所有元素占据连续的地址空间,访问效率高。引用比定义少了类型说明符,方括号里是下标。选手得分计算一维数组的初始化inta[5]={1,2,3,4,5};全部初始化,5个值依次赋给5个元素。intb[]={10,20,30};省略长度,系统自动识别为3。intc[5]={1,2};部分初始化,c[2]~c[4]自动为0。注意:初始化只能在定义时进行,定义之后不能再用这种方式赋值。02实战:选手得分计算选手得分计算情景描述:为什么用数组?11位评委打分,去掉最高最低求平均传统方式痛点定义11个变量代码冗长;逐一比较繁琐,扩展性差。数组的优势结构清晰、数据规整;for批量处理,简洁易维护。选手得分计算程序实现五步走①定义数组②输入分数③求总分最值④算平均分⑤输出1floatscore[11]存储分数,for(0-10)读取输入。2遍历数组求总分、最高分、最低分。3(总分-最高分-最低分)/9即最终得分。逻辑符合思维习惯,代码简洁、可读性高。选手得分计算完整代码:选手得分计算输入→求总分最值→算平均分#include<stdio.h>#defineN11intmain(){
inti;floats[N],sum=0,max,min;
for(i=0;i<N;i++)scanf("%f",&s[i]);max=min=s[0];
for(i=0;i<N;i++){sum+=s[i];
if(s[i]>max)max=s[i];
if(s[i]<min)min=s[i];}printf("得分:%.2f\n",(sum-max-min)/9);
return
0;}选手得分计算代码逐行解析#defineN11符号常量定义评委人数。for+scanf循环读取11个分数存入数组。sum+=s[i]遍历数组累加总分。if比较max/min同时找出最高分和最低分。(sum-max-min)/9去掉最高最低,求9人平均。运行验证:正确读取分数、找到最值、算出平均分。选手得分计算课程总结1核心概念一维数组是批量处理同类型数据的高效工具。2定义规则长度必须是常量,推荐#define符号常量。3引用初始化下标从0开始不越界;初始化只在定义时。4实际应用存储、遍历、输入输出与批量计算。谢谢大家打印杨辉三角——二维数组——主讲人:冯淑婷目录CONTENTS01二维数组基础02实战:打印杨辉三角打印杨辉三角课程目标在一维数组基础上学习二维数组,处理矩阵类数据。1定义规则掌握二维数组的定义方法。2引用存储理解引用方式与行优先存储。3初始化学会分行与连续两种赋值。4实战应用编程打印杨辉三角前6行。01二维数组基础打印杨辉三角二维数组的定义示例inta[3][4];定义3行4列,共3×4=12个元素。语法规定行数、列数只能是常量或符号常量,不能包含变量,否则编译报错。二维数组就是数组的数组,专存矩阵数据。类型数组名[整型常量表达式1][整型常量表达式2];打印杨辉三角二维数组的引用引用格式:数组名[整型表达式1][整型表达式2]下标从0开始a[3][4]第一个是a[0][0],最后一个是a[2][3]。可用变量引用时的表达式可含变量,这是循环遍历的关键。双重循环搭档两层for用i、j遍历,配合scanf是经典写法。对比记忆:定义用常量,引用可用变量。打印杨辉三角存储机制:行优先第0行b[0][0]→b[0][1]→b[0][2]第1行b[1][0]→b[1][1]→b[1][2]第2行b[2][0]→b[2][1]→b[2][2]先存完一行,再存下一行,每行内部连续。a[3][4]={{1,2,3,4},..}分行全部赋值,3行各4个元素。inta[][4]={{...}};行数可省略,编译器自动判断。打印杨辉三角初始化方式一:分行赋值a[3][4]={{1,2},{5,6},{9}}部分赋值,剩余元素自动为0。大括号嵌套区分每一行,结构清晰直观。打印杨辉三角初始化方式二:连续赋值a[3][4]={1,2,...,12};按行优先顺序连续赋值,效果相同。a[3][4]={1,2,3,4};部分赋值,剩下8个元素全为0。如何选择:行列清晰用分行赋值更直观,数据连续用连续赋值更简洁。02实战:打印杨辉三角打印杨辉三角情景描述:杨辉三角任务背景我国南宋数学家杨辉提出,任务:编程输出前6行。两大特点左右对称,每行首尾都是1;每个数等于上方两数之和。11112113311464115101051行列结构与二维数组完美匹配,用它存储是最佳选择。打印杨辉三角生成逻辑:两大规律规律一:边界恒为1第一列与对角线元素都是1,triangle[i][0]=1;triangle[i][i]=1;规律二:上方两数之和内部元素=正上方+左上方,triangle[i][j]=triangle[i-1][j-1]+triangle[i-1][j];核心逻辑:先初始化边界为1,再嵌套循环递推内部元素,最后打印。打印杨辉三角完整代码:打印前6行#include<stdio.h>intmain(){
inta[6][6]={0},i,j;
for(i=0;i<6;i++)a[i][0]=a[i][i]=1;
for(i=2;i<6;i++)
for(j=1;j<i;j++)a[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=0;i<6;i++){
for(j=0;j<=i;j++)printf("%-4d",a[i][j]);printf("\n");}
return
0;}边界初始化→递推→格式化输出打印杨辉三角代码三步解析Step1i从0到5a[i][0]=a[i][i]=1,立起边界骨架。Step2i从2开始第0、1行全是1,无需计算内部。Step2j从1到i-1避开边界1,递推求和算内部元素。Step3条件j<=i下三角结构,第i行有i+1个元素。%-4d加换行左对齐占4宽,打印完一行换一行。打印杨辉三角二维数组三种遍历技巧遍历整个数组内层条件j<列数,适合完整矩阵表格。遍历下三角内层条件j<=i,适合杨辉三角等场景。遍历上三角内层条件j>=i,处理对角线右上方。外层控行、内层控列,内层条件决定遍历范围。打印杨辉三角课程总结1二维数组核心行+列矩阵结构,按行优先存储。2初始化遍历分行/连续赋值,三种遍历模板。3杨辉三角把数学规律转化为C语言代码。4编程思想数据结构为算法服务。谢谢大家恺撒加密——字符数组——主讲人:冯淑婷目录CONTENTS01字符数组基础02实战:恺撒加密恺撒加密课程目标字符数组是处理字符数据的核心工具,恺撒加密是经典案例。1定义与赋值掌握字符数组定义与两种赋值。2引用与存储理解引用方式与存储机制。3初始化学会字符数组的多种初始化。4实战应用编写恺撒加密,明文转密文。01字符数组基础恺撒加密字符数组的定义char数组名[长度];示例charmessage[100];可存100个字符,够日常短字符串使用。语法规定长度必须是整型常量,不能是变量,与整型数组的规则完全一致。与整型数组本质一致,区别只在数据类型。恺撒加密两种常用赋值方式方式一:逐个字符赋值str[0]='H';str[1]='e';…str[4]='o';每个下标依次赋值与整型数组赋值完全类似,逐个元素写入字符即可。方式二:字符串整体初始化charstr[]="Hello";charstr[6]="Hello";推荐!自动算长度并加'\0',手动长度须预留'\0'空间。牢记:字符常量必须用单引号''包裹,双引号""表示字符串,别写错!恺撒加密字符串的本质字符串=以'\0'结尾的字符数组'\0'是ASCII值为0的不可见字符,作用是告诉系统“字符串到此结束”,它是输出函数的停止信号。{'H','i'}大括号赋值长度是2,只有'H'、'i'两个元素,没有结束标志。"Hi"双引号赋值自动在末尾加'\0',实际占3,比看到的字符数多1。缺'\0',printf会持续读内存直到随机的'\0':乱码甚至崩溃!恺撒加密字符数组的引用引用单个元素scanf("%c",&a[i]);格式:数组名[整型表达式],循环逐个输入输出;scanf单个字符要加&。二维字符数组才用双下标格式。引用整个数组【独有】scanf("%s",a);printf("%s",a);数组名本身就是首地址,scanf输入整个字符串时不加&;printf从首地址输出,遇'\0'自动停止。整型数组只能逐个引用,字符数组还能整体引用,更方便!恺撒加密存储机制:ASCII连续存储chara[4]={'g','o','o'};goo\0第4个元素未赋值,自动填充'\0'。charb[8]="perfect";perfect\07个字符+'\0',刚好占8字节。按ASCII码值顺序连续存储,每个字符占1个字节。恺撒加密字符数组的初始化方式一:逐个字符初始化chara[4]={'g','o','o','d'};chara[]={'g','o','o','d'};全部赋值时长度可省略;部分赋值,未赋值元素自动补'\0'。方式二:字符串整体赋值charb[]="perfect";charb[8]="perfect";最简洁常用,大括号可省略;手动指定长度须预留'\0'的空间。易错:charb[7]="perfect";缺'\0',后续输出会出现乱码!02实战:恺撒加密恺撒加密情景描述:恺撒密码什么是恺撒密码最简单广为人知的加密技术,字母按密钥位数向后偏移,明文变密文。密钥为3时A→D,B→E……Y→B,Z→C;数字、空格、标点等非字母保持不变。编程任务输入明文(少于100字符)和密钥,程序输出加密后的密文。恺撒加密加密算法三核心步骤1if(a[i]>='a'&&a[i]<='z'||a[i]>='A'&&a[i]<='Z')字符类型判断:是字母才加密,非字母原样复制到密文数组。2(原码-基准码+密钥)%26+基准码核心公式:大写基准码65('A'),小写基准码97('a')。3%26实现字母表循环结果始终在0-25之间,z偏移3位变成c,不超出字母表。公式保证偏移后仍然是字母,这是恺撒加密的关键。恺撒加密完整代码:恺撒加密Step1输入+Step2长度#include<stdio.h>#include<string.h>intmain(){
chara[100],b[100];
inti,t,n;gets(a);scanf("%d",&t);n=strlen(a);Step3加密+Step4输出
for(i=0;i<n;i++){
if(a[i]>='a'&&a[i]<='z'||a[i]>='A'&&a[i]<='Z'){b[i]=a[i]+t;
if(b[i]>'Z'&&b[i]<'Z'+t||b[i]>'z')b[i]-=26;}elseb[i]=a[i];}b[i]='\0';puts(b);
return
0;}gets()读取明文,支持带空格的输入。恺撒加密代码四步解析Step1输入处理gets(a)读明文可含空格,scanf读密钥t。Step2n=strlen(a)计算明文有效长度,作为循环边界。Step3判断并加密字母偏移+t,越界减26;否则原样复制。Step4b[i]='\0'补上结束标志,b才是完整的字符串。puts(b)输出密文puts自动换行,输出格式更整洁。恺撒加密课程总结1字符数组核心定义与两种赋值,是处理字符的基础。2字符串本质以'\0'结尾,缺它输出会乱码。3恺撒实战ASCII偏移,“判断-偏移-循环”。4编程思想初识密码学,理解ASCII表示。谢谢大家字符串初始化——两种方式的差异——主讲人:冯淑婷目录CONTENTS01两种初始化方式02差异验证与正确实践字符串初始化课程目标深入理解两种初始化方式的差异与'\0'的作用。1看清现象两段相似代码,结果天差地别。2两种方式逐个字符vs字符串直接赋值。差异本质3是否自动添加结束符'\0'。4正确实践手动补'\0',分清适用场景。字符串初始化导入:一个奇怪的现象逐个字符赋值charstr1[]={'H','e','l','l','o'};printf输出"Hello"后大概率出现乱码,甚至崩溃。字符串直接赋值charstr2[]="Hello";printf正常输出"Hello",程序运行稳定无乱码。为何天差地别?→初始化的本质差异。01两种初始化方式字符串初始化方式一:逐个字符赋值charstr1[]={'H','e','l','l','o'};特点一:长度自动系统按写入的字符个数,自动分配空间确定长度。特点二:不加'\0'数组里只有显式写入的字符,这是最核心的区别!每个字符用单引号括起,放入花括号中初始化。字符串初始化方式二:字符串直接赋值charstr2[]="Hello";特点一:长度+1系统自动计算长度,实际长度=可见字符数+1。特点二:自动加'\0'末尾自动添加'\0',占1字节,这是与方式一的根本区别。双引号整体赋值,C语言中最常用的方式。字符串初始化核心差异:表格对比对比项逐个字符赋值字符串直接赋值代码示例str1[]={'H','e','l','l','o'};str2[]="Hello";数组长度56结束符'\0'不含,只有写入的字符自动添加,占1字节函数支持printf/strlen出错printf/strlen正常本质区别:是否自动添加'\0',决定printf、strlen能否正确工作。02差异验证与正确实践字符串初始化代码验证:printf表现printf/sizeof/strlen实测对比#include<stdio.h>#include<string.h>intmain(){
charstr1[]={'H','e','l','l','o'};
charstr2[]="Hello";printf("%s\n",str1);//乱码!printf("%s\n",str2);//Helloprintf("%d%d\n",sizeof(str1),sizeof(str2));printf("%d%d\n",strlen(str1),strlen(str2));
return
0;}str1缺'\0',printf从开头一直输出,越界访问内存直到随机的'\0'。字符串初始化sizeof与strlen的差异sizeof:数组总长度sizeof(str1)=5sizeof(str2)=6只关心数组实际占用的物理内存总字节数,与存储内容无关。strlen:有效长度strlen(str1)=未定义strlen(str2)=5从首地址计数到'\0'为止;str1越界查找,结果是随机数。sizeof看物理内存,strlen依赖'\0',两者互不替代。字符串初始化解决方案:手动添加'\0'写法一:显式添加charstr[6]={'H','e','l','l','o','\0'};长度6,末尾写'\0'定义长度为6,在最后一个位置显式写入结束符'\0'。写法二:自动初始化charstr[6]={'H','e','l','l','o'};第6个自动为'\0'只写入前5个字符,第6个元素被系统自动初始化为'\0'。两种写法printf都正确输出"Hello"——字符串必须以'\0'结尾!字符串初始化两种方式的适用场景字符串直接赋值适用于printf、strlen等标准库函数场景:语法简洁,自动加'\0’,安全性高。逐个字符赋值适用于精确控制每个字节:底层硬件编程、网络协议解析、二进制数据;普通字符串必须手动加'\0'。字符串初始化课程总结1根本区别是否自动加'\0':直接赋值会,逐个赋值不会。2'\0'的意义识别字符串结束的唯一标志,标准函数全靠它。3最佳实践优先直接赋值;逐个赋值务必手动加'\0'。谢谢大家字符串处理函数——strlen、strcpy、strcmp、strcat常用函数解析——主讲人:冯淑婷目录CONTENTS01情境导入:用户登录的四个需求02strlen、strcpy、strcmp、strcat函数03综合案例:用户登录程序字符串处理函数上节回顾•掌握了字符串的两种初始化方式;•理解了结束符'\0'的重要作用。本节内容学习字符串处理的核心工具——四大常用函数,高效完成字符串的长度计算、复制、比较与拼接。课程导入1掌握核心函数掌握strlen、strcpy、strcmp、strcat四个核心库函数的功能、参数与用法。2熟练运用能熟练运用它们处理字符串,并避免常见的安全错误。3编程素养养成使用标准库、严谨编程的好习惯。字符串处理函数学习目标01情境导入:用户登录的四个需求1检查用户名长度对应函数:strlen测长度2安全保存密码对应函数:strcpy存密码3验证密码是否一致对应函数:strcmp做比对4拼接欢迎信息对应函数:strcat拼信息不用库函数,代码繁琐且易出错;使用前必须包含头文件#include<string.h>。情境导入:用户登录的四个需求字符串处理函数02strlen、strcpy、strcmp、strcat函数strlen用于计算字符串的有效长度:从第一个字符开始计数,遇到结束符'\0'就停止,且不统计'\0'。strlen统计字符串的有效字符个数,不含结束符。sizeof统计整个数组占用的内存字节数,包含结束符。例如字符数组存"Hello":strlen结果为5,而sizeof结果为6(含'\0')。字符串处理函数strlen函数:计算字符串长度#include<stdio.h>#include<string.h>int
main(){
charstr[]="Hello";
intlen=strlen(str);
printf("有效长度:%d\n",len);
printf("占用字节:%d\n",sizeof(str));
return
0;}有效长度:5占用字节:6结果解读strlen统计到'\0'之前为止;数组实际占用6字节。字符串处理函数strlen示例代码strcpy用于将一个字符串完整复制到另一个字符数组中。最大风险:缓冲区溢出strcpy不会检查目标数组的空间是否足够,复制过长字符串会越界写入。✓安全使用要点必须确保目标数组空间≥源字符串长度+1,为结束符留出位置。字符串处理函数strcpy函数:字符串复制chardest[20];charsrc[]="Hello";strcpy(dest,src);printf("%s\n",dest);目标数组dest有20字节空间,≥源串长度5+1,复制安全成功。错误示范chardest[3];strcpy(dest,"Hello");dest仅有3字节,却装入6字节内容,引发缓冲区溢出!字符串处理函数strcpy示例代码strcmp用于逐字符按ASCII码比较两个字符串。相等→0两字符串内容完全相同,返回0。str1小→负数str1小于str2,返回负数。str1大→正数str1大于str2,返回正数。判断字符串是否相等只能用strcmp,不能用==,因为==比较的是地址,不是内容。字符串处理函数strcmp函数:字符串比较chars1[]="abc";chars2[]="abd";intr=strcmp(s1,s2);if(r==0)
printf("两串相同\n");else
if(r<0)
printf("s1小于s2\n");else
printf("s1大于s2\n");s1小于s2比较过程前两字符'a'、'b'相同;第三字符'c'的ASCII码小于'd',故返回负数。通过判断返回值r的符号,即可知道两串的大小关系。字符串处理函数strcmp示例代码strcat用于将一个字符串拼接到另一个字符串的末尾。找到目标串的结束符'\0'覆盖该结束符复制源字符串内容自动添加新结束符使用时必须确保目标数组有足够的空间容纳拼接后的结果,避免缓冲区溢出。字符串处理函数strcat函数:字符串拼接03综合案例:用户登录程序#include<stdio.h>#include<string.h>int
main(){
charuser[20],pwd[20];
charmsg[50]="欢迎你,";
scanf("%s%s",user,pwd);
if(strlen(user)<3)
printf("用户名太短!\n");
if(strcmp(pwd,"123456")==0){
strcat(msg,user);
printf("%s\n",msg);}
return
0;}函数分工①用strlen检查用户名长度;②用strcmp验证密码是否一致;③用strcat拼接欢迎信息。字符串处理函数综合案例:用户登录程序strlen计算字符串有效长度。strcpy复制字符串到目标数组。strcmp比较两字符串,看返回值。strcat拼接字符串到末尾关键提醒牢记strcpy和strcat的溢出风险,以及strcmp的返回值规则,写出更高效、更安全的代码。字符串处理函数课程总结谢谢大家数组最大值查找——数组作为函数参数的传递——主讲人:冯淑婷目录CONTENTS01数组传参原理02案例:数组最大值查找数组最大值查找上节回顾学习了函数的递归调用,掌握了函数自我调用的编程思路。本讲内容函数与数组结合,学习数组作为函数参数的传递规则,实现数组最大值查找功能。课程导入1理解数组作为函数参数的传递规则重点掌握数组传参的传递原理。2掌握函数参数与返回值在数组操作中的用法把函数知识迁移到数组操作中。3学会用函数实现数组最大值查找掌握找最大值的完整流程。4独立完成求数组最大值的完整案例编程夯实函数与数组结合的编程基础。数组最大值查找课程目标01数组传参原理核心理论:数组即地址——数组名不是整个数组,而是数组首元素的内存地址。传的是地址不是把数组数据复制一份传给函数,而是传内存起始地址。效率更高地址传递效率高、省内存,大数组也不必整体拷贝。数组最大值查找数组传参原理:数组即地址关键结果:双向影响——形参和实参共用同一块内存。形参数组(函数内)实参数组(主函数)同一块内存空间函数里改形参数组,主函数里的实参数组也会跟着变。数组最大值查找关键结果:双向影响①数组元素作参数只能做实参,不能做形参;单向值传递,只传数据,函数内修改不影响原元素。②一维数组名作参数实参和形参都能用,传首地址——本节课重点使用的方式。③多维数组名作参数以二维数组为例:形参可省略第一维大小,第二维必须指定。数组最大值查找数组参
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年合肥鸟岛强村农业投资发展有限公司公开招聘工作人员考试参考题库及答案解析
- 什邡市第一幼儿园聘用教师招聘(2人)笔试备考试题及答案解析
- 2026年宁波市镇海区公务员人员招聘笔试试题与答案详解
- 2026年浙江省宁波市公务员人员招聘考试参考试题与答案详解
- 中国联通重庆市分公司2027届校园招聘笔试备考试题及答案解析
- 四川省商业投资集团有限责任公司2026年秋季校园招聘(51人)笔试备考试题及答案解析
- 2026年贵州省毕节市事业单位人员招聘笔试备考题库与答案详解
- 2026年沿海货物运输行业产业洞察报告及未来五至十年需求升级与结构演变
- 雨城区八步镇公益性岗位招聘(2人)笔试备考试题及答案解析
- 2026年南京市秦淮区公务员人员招聘考试参考题库与答案详解
- 秋冬防病小课堂 小学传染病预防课件
- 2026年中国邮政集团有限公司江苏省分公司人员招聘考试备考试题及答案
- 2026年国家烟草专卖局中国烟草总公司招录笔试真题(附答案)
- 建筑行业施工现场安全资料管理培训
- 空调维保服务人员配置计划方案
- 斯卡特门窗销售合同
- 聚丙烯(PP)原材料MSDS报告(PPH-T03牌号)
- 2026年及未来5年市场数据中国动漫外包行业市场全景评估及投资前景展望报告
- 茅台集团历年招聘真题
- 自检互检专检管理办法细则
- 体检科护理操作规范培训
评论
0/150
提交评论