资源描述
1.第一个c程序:
# include "stdio.h" /*该行是文件包含命令*/
main(){
printf("test"); /*函数调用:printf将内容输出到显示器*/
}
注:c语言区分大小写;
程序中必须含有一个且只有一个名字为main的主函数;
每行程序必须以";"结尾;
/* ... */是注释内容。
2.引申例题:计算任意半径圆的面积和周长。
#include "stdio.h"
main(){
float r,l,area; /*定义float类型变量*/
scanf("%f",&r); /*调用获取键盘输入函数*/
l = 2*3.14*r;
area = 3.14*r*r;
printf("\n l=%f,area=%f\n",l,area);
}
注:r,l,area是float类型的变量,程序运行中可改变,float是c语言中的一种数据类型。
3求两个数的和。
#include "stdio.h"
main(){
int i,j,sum;
int Add(int m,int n); /*声明函数*/
scanf("%d %d",&i,&j);
sum = Add(i,j); /*调用函数*/
printf("\n sum=%d \n",sum);
}
int Add(int m,int n){ /*函数*/
return m + n;
}
注:scanf("%d %d",&i,&j);中的&是取地址运算符。
通过以上三个例子的总结:
1.一个c语言源程序可以由一个或多个源文件组成,每个源文件可以由一个或多个函数组成,一个源程序无论有多少个源文件或函数,都只能有一个且只能有一个mian函数。
由"#"引入的指令为预处理指令。
4常见语法规范。
标示符:程序中的变量名、函数名、标号等统称为标示符。C语言规定标示符只能由字母、数字和下划线"_"组成,并且第一个字符必须是字母或下划线。
1常见数据类型
Int、short、long、unsigned、float、double、char、enum、void、指针类型、数组类型、struct、union等。
基本数据类型:Int、short、long、unsigned、float、double、char、enum都属于基本类型。特点是其值不可再分。
2常量。
常量定义方式:#define 标示符 常量
常量分为:直接常量和符号常量。
例题:求任意圆的周长和面积,使用常量定义π。
#include "stdio.h"
#define PI 3.1415926
main(){
float r,l,area;
scanf("%f",&r);
l = 2*PI*r;
area = PI*r*r;
printf("\n l=%f area=%f \n",l,area);
}
注:常量值不能被修改;习惯上常量名大写,变量名小写;
整型常量(整型):
1.十进制整常数:0~9数字,无前缀等,也就是整常数。例如:237、-783、65535;
2.八进制正常数:以0为前缀,数值为0~7,八进制通常是无符号数。例如:023;
3.十六进制整常数:前缀为0X或0x,由0~9,a~f或A~F组成(不区分大小写),例
如:0X23A、0XAA、0xFFF0;
4.长整型常量:使用L或小写l作为后缀,例如:123L(十进制123)、012l(八进制10)、0x15L(十六进
制21)。
5.无符号数的后缀表示:整常数的无符号型是用后缀U或u表示,例如:58u。前缀后缀可使用各种类型的
数,如:0xA5Lu表示十六进制无符号长整数A5。
实型常量(浮点型):
1.十进制小数形式:由0~9和小数点组成,例如:0.0、0.34、4.23。
2.指数形式:由十进制构成基数,加阶码标志e或E以及阶码组成,例如:1.2E5(2.1*10^5)。
字符常量:字符常量在内存中是以ASCII码形式存储的,字符常量可以表示所有字符,字符常量包括普通字符常量和转义字符。
1.普通字符常量:使用''单引号括起来的一个字符,例如:'a'、'='、'?'等。
注:字符常量只能用单引号不能用双引号;只能是单个字符,不能是多个字符;字符不能参与数值运算。
2.转义字符:转义字符以'\'开头,具有特定的含义,例如:'\n'是回车换行、't'是制表tab、'\\'转义
反斜线。
字符串常量:字符串常量是指用""括起来的若干个字符组成的序列,例如:"hello"、"sdk sd s@"等。字符串常量的每个字符都占一个字节,设计需要字符串常量最后要存储一个结束符'\0',如果没有结束符,程序输出时就不知道何时停止。字符串中也要涉及到转义字符问题。C语言中没有响应的字符串变量,但是可以用一个字符数值存储一个字符串。
典型题:"A"和'A'在内存中占的字节数?
'A'只占一个字节,"A"占两个字节,因为字符串末尾含一个结束符,占一个字节。
3变量。
变量定义方式:数据类型 变量名1,变量名2,变量名3,...;
变量也分为整型变量实型变量和字符型变量。
变量的使用规范:
1.使用之前必须先定义;
2.变量赋值需要注意的:
可同时定义几个变量int i,j,k;
对多个变量同时赋值时int i=3,j=4,k=8;不可写成int i=j=k=5;
C语言学习笔记(四)--运算符与表达式(下)
1逗号运算符和逗号表达式
1.1逗号表达式格式:表达式1,表达式2,表达式3,...,表达式n;
该表达式的功能是:先计算表达式1,再计算表达式2,最后计算表达式n,最后一个表达式的值为此逗号表达式的值。
1.2逗号表达式的优先级:最低。
1.3逗号表达式的值:
例子代码:
#include "stdio.h"
main(){
int a,b,c;
a=1,b=2,c=a+b+3;
printf("%d,%d,%d\n",a,b,c);
c=(a++,a+=b,a-b); /*变量c保存逗号表达式的值*/
printf("%d,%d,%d\n",a,b,c); /*逗号表达式的作用为顺序求值*/
}
输出结果如下:
1,2,6
4,2,2
2关系运算符和关系表达式
2.1C语言中的真值和假值:C语言中没有逻辑型数据,所以C语言规定,用整型常量1来表示真值,所有非0的表达式和常量的逻辑值都为1,用整型常量0表示假值,只有表达式的值为0的常量和表达式的逻辑值为0。
关系表达式例子代码:
#include "stdio.h"
main(){
char x='m',y='n';
int n;
n=x<y; /*取关系表达式x<y的值*/
printf("%d\n",n);
n=x==y-1; /*取关系表达式x==y-1的值*/
printf("%d\n",n);
n=('y'!='Y')+(5<3)+(y-x==1); /*取关系表达式x==y-1的值*/
printf("%d\n",n);
}
程序运行结果:
1
1
2
关系表达式参加算术运算:
#include "stdio.h"
main(){
int a,b,c;
a=b=c=10; /*变量a,b,c赋初值*/
a=b==c;
printf("a=%d,b=%d,c=%d\n",a,b,c); /*注意等号与赋值号的区别*/
a=(b+(c++>2));
printf("a=%d,b=%d,c=%d\n",a,b,c);
/*关系表达式的值可以参加运算c++>2成立,值为1和b相加值放到a中存放*/
a=b>c*100;
printf("a=%d,b=%d,c=%d\n",a,b,c);
/*利用关系表达式计算要注意运算的优先级*/
}
程序运行结果:
a=1,b=10,c=10
a=11,b=10,c=11
a=0,b=10,c=11
3逻辑运算符和逻辑表达式
3.1基本逻辑运算符包括:单目运算符!,双目运算符&&、||。
C规定了运算符的优先次序即优先级。 当一个表达式中有多个运算符参加运算时, 将按下表所规定的优先级进行运算。表中优先级从上往下逐渐降低, 同一行优先级相同。
例如:
表达式 10>4&&!(100<99)||3<=5 的值为1
表达式 10>4&&!(100<99)&&3<=5 的值为0
Turbo C运算符的优先次序
()(小括号) [](数组下标) .(结构成员) ->(指针型结构成员)( 最高)
!(逻辑非) .(位取反) -(负号) ++(加1) --(减1) &(变量地址)
*(指针所指内容) type(函数说明) sizeof(长度计算)
*(乘) /(除) %(取模)
+(加) -(减)
<<(位左移) >>(位右移)
<(小于) <=(小于等于) >(大于) >=(大于等于)
==(等于) !=(不等于)
&(位与)
^(位异或)
|(位或)
&&(逻辑与)
||(逻辑或)
?:(?表达式)
= += -=(联合操作)
,(逗号运算符) ( 最低)
逻辑与运算符例子代码:
#include "stdio.h"
#define PI 3.1415926
main(){
int m,n;
int k;
k=(m=0)&&(m=1);
printf ("%d,%d\n",m,k);
k=(m=1)&&(m=0);
printf ("%d,%d\n",m,k);
k=(m=2)&&(m=1)&&(m=0); /*多层逻辑与运算的规则测试*/
printf ("%d,%d\n",m,k);
m=0,k=0;
n=k++&&m++;
printf ("%d,%d,%d\n",k,m,n);
m=0,k=0;
n=m++&&k++; /*测试表达式k++&&m++与m++&&k++*/
printf ("%d,%d,%d\n",k,m,n);
}
程序运行结果:
0,0
0,0
0,0
1,0,0
0,1,0
逻辑或运算符例子代码:
#include "stdio.h"
main(){
int m,n;
int k;
k=(m=0)||(m=1); /*逻辑或运算的计算规则*/
printf ("%d,%d\n",m,k);
k=(m=1)||(m=0);
printf ("%d,%d\n",m,k);
k=(m=2)||(m=1)||(m=0); /*多层逻辑或运算的规则测试*/
printf ("%d,%d\n",m,k);
m=0,k=0;
n=++m||++k;
printf ("%d,%d,%d\n",k,m,n);
m=0,k=0;
n=++k||++m;
printf ("%d,%d,%d\n",k,m,n); /*测试表达式++k||++m与++m||++k+*/
}
程序运行结果:
1,1
1,1
2,1
0,1,1
1,0,1
逻辑与和逻辑或混合运算例子代码:
#include "stdio.h"
main(){
int m,k;
k=(m=0)||(m=1)&&(m=2); /*表达式理解为(m=0)||((m=1 )&&(m=2))*/
printf ("%d,%d\n",m,k);
k=(m=2)||(m=1)&&(m=0); /*表达式理解为(m=2)||((m=1)&&(m=0))*/
printf ("%d,%d\n",m,k);
k=(m=2)&&(m=1)||(m=0); /*表达式理解为((m=2)&&(m=1))||(m=0)*/
printf ("%d,%d\n",m,k);
k=(m=0)&&(m=1)||(m=2); /*表达式理解为((m=0)&&(m=1))||(m=2)*/
printf ("%d,%d\n",m,k);
}
程序运行结果:
2,1
2,1
1,1
2,1
4条件运算符和条件表达式
4.1条件运算符"?:"是C语言中唯一的的三目运算符,优先级高于赋值运算
表达式语法: 表达式1?表达式2:表达式3
其执行顺序是:先求解表达式1,若为1则执行表达式2,否则执行表达式3。
例子代码:
#include "stdio.h"
main(){
char ch;
scanf("%c" , &ch); /* 输入一个字符,赋给变量ch */
ch=(ch>='A'&&ch<='Z')?(ch+'a'-'A'):ch; /* 当字符为大写字母时,将其变为小写字母*/
printf("\n%c",ch);
}
5sizeof运算符
5.1sizeof是C语言的一种单目运算符,运算对象是变量名、表达式或数据类型标示符。功能是以字节形式给出操作数的存储大小。
5.2语法格式:sizeof(表达式) 或sizeof 表达式 或sizeof(数据类型)
6取地址运算符
6.1取地址运算符的运算对象只能是变量,运算结果为变量的存储地址。
7几种运算混合运用
例子代码:
#include "stdio.h"
main(){
int x,y=1,z;
x=((9+6)%5>=9%5+6%5)?1:0; /*((9+6)%5>=9%5+6%5)等价于(((9+6)%5)>=(9%5+6%5))其值为0*/
printf(" x=%d\n",x);
y+=z=x+3; /* y+=z=x+3等价z=x+3,y=y+z*/
printf(" y=%d\t z=%d\n",y,z);
x=y=z=1;
--x&&++y||z++; /*混合的逻辑与和逻辑或运算*/
printf(" x=%d\t y=%d\t z=%d\n",x,y,z);
}
程序运行结果:
x=0
y=4 z=3
x=0 y=1 z=2
摘自 letthinking的专栏
C语言学习笔记(五)--顺序程序设计
1语句概述
1.1普通表达式语句:表达式后加分号就是一个表达式语句,语句与表达式不同,是无值的,而表达式是有值的。
1.2流程控制语句:流程控制语句主要用来控制程序执行走向,以实现程序的各种结构方式,它有特定的关键字等,主要分为分支和循环两种。
分支流程控制语句:if、switch。
循环流程控制语句:for、while、do while。
1.3跳转语句:跳转语句的作用主要是让程序从正常执行的走向中跳转到其它部分,常见跳转语句如下
间断语句:break、continue。
转向语句:goto。
Return语句:return。
1.4复合语句:由一些语句组成,放在一个大括号中形成一个整体,句型如下:
{
语句1;
语句2;
......
语句n;
}
C语言语法规定,复合语句作为一条语句来处理。
例子代码:
#include "stdio.h"
main(){
int a=11,b=21,c=31;
printf("a=%d\tb=%d\tc=%d\n",a,b,c);
{ int b=22; /*复合语句开始*/
float c=3.3;
printf("a=%d\tb=%d\tc=%f\n",a,b,c);
a=b;
} /*复合语句结束*/
printf("a=%d\tb=%d\tc=%d\n",a,b,c);
}
输出结果如下:
a=11 b=21 c=31
a=11 b=22 c=3.300000
a=22 b=21 c=31
上面的代码可以和下面的代码对比运行:
#include "stdio.h"
main(){
int a=11,b=21,c=31;
printf("a=%d\tb=%d\tc=%d\n",a,b,c);
{ int a=1;
int b=22; /*复合语句开始*/
float c=3.3;
printf("a=%d\tb=%d\tc=%f\n",a,b,c);
a=b;
} /*复合语句结束*/
printf("a=%d\tb=%d\tc=%d\n",a,b,c);
}
程序运行结果:
a=11 b=21 c=31
a=1 b=22 c=3.300000
a=11 b=21 c=31
可以看到,在复合语句中声明的变量只在复合语句中起作用。
1.5空语句:空语句一般指只有一个分号占位,一般用在程序设计初期,表示待编写的函数或代码。
1.6各种语句整体介绍:
#include "stdio.h"
main(){
int a=10,b=20,c; /* 声明语句*/
if(b>a) /*控制语句 */
{; /* 复合语句 */
c=a+b; ; /* 表达式语句 */
printf("%d",c); /*函数调用语句 */
}
else
; /* 空语句*/
}
2库函数的调用与输入输出的关系
2.1标准的库函数是存放在函数库中的,因此使用时必须要告知计算机,说明函数库属于哪个库,此过程为函数的声明,例如:
#include "math.h" /*标准数学函数的声明*/
Main(){
...
y=sin(x); /*库函数的调用*/
...
}
Include是C语言中的特定字,是包含的意思,包含的文件一般为.h,称头文件。
2.2在C语言中提供了一些输入输出的标准库函数,例如printf和scanf,使用时必须将函数库的头文件stdio.h包含进程序中。
3格式化输出
3.1printf函数:它的作用是向终端输出数据。
函数格式:printf("格式控制语句",输出项1,输出项2,......);
例如:printf("%f",j); 输出浮点类型的变量j,%f为控制符。
常见的格式控制符:
%d--十进制整型,%o---八进制无符号整型,%f输出实数,%s--字符串,%c--输出单个字符等。
4字符输出
4.1字符输出可以利用putchar函数,在stdio.h中已经定义。
例子代码:
#include "stdio.h"
main(){
char a,b,c;
a='C';
b='A';
c='T';
putchar(a);
putchar(b);
putchar(c);
putchar('\n');
putchar('\101');
putchar('B');
putchar('c');
}
注:该函数不能输出两个或两个以上的字符数据。
5格式化输入
5.1scanf函数:作用是从键盘获取数据,格式化后再赋值给变量。
调用形式:scanf(格式控制语句,输入项);
/*********************************************************************
6字符输入
6.1getch()和getche()函数:功能都是读入一个字符。
两者的区别是:getch()函数不将读入的字符回显到屏幕上,getche()却显示。
例子代码:
#include<stdio.h>
main()
{
char c,ch;
c=getch(); /*从键盘上读入一个字符不回显送给字符变量c*/
ch=getche(); /*从键盘上带回显的读入一个字符送给字符变量ch*/
putchar(c); /*输出该字符*/
putchar(ch);
}
6.2getchar()函数:作用是从终端输入一个字符。getchar函数将空格符、制表符、和换行符都作为有效字符录入。
例子代码:
#include "stdio.h"
main()
{ char c1,c2;
c1=getchar();
c2=getchar();
putchar(c1);
putchar(c2);
}
***********************************************************************/
7顺序程序设计
例一:计算一元二次方程的根。
代码:
#include "math.h"
main()
{
double a,b,c; /*声明系数*/
double x1,x2,p;
printf("pleaseinputa,b,c:");
scanf("%lf%lf%lf",&a,&b,&c); /*输入系数*/
printf("\n");
p=b*b-4*a*c; /*p存放判别式的值*/
x1=(-b+sqrt(p))/(2*a); /*计算方程的根*/
x2=(-b-sqrt(p))/(2*a);
printf("x1=%f,x2=%f\n",x1,x2); /*输出结果*/
}
例二:两位整数倒序。
代码:
#include <stdio.h>
main()
{
int m,n;
printf("inputm(10-99):");
scanf("%d",&m);
printf("\n");
n=m%10;
m=n*10+m/10;
printf("m=%d\n",m);
}
C语言学习笔记(六)--分支程序设计
1使用if语句设计选择程序:if语句一般分为两种方式:单条件单分支、和单 条件双分支if语句。
1.1单条件单分支的if语句一般语法:
If(表达式A){
语句B;
}
语句执行流程:首先执行表达式A,如果表达式A的值非0,则执行语句序列B,然后流程继续往下执行。
例子代码:
#include "stdio.h"
main(){
double score;
printf("input the score:");
scanf("%lf",&score);
if(score>=60)/*成绩开始判断*/
printf("\npass!\n");
printf("programming is over!\n");/*和判断语句并列的下一条语句*/
}
1.2单条件双分支的语法格式:
If(表达式A){
语句B;
}else{
语句C;
}
语句执行流程:首先执行表达式A的运算,如果表达式A的值非0,则执行语句B,条件不成立则执行C。
例子代码:
#include "stdio.h"
main()
{
double score;
printf("input the score:");
scanf("%lf",&score);
if(score>=60)/*成绩开始判断*/
printf("\npass!\n");/*及格说明分支*/
else
printf("fail!\n");
printf("programming is over!\n");/*和判断语句并列的下一条语句*/
}
2嵌套的if语句
2.1嵌套常用格式:
第一种:
If(表达式)
{语句}
else if(表达式)
{语句}
第二种:
If(表达式)
{语句}
else if(表达式)
语句
else
语句
例子代码:
#include "stdio.h"
#include "math.h"
void main()
{int a;
scanf("%d", &a);
if(abs(a)<10)
printf("%dis one bit.\n",a);
else if(abs(a)<100)
printf("%dis two bit.\n",a);
else if(abs(a)<1000)
printf("%dis three bit.\n",a);
else if(abs(a)<10000)
printf("%dis four bit.\n",a);
else if(abs(a)<32767)
printf("%dis five bit.\n",a);
else
printf("thenumberistoolarge\n");
}
3.用switch分支设计选择程序
3.1语法形式:
Switch(表达式){
case 整型常量表达式1:语句;[break;]
case 整型常量表达式1:语句;[break;]
case 整型常量表达式1:语句;[break;]
[default]:语句;
}
注:[]里是可省略的。
3.2语句的执行流程:根据switch表达式的值,确定语句的执行入口,自上而下用表达式的值与case的值比较,相等就执行case后面的语句,如果语句结尾含有break,就中断switch,否则就继续执行下一个case,如果没有与表达式相匹配的值,就执行default后的语句。
switch的表达式可以为任意类型,但运算结果必须是整型或字符型。
例子代码:
#include "stdio.h"
main()
{int score;
printf("score=");
scanf("%d",&score);
switch((int)(score/10)) /*整型量之间的除法,结果仍为整型*/
{
case 10:
case 9:printf("YourgradeisA\n");break;
case 8:printf("YourgradeisB\n");break;
case 7:printf("YourgradeisC\n");break;
case 6:printf("YourgradeisD\n");break;
default:printf("YourgradeisE\n");
}
}
switch语句也可以嵌套,break只能让程序跳出它所在的switch分支。
例如:
switch(n1){
case 1:
switch(n2){
case 11:......;
}
case 2:.....;
}
4.分支程序设计实例
4.1判断年份是否为闰年。
#include "stdio.h"
main(){
int year;
printf("input the year:");
scanf("%d",&year);
if((year%4 == 0) && (year%100 != 0))
printf("该年是闰年\n");
else if(year%400 == 0)
printf("该年是闰年\n");
else
printf("该年是平年\n");
}
4.2计算天数:
#include"stdio.h"
main()
{
int day,month,year,sum,leap;
printf("\nplease input year,month,day\n");
scanf("%d%d%d",&year,&month,&day);
switch(month) /*先计算某月以前月份的总天数*/
{
case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=59;break;
case 4:sum=90;break;
case 5:sum=120;break;
case 6:sum=151;break;
case 7:sum=181;break;
case 8:sum=212;break;
case 9:sum=243;break;
case 10:sum=273;break;
case 11:sum=304;break;
case 12:sum=334;break;
default:printf("data error");break;
}
sum=sum+day; /*再加上某天的天数*/
if(year%400==0||(year%4==0&&year%100!=0)) /*判断是不是闰年*/
leap=1;
else
leap=0;
if(leap==1&&month>2) /*如果是闰年且月份大于2,总天数应该加一天*/
sum++;
printf("It is the %dth day.",sum);
}
1循环语句
1.1循环语句主要包括三种:while、do-while、for。
2while语句处理循环
2.1while语句基本形式:
While(表达式)
{循环体语句}
2.2执行流程:首先计算while表达式的值,当非零时执行循环体内的语句,执行完之后继续判断while表达式的值,如果非零,继续执行循环体,直到表达式值为零时,跳出循环,执行后续的语句。
例子代码:
<
展开阅读全文