分享
分销 收藏 举报 申诉 / 17
播放页_导航下方通栏广告

类型C语言笔试必考知识点2.doc

  • 上传人:xrp****65
  • 文档编号:6908873
  • 上传时间:2024-12-23
  • 格式:DOC
  • 页数:17
  • 大小:64.50KB
  • 下载积分:10 金币
  • 播放页_非在线预览资源立即下载上方广告
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    语言 笔试 必考 知识点
    资源描述:
    第九章函数 知识要点: 1一维说组的定义: 1) 当数组中每个元素只带一个下标时,称这样的数组为一维数组。 2) 定义一维数组的一般形式为: 类型名 数组名[ 常量表达式]…….. 例如:int a[8]; 说明如下: (1) 定义一个名为a的一维数组。 (2) 方括号中8规定a数组中有8个元素(a[0]到a[7]) (3) 类型名int 规定a数组中每个元素为整型,且每个元素中只能存放整型数。 (4) 每个元素只有下标且第一个元素的下标总为0 (5) C语言编译程序为a数组开辟8个连续的存储单元。 a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] 3) (1): 在定义数组语句中,可以有多个数组说明符,他们用逗号隔开。 例如:double a[22],b[100], c[5]; (2):数组说明符和普通变量名,可以同时出现在一个类型的定义语句中。 2.一维数组的引用 1)引用形式如下:    数组名[下标表达式]例如:double a[8];则a[0],a[j],a[i+k] 都是合法的。 注意:a[i+k]中i+k是下标表达式不是两个下标 2. (1):一个数组元素实际上就是一个变量名。代表内存中的一个存储单元。 (2):一个数组不能整体引用,数组名中存放的是一个地址常量,它代表整个数组的首地址。 (3)在引用数组元素时,数组元素下标表达式必须是整数,下标表达式下限为0。系统并不会自动检验数组元素下标是否越界,因此编程时候要多注意。 3.一维数组的初始化。 1) 在定义语句中给所定义数组赋初值    初值放在赋值号后的花括号中,数值类型与说明类型一致,初值间用逗号隔开,系统将自动按顺序从a[0]开始依次给a数组中元素。如int a[8]={0,1,2,3,4,5,6,7}; 2) (1)当初值少于元素个数时,后面元素赋给0。字符补给‘\0’ 例如:int a[10]={0};十个元素都赋初值0  char a[5]={‘A’}; char a[5]={‘A’,’\0’, ’\0’, ’\0’, ’\0’,}; (2)当初值多于元素个数,系统给出出错信息。 3)可以通过赋初值来定义数组的大小   例如:int a[]={0,0,0,0,0,0}; int a[6]={0}; 4举例说明:    (见课本)编写程序,定义一个含有30个元素的int 类型数组,依次给数组赋 1 3 5 7 9….然后按每行10个顺序输出,最后在按每行10个逆序输出。  第二节:一维数组和指针 1) 数组和指针比较记忆: (1) 指针变量的地址(每个变量的地址就是该变量的第一个字节的地址)数组名的地址值,就是该数组第一个元素的地址。 (2) 指针变量有基类型,相当于数组的类型名 (3) 指针变量的地址值是不可以改变,因此不可以给数组重新赋值。p=&a; 语句a=&x;或a++;都是非法的,因为不能给a重新赋值,一但定义,a永远指向a数组的首地址。 2) 虽然不可以改变a 中的 内容,但可以对数组名加一个整数的办法,来依次表达该数组中不同元素的地址。Int a[10],*p,x; 例如:(k为int ) p=a+k; for(k=0;k>10;k++) scanf(“%d” ,a+k); 语句p=&a[0]== >p=a;指向a数组首地址: 以下语句是等价的:    for(p=a,k=0;k>10;k++) p++; for(p=a,k=0;k>10;k++) {scanf(“%d”,p);p++} for(p=a,k=0;k>10;k++) scanf(“%d”,p++); for(p=a;p-a<10;p++) scanf(“%d”,p); 2. 通过数组首地址,指针,带下标的指针引用一维数组 1)*&a[i] *(a+i) (p=a;||p=&a[0]; ) *(p+i) a[i] p[i] 数组a 若有:p=a; (a[i] *(a+i) p[i] *(p+i) ) 以上是数组元素a[i],一对方括号不仅是表示数组元素的记号,也是一种运算符。 看下面的式子: &a[i] a+i p+i 以上是a[i]的地址   *(p--) a[i--] *--p a[--i] (2)a和p的区别:a是不可以改变的,p中的地址值却是可以改变的, 因此 a++;a=p,p=&a非法 p++,p=a,p=&a[i] 合法 3) 逐个输出a数组中元素的值。 for(k=0;k<10;k++) printf(“%4d”.*(a+k)); for(k=0;k<10;k++) printf(“%4d”.a[i]); for(p=a,k=0;k<10;k++) printf(“%4d”,*(p+k)); for(k=0;k<10;k++) printf(“%4d”.p[i]); 第三节函数之间对一维数组和数组元素的引用及一维数组实例: 1. 数组元素作为实参: 在调用函数时,数组元素可以作为实参传递给形参,每个数组元素实际代表内存中的一个存储单元和普通变量一样,对应的形参必须是类型相同的变量。 2. 数组名作为实参 数组元素的值,可以传递给该变量,在函数中只能对用该变量进行操作,而不能直接引用对用数组元素,数组名也可以作为实参传送,,但数组名本身是一个地址值,因此对应的形参应该是一个指针就变量来引用调用函数中对应的数组元素,从而达到对调用函数中对应数组元素进行操作。 例如:编写程序:通过函数给数组输入若干大于等于0的整数,用负数作为结束标志,调用函数输出该数组中的数据。 1) 当数组名作为实参时,对应的形参可以是:       (1) fun (int *a) (2) fun(int a[ ]) (3) fun(int a[M]) 2)此处*(a+i) ====> a[i] 3.数组元素地址作为实参:   当数组元素地址作为实参时,因为是地址值,所以对应的形参也应该是类型相同的指针变量 例如:编写程序,对具有10个元素的char类型数组,从下标为4的元素开始,全部置‘*’,保持前四个元素内容不变。  注:setsar 函数首部可写为: Setsar(char a[ ],int n) 或 setsar (char a[M-B], int n) *(a+i)可以写为 a[i] 程序(略): 4.函数的指针形参和函数体中数组的区别: 例如:以下程序,形参a指向w数组,函数体内定义了一个数组b,函数把b数组的启始地址作为函数值返回,企图使指针p指向函数体b数组的开头。  #define N 10 Int *fun(int a[N],int n) { int b[N]; … … Return b; } Void main() {int w[N] ,*p; … …. P=fun(w,N); … … } 以上程序涉及几个概念: 1) 函数fun中,形参a可以写成a[N],a[ ],*a,它是一个指针变量,在调用fun函数时,系统只为形参a开辟一个存储单元,并把main函数中w数组首地址存进去,使它指向w数组地址。 2) 函数fun的函数体定义了一个b数组,在调用fun函数时,系统为它开辟一串连续存储单元,它是一个地址常量。 3) 在fun函数执行完毕后,系统释放a,b所占存储单元,而b的值作为fun函数返回值,指针变量p将不指向任何对象而成为“无向指针。“ 一维数组的应用举例: 1. 编写程序:定义一个含有15个元素的数组,完成以下操作: (1) 调用C库函数中的随机函数给所有元素赋以0~50之间的随机数。 (2) 输出数组元素中的值 (3) 按顺序对每隔三个数求一个和数,并传回主函数。 (4) 最后输出所求的和值 2. 编写程序,将数组中数,按颠倒的顺序重新存放。 3. 编写程序,查找在已知数组a中和k相同值的元素的位置,若找到就输出 数组a中该值和所在的位置,若没有找到输出“没有找到”。 4. 编写程序:删除已知存放n个元素的数组a中,下标为k的元素。然后在验证。 5. 用选择法(冒泡法)对数组a中的数进行排序。 第二节:二维数组 1. 二维数组的定义、引用和赋初值 (一) 二维数组的定义和引用 1. 格式: 类型名 数组名[常量表达式1][常量表达式2]; 定义 数组名[常量表达式1][常量表达式2]; 引用 2. 图解:(略) 3. 引用: 考点: 1)行列下标下限为0,上限为 n-1 2)一定要使两个下标放在两个括号内。 3) 第m行n列:a[m-1][n-1] (二)二维数组的初始化: 1.正常格式: int a[3][4]={{1, 2, 3, 4 }, {5, 6, 7, 8 }, {9,10,11,12} }; 2.缺省:行、列、不带花括号,后自动补0。(只能省略行下标,不能省略列下标) 3.通过赋初值定义二维数组大小。 (三)二维数组遍历方法(双for循环) 例题:通过键盘给2*3的二维数组输入数据,第一行赋1、2、3、第二行赋10、20、30、然后按行输出此二维数组。 二维数组和指针: (一):二维数组名和指针 1.数组名存放的是内存中该二维数组首地址:即&a[0][0] 如:p=a,即p=&a[0][0],如上图。 (二) 二维数组元素表示方法 1.a[i][j] : 正常格式 2.(*(a+i))[j] : a[i] -?*(a+i) a[i][j] -? (*(a+i))[j] 3.*(a[i]+j) : a[i] 中存放的是每行的首地址,可以将一行看成一个一维数组,将a[i]看成一维数组名。 a[i][j] -? *(a[i]+j) 4.*(*(a+i)+j) : a[i]--? *(a+i) *(a[i]+j) *(*(a+i)+j) 5.*(&a[0][0]+4*i+j) : 若有整型数组a[3][4],可先将二维数组看成一维数组.从首地址开始向上每行元素个数*前面的行数+所在列数,表示当前元素的地址 三:指针数组和行指针 1. 指针数组: 1) 概念:定义一个一维数组,数组中每一个元素都是一个整型指针变量。 2) 图解:(略) 指针数组中每个指针都指向二维数组的一行,也可以说每个指针存放一行的首地址。 3) 赋值方法(双for循环) for(i=0;i<3;i++) p[i]=a[i]; a[i]是每行的首地址 4) 指针数组引用指针元素 (1) p[i]存放一行的首地址与a[i]相同 *(a[i]+j)-?*(p[i]+j)-? a[i][j]-?p[i][j] ( 2 ) p[i] -----? *(p+i) *(p[i]+j) --------?*(*(p+i)+j) p[i][j] -------? (*(p+i))[j] 2. 行指针: 1) 概念:定义一个指针变量q,它指向一个包含两个整型元素的数组。 int a[3][2] , (*q)[2]; 2) 图解: 3) 赋初值 若 q=a,则q+1 a+1 a[1] 4)行指针引用数组元素。 (1)因为q=a,所以a的引用方法均适用q(最后一项除外) (2) *(a[i]+j) <?*(*(q+i)+j) (*(q+i))[j] <?q[i][j] 二、二维数组名和指针数组作为实参(考点) (一)二维数组名作实参 1.当实参为二维数组名时,形参必为指针,并且这个指针应指向数组,指向数组的指针变量为行指针。形参对应格式,即行指针应为:(*a)[N] 2.行指针也可以表示成a[M][N] 3.行的表达式可以缺省 a[ ][N] (二)指针数组做实参 1.由于指针数组中每个元素均为指针,因此对应形参应当是指向指针的指针 **a 2.与指针数组表示方式相同*a[M] 3.缺省 *a[ ] 三:典型例题: 1. 编写程序通过调用随机函数给5*6的二 维数组元素赋10—40的整数,求出二维数组每行元素的平均值。 2. 编写函数打印杨辉三角形。 3. 找出方阵每列中的最小元素及所在的行号。 4. 编写函数,把任意十进制转换成二进制数。 5. 行列互换(多种方法) 第十章 字符串: 一:用一个一维数组来存放字符串。 一:定义字符串 : 1. 字符串的定义格式: 1)‘\0’ 是一个转义字符。称为“空值”。他的ASCII代码值为0。‘\0’作为标志占用存储空间,但不计入串的实际长度。 2)strlen计算串的长度时不记‘\0’,sizeof计算串长度时候计算’\0’. 3)由于字符串以’\0’结尾,所以若要定义一个函有10个字符 的字符串,则需要一个11元素的一维字符数组。 例如:char str[10]={‘a’,’b’,’c’,’d’,’e’,’f’} 数组str工有10个元素,str作为字符串,其长度为7 2. 字符串和字符型数组的区别。 1) 一维数组中不一定要存放字符串,但字 符串一定要存放在一维数组中, 2) 字符数组中的每个元素可存放一个字符,但它并不限定最后一个字符应该是什么 3) 可以给字符内存中存放字符串,不能通过赋值语句将字符串常量或其他字符数组中的字符串直接赋给字符串变量。如:str1=str2(是错误的) 二:字符串赋初值; 1. 为字符串赋初值 1) 在定义语句中赋初值 (1) char str[10]={‘a’,’b’,’c’,’d’,’e’,’f’} 注意:数组元素个数一定要多于字符个数。 (2) char str[10]={“abcdef”}; (3) char str[10]=”abcdef”; (4) char str[ ]=”abcdef”; 2)在执行语句为字符串赋初值: (1)在执行语句部分不能直接为字符串赋初值。 例如:char str[10]; str=”abcdef”;(是错误的) (2) 可以用 for循环在执行语句给字符串赋初值。 例如: for(i=0;i<6;i++) str[i]=i;str[6]=’\0’ ; 2给字符型指针赋初值: 1) 在定义语句同时赋初值。 (1) char str[10]= “abcdef”,*q=str; (2) char *q =”abcdef”; 2)在执行语句赋初值: char *q; q=”abcdef”; 3. 字符把字符串赋给字符形数组和赋给字符型指针的区别: 把字符串赋给字符型数组代表在内存中开辟了一片连续的存储单元。把该字符串放到这片存储单元中去。 把字符串赋给字符形指针,代表一个指针指向一个字符串,但并没有为它开辟存储单元。 一:输入和输出字符串时的必要条件 1. 输出项既可以是字符串或字符数组名,也可以是已指向字符串的字符指针变量。 2. 输入项可以是字符数组名,也可以是字符指针,但不能是一个字符串。 二:用格式说明符%s进行整串输入和输出 1. scanf 函数 1) 用%s格式输入字符串时,空格和回车都作为输入数据的分隔符而不能被读入; 2) 若字符串长度超过字符数组所能容纳的字符个数时,系统并不抱错。 3) 当输入项为字符指针时,该指针必须已指向确定的有足够空间的连续存储单元。 4) 当输入项是数组元素地址时,输入数据将从这一元素开始存放。 看下面的一个例题: main() {char a[10]=”*********”; scanf(“%s”,a); scanf(“%d”,&a[5]);*/ printf(“%s”,a);} 2. printf函数 调用printf函数时候,将从这一地址考试,依次输出存储单元中的字符,直到遇到第一个‘\0’为止。‘\0’是结束标志,不在输出字符之列。输出结束后不自动换行。 三:调用 gets、puts函数,从终端进行字符串行的输入和输出。 例如:main() {char a[10]=”abcdef\0g”,*p=a; Printf(“%s\n”,a); Printf(“%s\n”,p); Printf(“%s\n”,”abcdefg”); Printf(“%s.&a[5]”); Printf(“%s\n”,a); } 1. gets函数。 1) 头文件:#include “stdio.h” 2) 格式:gets(str); 3) gets 函数用来从终端键盘读入字符串(包括空格符),直到读入一个换行符为止。 例如:main() { char a[10],b[10]; scanf(“%s”,a);gets(b); printf(“%s\n”,a); printf(“%s\n”,a);} 2. puts函数 1) 头文件:#include <stdio.h> 2) 格式:puts(str); 3) puts函数输出结束后,自动输出一个换行符。 三字符串数组: 一:概念: 1. 所谓字符串数组就是数组中的每个元素都是一个存放字符串的数组。 2. 可以将一个二维字符数组看成一个字符串数组,二维字符数组的第一个下标决定了字符串的个数,第二个下标决定了字符串的最大长度。所以把他看作一个字符串数组。 3. 字符串数组也可以在定义的同时赋初值。 例如:char a[3][5]={“a”,”bb”,”ccc”}; char a[ ][5]={“a”,”bb”,”ccc”}; 4. 可以定义字符型指针数组并通过赋初值来构成一个类似的字符串数组。 例如:char *pa[3]={“a”,”bb”,”ccc”}; 二:字符串数组的操作: 1. 输出字符串数组 main() { char i ,a[3][10]={“abc”,”aa”,”cc”}; for(i=0;i<3;i++) printf(“%s”,a[i]);} 2. 字符串排行; 3. 通过指针输出字符串 4. main() {char x[10]}=”asqrtpyx!”,i,j; for(i=0;i<10;i++) printf(“%c”,x[i]);} 四:用于字符串处理的库函数 1. 字符串复制(拷贝)函数strcpy,调用形式如下:    strcpy(s1,s2); 功能:把s2所指的字符串(源)的内容复制到s1所指的存储空间(目的)中,函数返回s1的值,即目的串的首地址;  注意:为保证复制的合法性,s1必须指向一个足够容纳s2串的空间; 2. 字符串连接函数strcat,调用形式如下:   strcat(s1,s2); 功能:将s2串连接到s1串的后面,并自动覆盖s1串末尾的’\0’,函数返回s1的地址值;  注意:s1所指字符串应有足够的空间容纳两串合并后的内容; 3.求字符串长度函数strlen,调用形式:     strlen(s); 功能:统计以s为首地址的字符串的长度,并作为函数值返回,这一长度不包括串尾的结束标志’\0’; 4. 字符串比较函数strcmp,调用形式:     strcmp(s1,s2); 功能:用来比较s1和s2所指字符串的大小,若串s1>串s2,函数值大于0(正数);若s1==s2,函数值等于0;若s1<s2,函数值小于0(负数) 比较方法:依次对s1和s2所指的字符串对应位置上的字符两两进行比较,当出现第一对不相同的字符时,即由这两个字符决定所在串的大小(即两个字符的ASCII值相减);
    展开阅读全文
    提示  咨信网温馨提示:
    1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
    2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
    3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
    4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
    5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
    6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

    开通VIP折扣优惠下载文档

    自信AI创作助手
    关于本文
    本文标题:C语言笔试必考知识点2.doc
    链接地址:https://www.zixin.com.cn/doc/6908873.html
    页脚通栏广告

    Copyright ©2010-2026   All Rights Reserved  宁波自信网络信息技术有限公司 版权所有   |  客服电话:0574-28810668    微信客服:咨信网客服    投诉电话:18658249818   

    违法和不良信息举报邮箱:help@zixin.com.cn    文档合作和网站合作邮箱:fuwu@zixin.com.cn    意见反馈和侵权处理邮箱:1219186828@qq.com   | 证照中心

    12321jubao.png12321网络举报中心 电话:010-12321  jubao.png中国互联网举报中心 电话:12377   gongan.png浙公网安备33021202000488号  icp.png浙ICP备2021020529号-1 浙B2-20240490   


    关注我们 :微信公众号  抖音  微博  LOFTER               

    自信网络  |  ZixinNetwork