C语言学习笔记

              之 输入输出与程序设计结构之美

   看看今天的菜是什么:printf()scanf();if语句开关switch 三种循环结构。看到这些东西,如果你曾经学完过C,你是不是有点怀念?如果你是初学者,你是不是感到头疼?

你是不是感觉到它们很简单,因为它们都是最基本的知识,但是,我说正是因为它们基础,所以它们才博大精深,因为把他们按照自己的思路拼凑在一起会形成不同风格的程序。

即使是如此的简单,你是不是因为pirntf(%5d,a);中的5而感到疑惑?会不会因为scanf(%d,&a)中的输入格式无从下手? 有没有因为swich中的break而查阅过好多资料?更不用说大家肯定都会动脑子想想循环结构的逻辑思路。

如果大家对我说的还有一定疑惑的话,那就跟着小编一起走一段路吧!

一:格式输出printf()

1.格式:printf(格式控制,输出列表);

    (1)格式控制是用双引号引起来的字符串,也叫:转换控制字符串。它包括两种信息
格式字符串%和格式字符组成,作用是将输出的数据转换为指定的格式输出

普通字符,即需要原样输出的字符。

    (2)输出列表是需要输出的一些数据,也可以是表达式

    (3printf函数的一般形式可以表示为

            Printf(参数1,参数2....参数n) 功能是将参数2~参数n按参数1给定的格式输出

2.我们主要来看一下格式控制中的格式字符串的形式,我们已经说过,它是有%和格式字

 符组成,也就是大家常用的 “%d”等。但是这个格式字符的种类可是有好多的分类:

格式字符

作用

描述

d(或i

用来输出十进制整数

①%d,按整型数据的实际长度输出。

②%mdm为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空若大于m,则按实际位数输出。%5d

③%ld(%mld 也可),输出长整型数据。

o

以八进制数形式输出整数

%o%mo,%lo%mlo都可

x(X)

以十六进制数形式输出整数

%x%mx,%lx%mlx都可

u

输出unsigned型数据,即无符号数,以十进制数形式输出

%u%mu,%lu都可

c

输出一个字符

%c%mc都可

s格式

输出一个字符串。

%s%ms,%-ms%m.ns%-m.ns都可

f格式符

输出实数(包括单、双精度),以小数形式输出

%f%m.nf%-m.nf都可

注意:单精度实数的有效位数一般为7位,双精度为16位。

注:字符l用于长整型整数,可加在格式符doxu前面;

     m代表一个正整数,表示数据最小宽度

     N代表一个正整数,表示对实数表示输出n位小数,对字符串,表示截取的字符个数

3.疑惑

  (1)如果要输出%怎么办?我们知道“%+格式字符”是一种形式,但是要输出%怎么办?

应该在格式控制字符串中用连续两个%表示 ,比如:printf(%f%%,a);

  (2)在格式控制 字符串内是可以包含转义字符的,如\n(换行)

二:格式输入scanf()

1.格式:scanf(格式控制,地址表列);

      格式控制的作用与printf函数相同,但是不能显示非格式字符串,

      地址表列中是各变量的地址,地址由&(地址运算符)个变量名组成。&a

 2.*

      表示该输入项,读入后不赋予相应的变量,即跳过该输入值

    比如:scanf(%d%*d%d,&a,&b);当输入为123时,把1a2被跳过,3b

 3.scanf()函数和printf()函数的格式控制字符基本上是一样的,也分为%d%5d等等,但是scanf中没有精度控制,比如scanf(%5.2f,&a)是错误的。

 4. 格式控制字符串与输入格式,两者格式是一样的。

    比如:scanf(%d,%d %d%d,&a,&b,&c,&e);//3%d之间一个逗号,一个空格,一个什么都没有。则输入的时候就应该按照这样的格式输入:d,e fg

如果不按照控制字符的格式输出呢?

比如:scanf(%d%d%d,&a,&b,&c)

     输入 d e f    在格式控制字符窜中3%d之间什么都没有,但是在输入的的abc之间都加了一个空格,很明显两者的格式没有统一起来。那么:

     da,空格给bec。  

三:if语句嵌套之美

 if是选择语句,我认为里面实在没有什么难点和应该注意的地方,硬要说的话,就是if语句的嵌套层次。需要注意它们的格式,不要乱写if.

if(条件)

  语句;

else

  语句;

if(条件)

 语句;

 else if(条件)

  语句;

 else if(条件)

语句;

..

..

else

  语句;

 在if 中,可以写成条件运算符的形式。下述两种语句表达的是一个意思

if(a>b)

  Max=a;

else

 Max=b;

Max=a>b? a:b

四:switch语句

  Switch又称为开关语句

 基本形式是

switch(表达式)

  case 1:语句1[break;]

  case 2:语句2[break;]

  .....

  [default:语句;]

 需要注意的是switch()中的表达式的数据类型只能是整型或字符型。

 有关break的详解,请继续往下看

五:三种循环结构

while(表达式)

   语句序列;

do{

语句序列;

}while(表达式)

for(表达式1;表达式2;表达式3)

  语句序列;

3中循环结构以for循环最为重要。

whiledo..while的区别在于:while是先判断再执行;do...while是先执行后判断。

for循环中的表达式1为初始条件,符合表达式2的判断,执行语句,然后执行表达式3,再根据表达式2进行判断,执行语句。

关于for循环的嵌套:程序实例:打印九九乘法表。


#include 
main()
{
   int m,n;
   for(m=1;m<10;m++){
      printf("%4d",m);
   }
   printf("\n");
   for(m=1;m<10;m++){
     printf("  -");
   }
   printf("\n");
   for(m=1;m<10;m++){  //被乘数m从1变化到9
   for(n=1;n<=m;n++){  //乘数从1变化到m
      printf("%4d",m*n);  //输出第m行n列中的m*n的值
   }
   printf("\n");
   }
}


C学习笔记【程序】输入输出与程序设计结构之美_第1张图片

六:终止语句:breakcontinue语句的区别

1.break语句

1break语句只能用于循环语句或者switch语句中。即使有这样的语句

      If(...) break; 那么这个if语句也一定位于循环体或者swich语句之中。

2break语句的作用是跳出(终止)它所在的循环。而且不能同时跳出多层循环

  比如:  

for(){        第一个for循环

  for(){     第二个for循环

       语句1

       break;

       语句2;

  }

语句3

}

上述中break终止的只能是第二个for循环,即程序运行到break时,就跳出第二个for循环,然后执行语句3,执行完语句3后开始循环执行第一个for循环。就当第二个for不存在一样。

但是需要注意的是,语句1执行了一次,语句2一次也没有执行。语句3执行了n次(n为第一个for循环的循环次数)

3)程序实例验证(2


#include 
main()
{
   int m,n;
   for(m=1;m<10;m++){ 
   for(n=1;n<=10;n++){ 
      n=n+1;
  break;
  n=n+2;
   }
  m=m+3;
   }
   printf("m=%d,n=%d\n",m,n);
}



2.continue语句

1continue语句与break语句一样,都必须在循环中。

2continue语句的不同之处在于它的作用是结束本次循环,即跳过本层循环体中余下尚未执行的语句,接着再一次进行循环的条件判断。也就是说执行continue语句并没有使本次循环结束

 比如:

for(){          第一个for循环

  for(){       第二个for循环

     语句1

     continue;

     语句2

  }

语句3

}

  上述程序中,执行到continue时,第二个for循环的这一次循环终止,进行第二个for循环的下一次循环,也就是说,语句2不执行了,再进行新的一轮循环。只是continue之后的语句不执行了,然后再进行第二个for循环中的下一次循环。

   在上述程序中,语句1执行了n次(n为第二个for循环循环的次数),语句2一次也没有执行,语句3执行了m次(m为第一个for循环循环的次数)

3)一个程序实例验证(2):


#include 
main()
{
   int m,n,x=1;
   for(m=1;m<10;m++){ 
   for(n=1;n<=10;n++){ 
      n=n+1;
  continue;
  x=x+1;
   }
  m=m+3;
   }
   printf("m=%d,n=%d,x=%d\n",m,n,x);
}


C学习笔记【程序】输入输出与程序设计结构之美_第2张图片