资源描述
. .
01.C程序根本构造
一、C语言的特点:
1、C语言源程序的根本组成单位是函数;一个C程序可由假设干个函数组成,其中必须有且仅有一个以main命名的主函数,其余的函数名称可由编程者自行设定。,
2、C程序的执行总是由main()函数的第一个可执行语句开场,到main〔〕函数的最后一个可执行的语句完毕;而其他函数都是在main〔〕函数开场执行以后,通过其他函数的调用才得以运行。
3、C语言系统提供了丰富的库函数,用户在程序中需要调用某个库函数时,必须用#include编译预处理命令将描述该库函数的头文件包含进去。
二、C程序的书写格式:
1、语句可从分开放在任意多行内;
如:printf(“To C,〞);
printf(“ or not to C:〞);
与printf(“To C , or not to C:〞);是等价的
2、一行中可以有假设干个语句;
如:a=123;b=345;
3、每个语句和数据定义的最后必须有一个分号;
三、C语言程序的运行:
1、编译(pile):将C源程序文件翻译成能被计算机识别的二进制形式的“目标〞文件;编译时,编译器将检查源程序每一条语句的语法错误。
2、建造(Bulid):
C语言程序例如:显示“Hello〞
#include<stdio.h>
int main(void)
{
printf(“Hello.\n〞);
return 0;
}
说明:#include<stdio.h> 是必不可少的,它包含了C语言标准输入输出库的相关信息;
printf函数来自〞标准输入输出库〞,可以产生格式化输出;
\n 告诉printf函数执行完信息显示后要进展换行操作;
return 0 说明程序终止时会向操作系统返回值0;
{ }来标出main〔〕函数的起始和完毕。
02.数据类型
一、C语言的特点:
1、C语言源程序的根本组成单位是函数;一个C程序可由假设干个函数组成,其中必须有且仅有一个以main命名的主函数,其余的函数名称可由编程者自行设定。
2、C程序的执行总是由main()函数的第一个可执行语句开场,到main〔〕函数的最后一个可执行的语句完毕;而其他函数都是在main〔〕函数开场执行以后,通过其他函数的调用才得以运行。
3、C语言系统提供了丰富的库函数,用户在程序中需要调用某个库函数时,必须用#include编译预处理命令将描述该库函数的头文件包含进去。
二、C程序的书写格式:
1、语句可从分开放在任意多行内;
如:printf(“To C,〞);
printf(“ or not to C:〞);
与printf(“To C , or not to C:〞);是等价的
2、一行中可以有假设干个语句;
如:a=123;b=345;
3、每个语句和数据定义的最后必须有一个分号;
三、C语言程序的运行:
1、编译(pile):将C源程序文件翻译成能被计算机识别的二进制形式的“目标〞文件;编译时,编译器将检查源程序每一条语句的语法错误。
2、建造(Bulid):
C语言程序例如:显示“Hello〞
#include<stdio.h>
int main(void)
{
printf(“Hello.\n〞);
return 0;
}
说明:#include<stdio.h> 是必不可少的,它包含了C语言标准输入输出库的相关信息;
printf函数来自〞标准输入输出库〞,可以产生格式化输出;
\n 告诉printf函数执行完信息显示后要进展换行操作;
return 0 说明程序终止时会向操作系统返回值0;
{ }来标出main〔〕函数的起始和完毕。
03,运算符和表达式
1、算术运算符和表达式
+:加法运算符,如 3+5;
-:减法运算符,如 5-3;
*:乘法运算符,如 5*8;
/:除法运算符,如 3/6;参与运算量均为整型时,结果也为整型,舍去小数;假设运算量中有一个是实型,那么结果为双精度实型。
%:模运算符,也称“取余运算符〞,用于计算两数相除后的余数,如 5%3=2;
2、赋值运算符和赋值表达式
l 赋值运算符:〞=〞,其作用是将一个表达式的值赋给一个变量;
其一般形式为:变量=表达式
如:
x=a+b;
l赋值表达式的功能是计算表达式的值再赋予左边的变量。赋值运算符具有右结合性。因此 a=b=c=5 可理解为 a=(b=(c=5));
l复合赋值运算符:+=、-=、*=、/=、%=、>>=、<<=、&=、^=、|=
构成复合赋值表达式的一般形式为:变量 双目运算符=表达式
它等价于:变量=变量 运算符 表达式
如:
a+=5 等价于a=a+5
x*=y+7 等价于x=x*(y+7)
r%=p 等价于r=r%p
3、类型转换
如果赋值运算符两边的数据类型不一样,系统将自动进展类型转换,即把赋值号右边的类型换成左边的类型。具体规定如下:
1)实型赋予整型,舍去小数局部。前面的例子已经说明了这种情况。
2)整型赋予实型,数值不变,但将以浮点形式存放,即增加小数局部(小数局部的值为0)。
3)字符型赋予整型,由于字符型为一个字节,而整型为二个字节,故将字符的ASCII码值放到整型量的低八位中,高八位为0。整型赋予字符型,只把低八位赋予字符量。
4、自增、自减运算符:
l 自增运算符:“++〞,功能是将变量的值加1;
l 自减运算符:“--〞,功能是将变量的值减1;
可有以下几种形式:
++i i自增1后再参与其它运算。
--i i自减1后再参与其它运算。
i++ i参与运算后,i的值再自增1。
i-- i参与运算后,i的值再自减1。
注:
〔1〕〞++〞、〞--“的操作对象只能是变量;
(2)〞++〞、〞--“运算优先级一样,且结合方向自右向左;-i++应理解为-〔i++〕,
【例】自增、自减运算、
#include<stdio.h>
main()
{
int i=8;
printf("%d\n",++i); /* i先加1,再输出i ,输出结果为9 */
printf("%d\n",--i); /* i先减1,再输出i ,结果为8 */
printf("%d\n",i++); /* 先输出i ,输出结果为8,i再加1, */
printf("%d\n",i--); /* 先输出i ,输出结果为9,i再减1, */
printf("%d\n",-i++); /* 先加输出-i,输出结果为-8,i再加1 */
printf("%d\n",-i--); /* 先输出-i ,输出结果为-9,i再减1 */
}
5、求字节运算符
计算表达式的结果所占字节数或某种数据类型的定义字节数。
一般格式:sizeof(数据类型标识符) 或 sizeof〔表达式〕
如: sizeof〔float〕的值为4,占4个字节;
sizeof〔2*3〕的值为2,占2个字节;
6、关系运算符和关系表达式
l 关系运算符:“<〞(小于)、 “<=〞(小于等于) 、〞>〞(大于)、〞>=〞(大于等于) 、〞==〞〔等于〕、 “!=〞〔不等于〕
l 关系表达式:假设关系表达式成立,其值为“真〞,否那么为“假〞;在C语言中,用0代表“假〞,用1代表“真〞;
7、逻辑运算符和逻辑表达式:
l 逻辑运算符: “!〞 〔非〕、 “&&〞 〔与〕、 “||〞〔或〕;运算优先级: !>&&>||
l 逻辑表达式:用逻辑运算符将表达式连接起来的式子;逻辑表达式的结果仍然是逻辑量〔“真〞或“假〞〕
8、条件运算符:
一般格式: <表达式1>?<表达式2>:<表达式3>
先计算表达式1,假设表达式1的值为真,那么计算表达式2的值,且表达式2的值为整个条件表达式的值;否那么,计算表达式3的值,且表达式3的值即为整个条件表达式的值。
9、逗号运算符和逗号表达式
l 逗号运算符:〞,〞作为运算符,其功能是将多个表达式组成一个表达式;
一般形式:表达式1,表达式2,…,表达式n
求解过程:先计算表达式1,再计算表达式2,依此计算表达式n,最终,表达式n的值即为整个表达式的值。
04.顺序构造
一、概述:
顺序语句按照语法形式分为:表达式语句、函数调用语句、复合语句、流程控制语句和空语句。
1、表达式语句:
语法格式:表达式;
如:a+4;
其中赋值语句为最典型的表达式语句,如:
a=5;
a=b+3;
特别提示:分号〔;〕是表达式语句中不可缺少的一局部。
2、函数调用语句:
如:printf〔〞I am a student!〞〕;
其中:printf()为系统提供的函数,用于显示信息。
3、复合语句:
所谓“复合语句〞即由一对“{}〞括起来的一组语句,也称“块语句〞或“分程序〞。
一般形式为:
{
语句1
语句2
...
语句n
}
如:
{
i++;
j=a+3;
printf("%d,j=",i,j);
}
特别提示:复合语句中的最后一条语句的分号不得缺少;复合语句的“}〞之后不得有分号。
4、空语句:
“空语句〞即为一个独立的分号。
如:
main〔〕
{
...
;
...
}
二、数据的输入输出
C语言提供了一些输入输出函数,如printf()和scanf(),在程序中调用这些输入输出函数时,必须将标准输入输出头文件“stdio.h〞包含到用户所编写的源程序中。
如:#include <stdio.h>
其中:#include命令一般写在程序的开头位置。
1、格式输入输出
1、格式输出函数printf()
(1)一般格式: printf(格式字符串,输出列表)
其中:“格式字符串〞包括“输出字符〞和“格式控制字符〞(由%和格式字符组成,指定输出项的输出格式〕。
• d格式符:用于输出十进制整数;
%d:以十进制形式显示输出变量的值;
%5d:以十进制形式显示变量的值,且至少占用5个字符的空间,假设不够5位数字,那么左侧补空格;
%-5d:以十进制形式显示变量的值,且至少占用5个字符的空间,左对齐;
%5.3d:以十进制形式显示变量的值,且至少占用5个字符的空间并至少有3位数字,假设不够3位数字,那么左侧补0;
如:#include<stdio.h>
main()
{
int i;
i=40;
printf(“%d\n〞,i);
printf(“%5d\n〞,i);
printf(“%-5d\n〞,i);
printf(“%5.3d\n〞,i);
}
• f格式符:用于以小数形式输出实数;
%10.3f:以定点十进制形式显示变量的值,且总共用10个字符,其中,整数位6位,小数位3位,小数点1位;
如:#include<stdio.h>
main()
{
float x;
x=839.21f;
printf(“%10.3f\n〞,x);
}
• c格式符:用于输出一个字符;
如: x=〞a〞,y =〞b〞,
那么 printf(%c %c",x,y)的输出结果为:a b
假设变量的值为整数,那么输出该整数值为ASCII码的字符:
如 x=65,y=98,那么 printf(“%c, %c〞,x,y)的输出结果为: A, b;
同理,一个字符的数据也可以以整数的形式输出;
如 x=’a’,y=’B’,那么printf(“%d,%d〞,x,y)的输出结果为:97,66
• s格式符:用于输出一个字符串。
如:printf(“%s〞,〞I am a student !〞)
• e,E格式符:用于以指数形式输出实数。
如:printf(“%e〞, 123.456),那么输出结果为:1.234560e+002;
• g,G格式符:用于输出实数,根据数值的大小自动选择f格式或e格式。
2、格式输入函数scanf()
(1)一般格式:
scanf(格式字符串,变量地址表)
其中:格式字符串使用双引号括起来的字符串,包括“普通字符〞〔按原样输入〕、“格式控制字符〞〔由%和格式字符组成,用来标定输入数据的格式〕。
变量地址表是由假设干个变量地址组成的表列,可以是变量的地址,也可以使字符串的首地址。
• d格式:用于输入十进制整数;
如:scanf(“%d,%d〞,&x,&y);那么输入格式为:123 ,3456
•u格式:用于输入十进制无符号整数;
•f格式:用于输入以小数形式的实数;
如:scanf(“%f,%f〞,&x,&y);那么输入格式为:123.23,23.456
•c格式:用于输入一个字符;
如:scanf(“%c,%c〞,&x,&y);那么输入格式为:a,b
•s格式:用于输入一个字符串;
如:scanf(“%s〞,a);假定a为字符数组,那么输入格式为:abcdef
注:输入的字符串中间不能包含空格。
特别说明:
• 对于变量,〞&〞加变量名即为该变量的地址;如:&a、&b等分别表示变量a和变量b的地址;
•对于字符串数组或字符指针型变量,数组名和指针变量名本身即为其地址;
•可以在%和格式字符之间加表示位数的数字;如:scanf(“%5s〞,p);表示只能输入5个字符给字符串指针p;
3、字符数据的输入输出:
(1)putchar()函数:是向标准输入输出设备输出一个字符;
其调用格式为:putchar(ch); 其中:ch为一个字符变量或常量;
putchar()函数作用等同于 printf(“%c〞,ch);
(2)getch() getche()和getchar()函数:
•getch():从键盘上读入一个字符,但不显示在屏幕上;
•getche():从键盘上读入一个字符,显示在屏幕上;
•getchar():从键盘上读入一个字符,并显示在屏幕上,但直到输入回车键时才完毕输入,第一个字符为其函数的返回值。
05.选择构造
一、if语句:
一般格式:
if(表达式) 语句;
表示:当“表达式〞成立时,那么执行“语句〞;否那么跳过“语句〞;
如:if (a>b) printf(“a>b!〞);
例:假设用户输入的数为3的倍数,那么显示〞OK〞
#include<stdio.h>
main()
{
int a;
scanf(“%d〞,&a);
if(a %3==0) printf(“OK〞);
}
二、if-else 语句:
一般格式:
if (表达式)
语句1;
else
语句2;
例:给出用户输入的两个整数的较大者
#include<stdio.h>
main()
{
int a,b;
scanf(“%d,%d〞,&a,&b);
if(a>b)
printf(“the max=%d〞,a);
else
printf(“ the max=%d〞,b);
}
三、if语句的嵌套
1、if子句中嵌套:
• if(表达式1)
if(表达式2) 语句1;
else 语句2;
else 语句3;
• if(表达式1)
{ if(表达式2) 语句1; }
else 语句2;
2、else子句中嵌套
• if (表达式1) 语句1;
else
if(表达式2) 语句2;
else 语句3;
• if(表达式1) 语句1;
else
if(表达式2) 语句2;
3、嵌套一般格式:
if (表达式1) 语句1;
else if (表达式2) 语句2;
else if (表达式3) 语句3 ;
…
else if(表达式n) 语句n;
else 语句n+1;
例:将用户输入的成绩按以下规那么转换成等级成绩:
分数: 90~100 等级:优
分数: 80~89 等级:良
分数: 70~79 等级:中
分数: 60~69 等级:及格
分数: 60以下 等级:不及格
# include<stdio.h>
main()
{
int d;
printf(“输入分数:〞);
scanf(“%d〞,&d);
if(d>=90 ) printf(“优〞);
else if(d>=80) printf(“ 良〞);
else if(d>=70) printf(“ 中〞);
else if(d>=60) printf(“ 及格〞);
else printf(“ 不及格〞);
}
四、条件语句:
表达式1 ? 表达式2 :表达式3
执行的过程:假设表达式1的值为非0时,该条件语句的职位表达式2,否那么为表达式3;
例:求一个整数的绝对值
#include<stdio.h>
main()
{
int i,absi;
scanf(“%d〞,&i);
absi=i>0 ? i : -i;
printf(“%d绝对值是%d\n〞,i,absi);
}
五、switch语句
switch 〔表达式〕
{
case 常量表达式1:
语句1 ;
break;
case常量表达式2:
语句2 ;
break;
…
case常量表达式n:
语句n ;
break;
default:
语句n+1;
}
例:商店卖货物,每一件3.5元,按购置的数量给与优惠:
购置100件,优惠5%;
购置200件以上,优惠6%;
购置300件以上,优惠8%;
购置400件以上,优惠10%;
购置500件以上,优惠15%;
#include<stdio.h>
main()
{
int n;
float p,price;
scanf("%d",&n);
switch(n/100)
{
case 1:
p=0.05;
break;
case 2:
p=0.06;
break;
case 3:
p=0.08;
break;
case 4:
p=0.10;
break;
case 5:
p=0.15;
break;
}
price=3.5*n*(1-p);
printf("%应付款=%7.2f\n",price);
}
06.循环构造
一、for语句:
一般格式: for( 表达式1 ;表达式2;表达式3) 语句;
表示:先计算表达式1的值,再计算表达式2的值,假设表达式2的值为0,那么跳出循环体,转去执行循环体后面的程序命令;假设表达式2的值非0,那么执行循环体中的语句,接着计算表达式3的值;而后,再从计算表达式2的值开场重复上诉操作,直到表达式2的值为0时完毕。
例:计算sum=1+2+3+…+100的值〞
#include<stdio.h>
main()
{
int i,sum;
sum=0;
for(i=1;i<=100;i++)
sum=sum+i;
printf(“sum=%d〞,sum);
}
二、while 语句:
一般格式:
while<表达式>
语句;
表示:先计算表达式的值,假设为非0,那么执行循环体语句,然后再计算表达式的值,重复上述过程,直到计算表达式的值为0时完毕循环。
例:计算sum=1+2+3…+100的值
#include<stdio.h>
main()
{
int i,sum;
i=1;
sum=0;
while(i<=100)
{
sum=sum+i;
i++;
}
printf(“sum=%d〞,sum);
}
三、do-while语句
1、一般格式:
Do
语句;
While<表达式>;
表示:先执行一次循环语句,然后计算表达式的值,假设表达式的值非0,那么再执行循环语句,然后从计算表达式的值开场重复上述过程,直到计算表达式的值为0,循环完毕。
例:计算sum=1+2+3…+100的值
#include<stdio.h>
main()
{
int i,sum;
i=1;
sum=0;
do
{
sum=sum+i;
i++;
}while(i<=100);
printf(“sum=%d〞,sum);
}
四、break和continue语句:
1、break语句:
使用break语句可以提前完毕由while、for、do-while语句构成的循环,而去执行循环下面的语句。
例:判定用户输入的一个数是否为素数
#include<stdio.h>
main()
{
int a,d;
printf(“请输入一个整数:〞);
scanf(“%d〞,&a);
for(d=2;d<a;d++)
if(a%d==0)
break; // 跳出当前的循环,执行循环后面的语句
if(d<a)
printf(“%d 不是素数〞, a);
else
printf(“%d 是素数 “,a);
}
2、continue:
continue语句用于for、while、do-while语句中,其作用是完毕本次循环,接着进入下一次是否执行循环的判断。
例:输入10个非0的整数并求和。
#inclu de<stdio.h>
main()
{
int i,n=0,sum=0;
while(n<10)
{
printf(“ 请输入整数:〞);
scanf(“%d〞,&i);
if(i==0)
continue; // 假设为0,那么继续输入下一个数
sum+=i;
n++;
}
printf(“%d〞,sum);
}
五、三种循环的比拟:
1、三种循环可以处理同一个问题,一般情况下可以相互代替;
2、while和do-while循环语句只在while语句之后指定循环条件,在循环体内应包含使循环趋于完毕的语句;for循环语句可以在<语句3>中包含使循环趋于完毕的语句;
3、对于while和do-while循环语句,循环变量的初始化应在while和do-while语句之前完成;for循环语句可以在<表达式1>中进展;
4、while和for语句是先判断表达式,后执行循环;do-while循环语句是先执行循环,后判断表达式;
07数组
数组是一组具有同一名字、不同下标的变量。数组中带下标的变量称为数组元素,每个数组元素由数组名字和下标唯一地来确定;同一数组中的元素数据类型一样。
一、一维数组:
1、定义:只有一个下标的数组。
2、定义格式: 类型说明符 数组名[常量表达式]
如: int a[3]; //定义了一个一维数组,名称为a,数据类型为整型,含3个数组元素 a[0]、a[1]、a[2];
说明:
•类型说明符:是指数组的数据类型;
•常量表达式:是一个值为正整数的表达式,用来表示该数组的元素的个数,即数组的大小;
3、数组的引用: 数组名[下标]; 如: a[2]
4、数组的初始化:
•对数组的全部因素赋初值:
如: int a[3]={10,20,30}; 那么该语句执行后,a[0]=10,a[1]=20,a[2]=30;
• 对数组的局部元素赋初值:
如:int b[3]={12,11}; 那么该语句执行后,b[0]=12,b[1]=11,a[2]=0;
•对数组的全部元素赋初值时,也可将数组定义为一个不确定长度的数组:
如:int c[ ]={10,15,20};那么该语句执行后,数组c的长度自动确定为3,c[0]=10,c[1]=15,c[2]=20;
例:将输入的10个整数按反序输出
#include<stdio.h>
main()
{
int a[10],i;
printf("请输入10个整数:");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf(" 反序输出:"〕;
for(i=9;i>=0;i--)
printf("%d",a[i]);
printf("\n");
}
例:计算Fibonacci数列的前20项
Fibonacci数列定义:
f(1)=1
f(2)=1
f(n)=f(n-1)+f(n-2) (n>2)
#include<stdio.h>
main()
{
int f[21],i;
f[1]=1;
f[2]=1;
for (i=3;i<=20;i++)
f[i]=f[i-1]+f[i-2];
for (i=1;i<=20;i++)
{
printf("%8d",f[i]); //每个数字占8位
if(i%5==0) printf("\n"); //按5个一行输出
}
}
二、二维数组:
具有两个下标的数组为二维数组。
1、定义格式: 类型说明符 数组名[常量表达式][常量表达式]
如: int a[3][2]; //定义了一个二维数组,名称数组名为a,含有6个元素:a[0][0]、a[0][1]、a[1][0]、a[1][1]、a[2][0]、a[2][1];
说明:
•第一个常量表达式指出的是数组的行数;第二个常量表达式指出的是数组的列数;
•二维数组元素的顺序是:按行存放;即先顺序存放第一行的元素,再存放第二行的元素…以此类推;
其存储格式:
a[0][0] a[0][1]
a[1][0] a[1][1]
a[2][0] a[2][1]
2、二维数组的初始化:
同一维数组。
•分行为二维数组赋初值:
int a[3][2]={{1,2},{3,4},{5,6}};那么该语句执行后,a[0][0]=1, a[0][1]=2, a[1][0]=3,a[1][1]=4, a[2][0]=5, a[2][1]=6;
•按数组在存储时的排列次序赋初值:
int a[3][2]={1,2,3,4,5,6};
•对数组的局部元素赋初值:
int a[3][2]={{1},{2,3},{4}};
•忽略第一维的长度,对二维数组赋初值:
int a[][2]={1,2,3,4,5,6}; 该语句执行后,C语言系统自动计算出第一维的长度为6/2=3,同样有:a[0][0]=1, a[0][1]=2,a[1][0]=3,a[1][1]=4, a[2][0]=5, a[2][1]=6;
例:将两个2行3列的矩阵相加,并显示结果。
#include<std
展开阅读全文