




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一章C语言概述第二章变量及表达式二.教学重点,难点分析1.C语言概述知识点所占分值考核几率专家点评C语言概述0-1分20%简单识记C语言程序的构成0-1分30%简单识记标识符1-2分60%简单,属重点识记知识点常量1-2分80%简单,属重点识记知识点变量2-3分100%难度适中,重点理解重点掌握注意从几年的试题分析看C语言的概述和程序的构成合起来考试已经是一个惯例了。2.运算符与表达式知识点所占分值考核几率专家点评C运算符简介0-1分10%简单识记运算符的结合和优先级0-1分60%简单识记强制类型转换运算符0-1分30%简单识记逗号运算符和逗号表达式0-1分40%简单,属重点识记知识点基本的算术运算符1-2分100%简单,属重点识记知识点算术表达式和运算符的1-2分100%难度适中,重点理解重点掌握优先级与结合、自增自减运算符2-3分100%难度适中,重点理解重点掌握赋值运算符和赋值表达式2-4分100%简单,重点掌握重点理解复合的赋值运算符1-2分80%偏难,不是重点赋值运算中的类型转换0-1分75%偏难,不是重点位运算符和位运算0-1分80%偏难,属重点识记知识点三.教学讲点1.C语言的基本构成和格式#include“stdio.h”main(){inta,b,sum;/*定义变量*/赋值给变量a*/赋值给变量sum=a+b;/*把两数之和赋值给变量sum*/printf(“a=%d,b=%d,sum=%d\n”,a,b,sum);/*输出计算结果*/}(1).C程序由函数组成,一个程序必须且只能有一个主函数(main()),C程序总是从主函数开始执行,在主函数中结束。(2).定义函数时函数名后必须有一对小括号,函数体必须放在一对花括号内,在函数体中,函数体有两个部分:定义部分和执行部分。定义语句必须出现在执行语句之前,我们先定义了a,b,sum,然后才给它们赋值。(3).CC语句的一部分。即使是程序的最后一个语句也不例外。分号是语句结束的标志。(4).体分开。例如:int是错误的,而int正确。(5).C位置。注释部分不被执行。(6).C语言程序书写格式自由,语句可以从任一列开始书写,一行内可程序,初学者应该从一开始就养成好的习惯,是程序便于阅读。2.标识符(1)标识符只能由字母、数字和下划线组成。(2)标识符的第一个字符必须是字母或下划线。(3)标识符的大小写字母是有区别的,如和ABC是两个完全不同的标识符。(3)标识符的分类:C语言特定成分的一类标识符。详细的查阅附录二。预定义标识符:在C语言中它也有特定的含义。预定义标识符可以用位“用户表标识符”使用,只是这将使这些标识符失去了原来的意义。用户标识符:由用户根据需要定义的标识符被成为用户标识符。用户标示符用来给变量、函数、数组或者指针等命名。3.C语言的数据类型3.1数据可以分为常量和变量。常量是指在程序执行中不变的量,常量分为:整型常数、实型常数、字符常量、字符串常量。整型数据:进制间的转换3.11.二、八、十六进制转为十进制3.12.十进制转为二、八、十六进制规则:整数部分:基数除取余,逆序排列小数部分:基数乘取整,顺序排列3.13.二进制转为八、十六进制规则:三(四)合一,按序相拼(整数部分,从右向左取,小数部分从左向右3.14.八、十六进制转为二进制3.2整型数据在内存中的存放形式1字节=8位,1Byte=8bit字长:指CPU能同时处理的二进制位数。由CPU的型号而定。如:16位微机的字长就是16位或2字节。1GB=1024MB,1MB=1024KB,1KB=1024B的最小单位。如:50000000000000101二字节能存放的最大数是:327670111111111111111对带符号数,最高位是符号位,用0表示正,用1表示负。3.22.负整数在内存中用“补码”形式存放。取补码的步骤:(1)忽略负号,求出原码。(2)将原码按位取反(0、1(3)在第二步的基础上加如:取-5的补码。(1)0000000000000101(2)1111111111111010(3)1111111111111011将补码转换成相应的整数的步骤:(1)将补码按位取反加1。(2)将步骤1得到的二进制数转换成十进制数,然后加上负号即可。例如:1000000000000000按位取反加10111111111111111+11000000000000000=转换成十进制:1×215=
32768加负号:-32768几个特殊的带符号整数:1000000000000000-3276832767-13.23.无符号整数:只有正整数,没有负整数,最高位不表示符号位,每一位均参与转换。二进制带符号整数无符号整数-1655351000000000000000-3276832768例2-12:若有:inta=-1;unsignedb=65535;则输出结果是:-1,65535,-1,65535数据益出问题:例2-13:若有inta=32767;则a=a+1的结果是:-32768例2-14:若有unsignedb=65536;则b的值是:0+1100000000000000将100000000000000按照带符号数转为十进制为-32768+1+11000000000000000065536unsignedb=655536;而b属于无符号整型,在内存中只占两字节,所以只能包括16位。标准C没有具体要求规定各类型数据所占内存的字节数,现以这次考试标准viusalc++6.0为例,说明各类型变量所占的位数。类型所占位数所占字节数类型所占位数所占字节数short162unsigned int324int324unsigned long324long324float324unsigned short162double6483.3实型数据(浮点数)3.31.实型常量(1)小数形式:由数字和小数点组成,必须有小数点,小数点的某一侧可以没有数字。如:.23,123.876,123.(2)指数形式:用“e”或“E”后接一个整数,表示以10为底的幂数。注意:“e”或“E”之前之后必须有数字,且之后的数字必须是整数。他们和前后的数字之间不能有空格。例如:例-15下列合法的常量是(。A.-32169 B.0128 例-16下列合法的实型常量是( 。(A)0Xff (B)124E (C)1.23E5.0 (D)3.E2 (E)1.25E+2 (F).23e+023.32.实型变量单精度型float占4字节双精度型double占8字节长双精度longdouble占字节(较少用)4.表达式与运算符4.1算术运算符及其表达式:+ - * / %注意:(1)%两边必须是整型数据。12.0%3表达式是错误的。(2)求余(%)的方法是:忽略符号,求出余数,再将所得余数的符号定为与被除数相同。例如:17%3结果是:217%-3结果是:2,-17%3结果是:-2,-17%-3结果是:-24.2强制类型转换注意:类型名(表达式)这种形式是C++的强制类型表达方式。5.赋值运算符及其表达式5.1.赋值运算符=格式:变量名=表达式功能:将表达式的值赋给左边的变量。注:(1)赋值运算符左边只能是一个变量,不能是常量,也不能是表达式。是非法的表达式都是合法的表达式都是合法的表达式(2)实型数据赋给整型变量时,小数部分被舍去,整型数据赋给实型变量时,系统自动将整型数据转换为实型数据。例如:floata;intb;表达式a=10%3的值是1.0表达式b=a=10%3的值是15.2.复合赋值运算符及其表达式:+=-= *= /= &= |= ^= >>=<<=例如:a+=3相当于a=a+3,a/=b+4相当a/=(b+4)或a=a/(b+4)例:若a=12,则执行表达式a+=a-=a+a后a的值是多少?的值是12*/a+=a-=24/*a的值是12*/a+=a=a-24/*a的值是12*/a+=a=-12/*a的值是12*//*a的值是-12*/a=a+(-12)/*a的值是-12*/的值是-24*/5.3.自增、自减运算符及其表达式--注意:(1)只能用于变量,不能用于常量和表达式。如:6++(a+b)--都是错误的。(2)当它们用于变量名前时,表达式的值为变量的值加一或减一。当位于变量名后时,表达式的值为变量原来的值。不论位于变量名前还是变量名后,只要进行了自增、自减运算,变量的值都会在原来的基础上加1或减如:a=3则a++表达式的值是3运算之后变量的值是4a=3则++a表达式的值是4之后变量的值是4a=3则a--表达式的值是3之后变量的值是2a=3则--a表达式的值是2之后变量的值是2(3)口诀:j=i++;这个表达式是先引用后增值。即:先把i的初始值给变量j,然后i再自加j=++i;这歌表达式是先增值后引用。即:i先自加1,然后再将我们自加后的值赋值给变量j。但是记住它们是一起执行的,就是说:例如j=i++先引用后增值实际上是一起执行的,它们之间不存在先后关系,我们只是位了好记才用到了上面的方法。老师在上课的时候先不要说,但是你们必须知道。j=i--,j=--i和上面j=i++,j=++i的方法是一样。5.4逗号运算符及其表达式1.格式:表达式1,表达式2,…,表达式n注意:1.逗号表达式的值是整个逗号表达式中最后一个表达式的值。2.求值顺序是从左到右依次求解。例如:a=(3,b=1)的值是1运算结束后a的值是b的值是1。四.相关试题1.2008年4月相关试题(11)以下叙述中正确的是A)C程序中的注释只能出现在程序的开始位置和语句的后面B)C程序书写格式严格,要求一行内只能写一个语句C)C程序书写格式自由,一个语句可以写在多行上D)用C语言编写的程序只能放在一个程序文件中(12)以下选项中不合法的标识符是A)printB)FORC)&aD)_00(13)以下选项中不属于字符常量的是(14)设变量已正确定义并赋值,以下正确的表达式是A)x=y*5=x+zB)int(15.8%5)C)x=y+z+5,++yD)x=25%5.0填空()设变量已正确定义为整型,则表达式ni2,i,i的值为【。2.2007年9月相关试题语言源程序名的后缀是B).C C).obj D).cp(12)可在C程序中用作用户标识符的一组标识符是A)and B)Date C)Hi D)case_2007 Big1(13)以下选项中,合法的一组C语言数值常量是A)028 B)12. C).177 D)0x8A.5e-3 4e1.5 10,0004.5e0 0abc 3.e5(14)以下叙述中正确的是A)C语言程序将从源程序中第一个函数开始执行B)可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行C)C语言规定必须用main作为主函数名,程序将从此开始执行,在此结束D)main可作为用户标识符,用以命名任意一个函数作为主函数(16)以下关于long、int和short类型数据占用内存大小的叙述中正确的是A)均占4个字节 B)根据数据的大小来决定所占内存的字节数C)由用户自己定义 D)由C语言编译系统决定(17)若变量均已正确定义并赋值,以下合法的C语言赋值语句是3.2007年4月相关考题(12)下列叙述中错误的是(D)A)计算机不能直接执行用C语言编写的源程序B)C程序经C编译程序编译后,生成后缀为.obj的文件是一个二进制文件C)后缀为.obj的文件,经连接程序生成后缀为.exe的文件是一个二进制文件D)后缀为.obj和.exe的二进制文件都可以直接运行C语言规定的用户标识符命名规则,不能出现在标识符中的是(B)A)大写字母 B)连接符 D)下划线(14)以下叙述中错误的是(C)A)C语言是一种结构化程序设计语言B)结构化程序有顺序、分支、循环三种基本结构组成C)使用三种基本结构构成的程序只能解决简单问题D)结构化程序设计提倡模块化的设计方法(15)对于一个正常运行的C程序,以下叙述中正确的是(A)A)程序的执行总是从main函数开始,在main函数结束B)程序的执行总是从程序的第一个函数开始,在main函数结束C)程序的执行总是从main函数开始,在程序的最后一个函数中结束D)程序的执行总是从程序的第一个函数开始,在程序的最后一个函数中结束(19)有以下程序,其中%u表示按无符号整数输出(B)main(){unsignedintx=0xFFFF; /*x的初值为十六进制数*/printf(“%u\n”,x);}/*注意:x是占两个字节*/程序运行后的输出结果是A)-1 B)65535 第三章顺序结构一.教学重点、难点知识点所占分值考核几率专家点评C语句分类0-130%简单识记字符输出函数putchar()1-270%难度适中,重点掌握字符输入函数getchar()1-270%难度适中,重点掌握格式输入函数printf()3-4100%握格式输出函数scanf()3-4100%握二.教学内容1.语句C语句共分为5类:1.1控制语句1.2函数调用语句:pint“this isactatnt;1.3表达式语句每一个合法的表达式后加上分号(就构成了表达式语句。++a;i+j;语句和表达式的区别:表达式有唯一确定的值,而语句没有值。1.4赋值语句格式:赋值表达式;i=1,j=2是逗号表达式i=1;j=2;是两条赋值语句i++;i--;++i;--i;都是赋值语句等价于i=i+1;或i=i-1;1.5空语句:只有一个单独的分号构成的语句。如:;就是一条空语句。1.6复合语句:用一对{}将若干语句括起来构成一条复合语句。2.输入输出语句在使用库函数时必须先用预编译命令#include<头文件名>或#include“头文件名”将相应的头文件包含到源程序中。如:#include<stdio.h>2.1.printf()函数功能:按格式控制指定的格式输出数据。注意:格式控制包括以%开头的“格式说明符”和原样输出的普通字符。输出结果是:a=30,a+b=11(1)d格式%d:按实际长度输出十进制整数。%md:输出占m列,若小于m列,左边补空格,若大于m列,按实际输出。%-md:输出占m列,若小于m列,右边补空格,若大于m列,按实际输出。%ld:输出长整型数据,输入输出长整型数据时必须用该格式。例如:printf(“%d,%6d,%-6d,%ld”,386,1234,3456,12345L);输出结果:386, ,12345printf(“%2d”,12345);输出结果:12345(2)u格式%u:以无符号十进制形式输出整数。printf(“%u”,-1);65535ptintf(“%u”,-32768);32768(3)o格式%o:以无符号八进制形式输出整数,不输出前导符printf(“%d,%o”,-1,-1);-1,177777(4)x或X格式%x或%X以无符号十六进制形式输出整数。不输出前导符0x或写,大写对大写。printf(“%d,%x,%X,%x”,-1,-1,0xabc,0XAbc);-1,ffff,ABC,abc注:若要输出十六进制和八进制的前导符,则要用%#o和%#x、%#X格式。0177777,0xffff,0XABC(5)c格式%c用来输出一个字符,不输出单引号定界符。%c和%d可以相互转换。a,97printf(“%c,%d”,100,100);d,100(6)s格式用来输出一个字符串,不输出双引号和字符串结束符。%s:输出字符串的有效字符。printf(“%s”,”china\0yunnan”);china%ms:输出占m列,若小于m列,左边补空格,大于m列,按实际输出。swfc,swfc,swfc%m.ns:输出占m列,只输出字符串的左n个字符到m列的右端。如:printf(“%7.5s”,”yunnan”);yunna(7)f格式:按小数形式输出实型数据。%f:默认输出6位小数。如:printf(“%f,%f”,543.12,5.4312e+2);543.120000,543.120000%m.nf:输出占m列,其中有n位小数。若超过m列,确保n位小数后按实际输出。注意四舍五入问题。如:printf(“%7.3f,%-7.3f,%4.2f”,3.1415726,3.1415926,314.5926);3.142,3.142 ,314.59(8)e格式以指数形式输出一个实数。小数点前只有一位非零数,5位小数,3位指数。如:printf(“%e,%e”,123.4,123.45e-7);234000e+002,1.234500e-005(9)g格式自动在%f和%e中选择较短的一种输出,对于小数部分不输出无意义的如:printf(“%g,%g”,123.45,123.45e-2);123.45,1.2345printf(“%g”,123000000.0);23e+08小结:(1)%%表示输出一个%。如:printf(“%%d=%d”,10,10);%d=10(2)除了x,e,g大小写均可外,其它都只能小写。如:printf(“%d=%D”,20,20);20=%D(3)输出格式说明符所能操作的数据类型必须与输出项的类型一致。如:printf(“%d”,1.234);/*出错*/2.2.scanf()函数注意:(1)可指定数据所占的列数,输入后由系统自动截取相应的位数。如:scanf(“%3d%2d”,&a,&b);若输入:3863018则:a的值是:386b的值是:30若输入:3863a的值是:386b的值是:3scanf(“%3c%2d”,&ch,&c);若输入:3863018则:ch的值是:’3’b的值是:30(2)%*md:表示跳过m列不读。如:scanf(“%*3d%3d%4d”,&a,&b);若输入:123456则:a的值是:456b的值是:原来的值。(3)不能在scanf()函数中指定输入数据的小数位数。如:scanf(“%7.5f”,&a);/*出错*/在scanf()函数中,输入时普通字符原样输入。如:scanf(“a=%d,b=%d”,&a,&b);若要给a赋值5,b赋值10,正确的输入是:a=5,b=10scanf(“%d*,%d#,%d”,&a,&b,&c);若要让a,b,c分别得到1,2,3,正确的输入是:1*,2#,3<回车>若两个格式说明符之间没有其它字符,则在输入数据时,两数据之间要用回车或空格分隔,回车或空格可以是多个。但是,%c格式除外。如:scanf(“%d%d”,&a,&b);若想让a的值为5,b的值为10。则正确的输入是:5空格10<回车>或5<回车>10<回车>或5空格空格空格10<回车>(6)多个%c格式之间没有其它字符,仍然不能用回车或空格来分隔。如:scanf(“%c%c%c”,&a,&b,&c);若输入:a空格b空格c<回车>a的值是’a’,b的值是空格,c的值是’b’。(7)格式说明符所能操作的数据类型必须与对应变量的类型相同。如:inta;scanf(“%f”,&a);/*出错*/总结:1.普通字符原样输入,原样输出。2.对于%d格式,指定宽度小于输出宽度,原样输出。3.%#o,%#x,%#X表示要输出八进制的前导符数字0,和十六进制的前导符0x,0X。4.%x,%X格式,小写对小写,大写对大写。5.%*md:表示跳过相应的输入项。6.注意进制间的转换,以及无符号数和带符号数之间的转换。7.在scanf()函数中,给double类型变量输入数据时,应该使用%lf类型说明符,而输出时,可以用%lf,也可以用%lf。三.试题分析1.2008年4月试题分析(16)有以下程序段charch;intk;ch='a';k=12;printf("%c,%d,",ch,ch,k);printf("k=%d\n",k);已知字符a的ASCll十进制代码为97,则执行上述程序段后输出结果是A)因变量类型与格式描述符的类型不匹配输出无定值B)输出项与格式描述符个数不符,输出为零值或不定值C)a,97,12k=12D)a,97,k=122.2007年9月试题分析(15)若在定义语句:int a,b,c,*p=&c;之后,接着执行以下选项中的语句,则能正确执行的语句是(18)有以下程序段int j; y; scanf("%2d%f%s",&j,name);当执行上述程序段,从键盘上输入55566 7777abc后,y的值为A)55566.0 B)566.0 C)7777.0 D)566777.0填空(6)执行以下程序时输入1234567<CR>,则输出结果是【6】。main(){ }3.2007年4月试题分析语句为变量a1和赋数值10和和c2赋字符X和的输入形式中正确的是(注:□代表空格字符)(D)A)10□X□20□Y〈回车〉 B)10□X20□Y〈回车〉C)10□X〈回车〉 D)10X〈回车〉填空(6)执行以下程序后的输出结果是 。main(){inta=10;}第四章 选择结构一.教学重点、难点知识点所占分值考核几率专家点评关系运算符及优先次序0-140%简单识记关系表达式0-150%逻辑运算符及优先级1-250%简单识记逻辑表达式1-250%if语句的几种形式1-2100%简单识记if语句的嵌套1-2100%难度适中,重点掌握条件运算符0-1100%难度适中,重点掌握switch语句2-4100%语句标号0-110%偏难,不是重点goto1-210%简单识记二.教学内容1.关系运算与逻辑运算1.1逻辑值真(非零值) 假(零)1.2关系运算符及其表达式< > !=关系运算符优先级别低于算术运算符,高于赋值运算符。(< > 如:a>b+c等价于a>(b+c)a==b<c等价于a==(b<c)a=b<c等价于a=(b<c)44表达式的值为“真。4=4表达式不合法关系表达式的值只有1和,其中1表示“真,0表示“假。1.3逻辑运算符及其表达式&&逻辑“与”||逻辑“或”!逻辑“非”》&&》||运算规则:逻辑&&:遇假则假逻辑||:遇真则真例如:3>4结果是:03&&4结果是:1!3&&4结果是:00||3结果是:1则不再进行&&右边表达式的运算,且将整个&&表达式的值定为0;在求解逻0式的运算,且将整个逻辑||表达式的值定为2.if语句2.1.if语句格式:1) 语句语句else语句称为:全if 单if注意:(1)if后的表达式必须用()括起,else后没有表达式。(2)if和else都只能控制紧跟它的一条语句,若要控制多条语句,必须用一对{}括起构成一条复合语句。2.2执行方式:2.21f语句的执行方式首先判断表达式的值是否“真“真,则执行语句部分如果表达式的值“假“跳过语句部分执行if语句后面的其它语句。2.22fese语句的执行方式:首先判断表达式的值是否为“真,若“真,则执行语句部分。如果表达式的值为“假,则执行e语句后面的语句。例1:main(){intm=5;if(m++>5)printf(“m=%d”,m);elseprintf(“m=%d”,m--);}例2:main(){intm=5;if(++m>5)printf(“m=%d”,m);elseprintf(“m=%d\n”,m--);}2.3if语句的嵌套if(表达式if(表达式语句语句elseif(表达式语句语句else总是与前面最近的且未配对的if语句配对,组成一对if-else语句。if(表达式if(表达式语句elseif(表达式语句语句第一个else语句有的同学会把它误以为和第一个if配对,但是实际的情况是和第二个if语句配对,即:if(表达式if(表达式2) 语句elseif(表达式语句语句例1.请分析下列程序的输出结果。main(){ints,t,a,b;sanf(“%d%d”,&a,&b);s=1;t=1;if(a>0)s=s+1;if(a>b)t=s+1;elseif(a==b)t=s;elset=2*s;printf(“%d\n”,t);}若运行时输入5 10回车,则程序的执行结果是?main(){ints,t,a,b;sanf(“%d%d”,&a,&b);s=1;t=1;if(a>0){s=s+1;if(a>b)t=s+1;}elseif(a==b)t=s;elset=2*s;printf(“%d\n”,t);}若运行时输入5 10回车,则输出结果是?例2.分析下列程序的输出结果main(){inta=4,b=3,c=5,t=0;if(a<b)t=a;a=b;b=t;if(a<c)t=a;a=c;c=t;printf(“%d%d\n”,a,b,c);}main(){inta=4,b=3,c=5,t=0;if(a<b){t=a;a=b;b=t;}if(a<c){t=a;a=c;c=t;}printf(“%d%d\n”,a,b,c);}联想交换的思想:若要交换a和b的值,通常的做法是:{t=a;a=b;b=t;}3.条件运算符和条件表达式条件运算符:?:是唯一一个三目运算符。优先级别高于赋值运算,结合方向自右向左。格式:表达式1?表达式2:表达式3执行方式:先求“表达式式的值。例如:max=a>b?a:b;相当于:if(a>b)max=a;elsea>b?a:c>d?c:d相当于a>b?a:(c>d?c:d)的值不要求具有相同的类型,最后结果的类型为表达式3中较高类型的一种。如:(x=6)>(y=5)?1:1.5表达式的值是1.0而不是4.switch语句格式:switch(表达式){case 常量表达式1:语句常量表达式…常量表达式n:语句:语句}说明:(1)都是关键字。花括号里面的语句叫做switch语句体。Switch语句体中可以没有语句和default部分。(2)Switch语句的圆括号中表达式的值必须是整型或是字符型,不能为实型。case后的表达式可以是求得整型量的常量表达式,但是常量表达式中不能含有变量。(3)执行SwitchSwitch后圆括号的表达式的值,然后将这个值与语句体中case后的常量表达式的值相比较,如果某个常量表达式的值与之相等,则执行该case后的语句块;如果没有任何一个常量表达式的值与之相等,则执行default后的语句块。(4)在执行的时候如果遇到break语句,则跳出switch语句。如果执行完一个case或者default语句块后没有遇到break,则继续顺序往下执行,知道遇到语句或者语句体被执行完毕为止。(5)default最多只能有一个,通常出现在switch语句的最后部分,但也可以出现在case之间或所有的case之前。四.试题分析1.2008年4月试题分析:(17)已知字母A的ASCⅡ代码值为65,若变量kk为char型,以下不能正确判断出kk中的值为大写字母的表达式是kk>='A'&&kk<='Z'B)!(kk>='A'||kk<='Z')C)(kk+32)>='a'&&(kk+32)<='z'D)isalpha(kk)&&(kk<91)(18)当变量c的值不为2、4、6时,值也为“真”的表达式是A)(c==2)||(c==4)||(c==6)B)(c>=2&&c<=6)||(c!=3)||(c!=5)C)(c>=2&&c<=6)&&!(c%2)D)(c>=2&&c<=6)&&(c%2!=1)(19)若变量已正确定义,有以下程序段inta=3,b=5,c=7;if(a>b)a=b;c=a;if(c!=a)c=b;printf("%d,%d,%d\n",a,b,c);其输出结果是A)程序段有语法错B)3,5,3C)3,5,5D)3,5,7(20)有以下程序#include<stdio.h>main(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y){case0:a++;case1:b++;}case2:a++;b++;case3:a++;b++;}printf(“a=%d,b=%d\n”,a,b);}程序的运行结果是A)a=1,b=0B)a=2,b=2C)a=1,b=1D)a=2,b=12.2007年9月试题分析(20)有以下计算公式xx
(x0)xyx
(x0)若程序前面已在命令行中包含math.h文件,不能够正确计算上述公式的程序段是A)if(x>=0)y=sqrt(x); B)y=sqrt(x);elsey=sqrt(-x); if(x<0)y=sqrt(-x);C)if(x>=0)y=sqrt(x); D)y=sqrt(x>=0?x:-x);if(x<0)y=sqrt(-x);(21)设有条件表达式:(EXP)?i++:j-- ,则以下表达式中与(EXP)完全等价的是,程序前面已在命令行中包含ctype.h于判断c中的字符是否为大写字母的表达式是C)'A'<=c&&cD)c<=('z'-32)&&('a'-32)<=c(7)以下程序的功能是:输出a、b、c三个变量中的最小值。请填空。#include<stdio.h>main(){ scanf("%d%d%d",&a,&b,&c);t1=a<b? 【7】;t2=c<t1?【8】;printf("%d\n",t2);}3.2007年4月试题分析(20)设变量x和y均已正确定义并赋值,以下if语句中,在编译时将产生错误信息的是(C)C)if(x>y)- D)if(y<0){;}elsey++; elsex++;(21)以下选项中,当x为大于1的奇数时,值为0的表达式()(22)以下叙述中正确的是(C)A)break语句只能用于switch语句体中B)continue语句的作用是:使程序的执行流程跳出包含它的所有循环C)break语句只能用在循环体内和switch语句体内D)在循环体内使用break语句和continue语句的作用相同(23)有以下程序()main(){intk=5,n=0;do{switch(k)default;n=0;k--;case2:case4:n+=2;k--;break;}printf(“%d”,n);}while(k>0&&n<5);}程序运行后的输出结果是A)235 B)0235 C)02356 D)2356第五章 循环结构一.教学重点、难点知识点所占分值考核几率专家点评while语句2-3100%重点理解重点掌握do...while语句2-3100%重点理解重点掌握for语句5-7100%重点理解重点掌握循环嵌套4-6100%重点理解重点掌握循环比较0-120%简单识记break语句2-370%难度适中,重点掌握continue语句2-350%难度适中,重点掌握C语言的章节中,老师在教学中一定要把它它当做重点中的重点来抓!二.教学内容while语句格式: while(表达式){注意:
循环体语句}while是C语言的关键字。1.2.while后必须有小括号将表达式括起,里面的表达式是C语言中任意的表达循环。1.3.while语句也只能控制紧跟它的一条语句。若需要控制多条语句,必须用{}括起,构成一条复合语句。1.4.圆括号内的表达式不能省略。循环体中的可以由一条空语句构成,表示循环例如:分析下列程序的输出结果。1.5.执行过程:(1)计算圆括号中表达式的值。若为非0则执行循环体语句,若为0则跳出循环。(2)执行完循环体语句后重复过程(。main(){inti=1,sum=0;while(i<=100){i++;}printf(“sum=%d”,sum);}这是学习C语言基础循环的最好的练习,老师让学生练习的时候可以把i控制在以内,让学生知道什么是循环.d0-while语句格式: do循环体hi(表达式;注意:2.1.do是C语言的关键字,需要和一起搭配使用。2.2.while后必须有小括号将表达式括起,里面的表达式是C语言中任意的表达循环。2.3.while语句也只能控制紧跟它的一条语句。若需要控制多条语句,必须用{}括起,构成一条复合语句。2.4.圆括号内的表达式不能省略。循环体中的可以由一条空语句构成,表示循环体部分不做任何的操作。如:语句*/循环结构整个语法上也是C少,它同样表示语句的结束。2.6.执行过程:(1)执行循环体语句。(2)计算圆括号中表达式的值。若为非0则重复(否则跳出循环。for语句格式:for(表达式1;表达式2;表达式循环体3.1.for是C语言的关键字.达式1的作用是赋初值;表达式2的作用是控制循环;表达式3的作用是赋值。3.3.for语句也只能控制紧跟它的一条语句。若需要控制多条语句,必须用{}括起,构成一条复合语句。3.4.表达式均可以省略,若省略表达式2,则认为表达式2的值始终为真。而两个分号绝不能省。3.5执行过程:(1)计算表达式()计算表达式,若其值为非0,转步骤(若其值为0则转步骤(;(3)执行一次for循环体。(4)计算表达式,转步骤(。(5)结束循环,执行for语句后面的语句。4.循环结构的嵌套在一个循环体内,又包含另一个循环。三种循环语句可以相互嵌套。main(){inti,j;for(j=1;j<4;j++)printf(“\ni=%d,j=%d”,i,j);for(j=1;j<4;j++)printf(“\ni=%d,j=%d”,i,j);}for(i=1;;i++)printf(“%d”,i);/*表达式2的值始终为真,这是死循环*/5.break和continue语句break语句用于结束循环或switch结构。continue语句用于结束本次循环,跳过循环中continue后尚未执行的语句,继续进行下一次循环条件的判断。注意:break语句只能控制直接包含它的switch结构或循环。continue语句只能控制直接包含它的循环。例main(){inti,s1=0,s2=0,s3=0;for(i=1;i<=10;i++){switch(i%5){case1:s1++;case2:s2++;break;case3:s3++;contiune;}}printf(“%d,%d,%d”,s1,s2,s3);}例把之间能被4main(){inti;for(i=1;i<=100;i++){if(i%4!=0)continue;printf(”%3d”,i);}}三.试题分析1.2008年4月试题分析(21)有以下程序#include<stdio.h>main(){intx=8;for(;x>0;x--){if(x%3){printf(“%d,”,x--);continue;}printf(“%d,”,--x);}}程序的运行结果是A)7,4,2B)8,7,5,2C)9,7,6,4D)8,5,4,2(22)以下不构成无限循环的语句或者语句组是A)n=0;B)n=0;do{++n;}while(n<=0);while(1){n++;}C)n=10;D)for(n=0,i=1;;i++)n+=i;while(n);{n--;}(31)有以下程序#include<stdio.h>main(){ints[12]={1,2,3,4,4,3,2,1,1,1,2,3},c[5]={0},i;for(i=0;i<12;i++)c[s[i]]++;for(i=1;i<5;i++)printf(“%d”,c[i]);printf(“\n”);}程序的运行结果是A)1234B)2344C)4332D)1123(32)有以下程序#include<stdio.h>voidfun(int*s,intnl,intn2){inti,j,t;i=nl;j=n2;while(i<j){t=s[i];s[i]=s[j];s[j]=t;i++;j--;}}main(){inta[10]={1,2,3,4,5,6,7,8,9,0},k;fun(a,0,3);fun(a,4,9);fun(a,0,9);for(k=0;k<10;k++)printf(“%d”,a[k]);printf(“\n”);}程序运行的结果是A)0987654321B)4321098765C)5678901234D)0987651234(33)有以下程序#include<stdio.h>#include<string.h>voidfun(char*s[],intn){char*t;inti,j;for(i=0;i<n-1;i++)if(strlen(s[i])>strlen(s[j])){t=s[i];s[i]=s[j];s[j]=t;}}main(){char*ss[]={“bcc”,”bbcc”,”xy”,”aaaacc”,”aabcc”};fun(ss,5);printf(“%s,%s\n”,ss[0],ss[4]);}程序的运行结果是A)xy,aaaaccB)aaaacc,xyC)bcc,aabccD)aabcc,bcc(35)有以下程序#include<stdio.h>voidfun(char*a,char*b){while(*a==’*’)a++;while(*b=*a){b++;a++;}}main(){char*s=”****a*b****”,t[80];fun(s,t);puts(t);}程序的运行结果是A)*****a*bB)a*bC)a*b****D)()若有定义:int;,以下程序段的输出结果是【。for(k=2;k<6;k++,k++)printf(“##%d”,k);(9以下程序段的定义语句中[1的初值【程序运行后输出的内容【1。#include<stdio.h>main(){intx[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16},*p[4],i;for(i=0;i<4;i++){p[i]=&x[2*i+1];printf(“%d”,p[i][0]);}printf(“\n”);}2.2007年9月试题分析(19)若变量已正确定义,有以下程序段i=0;do printf("%d,",i); while(i++);printf("%d\n",i);其输出结果是A)0,0 B)0,1 C)1,1 D)程序进入无限循环(22)有以下程序main(){ ; }程序的运行结果是A)741 B)963 C)852 D)875421(24)有以下程序main(){ printf("%d\n",m);}程序的运行结果是A)0 B)1 C)2 D)3(34)有以下程序void *a,n)/*函数的功能是将a所指数组元素从大到小排序*/{ t,i,for(i=0;i<n-1;i++)for(j=i+1;j<n;j++)if(a[i]<a[j]) { t=a[i];a[i]=a[j];a[j]=t; }}main(){ fun(c+4,6);for(i=0;i<10;i++) printf("%d,",c[i]);printf("\n");}程序的运行结果是(8)以下程序的输出结果是【9】。#include <stdio.h>main(){ }}(9)有以下程序段,且变量已正确定义和赋值for(s=1.0,k=1;k<=n;k++) s=s+1.0/(k*(k+1));printf("s=%f\n\n",s);请填空,使下面程序段的功能与之完全相同s=1.0;k=1;) { ; }printf("s=%f\n\n",s);(10)以下程序的输出结果是【12】。main(){ i;for(i='a';i<'f';i++,i++) printf("%c",i-'a'+'A');printf("\n");}3.2007年4月试题分析(22)以下叙述中正确的是(C)A)break语句只能用于switch语句体中B)continue语句的作用是:使程序的执行流程跳出包含它的所有循环C)break语句只能用在循环体内和switch语句体内D)在循环体内使用break语句和continue语句的作用相同(23)有以下程序()main(){intk=5,n=0;do{switch(k)default;n=0;k--;case2:case4:n+=2;k--;break;}printf(“%d”,n);}while(k>0&&n<5);}程序运行后的输出结果是A)235 B)0235 C)02356 D)2356(24)有以下程序mian(){inti,j;{for(j=i;j<4;j++)printf(“%d*%d=%d“,i,j,i*j);printf(“\n”);}}程序运行后的输出结果是()B)2*1=22*2=4 2*2=42*3=6C)1*1=1 1*1=1}(7)当执行以下程序时,输入1234567890<回车>,则其中while循环体将执行 次。#include<stdio.h>main(){charch;Whi(hgtha()’0’)pint(#);}一.教学内容
字符型数据 位运算1.字符型数据1.1字符常量:用一对单引号括起的一个字符。例如:’A’,’a’,’6’是合法的字符型常量。”a”,’ab’,A,1.2转义字符常量:必须以一个反斜杠“\”开头.常见的转义字符见表5-1。\n:回车换行 \t:横向跳格\v:竖向跳格\b:退格 \\:\ 1.3 \ddd:ddd表示最多可以有三位8进制数。1.4 \xhh:hh表示最多可以有二位16进制数。注意:三位8进制数不一定以0开头,只要是0~7之间的数字即可。例:下列字符常量中合法的是()A.\027 B.’\028’ D.’\0x1f’E.’\1234’ H.’123’I.’\12’ K.’\xf’例:下列字符常量中合法的是()A.’/’ ’’ D.’”’1.5字符型变量关键字:char,字符型变量在内存中占1字节。例:chara=’5’;‘a’字符的ASCII码值是97字符的ASCII码值是65同一字母的大小写之差是32,那么我们要把小写字母变成大写字母就相应的字母减去32即可,同样大写字母加上32后就变成了与其相对应的小写字母。数字’0’~’9’对应的ASCII码值是48~57。2.字符数据的输入输出2.1.putchar()和printf()格式:putchar(字符), printf(“%c”,ch);功能:输出一个字符,但不输出单引号。其中“字符”可以是一切合法的字符型或整型数据。它会自动将整型数据转换为相应的字符输出。aputha(65;A pint(“”,65);Aharh=‘g;ptha(h输出:gcharch=‘g’;printf(“%c”,ch);输出:g2.2.getchar()格式:getchar()功能:接收一个从键盘输入的字符。注意:1.它可以接收从键盘上输入的任何字符,包括回车符、空格符等。2.任何输入都是在回车后方按顺序送入内存中即才被函数接收如hara,b;=gtha(b=gtha(;若输入:1<回车>则变量a的值为字符‘1’变量b的值为回车符。2.3.scanf都是合法有效的字符,都将被读入并赋值给相应的变量。3.位运算(详细的见课本页)二.试题分析1.2008年试题分析(13)以下选项中不属于字符常量的是(16)有以下程序段charch;intk;ch='a';k=12;printf("%c,%d,",ch,ch,k);printf("k=%d\n",k);已知字符a的ASCll十进制代码为97,则执行上述程序段后输出结果是A)因变量类型与格式描述符的类型不匹配输出无定值B)输出项与格式描述符个数不符,输出为零值或不定值C)a,97,12k=12D)a,97,k=12(17)已知字母A的ASCⅡ代码值为65,若变量kk为char型,以下不能正确判断出kk中的值为大写字母的表达式是A)kk>='A'&&kk<='Z'B)!(kk>='A'‖kk<='Z')C)(kk+32)>='a'&&(kk+32)<='z'D)isalpha(kk)&&(kk<91)示的形式是11110000。若要求将a的高4位取反,低4位不变,所要执行的运算是A)a^bB)a|bC)a&bD)a<<42.2007年9月试题分析,程序前面已在命令行中包含ctype.h于判断c中的字符是否为大写字母的表达式是C)'A'<=c&&cD)c<=('z'-32)&&('a'-32)<=cASCII代码值是c1的值是'D'。执行语句printf("%d,%d",c1,c2-2);后,输出结果是B)A,68 C)65,66 D)65,68main(){ i;for(i='a';i<'f';i++,i++) printf("%c",i-'a'+'A');printf("\n");}3.2007年4月试题分析(25)以下合法的字符型常量是()(27)已知大写字母A的ASCII码是aASCII码是将变量c中大写字母转换为对应小写字母的语句是()(7)当执行以下程序时,输入1234567890<回车>,则其中while循环体将执行 次。#include<stdio.h>main(){charch;Whi(hgtha()’0’)pint(#);}第六章 函数一.教学重点、难点知识点所占分值考核几率专家点评库函数1-260%简单,重点识记知识点函数的定义0-150%简单,重点识记知识点形参和实参及函数调用2-380%难度适中,重点理解重点掌握函数调用的一般形式和调用方式2-390%偏难,重点掌握重点理解函数的说明及其位置0-160%简单识记函数的嵌套调用1-390%偏难,重点掌握重点理解函数的递归调用1-280%偏难,重点掌握重点理解二.教学内容1.函数的定义:
函数是C程序的基本单位。函数返回值的类型名 函数(类型名1 形参名1类型名2 形参名){说明部分语句部分}说明:1.1一个C程序可以由一个或多个源程序文件组成。一个源程序文件可以由一个或多个函数组成。C程序>源程序>函数1.2函数返回值的类型名缺省时,返回值类型默认为int型,而不是没有返回值。若没有返回值的时候应该为void.1.3主函数的函数名必须是main。1.4函数后面的括号是必不可少的,括号中的为形式参数列表。形式参数用于数据的传递,同样是用户标识符。在同一函数内形式参数必须是唯一的。如果函数不带形式参数,则形式参数列表可以省略。1.5函数体部分的一对花括号必不可少。1.6函数之间的关系是相互平行、独立的,不是相互隶属的。1.7函数不能嵌套定义,不能在一个函数体内定义另一个函数。1.8函数可以相互调用,但不能调用main()函数。1.9函数的分类:1.从形式分:无参函数:如:main() getchar()带参函数:如:strlen(“abc”)2.从用户使用的角度分用户自定义函数:doubleadd(inta,intb){函数体}1.10函数的定义的比较类型名函数名(类型名形参1,类型名形参2,…)/*函数首部*/{函数体}intmin(intintintmin(x,y){函数体} intx,y;/*现代方式*/ {函数体}/*传统方式*例如:floatfun(intx,intfloatfun(x,y){ } intint{ }以上函数的定义是合法的。intfun(intx,y){ … }intfun(intx;int{ … }intfun(intx,y)int{ … }intfun(x,y){intx,y;…}intfun(x,y)int{…}以上函数的定义均是非法的。2.函数的参数和函数值2.1.函数的参数可以分为:形式参数和实际参数。形参:函数定义时函数名后小括号内的参数。实参:函数调用时函数名后小括号内的参数。注意:(1)形参只有在该函数被调用时才占内存单元,即该变量才可用;函数调用结束时形参所占的内存单元被释放,即不可用。(2)实参和形参的数据类型应该对应相同。否则,必须将函数的定义放在函数调用之前或在调用之前对函数作原型声明。例如:voidsum(intx,inty)//函数定义,x,y是被调用函数的参数,我们叫它形参{printf(“%d”,x+y);}main(){sum(3,5);//函数调用,这里的3和5是调用函数的参数,我们叫为实参}/*类型对应不相同*/2.2.函数值:函数的返回值即函数值。语句的格式:表达式;或(表达式);功能:将表达式的值作为函数值返回给主调函数,并结束本函数的执行。注意:2.21.函数值应通过语句返回,一个函数中可以有多条语句,只要执行其中任何一条语句,该函数立即结束执行,并将该后表达式的值返回。例如:intmax(inta,intb){a;b;}2.22.函数值的类型保持与函数定义时所指定的类型相同,而与后表达式的值的类型无关。若定义函数时不指定函数的类型,则默认是max(floata,floatb) intmax(floata,floatb){returna/b;} a/b;}例如:voidfun(inta){printf(“%d”,a);}3.函数调用调用格式:函数名(实参)无参调用格式:函数名()clrscr();带参调用格式:函数名(实参列表)3.1调用函数时,函数名必须一致。函数名是唯一区别函数的标志。3.2实参和形参的类型匹配,个数一致,形式上一一对应。3.3一般情况下,函数应该先定义后调用。3.4函数可以直接或者间接调用自己,称为递归调用。例如:voidswap(inta,intb)/*函数定义*/{a=a+b;b=a-b;a=a-b;}main(){inta=2,b=5;swap(a,b);/*函数调用*/printf(“a=%d,b=%d”,a,b);}4.函数的原型声明格式:函数类型 函数名(形参类型1,形参类型2,…); 或函数类型 对上例中的swap函数作原型声明的格式:voidswap(int,int);voidswap(inta,intb);voidswap(intx,inty);注意:若被调函数定义在主调函数之前时,可以不作原型声明。若被调函数定义在主调函数之后,则在调用前应作原型声明。例如:voidswap(inta,intb)/*函数定义*/{a=a+b;b=a-b;a=a-b;}main(){inta=2,b=5;swap(a,b);/*函数调用*/printf(“a=%d,b=%d”,a,b);}main(){inta=2,b=5;voidswap(int,int);/*原型声明*/swap(a,b);/*函数调用*/printf(“a=%d,b=%d”,a,b);}voidswap(inta,intb)/*函数定义*/{a=a+b;b=a-b;a=a-b;}如果在程序文件的开始就对函数作外部原型声明,则在各主调函数中不必再作原型声明。例:voidswap(int,int);/*外部原型申明*/main(){intx=1,y=2;swap(x,y);}voidswap(inta,intb){……}补充:若果形参中有数组,则作原型声明时数组的中括号不能省略。例如:floatfun(doubleb[]){ }可以用以下方式原型声明:floatfun(double[]);floatfun(doublea[]);而以下的声明方式是错误的:floatfun(doubleb);5.函数的嵌套调用和递归调用嵌套调用:在一个函数内调用另一个函数。递归调用:在一个函数内直接或间接调用它本身。若在函数A内直接调用函数AA调用函数B,函数B又调用函数A则称为间接递归调用。例longfun(intk){if(k==1||k==2)1;elsefun(k-1)+fun(k-2);}main(){intn;printf(“%ld”,fun(n));}例intfunc(inta,intb){(a+b);}main(){intx=2,y=5,z=8,r;printf(“%d\n”,r);}6.函数的参数传递C语言中函数参数之间的数据传递仅仅通过实参向形参的单向数据传递,即“值传递“。不能我们不能通过形参的改变来改变实参。总结:(1)数据只能从实参向形参单向传递。(2)到目前为止,函数之多能返回一个值。就是return带回来的值。例如:voidswap(inta1,intb1)/*函数定义*/ voidswap(int*a3,int*b3){ {intt1; intt2;} }{ {inta=2,b=5; inta2=2,b2=5;} }地址值变量10002a10025b1004a11006b110081010101210141016用地址表来讲解这些问题比较好。三.试题分析1.2008年4月试题分析(34)有以下程序#include<stdio.h>intf(int{intif(x==0||x==1)(3);y=x*x-f(x-2);y;}main(){intz=f(3);printf(“%d\n”,z);}程序的运行结果是A)0B)9C)6D)8(12以下程序的输出结果是【1。#include<stdio.h>voidfun(int{if(x/2>0)fun(x/2);printf(“%d”,x);}main(){fun(3);printf(“\n”);}2.2007年9月试题分析(25)若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是A)函数的实参和其对应的形参共占同一存储单元B)形参只是形式上的存在,不占用具体存储单元C)同名的实参和形参占同一存储单元D)函数的形参和实参分别占用不同的存储单元(27)以下叙述中错误的是A)改变函数形参的值,不会改变对应实参的值B)函数可以返回地址值C)可以给指针变量赋一个整数作为地址值D)当在程序的开头包含头文件stdio.h时,可以给指针变量赋NULL3.2007年4月试题分析(8)以下程序的运行结果是 。intk=0;voidfun(int{m+=k;k+=m;printf(“m=%d\n k=%d”,m,k++);}main(){inti=4;fun(i++);printf(“i=%dk=%d\n”,i,k);}第七章 数组一.教学重点、难点知识点所占分值考核几率专家点评一维数组的定义及引用1-380%简单,重点掌握一维数组的初始化1-280%简单,重点掌握二维数组的定义及引用3-490%二维数组的初始化1-290%简单,重点掌握通过赋初值定义二维数组1-260%偏难,重点理解二.教学讲点8.1一维数组的定义和引用8.1.1一维数组的定义格式:类型名数组名[常量表达式];例如:inta[8];注意:1.数组名属于用户标识符,必须满足用户标识符的命名规则。如:intdo[5];float3com[10];chara-b[5];都是非法的定义值必须是大于0正整数,表示数组元素的个数,也成为数组的长度。如:inta[5.3];inta[-4];inta[n];inta[0];{intinta[N];}都是非法的定义#defineM5inta[M];3.同一数组元素在内存中所占的存储空间是依次连续的,每个数组只能有一个下标,数组下标是从0开始,到数组长度减4结束。例如:inta[5];a[0] 8.1.2一维数组元素的引用格式:数组名[下标表达式]如:doublea[10];/*定义数组*/intb=a[4];/*引用数组元素a[4]*/intb=a[2*2];/*引用数组元素a[4]*/说明:1.数组中的元素其实就是一个变量,占一个存储单元。如数组b中的变量就是int型的变量。2.引用数组元素时,下标表达式的值的上限为定义是常量表达式减一,下限为0.在引用时保证下标不能超过定义时的常量表达式减一,即下标不能越界。3.数组是一个构造类型,是集合的概念,因此不能整体引用数组里面的所用元素。企图简单地通过数组名b体代表其中的4个int类型的变量是不行。注意:不能对数组进行整体引用,只能单独引用其元素。inta[10];intb[10]=a;/*错误的*/intb[10]=a[10];/*错误的,没有元素a[10]*/floata[10],b[10];b=a;/*错误,a代表整个数组,不能整体引用*/b[0]=a[0];b[1]=a[1];等for(i=0;i<100;i++)a[i]=b[i];8.1.3一维数组的初始化在定义一维数组的同时可以将各元素的初值依次放在一对{}中赋给数组,初值之间用逗号隔开。例如:inta[10]={1,2,3,4,5,6,7,8,9,10};inta[5]=1,2,3,4,5;错inta[5]={1;2;3;4;5};错注意:数少于数组元素的个数,则将初值依次赋给前面的元素,而未得到初值的元素自动赋零。例如:inta[5]={1,2,3,4,5,6};inta[5]={1,2,3};inta[4]={2*2};inta[3]={0};(2)可以通过赋初值来定义数组的大小。此时数组的长度可以省略。若定义时,未赋初值,则长度绝不能省略。例如:inta[]={1,2,3,4};数组的长度是int];是非法的。(3)只能在定义时可以用{}给数组整体赋值,不是定义时,则只能单独给每个数组元素赋值。例如:inta[4];a={1,,或a[4]{1,,3,}是非法的。inta[4]={1,2,3};本节习题:下列一维数组定义中正确的是( 。A.inta[n];B.int];C.intD.int E.inta[2]={1,3,4};inta[0]={0};inta[5]={0};H.inta[5];a[5]={123,456};I.inta[5];a={1,2,3,4,5};J.inta[N=5];K.{intn=5;inta[n];}L.inta[2*3];M.inta[3]={1,2,34};8.2二维数组8.2.1二维数组的定义格式:类型名数组名[常量表达式1][常量表达式2],….例如:inta[2][3];a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]在内存中的存放形式依次连续)a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]8.2.2二维数组元素的引用格式:数组名[下标表达式1][下标表达式2]注意:1.不论是一维数组还是二维数组都不能整体引用。例如:inta[3][4];intb[3][4]=a;/*是非法的*/inta[3][4]={0},intb,n=2;b=a[2][n];执行上述语句后,问b的值是多少?2.引用数组元素时,下标可以是C语言中任何合法的表达式,且可以含有变量。inta[2][3]={1,2,3,4,5,6};intb;b=a[10.5%5][2];/*错误*/8.2.3二维数组初始化1.直接赋值inta[3][4]={1,2,3,4,5,6,7,8,9};问a[2][0]的值是多少?9a[2][2]的值是多少?0int[2][]={,0,,0,;/非法的*/2.按行赋值int[3][]{1,,},{,5,}{7,,9};注意:出现空花括号{}对。inta[3][4]={{1,2,3,4},{5,6,7,8,9},{10,11,12,13}};int[3][]{{1,,3,},{,6,,8,},{1,1,1,13{1,};inta[3][4]={{1,2,3,4},{},{10,11,12,13}};inta[3][4]={1,2,3,4},{5,6,7,8,},{10,11,12,13};以上定义均是非法的。维则不能省略。若定义时未赋初值,则各维的长度均不能省略。例如:inta[][3]={1,2,3,5,4,6};int][3];或inta[3][];都是非法的。例:有如下程序main(){inta[3][3]={{1,2},{3,4},{5,6}};inti,j,s=0;s+=a[i][j];printf(“%d\n”,s);}输出结果是?三.试题分析1.2008年4月考试试题分析(24)以下错误的定义语句是A)intx[][3]={{0},{1},{1,2,3}};B)intx[4][3]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};C)intx[4][]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};D)intx[][3]={1,2,3,4};(26)若有定义:inta[2][3];,以下选项中对a数组元素正确引用的是A)a[2][!1]B)a[2][3]C)a[0][3]D)a[1>2][!1](31)有以下程序#include<stdio.h>main(){ints[12]={1,2,3,4,4,3,2,1,1,1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年潜水及水下救捞装备项目建议书
- 2025版清晰易懂的房屋租赁合同
- 2025年抗艾滋病用药合作协议书
- 2025年大直径硅单晶及新型半导体材料项目合作计划书
- 2025年人工智能AI芯片项目建议书
- 线路桩施工方案
- 工序承包条款解读3篇
- 度假村安全监管合同3篇
- 工期延误导致的合同违约处理3篇
- 会计账目清晰承诺书加强财务监督3篇
- 【MOOC】国际交流英文演讲与辩论-湖南大学 中国大学慕课MOOC答案
- 【MOOC】旅游学概论-中国地质大学(武汉) 中国大学慕课MOOC答案
- 【MOOC】地学景观探秘·审美·文化-重庆大学 中国大学慕课MOOC答案
- 【MOOC】地下铁道-中南大学 中国大学慕课MOOC答案
- 病变糖尿病视网膜
- 正规完整版授课合同标准版可打印
- 工程款结算合同书
- 中央空调系统维保服务报价清单
- 数字化转型对企业财务绩效影响研究
- 公路养护施工组织设计 公路设施、交安设施、公路绿化日常维护管理施工方案
- 软瓷产品原材料供应与需求分析
评论
0/150
提交评论