C语言程序设计(一)

目录: 1.  向屏幕输出一行文字

    2.  输出两个函数的和

    3.  函数一

    4.  函数二

    5.  求两个数的最大值

    6.  printf和scanf函数的返回值

    7.  输入一个成绩,输出所对应的成绩段

    8.  if语句的细节问题

    9.  scanf函数的注意事项

    10. 运算符

    11. 全局变量及宏定义

    12. 标识符命名规范及变量作用域总结

.

 

 

向屏幕输出一行文字.c(若是c++后缀则是.cpp

 

 

 

 

 

输出两个函数的和.c

注:若直接输出a,b,sum的值,因为这三个值没有初始化,输出结果是不稳定的,所以是垃圾值

 

 

函数一.c

 

 

 输出9,7

 

 

函数二.c

出现错误,因为编译器并不知道g函数的作用

 

 

在此代码块里才可使用g函数,在它之外的代码块里使用g函数编译器不知道其功能是什么,所以程序会出错

 

解决办法一:

 

 

 

 

 需注意的是不能放在

 

 

否则会发生错误

因为各个函数之间是平行的。

 

 

 

 

 方法二:

扩展g函数的作用域:

 

 

 

 

 

 程序报错,因为在g函数的作用域外使用了该函数,解决办法:

 

 

 

 

 

 或

 

 

 注:需要注意的是h函数的定义必须在g函数的作用域之内,因为h函数中有g函数的作用

 

 

 

 

 

求两个数的最大值.c

方法一:

如果a>=b成立,则输出第一个printf里的内容,否则输出第二个printf里的内容

 

 

方法二:

 

 

 若a<b成立,则把b的值赋给a,此时a的值为最大值,输出a的值

 

a<b不成立,则直接输出a的值

 

 

Printfscanf函数的返回值.c

 

 

 

 若只输出一个正确数:

 

 

 

 

 

输入一个成绩,输出对应成绩段.c

方法一:

 

 

 注:若想在输出结果时加一行文字“输出的成绩为:”,则printf函数应为:

 

 

 

 否则会发生错误:

 

 

 

方法二:

 

 

 

方法三:

 

 

 方法二与方法三等价

 

 

 If语句:

 

1.     if (表达式) 语句1

 

2.     if (表达式)

 

语句1

 

else

 

语句2

 

3.     if (表达式1)

 

语句1

 

else if (表达式2)

 

       语句2

 

Else if(表达式n)

 

       语句n

 

Else

 

       语句n+1

 

4.     if (表达式1)

 

语句1

 

Else if (表达式2)

 

       语句2

 

Else if(表达式n)

 

       语句n

 

注:一个if 语句中有且只有一个ifelse if可以有多个,else最多只有一个。

 

 

 

 

If函数注意事项.c:

 

 

      当表达式的值为0,表达式为假,否则表达式为真

 

if语句中,控制语句如果为多句,就需要给它们加上一个花括号

 

Else后的控制语句如果为多句,就需要给它们加上一个花括号

 

当多个if语句使用时,else语句属于紧挨着它上面那个if语句的内容

 

图中if语句后面的表达式3>2也可改为大于0的数,3<2可改为0:

 

 

 

 

 

 

Scanf函数注意事项.c:

1.     使用scanf函数输入数据,为什么需要按回车——回车可以刷新键盘缓冲区的内容,键盘缓冲区会有一个换行字符

 

内存里有程序区(里面有定义的变量)和键盘缓冲区,当通过键盘输入数据时会首先把数据放在键盘缓冲区里,当键盘缓冲区里的数据被填满或回车,此时键盘缓冲区里的内容才会被送到程序区里的变量中,所以在我们使用scanf函数时需要按回车时键盘缓冲区里的内容送入程序区的变量中。

 

当我们使用scanf函数正确输入数据后按下回车键盘缓冲区里会留下一个换行字符等待程序区里的某个变量接收。

 

 

 2.     scanf函数遇到错误输入会停止

 

 

 3.     scanf函数的格式字符串中的字符分类:

(1)     格式声明(格式说明符,如:%c,%d%lf指定输入的数据按哪种方式赋给某个变量)

 

(2)     空白字符(3种,换行(\n)、空格(‘ ‘)Tab(\t))——scanf在读操作中忽略掉1个或多个空白符

 

 

          执行框中输入空白字符均被忽略

 

 (3)   非空白字符——scanf在进行读操作的时候剔除掉与这个非空白字符一样的字符

 

 

 

Scanf函数会因为错误输入而终止,输出一个垃圾值,因为a变量并没有通过scanf函数得到一个新值

 

 

 4.     在输入时使用空白字符起到的数据间隔作用

 

 

 

 

5.     对于连续的字符型输入,它们是有能力自己间隔数据的,所以在输入完一个字符后不必加空白字符,否则会得到错误的结果

 

 

 

 

当输入w空格q时得到的错误结果,正确输入如下:

 

 

 

 

 

 

运算符.c

1.     优先级——初等运算符优先级为1,单目运算符优先级为2

 

2.     3.结合方向:只有单目运算符和赋值运算符的结合方向是自右往左的

 

 

 

 

3.     操作数(运算对象):如1+2(对于+这个运算符有两个操作数,叫二目运算符),&a(操作数只有一个,叫单目运算符)

 

 

 4.     乘号、除号、取余运算符的优先级等级为3;加号、减号的优先级等级为4;赋值运算符的优先等级为14

    算数运算符:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 过程:-13%3

          -133进行取余,一个为正数一个为负数,符号相异,其商为负数。将133商为4,所以-13除以3商为-4,再将-43-12,然后-13减去-12-1,所以-133进行取余的结果为1

    13%-3

    13-3进行取余,符号相异,其商为负数。绝对值相处结果为4,所以其商为-4,将-3-4结果为12,再将13减去121,所以13-3进行取余的结果为1

    -13%23

    -1323进行取余,符号相异,其商为负数。绝对值相除结果为0,再将023结果为0,让-13减去0-13,所以-1323进行取余的结果为-13

 

 

赋值运算符:

 

 

 

注:赋值表达式必须是左边变量,右边表达式或者变量。因为表达式是不可以被赋值的,如a+b=c这个是编译错误的。

 

 

 

 

 

 5.     优先等级:逗号表达式15(所有运算符中优先级最低的);逻辑与11,逻辑或12;等于、不等于7,关系运算符(除了等于不等于之外);

 6. 在C语言中,优先级并不完全决定运算顺序

(1)     只有四种运算符(&&||,逗号,条件运算符)规定了运算顺序,必须自左往右

 

(2)     操作数的求值顺序,不同的编译器可能有所不同——不要依赖任何不可移植的操作,应避免出现

 

 

 

7.&&和||都先计算左边表达式的值,如果左边表达式能够确定整个表达式的值那么右边表达式的值就不会被计算

逻辑与:

 

 

 正解如下:

逻辑与表达式:两边的表达式只要有一个为假,整个表达式都为假。先计算了逻辑与表达式左操作数为假,所以整个表达式为假,所有没有必要再计算右边的表达式,所以将3赋值给a不会被执行,所以a的值为0,所以输出的值为0。

 

逻辑或:

 

 

 逻辑或表达式:两边表达式有一个为真,整个表达式都为真。逻辑或也是从左往右计算了,即便加了括号也是,左操作数为1为真,所以右操作数不会被计算,所以a的值还是为0,最终输出的结果为0。

 

 

 

执行方案一:输出为4

a += 1;

a *= 2;

printf(“%d\n”,a);

注:先进行a += 1,a的值就变成了1,再进行a *= 2,a的值就变成了2,所以最后结果为a +a也就是2+2为4

执行方案二:输出为2

a *= 2;

a += 1;

printf(“%d\n”,a);

8.条件运算符:是C语言中唯一的三目运算符,其优先级为13。C语言中条件运算符的运算方向也必须自左往右

 

 

 

 

 

 

 输出1,2

注:如果else语句没有加上圆括号,则会认为1?printf("1\n"),printf("2\n"):printf("3\n")是逗号的左操作数,其中逗号的右操作数不论怎样都会被执行。

当if语句判断情况超过两种:

使用条件运算符写的分支结构比较简洁,但没有if语句可读性强。

 

输出两个整型数据较大那个数的值:

 

 

 

c语言中条件运算符的运算顺序也是必须自左往右的:

程序并不会因为圆括号优先级别高而先去执行(a += 2),而先会执行问号前的表达式,通过其真假来选择是否执行中间的表达式(a += 2)。0为假,所以不会执行中间的表达式,而会执行冒号后面的else的控制语句,所以a += 2是操作不会被执行,所以输出a的值还是为0。

 

 

 

 

 

 

 

全局变量及宏定义.c:

(1)   宏名、全局变量名建议大写

(2)   #号开头的都是预处理指令,预处理是发生在预编译阶段(编译阶段之前),对源程序文件进行一些简单的文本替换——vc++中编译按钮集成了预编译和编译的

当我们点击编译按钮时,其实集合了预编译和编译功能

(3)   全局变量的作用域就是从定义处开始,到整个文件的末尾

注:头文件中有函数声明,全局变量声明,宏定义

  库文件中有相应的函数定义,全局变量的定义。

 

 

 

 

 

 

标识符命名规范及变量作用域总结.c

标识符命名规范:

  在程序使用的变量名、函数名、宏名等统称为标识符。

  除库函数的函数名由系统定义外,其余都由用户自定义。C规定,标识符只能是字母(A—Z,a—z),数字(0—9)、下划线(_)组成的字符串,并且其第一个字符必须是字母或下划线。

  需要注意:

  1.标识符不能和C语言的关键字相同,也不能和用户自定义的函数或C语言库函数重名。

  2.不同的C语言编译器对标识符的长度规定不同,例如在某版本C中规定标识符前八位有效,当这两个标识符前八位相同时,则被认为是同一个标识符。(VC++6.0中规定标识符最长不允许超过32个字符)

  1.变量的作用域,就看变量直接隶属于那个“花括号”,那么其作用域就是从定义处开始,到这个“花括号”的末尾结束。

  注意:全局变量所直接隶属的“花括号”就是这个文件,函数原型形参所直接隶属的“花括号”就是该函数的函数体

  2.同个“花括号”中不可以“直接”定义重名变量。

  3.在文件的某一处引用重名变量时,所引用的变量就是作用域较小的那一个变量。

 

posted @ 2020-02-19 16:57  XANN  阅读(407)  评论(0编辑  收藏  举报