文章目录
四、C语句
4.1 C语句的作用和分类
一个函数包含声明部分和执行部分。C程序可以由多个源程序文件组成,一个C语句经过编译后产生若干条机器指令。具体的C程序结构如下图所示。
C语句分为以下5类。
(1)控制语句。C语言只有9种控制语句。
(2)函数调用语句。有由一个函数调用加一个分号构成。例如:
printf("This is a C statement.");
其中的printf(“This is a C statement.”)是一个函数调用,加一个分号成为一个语句。
(3)表达式语句。由一个表达式加上一个分号组成,最典型的就是赋值表达式构成赋值语句,a=3是一个赋值语句,a=3;是赋值语句。函数调用语句也属于表达式语句。
(4)空语句。此语句只有一个分号,可以作为流程的转向点,或循环语句的循环体。即:
;
(5)复合语句。用{}将一些语句和声明括起来成为复合语句(又称语句块)。如:
float pi = 3.14159, r=2.5, area;//定义变量
area =pi * r * r;
printf("area = %f",area);
可以在符合语句中包含声明部分,可以放在复合语句中任何地方,但习惯放于语句块开头。
4.2 最基本的语句——赋值语句
C语言中最常用的语句是赋值语句和输入输出语句。最基本的是赋值语句。
编写程序:
#include<stdio.h>
#include<math.h>
int main()
{
double a,b,c,s,area;
int d, e, f;
d = e = f =1;//no int a=b=c=3;
a=3.67;
b=5.43;
c=6.21;
s=(a+b+c)/2;
area= sqrt(s*(s-a)*(s-b)*(s-c));
printf("a=%lf\tb=%lf\tc=%lf\n",a,b,c);
printf("area=%lf\n",area);
printf("d=%d\te=%d\tf=%d\n",d,e,f);
return 0;
}
其中有些要点需要注意:
(1)赋值运算符 = 。
(2)复合的赋值运算符 。+=、-=、*=、/=、%=。简化程序同时提高编译效率。
(3)赋值表达式。变量 赋值运算符 表达式,左侧变量必须是一个可修改的左值(left valua)。左值都可以作为右值。
(4)赋值过程中的类型转换。
- 若赋值运算符两侧类型一致直接赋值
- 浮点型赋给整型,浮点数取整赋值整型变量
- 整型赋给浮点型,数值不变,以浮点数形式存储
- double赋值给float,先将双精度转换为单精度
- 字符型数据赋给整型变量,ASCII代码赋给变量
- 占字节多的整型(int)赋给少的(short)只将低字节送给变量,即截断。
(5)赋值表达式和赋值语句。区别在于分号;。
(6)变量赋初值。可以在定义时赋值.
五、数据的输入输出
5.1 输入输出举例
编写程序:
#include<stdio.h>
#include<math.h>
int main()
{
double a,b,c,p,q,x1,x2;
printf("please input a b c\n");
scanf("%lf %lf %lf",&a,&b,&c);
if((b*b-4*a*c)>=0)
{
;
}
else
{
printf("please input a b c again\n");
scanf("%lf %lf %lf",&a,&b,&c);
}
p=-b/(2*a);q=(sqrt(b*b-4*(a*c)))/(2*a);
x1=p+q;x2=p-q;
printf("x1=%7.2lf\nx2=%7.2lf\n",x1,x2);
return 0;
}
5.2 有关数据输入输出的概念
(1)所谓输出输出是以计算机主机为主体而言的。输出设备数据称为输出,输入设备数据称为输入。
(2)C语言本身不提供输入输出设备,输入输出操作是由C标准函数库中的函数实现的。
(3)要在程序文件的开头用于处理指令#include把有关头文件放在本程序中。如:
#include<stdio.h>//标准方法,搜索C编译系统的子目录。系统提供的头文件。
#include"stdio.h"//先寻找当前目录,若找不到再按标准方法查找。自己编写的文件。
5.3 用printf函数输出数据
printf(格式控制,输出表列)
格式控制包括格式声明%、普通字符;输出表列可以是常量变量表达式。
【例3.7】float型数据的有效位数
编写代码:
#include<stdio.h>
int main()
{
float b;double a;long long c=-1;
//a=10000/3;
a=10000.0/3;
b=10000.0/3;//整型与整型运算得到整型,故必须其中一个使用浮点数进行转换。
//printf("%f\n",a);
printf("%9.8f\n",b);//float有效位数,6位。
printf("%21.15f\n",a);
printf("%-25.15f,%25.15f\n",a,a);
printf("%-13.2E\n",123.456);
printf("%12x%%",c);
return 0;
}
注意:如果想输出字符%,则可以用两个连续的%%表示。
5.4 用scanf函数输入数据
1.scanf函数的一般形式
scanf(格式控制,地址表列)
格式控制的含义和printf函数一样。地址表列是若干个地址组成的表列,可以是变量的地址或字符串的首地址,应为变量地址(&)而非变量名。
2.scanf函数中的格式声明
格式声明与printf函数类似。
3.使用scanf函数时应注意的问题
(1)scanf函数中的格式控制后面应当是变量地址,不是变量名。&a而不是a。
(2)如果在格式控制字符串中除了格式声明以外还有其他字符,则在输入数据时在对应的位置上应输入与这些字符相同的字符。
scanf("a=%f,b=%f,c=%f", &a,&b,&c);//则在输入数据时应输入同样的格式:
a=1,b=3,c=2 //如果输入1 3 2就会出错,因为系统是将它和格式字符串对照检查的。
(3)注意空格
scanf("%c%c%c", &a,&b,&c);//则在输入数据时应输入同样的格式:
abc //如果输入a b c就会出错,因为系统是将它和格式字符串对照检查的。会把空格赋给第二个字符。
在输入数值时,再两个数值之间需要插入空格或其他字符,以便于系统能区分两个数值;在连续输入字符时,在两个字符之间不要插入空格或其他分隔符,系统自己可以区分。
(4)在输入数值数据时,如输入空格、回车、Tab键等,认为该数据结束。
5.5 字符输入输出函数
1.putchar函数输出字符
编写程序:
#include<stdio.h>
int main()
{
char a,b,c;
a='B';
b='O';
c='Y';
putchar(a);
putchar(b);
putchar(c);
putchar('\n');
putchar(127);
putchar('\101');
putchar('\'');
putchar('\015');
return 0;
}
2.getchar函数输入字符
编写程序:
#include<stdio.h>
int main()
{
/* char a,b,c;
a=getchar();
b=getchar();
c=getchar();
putchar(a);
//putchar(b);
putchar(c);
//putchar('\n');
putchar(getchar());
putchar(getchar());
putchar(getchar());
putchar(getchar());
putchar('\n'); */
printf("%c",getchar());
return 0;
}
编写程序:
#include<stdio.h>
int main()
{
char a,b;
a=getchar();
b=a+32;
putchar(b);
putchar('\n');
return 0;
}