程序的基本结构(从程序流程角度):1)顺序结构;2)分支结构;3)循环结构
-
C语言的程序功能是由执行语句实现的,语句可分为5类:1)表达式语句;2)函数调用语句;3)控制语句;4)复合语句;5)空语句
1)表达式语句:由表达式加上分号”;”组成
一般形式为:表达式 ;
表达式语句的目的就是计算表达式的值。
2)函数调用语句:由函数名、实际参数加上”;” 组成
一般形式为:函数名(实际参数表);
执行函数语句就是调用函数体并把实际参数赋予函数定义中的参数形式,然后执行被调用函数体中的语句,求取函数值。
例,printf(“This is an example!”); 这里调用库函数printf(),来输出字符串。
3)控制语句:用于控制程序的流程,以实现程序的各种结构方式。它们由特定的语句定义符组成。C语言有九种控制语句。可分为:(1)条件判断语句:if语句、switch语句; (2) 循环执行语句:do while 语句、while语句、for语句; (3) 转向语句:break语句、goto语句、continue语句、return语句。
4)复合语句:把多个语句用括号{}括起来组成的一个语句为复合语句(注:应把复合语句看成是单条语句,而不是多条语句。)例,{
int a, b, c;
a = 1;
b = 2;
c = a + b;
printf(“%c”, c);
} 这就是一条复合语句5)空语句:只有分号“;”组成的语句称为空语句。空语句是什么也不执行的语句。在程序中空语句可用来作控循环体。
例, while(getchar() != ‘\n’)
{
;
} (本语句的功能是,只要从键盘输入的字符不是回车,则重新输入) 赋值语句
给变量赋初值和赋值语句的区别:给变量赋初值是变量说明的一部分,赋初值后的变量与其后的其他同类变量之间仍必须用逗号间隔,而赋值语句则必须用分号结尾。(注:在变量说明中,不允许连续给多个变量赋值,例如,int a = b = c = 1;是错误的,应该是int a =1, b = 1, c = 1;)
赋值表达式和赋值语句的区别:赋值表达式是一种表达式,他可以出现在任何语序表达式出现的地方,而赋值语句则不能。(例, 合法语句 if((x = y + 5) > 0) z = x;)(非法语句if((x = y + 5;) > 0): z = x;)-
数据输入输出概念及在C语言中的实现
1)在C语言中,所有的数据输入/输出都是由库函数完成的。因此都是函数语句。
2)在使用C语言库函数时,要用预编译命令#include 将有关“头文件”包含到源文件中。
(例如, #include<stdio.h>或#include”stdio.h”(注:是standard input & output的意思))
3)因为printf() 和scanf()函数使用频繁,系统允许在使用这两个函数时不加#include<stdio.h>或#include”stdio.h”(会warning,但是为了养成好的编写程序习惯,要写上)putchar() 函数:是字符输出函数,其功能是在显示器上输出单个字符。
一般形式是:putchar(字符变量); (注:对控制字符则执行控制功能,不在屏幕上显示。且在使用前要调用“stdio.h”头文件)getchar()函数:功能是从键盘上输入一个字符。 一般形式为:getchar(); (通常情况下会把输入的字符赋值给一个变量,即 char a; a = getchar();) (注:getchar()使用不需要调用头文件)
printf()函数:使用printf()函数时需要注意输出列表中的求值顺序。不同的编译器不一定相同,可以从左到右,也可以从右到左。
<pre>
/#include<stdio.h>
/void main()
{
int i = 8;
printf("%d, %d, %d, %d, %d, %d\n",++i, --i, i++, i--, -i++, -i--);
}
//输出:8, 8, 7, 8, -7, -8
</pre>
<pre>
/#include<stdio.h>
void main()
{
int i = 8;
printf("%d, ", ++i);
printf("%d, ", --i);
printf("%d, ", i++);
printf("%d, ", i--);
printf("%d, ", -i++);
printf("%d\n", -i--);
}
//输出:9, 8, 8, 9, -8, -9
</pre>
printf()函数的格式字符串:
1)类型:类型字符用以表示输出数据的类型,其格式符和意义如下表所示:
2)标志:标志字符为-、+、#、空格四种,其意义下表所示:
- 输出最小宽度:用十进制整数来表示输出的最少位数。若实际位数多于定义的宽度,则按实际位数输出,若实际位数少于定义的宽度则补以空格或0。
- 精度: 精度格式符以“.”开头,后跟十进制整数。本项的意义是:如果输出数字,则表示小数的位数;如果输出的是字符,则表示输出字符的个数;若实际位数大于所定义的精度数,则截去超过的部分。
- 长度:长度格式符为h,l两种,h表示按短整型量输出,l表示按长整型量输出。
- scanf()函数:称为格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量中。(注:不能显示非格式字符串,格式字符串(如%c, %d等)是为了承接字符)
一般形式:scanf(“格式控制字符串”, 地址列表) (注:随不强制要求加头文件”stdio.h”, 但是因为书写习惯保持要加上)
<pre>
/#include<stdio.h>
void main()
{
char a;
scanf("%c", &a); //(在gcc中,如果%c前面加上非格式字符串,那么即使输入任何合法字符,在printf时都无法显示,而且不会报错。)
//(在这里,&a 表示变量a的内存地址)
printf("This is a char: %c \n", a);
}
</pre>
(变量值和变量的地址的关系是:变量的地址(&a)是变量a对应的内存空间的地址,而在内存空间中存储的是变量的值,因此,要找变量的值必须先找变量地址,然后根据变量地址得到变量的值。 在赋值表达式中,不能直接写&a = 123,而应写a = 123。 这里的”&”指的是取地址运算符。)
scanf()函数注意事项:
1) scanf()函数没有精度控制,所以 scanf(“%5.2f”, &a) 是非法的;
2)scanf()函数中要求给出变量地址,如给出变量名则会出错,如scanf(“%f”, &a)是合法的。
3)在输入多个数值数据时,若格式控制中没有非格式字符串作输入数据之间的间隔则可用空格,Tab或回车作为间隔(C语言编译时碰到空格,Tab或回车或者非法数据时(即不符合要求或规范的输入数据),即认为该数据结束。)
4)在输入字符数据时,若格式控制字符串中无非格式字符,则认为所有输入的字符均为有效字符。
//例
<pre>
/#include<stdio.h>
void main()
{
char a, b, c;
scanf("%c%c%c", &a, &b, &c);
printf("There are chars: %c, %c, %c \n", a, b, c);
}
//输入:a b c
//输出:a, , b (注:这里的空格’ ’也是char类型所以为有效字符)
</pre>
5)如果格式控制字符串中有非格式字符则输入时也要输入该非格式字符串(否则不能正确输出)
//例
<pre>
/#include<stdio.h>
void main()
{
char a, b, c;
scanf("%c, %c, %c", &a, &b, &c);
printf("There are chars: %c, %c, %c \n", a, b, c);
}
//输入:a, b, c
//输出:a, b, c
//输入:a b c
//输出:a, ,
</pre>
scanf()函数的格式字符串: 一般形式为:%[*][输入数据宽度][长度]类型(注:方括号[]为任选项)
1)类型:表示输入数据的类型,其格式和意义如下表:
2)“*” 符:表示该输入项读入后不赋予相应的变量,即跳过该输入值。
//例
<pre>
/#include<stdio.h>
void main()
{
int a, b;
scanf("%d, *%d, %d", &a, &b);
printf("This is a number: %d, %d \n", a, b);
}
//输入:1, 2, 3
//输出:This is a number: 1, 3
</pre>
3)宽度: 用十进制整数制定输入的宽度(即字符数)。
//例
<pre>
/#include<stdio.h>
void main()
{
int a, b;
scanf("%4d%4d", &a, &b);
printf("This is a number: %d, %d \n", a, b);
}
//输入:12345678
//输出:This is a number:1234, 5678
</pre>
<pre>
/#include<stdio.h>
void main()
{
int a;
scanf("%4d", &a);
printf("This is a number: %d \n", a);
}
//输入:12345678
//输出:This is a number: 1234 (只截取有效的4位数)
</pre>
4)长度:长度格式符为l和h,l表示输入长整形数据(如%ld)和双精度浮点数(如%lf); h表示输入短整型数据。