当前位置:文档之家› 计算机程序设计基础复习资料

计算机程序设计基础复习资料

程设心得1,以数组作为函数的实参用法易错声明int statistics(char sentence_name[10], char sentence[500]);调用statistics("sentence1", sentence2);而不是statistics("sentence1", sentence2[500]);或者`statistics("sentence1", &sentence2[500]);2变量没初始化会导致的错误long long int fac;fac = fac * counter;这样就会fac是一个不可预料的数,故要对fac初始化3.float height, length, width= 3.1;的含义是什么?是全部初始化为3.1么(待测!)经测试,只是给width赋值,其余的两个变量未初始化,且注意,为初始化的变量是不能直接printf的!4.s=1.0/2*(a+b+c);算的是a,b,c,和的一半而s=1/2*(a+b+c);的值为零一定要注意把被除数搞成浮点型!5.冒泡排序原理数大的在下面,数小的在上面,对存放原始数据的数组,按从前往后(从上到下)的方向进行多次扫描,每次扫描称为一趟。

当发现相邻两个数据的次序与排序要求的大小次序不符合时即将这两个数据进行互换。

这样,较小的数据就会逐个向前移动,好象气泡向上浮起一样。

程设易混要点一,算术运算的说明两个整数相除的结果为整数,如5/3的结果值为1,舍去小数部分如果除数或被除数中有一个为负值,舍入方向不固定。

例如,-5/3,有的系统中得到的结果为-1,在有的系统中则得到结果为-2,VC++采取“向零取整”的方法,如5/3=1,-5/3=-1,取整后向零靠拢% 运算符要求参加运算的运算对象(即操作数)为整数,结果也是整数。

如8%3,结果为2 二,C语言规定了运算符的优先级和结合性,圆括号的优先级最高三,不同类型数据间的混合运算+、-、*、/ 运算的两个数中有一个数为float或double型,结果是double型。

系统将float型数据都先转换为double型,然后进行运算如果int型与float或double型数据进行运算,先把int型和float型数据转换为double型,然后进行运算,结果是double型四,赋值过程中的类型自动转换如果赋值运算符两侧的类型一致,直接赋值:i=234; // 此前i已经被定义为int型如果赋值运算符两侧的类型不一致,自动转换将浮点数赋给整型变量时,取整,舍弃小数部分,i = 3.45;//结果是i=3整型数赋给浮点数,数值不变,浮点数形式存储,f = 23;//此前f被定义为float或double,相当于f=23.0字符型数据赋给整型变量,赋给ASCII码,i = ‘A’; //此前i已经被定义为int型截断现象(给允许表值范围小的变量赋值时常见)c=289; //c 已被定义为char型,实际c=33即减去256五,printf函数的常用格式字符•e格式符。

指定以指数形式输出实数•%e,VC++给出小数位数为6位,指数部分占5列,小数点前必须有而且只有1位非零数字,printf(”%e”,123.456);输出:1.234560 e+002•%m.ne:printf(”%13.2e”,123.456);输出: 1.23e+002 (前面有4个空格)注意:m是指全部长度,即包括指数部分的那五列!六,字符的表示•用单引号括起来一个字符–如:‘A’‘a’‘.’‘?’‘1’‘’•有的字符是不可见的,只能用特殊形式转义字符表示。

下面几个一定要牢记:–如: ‘\n’‘\r’‘\t’‘\\’‘\’’‘\”’七,字符串常量(后续学习)•一对双引号括起来的字符序列。

–"China"•NOTICE!–C语言会在每个字符串结尾处加上字符'\0',因此,"China"包括6个字符:'C' 'h' 'i' 'n' 'a' '\0'也就是说char name[5] = "china" 会溢出需要至少char name[6]八,考察表达式printf("%d %c\n", c, c );c = c + 256; //加法运算、赋值給字符加上256再以字符输出来还是原来的那个字符(也就是前面说的截断现象!)九,两个功能代码:–char c = ‘m’+ ‘A’–‘a’;•功能:‘m’转换为‘M’•大小写字母转换–int k = ‘9’–‘0’;•功能: ‘9’转换为9•数字字符转换为相应的整数十,回车与回车换行的区别回车(\r)是把光标移到本行行首,回车换行(\n)是把光标移到下一行行首十一,printf格式字符需要注意:g,G 以%f或%e中较短的输出宽度输出单、双精度实数十二,scanf函数的用法注意:在回车ENTER键之后,才正式输入;此前缓存,格式控制后,应给出变量地址,而不是变量名scanf(“%f%f%f”,a,b,c); //错scanf(“%f%f%f”,&a,&b,&c); //对–%d或%f格式控制输入时,需用空格或逗号分隔(默认1个或更多地空格)例7:scanf(“%f%f%f”,&f1, &f2, &f3);输入:1 3 2↙对输入:1,3,2↙错%c 格式控制时,不要输入空格–对于scanf(”%c%c%c”,&c1,&c2,&c3);对abc↙错 a b c↙十四,注意!•printf和scanf不检查输出表列的数目–int i=3, j=5;–printf( “%d %d”, i ); /* WRONG 无意义的输出*/–printf( “%d”, i, j, i+1, j+1 ); /* WRONG 少输出*/•printf和scanf不检查输出变量类型与占位符是否匹配–int i=3; float j=5.0;–printf( “%f %d”, i, j ); /* WRONG 无意义的输出*/注意:经测试输出的是随机的数字,而不是对原变量进行格式转换后输出十五,getchar函数只能接受单个字符,输入数字也按字符处理。

输入多于一个字符时,只接收第一个字符。

一种简洁的输入输出表达形式如下(二选一)putchar(getchar());printf("%c",getchar());应用:可以加一个while(1)做成显示按键为何的小程序十六,关系、算术、赋值运算符的优先级由高到低算术运算符关系运算符判等运算符赋值运算符c>=a+b 等效于c>=(a+b)a>=b==c 等效于(a>=b)==ca==b<=c 等效于a==(b<=c)a=b>=c 等效于a=(b>=c)十七,逻辑运算符的优先次序! →&& →||(!为三者中最高)Ø与其他运算符的优先次序由高到低!算术运算符关系运算符&& 和||赋值运算符十八,在判断一个量是否为“真”时Ø以0代表“假”,以非0代表“真”Ø注意:将一个非零的数值视为“真”二十,逻辑表达式举例(1) 若a=4,则!a的值为0(2) 若a=4,b=5,则a && b的值为1(3) a和b值分别为4和5,则a||b的值为1(4) a和b值分别为4和5,则!a||b的值为1(5) 4 && 0 || 2的值为1二十一,逻辑短路一旦能够明确无误地确定整个表达式的值,就不再计算表达式余下部分对“&&”运算符,如果前一操作数为假,则不再理会后一操作数;对“||”运算符,如果前一操作数为真,则不再理会后一操作数;二十二,定义数组时注意!不能在方括号中用变量来表示元素的个数, 但是可以是符号常数或常量表达式。

合法的定义方式:#define N 5int a[3+2],b[N+7];(常量表达式)错误的定义方式:int n=5;int a[n];二十三,一维数组的初始化(1)数组的初始化是指在数组定义时给数组元素赋初值(2)数组初始化的一般形式为:类型符数组名[常量表达式]={值,值......值};其中: 在{ }中的各数据值即为各元素的初值,各值之间用逗号间隔。

例如:int a[10]={ 0,1,2,3,4,5,6,7,8,9 };相当于a[0]=0; a[1]=1;... a[9]=9;C语言对数组初始化的几点规定:(1)可以只给部分元素赋初值。

当{ }中值的个数少于元素个数时,只给前面部分元素赋值,后面的赋零值例如: int a[10]={0,1,2,3,4};//表示给前5个元素赋值,后5个元素自动赋0值(2)只能给元素逐个赋值,不能给数组整体赋值。

例如:将数组的10个元素全部赋值为1int a[10]={1,1,1,1,1,1,1,1,1,1};//正确int a[10]=1;//错误(3)若给全部元素赋值,则可不写明数组长度例如:int a[5]={1,2,3,4,5};也可写为:int a[]={1,2,3,4,5}; √不写明长度则必须初始化:int a[];×(4){ }中值的个数不可多于元素个数例如:int a[5]={1,2,3,4,5,1 };×二十四,只能通过下标变量引用数组元素,而不能一次引用整个数组例如:将数组b的各元素值依次赋给数组a的对应元素可以用for循环逐一赋值int a[10], b[10];for(i=0; i<10; i++)a[i] = b[i];不能写成如下形式:a=b二十五,字符串在存储时,系统自动在其后加上结束标志‘\0’(占1字节),但字符数组最后一个元素不一定是'\0’因为存储的字符串长度加上’\0’可能仍旧小于字符数组的长度#include"stdio.h"例如:int main(){char c1[5]={'G','o','o','d','!'};char c2[]={"Good!"};printf("%s\n",c1);(实际验证以下!)经验证,该语句输出Good!之后还会输出一些乱码,这是由于!后面没有'\0'造成的printf("%s\n",c2);return0;}c1与c2并不等价,字符数组c1不能当字符串使用,因为其最后一个元素不是结束标志'\0’。

相关主题