免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2078 | 回复: 1
打印 上一主题 下一主题

C 程序设计基础之一到四 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-05 17:15 |只看该作者 |倒序浏览
C 程序设计基础之一到四














C 程序设计基础之一
  数据输出语句
  本小节介绍的是向标准输出设备显示器输出数据的语句。在C语言中,所有的数据输入/输出都是由库函数完成的。 因此都是函数语句。本小节先介绍printf函数和putchar函数。printf函数printf函数称为格式输出函数,其关键字最末一个字母f即为“格式”(format)之意。其功能是按用户指定的格式, 把指定的数据显示到显示器屏幕上。在前面的例题中我们已多次使用过这个函数。
  一、printf函数调用的一般形式
  printf函数是一个标准库函数,它的函数原型在头文件“stdio.h”中。但作为一个特例,不要求在使用 printf 函数之前必须包含stdio.h文件。printf函数调用的一般形式为: printf(“格式控制字符串”,输出表列)其中格式控制字符串用于指定输出格式。 格式控制串可由格式字符串和非格式字符串两种组成。格式字符串是以%开头的字符串,在%后面跟有各种格式字符,以说明输出数据的类型、形式、长度、小数位数等。如“%d”表示按十进制整型输出,“%ld”表示按十进制长整型输出,“%c”表示按字符型输出等。后面将专门给予讨论。
  非格式字符串在输出时原样照印,在显示中起提示作用。 输出表列中给出了各个输出项, 要求格式字符串和各输出项在数量和类型上应该一一对应。
  1. void main()
  2. {
  3. int a=88,b=89;
  4. printf("%d %d\n",a,b);
  5. printf("%d,%d\n",a,b);
  6. printf("%c,%c\n",a,b);
  7. printf("a=%d,b=%d",a,b);
  8. }
  9. a<--8,b<--89
  10. printf("%d %d\n",a,b);
  11. printf("%d,%d\n",a,b);
  12. printf("%c,%c\n",a,b);
  13. printf("a=%d,b=%d",a,b);
复制代码
  本例中四次输出了a,b的值,但由于格式控制串不同,输出的结果也不相同。第四行的输出语句格式控制串中,两格式串%d 之间加了一个空格(非格式字符),所以输出的a,b值之间有一个空格。第五行的printf语句格式控制串中加入的是非格式字符逗号, 因此输出的a,b值之间加了一个逗号。第六行的格式串要求按字符型输出 a,b值。第七行中为了提示输出结果又增加了非格式字符串。
