程设心得
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)==c
a==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 5
int 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个元素全部赋值为1
int 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"
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论