您的位置:首页 > 编程语言 > C语言/C++

09c语言学习资料 一、数据类型、运算符和表达式

2011-01-27 15:40 567 查看
大二那时当过c语言助教,答疑的时候时常发现新生们遇到各种各样的问题,看着他们纠结的样子很心痛,很想让他们少走些弯路,一时激动通宵写了一些概括的教程。那时也发给了自己协会里的新生们。虽然知道发下去他们也不太会去看的,可是我想我至少努力过了。真的希望那时他们能好好的学c语言,因为这门课真的只有花心思进去了才能学好的。

(我那时改的作业一个班竟然只有4、5个版本,真的很替他们担忧阿。过几天就是考试了,希望他们考好点,不要挂科。

一、数据类型、运算符和表达式

参考资料:谭浩强C程序设计第三版和宁大科院C程序作业本

一、数据类型、运算符和表达式

1、简单的程序结构
#include<stdio.h>
Void main()
{
……
……
……
}
# include<文件名>(或”文件名”)是一个预处理命令,作用是把要用的头文件包含到你的程序中。
stdio.h是就是一个头文件,里面包含了些函数功能,像printf,scanf,gets等基本的输入输出函数的定义就包含里面。程序里面如果要用到类似printf的语句,在最前面就要加上#include<stdio.h>,如果没有的话,系统会无法识别,会报错的。
头文件你也可以自己写,然后用#include包含进来,这样当你要用到你自己写的函数的时候,可以直接用,其实相当于你把函数的声明和定义在头文件里定义过了。
void是空类型的意思,表示函数没有返回值,如果不加的话主函数main默认也是void。
main是主函数的名字,一个程序只有一个主函数(main),并且程序是从主函数开始的,主函数结束了程序也就结束了。
上面的格式几乎是固定的格式了呢

2、常量
常量分两种一种是字面常量就是单单的4,5.2,’a’这样子。
另一种是可能会用到的符号常量。就像书本38页的例子,定义的方法是:#define 常量名 数值。#define是预处理命令,表示把以下程序里面出现的PERICE全部替换成30,所以使用常量的好处是“一改全改”。
注:再给常量赋值的语句是错误的,常量的值在其定义域内不能改变,不能再被赋值。
常量名习惯大写,小写的也可以的。

3、变量
书本38页 3.2.2变量开始的前两段话好好理解。
变量类型一般有三种:整型变量,浮点型变量,字符型变量。
整型变量(都是整数):int(书本41页的“2、整型变量的分类”看一下)
浮点型变量(允许有小数部分):float单精度浮点型,double双进度浮点型。(他们的精度不一样,有效数字长度分别是6~7和15~16,但是他们小数点后都是显示6位)
注:字符型数据分字符常量和字符变量两部分。字符常量又分普通的单撇号括起来的字符和特殊的转义字符。
字符变量(用来存放字符,只能放一个字符):char

4、输入格式
Scanf(”%d”,&十进制整型变量名);Scanf(”%f”,&单精度浮点型变量名);Scanf(”%lf”,&双精度浮点型变量名);Scanf(”%c”,&字符型变量名);必须要加&取地址运算符。书本82页例4.9看一下。
注意:以什么格式输入就要输入什么类型的数据。

5、输出格式
Printf(“%d”,十进制整型变量名);Printf(“%f”,浮点型变量名);(这里单双精度是一样的) Printf(“%c”,字符型变量名);Printf(“%o”,八进制整型变量名);Printf(“%x”,十六进制整型变量名);(如果变量是整型,也可以用八进制和十六进制法输出)
注:双引号内的“//”开头的字符序列是转义字符,书本48页有表。双引号内的“%”开头的字符序列是格式说明,书本75页下方有介绍。除了这两样,printf双引号内的其他字符都是原样输出。(表达式中的%是取余的作用)

6、字符型的特殊
0-255数值范围的字符变量和整型变量在printf输出时可以通用,他们既可以用%d输出也可以用%c输出,具体输出的结果看用哪种类型输出。书本50页说明。
字符输入输出函数:
putchar函数用法:putchar(c),它输出字符变量c的值代表的字符,c可以是字符型变量或整型变量。还可也输出转义字符:如putchar(//n);执行换行。
getchar函数:书本74页例4.2仔细看看。

7、求余运算符
%,又称模运算,%两侧均应为整型数据。
如7%3为1,5%3为2,6%2为0,特殊例子: 2%2为0,2%5为2,2%7为2。
“/”除法运算符,多数c编译系统采用的是向零取整

8、复合赋值运算符
a+=b相当于a=a+b,a%=b相当于a=a%b
x%=y+3相当于x%=(y+3)相当于x=x%(y+3),默认带了括号的。
例:(a初值为12) 求a+=a-=a*=a
先求a*=a (a=12*12) 所以a=144,再a-=a(a=144-144) 所以a=0,再a+=a(a=0+0) 所以最终a=0。
(a初值为12,n初值为5) 求a%=(n%=2)
先求括号里的值n=n%2,所以n的值为1,括号里的值为1,再求a%=1,余为0,所以最终a=0。

9、格式化输出
整型:%md m指定输出的数据共占m列。如果数据的位数小于m,则左端补以空格(如果是%-md,则是右端补以空格),若超出m,则按实际位数输出。
例如printf(“%4d,%4d,%-6d”a,b,c); 若a=123,b=12345,c=123
则输出结果为_123,12345,123___
浮点型:%m.nf m指定输出的数据共占m列。n为截取的小数点位数(注意cfree3.5环境下截取的方式是4舍5入,所以作业本19页第3题第二个答案是3.142而不是直接取3.141。这个和程序的运行平台有关,为了程序的可移植性程序员应尽量避免出现这样的分歧)
看的时候先取好n位小数,取好之后的数据的位数小于m,则左端补以空格(如果是%-m.nf,则是右端补以空格),若超出m,则按实际位数输出。
例如printf(“%4.3f,%5.3f,%6.3f,%7.3f”a,a,a,a); 若a=3.1415
则输出结果为3.142,3.142,_3.142,__3.142
注:%.1f的写法也是可以的,只是截取小数。下面的字符型也一样。
字符型(字符串):%m.ns m指定输出的数据共占m列。n为只取字符串中左端n个字符。
先取好左端n个字符,取好之后的数据的位数小于m,则左端补以空格(如果是%-m.ns,则是右端补以空格),若超出m,则按实际位数输出。
例如作业本上第20页第5题就是一个很好的例子,答案分别是%14.8s;//n %10.6s;//n %6.4s;//n %-8.3s;//n

10、混合运算和强制类型转换
混合运算:整型、浮点型、字符型数据间可以混合运算,运算前需要一定的转换。
如字符型必定先转换为整数,short型转换为int,float型数据在运算时一律先转换成双精度型,以提高运算精度(即使是两个float型数据相加,也先都化成double型,然后再相加)
强制类型转换:
利用强制类型转换运算符将一个表达式转换成所需类型,转换得到的只是一个中间变量,原来的类型和值未发生变化。
注:在cfree环境下浮点型转换为整型时是直接去掉小数部分。
例:int a=2; int b=3; float x=3.5; float y=2.5 求(float)(a+b)/2+(int)x %(int)y
先求(int)x %(int)y 相当于 3%2 结果为1,再求(float)(a+b)/2 相当于5.000000/2结果为2.500000, 所以最终结果为2.500000+1 结果为3.500000。

11、自增、自减运算符
++i,--i (i先加(减)1然后再拿来使用)
i++,i-- (i先拿来使用,然后自己再加(减)1)
例:作业本第21页第2题,结果是i=9,j=11,m=9,n=10。
这个一定要弄懂,熟练

12、逗号表达式
例如(a=3*5,a*4)逗号表达式的运算次序为从左至右,先一路运算过去,然后最右边的一个式子作为整个表达式的值。
如果b=(a=3*5,a*4)的话,b的值为60。
如果x=(a=3,6*3)的话,x的值为18。
最后作业本21页第3题一定要会的,结果是3,4,3 3,4,4。理解一下。

大一的C语言为以后的复杂程序打基础的。以后做网站做软件都会用到。
对电信专业的同学来说c语言请一定学好~其他专业的同学如果有兴趣也可以看看~多了解一下

一些小经验:1、上课之前要预习一遍要讲的内容。2、作业认真做。会发现很多漏洞的。3、和同学多多交流
有时间有能力的同学最好把书一字一句看过去。因为老谭的书很好。看完一遍以后你的知识漏洞会非常少了。有的同学可能跟着老师的路子走也会学的很好。

时间仓促,看见错误了请多指正
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