=========================================================================
C 程序设计基础之二
运算符的种类、优先级和结合性
  C语言中运算符和表达式数量之多, 在高级语言中是少见的。正是丰富的运算符和表达式使C语言功能十分完善。 这也是C语言的主要特点之一。
  C语言的运算符不仅具有不同的优先级, 而且还有一个特点,就是它的结合性。在表达式中, 各运算量参与运算的先后顺序不仅要遵守运算符优先级别的规定,还要受运算符结合性的制约, 以便确定是自左向右进行运算还是自右向左进行运算。 这种结合性是其它高级语言的运算符所没有的,因此也增加了C语言的复杂性。
  运算符的种类C语言的运算符可分为以下几类:
  1.算术运算符
  用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(++)、自减(--)共七种。
  2.关系运算符
  用于比较运算。包括大于(>、小于(<、等于(==)、 大于等于(>=)、小于等于(<=)和不等于(!=)六种。
  3.逻辑运算符
  用于逻辑运算。包括与(&&、或(||)、非(!)三种。
  4.位操作运算符
  参与运算的量,按二进制位进行运算。包括位与(&、位或(|)、位非(~)、位异或(^)、左移(<<、右移(>>六种。
  5.赋值运算符
  用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,^=,>>=,<<=)三类共十一种。
  6.条件运算符
  这是一个三目运算符,用于条件求值(?
  7.逗号运算符
  用于把若干表达式组合成一个表达式(,)。
  8.指针运算符
  用于取内容(*)和取地址(&二种运算。
  9.求字节数运算符
  用于计算数据类型所占的字节数(sizeof)。
  10.特殊运算符
  有括号(),下标[],成员(→,.)等几种。
=========================================================================
C 程序设计基础之三
  关系运算符和表达式
  在程序中经常需要比较两个量的大小关系, 以决定程序下一步的工作。比较两个量的运算符称为关系运算符。 在C语言中有以下关系运算符:
  < 小于
  <= 小于或等于
  > 大于
  >= 大于或等于
  == 等于
  != 不等于
  关系运算符都是双目运算符,其结合性均为左结合。 关系运算符的优先级低于算术运算符,高于赋值运算符。 在六个关系运算符中,<,<=,>,>=的优先级相同,高于==和!=,==和!=的优先级相同。
  关系表达式
  关系表达式的一般形式为: 表达式 关系运算符 表达式 例如:a+b>c-d,x>3/2,'a'+1(b>c),a!=(c==d)等。关系表达式的值是“真”和“假”,用“1”和“0”表示。
  如: 5>0的值为“真”,即为1。(a=3)>(b=5)由于3>5不成立,故其值为假,即为0。
  1. void main(){
  2.  char c='k';
  3.  int i=1,j=2,k=3;
  4.  float x=3e+5,y=0.85;
  5.  printf("%d,%d\n",'a'+5=k+1);
  6.  printf("%d,%d\n",1 printf("%d,%d\n",i+j+k==-2*j,k==j==i+5);
  7. }
  8. char c='k';
  9. int i=1,j=2,k=3;
  10. float x=3e+5,y=0.85;
  11. printf("%d,%d\n",'a'+5=k+1);
  12. printf("%d,%d\n",1printf("%d,%d\n",i+j+k==-2*j,k==j==i+5);
复制代码
  在本例中求出了各种关系运算符的值。 字符变量是以它对应的ASCII码参与运算的。对于含多个关系运算符的表达式,如k==j==i+5,根据运算符的左结合性,先计算k==j,该式不成立,其值为0,再计算0==i+5,也不成立,故表达式值为0。
  逻辑运算符和表达式
  逻辑运算符C语言中提供了三种逻辑运算符 && 与运算 || 或运算 ! 非运算 与运算符&&和或运算符||均为双目运算符。具有左结合性。 非运算符!为单目运算符,具有右结合性。逻辑运算符和其它运算符优先级的关系可表示如下:
  按照运算符的优先顺序可以得出:
 
  1.  a>b && c>d等价于(a>b) && (c>d)
  2.   !b==c||d  a+b>c && x+yc) && ((x+y)

  3.   switch语句
  4.   C语言还提供了另一种用于多分支选择的switch语句, 其一般形式为:
  5. switch(表达式){
  6.  case常量表达式1: 语句1;
  7.  case常量表达式2: 语句2;
  8.  …
  9.  case常量表达式n: 语句n;
  10.  default : 语句n+1;
  11. }
复制代码
  其语义是:计算表达式的值。 并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时, 即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。 如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。
  1. void main(){
  2.  int a;
  3.  printf("input integer number: ");
  4.  scanf("%d",&a);
  5.  switch (a){
  6.   case 1:printf("Monday\n");
  7.   case 2:printf("Tuesday\n");
  8.   case 3:printf("Wednesday\n");
  9.   case 4:printf("Thursday\n");
  10.   case 5:printf("Friday\n");
  11.   case 6:printf("Saturday\n");
  12.   case 7:printf("Sunday\n");
  13.   default:printf("error\n");
  14.  } 
  15. }
复制代码
  本程序是要求输入一个数字,输出一个英文单词。但是当输入3之后,却执行了case3以及以后的所有语句,输出了Wednesday 及以后的所有单词。这当然是不希望的。为什么会出现这种情况呢?这恰恰反应了switch语句的一个特点。在switch语句中,“case 常量表达式”只相当于一个语句标号, 表达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出整个switch 语句,所以出现了继续执行所有后面case语句的情况。 这是与前面介绍的if语句完全不同的,应特别注意。为了避免上述情况, C语言还提供了一种break语句,专用于跳出switch语句,break 语句只有关键字break,没有参数。在后面还将详细介绍。修改例题的程序,在每一case语句之后增加break 语句, 使每一次执行之后均可跳出switch语句,从而避免输出不应有的结果。
  1. void main(){
  2.  int a;
  3.  printf("input integer number: ");
  4.  scanf("%d",&a);
  5.  switch (a){
  6.   case 1:printf("Monday\n");break;
  7.   case 2:printf("Tuesday\n"); break;
  8.   case 3:printf("Wednesday\n");break;
  9.   case 4:printf("Thursday\n");break;
  10.   case 5:printf("Friday\n");break;
  11.   case 6:printf("Saturday\n");break;
  12.   case 7:printf("Sunday\n");break;
  13.   default:printf("error\n");
  14.  }
  15. }
复制代码
  在使用switch语句时还应注意以下几点:
  1.在case后的各常量表达式的值不能相同,否则会出现错误。
  2.在case后,允许有多个语句,可以不用{}括起来。
  3.各case和default子句的先后顺序可以变动,而不会影响程序执行结果。
  4.default子句可以省略不用。程序举例
  输入三个整数,输出最大数和最小数。
  1. void main(){
  2.  int a,b,c,max,min;
  3.  printf("input three numbers: ");
  4.  scanf("%d%d%d",&a,&b,&c);
  5.  if(a>b)
  6.  {max=a;min=b;}
  7.  else
  8.  {max=b;min=a;}
  9.  if(max  max=c;
  10.  else
  11.   if(min>c)
  12.    min=c;
  13.  printf("max=%d\nmin=%d",max,min);
  14. }
复制代码
  本程序中,首先比较输入的a,b的大小,并把大数装入max, 小数装入min中,然后再与c比较,若max小于c,则把c赋予max;如果c小于min,则把c赋予min。因此max内总是最大数,而min内总是最小数。最后输出max和min的值即可。 计算器程序。用户输入运算数和四则运算符, 输出计算结果。
  1. void main(){
  2. float a,b,s;
  3. char c;
  4. printf("input expression: a+(-,*,/)b \n");
  5. scanf("%f%c%f",&a,&c,&b);
  6. switch(c){
  7. case '+': printf("%f\n",a+b);break;
  8. case '-': printf("%f\n",a-b);break;
  9. case '*': printf("%f\n",a*b);break;
  10. case '/': printf("%f\n",a/b);break;
  11. default: printf("input error\n");
  12. }
  13. }
  14. float a,b,s;
  15. char c;
  16. printf("input expression: a+(-,*,/)b \n");
  17. scanf("%f%c%f",&a,&c,&b);
  18. switch(c){
  19. case '+': printf("%f\n",a+b);break;
  20. case '-': printf("%f\n",a-b);break;
  21. case '*': printf("%f\n",a*b);break;
  22. case '/': printf("%f\n",a/b);break;
  23. default: printf("input error\n");
  24. }===
复制代码
合法的:
  if((x=y+5)>0) z=x;
  语句的功能是,若表达式x=y+5大于0则z=x。
  下述语句是非法的:
  if((x=y+5>0) z=x;
  因为=y+5;是语句,不能出现在表达式中。

论坛徽章:
0
2 [报告]
发表于 2011-12-22 22:52 |只看该作者
很有哦 ...谢谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP