C语言程序结构和语法规则.doc
- 文档编号:1226550
- 上传时间:2023-04-30
- 格式:DOC
- 页数:16
- 大小:60.50KB
C语言程序结构和语法规则.doc
《C语言程序结构和语法规则.doc》由会员分享,可在线阅读,更多相关《C语言程序结构和语法规则.doc(16页珍藏版)》请在冰点文库上搜索。
16
C语言
C语言程序结构和语法规则
一、C语言程序的基本结构
下面通过几个简单的示例,介绍C语言程序的基本构成和书写格式,使读者对C语言程序有一个基本的了解。
在此基础上,再进一步了解C语言程序的语法和书写规则。
【例1.1】求三个数的平均值的C语言程序。
/*功能:
求三个数的平均值*/
main()/*main()称为主函数*/
{
floata,b,c,ave;/*定义a,b,c,ave为实型数据*/
a=7;
b=9;
c=12;
ave=(a+b+c)/3;/*计算平均值*/
printf("ave=%f\n",ave);/*在屏幕上输出ave的值*/
}
程序运行结果:
ave=9.333333
【例1.2】输出两个数中的较大值的C语言程序。
/*功能:
输出两个数中的较大值*/
main()/*主函数*/
{
intnum1,num2,max;/*定义num1、num2、max为整型变量*/
scanf("%d,%d",&num1,&num2);/*由键盘输入num1、num2的值*/
printf("max=%d\n",max(num1,num2));/*在屏幕上输出调用max的函数值*/
}
/*用户设计的函数max()*/
intmax(intx,inty)/*x和y分别取num1和num2传递的值*/
{
if(x>y)returnx;/*如果x>y,将x的值返回给max*/
elsereturny;/*如果x>y不成立,将y的值返回给max*/
}
程序运行情况:
5,8↙(“↙”表示按回车键,以下相同)
max=8
在以上两个示例中,【例1.1】所示的C语言程序仅由一个main()函数构成,它相当于其他高级语言中的主程序;【例1.2】所示的C语言程序由一个main()和一个其他函数max()(用户自己设计的函数)构成,函数max()相当于其他高级语言中的子程序。
由此可见,一个完整的C语言程序结构有以下两种表现形式:
(1)仅由一个main()函数(又称主函数)构成,如图1-1(a)所示。
(2)由一个且只能有一个main()函数和若干个其他函数结合而成,如图1-1(b)所示。
其中,自定义函数由用户自己设计。
图1-1C语言程序结构示意图
结合以上示例,可以看出C语言程序结构有以下基本特点:
(1)C语言程序是由函数(如:
main函数和max函数)组成的,每一个函数完成相对独立的功能,函数是C语言程序的基本模块单元。
main是函数名,函数名后面的一对圆括号“()”是用来写函数的参数的。
参数可以有,也可以没有(本程序没有参数),但圆括号不能省略。
(2)一个C语言程序总是从main()函数开始执行。
主函数执行完毕,程序执行结束。
(3)C语言编译系统区分字母大小写。
C语言把大小写字母视为两个不同的字符,并规定每条语句或数据说明均以分号(;)结束。
分号是语句不可缺少的组成部分。
(4)主函数main()既可以放在max()函数之前,也可以放在max()函数之后。
习惯上,将主函数main()放在最前面。
(5)C语言程序中所调用的函数,既可以是由系统提供的库函数,也可以是由设计人员自己根据需要而设计的函数。
例如,在【例1.2】中,printf()函数是C语言编译系统库函数中的一个函数,它的作用是在屏幕上按指定格式输出指定的内容;max()函数是由用户自己设计的函数,它的作用是计算两个数中的较大值。
二、C语言程序的书写规则
(1)C源程序是由一个主函数和若干个其它函数组成的。
(2)函数名后必须有小括号,函数体放在大括号内。
(3)C程序必须用小写字母书写。
(4)每句的末尾加分号。
(5)可以一行多句。
(6)可以一句多行。
(7)可以在程序的任何位置加注释。
一个完整的C语言程序,是由一个main()函数(又称主函数)和若干个其它函数结合而成的,或仅由一个main()函数构成。
[例1.3]仅由main()函数构成的C语言程序。
main()
{
printf(“ThisisaCprogram.\n”);
}
程序运行结果:
ThisisaCprogram.
[例1.4]由main()函数和1个其它函数max()构成的C语言程序。
intmax(intx,inty)
{
return(x>y?
x:
y);
}
main()
{
intnum1,num2;
printf(“Inputthefirstintegernumber:
”);
scanf(“%d”,&num1);
printf(“Inputthesecondintegernumber:
”);
scanf(“%d”,&num2);
printf(“max=%d\n”,max(num1,num2));
}
程序运行情况:
Inputthefirstintegernumber:
6←┘
Inputthesecondintegernumber:
9←┘
max=9
运算符与优先级、表达式
一、运算符
运算符包括下面这些类型:
1、算术运算符(+,—,*,/,%,++,——):
依次为加,减,乘,除,求余数。
除最后两种是单目运算符外,其它几种都是双目运算符。
前四种运算较简单,不再展开叙述,最后三种运算的定义如下:
Op1%op2表示:
oPl—int(oP1/op2)*op2,其中ina(a)表示取a的整数部分(a的小数部分总非负)。
Op++表示op=op+1;
Op--表示op=op-1;
2.关系运算符(>,>=,==,<=,<,!
=),
分别表示大于,大于等于,等于,小于等于,都是双目运算符,即运算结果是布尔型,即为true或false。
3.逻辑运算符(&&,||,!
)
分别表示与,或,非。
前两种是双日运算符,最后一种是单目运算符,参与运算的是布尔值,其结果也为布尔值。
4.位运算符(~,&,|,^>>.<<,>>>)依次为取反,按位与,按位或,按位异或,右移位,左移位,无符号右移位
5.赋值运算符(=)赋值操作符,它将等号右边数据的值赋值给左边的变量。
6.条件运算柠(?
:
)
条件运算符为三目运算符,其—“般格式为:
a>b?
a:
b
7.扩展运算符(十=’—=,*=,/=,%=,&=,|=,^=,>>=,<<=,>>>=)
扩展运算符都是由一个双目运算符和一个等号连在一起组成(注意它们之间不能用空格隔开),以“+=”为例说明这类扩展运算符的用法:
A+=B;表示A=A+B其它类似。
8其他运算符,如豆号运算符“,”,分量运算符“·
”。
再如实例运算符“instanceof”,内存分配运算符“new”,强制类型转换运算符“(类型)”,方法调用运算符“()”,取数组元素运算符“{
}”。
比如,设t是类Thread的一个实例。
分量运算符:
t.name表示类的实例的调用,又叫点问,(意指通过点的操作符访问类的实例对象)
二、运算符的优先级
优先顺序依次为(1级最优先,余下类推)
第1级:
.()
纪2级:
++--!
~instanceof
第3级:
new
第4级:
*/%
第5级:
+-
第6级:
>>>>><<
第7织:
><>=<=
第8级:
==!
=
第9级:
&
第10级:
^
第11级:
!
第12级:
&&
纪14级:
?
:
第13级:
||
第15级:
=+=-=*=/=
第16级:
&=!
=<<=>>=>>>=
记住这些优先次序是困难的,—个较好的方法是使用括号(),比如:
a>b&&b>c&&c>a可以用括号写为((a>b)&&(b>c))&&(c>a)
这样即清晰易懂,也不易出错。
三、表达式
表达式是由操作数和运算符按一定的语法形式组成的符号序列。
—个常量或一个变量名字是最简单的表达式,其值即该常量或变量的值。
表达式的值还可以用作其他运算的操作数,
形成更复杂的表达式。
表达式的类型由运算以及参与运算的操作数的类型决定,可以是简单类型,也可以是复合类型,如下面的例子所示:
布尔型表达式:
x&&y||z;
整型表达式:
num1十num2;
顺序结构:
输入与输出
一、选择题
(1)有以下程序
main()
{intm,n,p;
scanf("m=%dn=%dp=%d",&m,&n,&p);
printf("%d%d%d\n",m,n,p);
}
若想从键盘上输入数据,使变量m中的值为123,n中的值为456,p中的值为789,则正确的输入是
A)m=123n=456p=789
B)m=123n=456p=789
C)m=123,n=456,p=789
D)123456789
(2)有以下程序
main()
{intm=0256,n=256;
printf("%o%o\n",mn,n);
}
程序运行后的输出结果是
A)02560400
B)0256256
C)256400
D)400400
(3)有以下程序
main()
{inta=666,b=888;
printf("%d\n",a,b);
}
程序运行后的输出结果是
A)错误信息
B)666
C)888
D)666,888
(4)有以下程序
main()
{
intx=102,y=012;
printf(“%2d,%2d\n”,x,y);
}
执行后输出结果是
A)10,01
B)02,12
C)102,10
D)02,10
(5)有以下程序
main()
{inta;charc=10;
floatf=100.0;doublex;
a=f/=c*=(x=6.5);
printf("%d%d%3.1f%3.1f\n",a,c,f,x);
}
程序运行后的输出结果是
A)16516.5
B)1651.56.5
C)1651.06.5
D)2651.56.5
(6)有定义语句:
intx,y;,
若要通过scanf("%d,%d",&x,&y);语句使变量x得到数值11,变量y得到数值12,下面四组输入形式中,错误的是
A)1112<回车>
B)11,12<回车>
C)11,12<回车>
D)11,<回车>
12<回车>
(7)设有如下程序段:
intx=2002,y=2003;
printf("%d\n",(x,y));
则以下叙述中正确的是
A)输出语句中格式说明符的个数少于输出项的个数,不能正确输出
B)运行时产生出错信息
C)输出值为2002
D)输出值为2003
(8)若有以下程序段(n所赋的是八进制数)
intm=32767,n=032767
printf("%d,%o/n",m,n);
执行后输出结果是
A)32767,32767B)32767,032767
C)32767,77777D)32767,077777
(9)若有以下程序段
intm=0xabc,n=0xabc;
m-=n;
printf("%X\n",m);
执行后输出结果是
A)0X0
B)0x0
C)0
D)0XABC
(10)
已知i、j、k为int型变量,若从键盘输入:
1,2,3<回车>,使i的值为1、j的值为2、k的值为3,以下选项中正确的输入语句是
A)scanf(“%2d%2d%2d”,&i,&j,&k);
B)scanf(“%d%d%d”,&i,&j,&k);
C)scanf(“%d,%d,%d”,&i,&j,&k);
D)scanf(“i=%d,j=%d,k=%d”,&i,&j,&k);
(11)设有定义:
longx=-123456L;,则以下能够正确输出变量x值的语句是
A)printf(“x=%d\n”,x);
B)printf(“x=%1d\n”,x);
C)printf(“x=%8dL\n”,x);
D)printf(“x=%LD\n”,x);
(12)以下程序段的输出结果是
inta=1234;
printf("%2d\n",a);
A)12
B)34
C)1234
D)提示出错、无结果
(13)x、y、z被定义为int型变量,若从键盘给x、y、z输入数据,正确的输入语句是
A)INPUTx、y、z;
B)scanf(“%d%d%d”,&x,&y,&z);
C)scanf(“%d%d%d”,x,y,z);
D)read(“%d%d%d”,&x,&y,&z);
(14)若变量已正确说明为float类型,要通过语句scanf(“%f%f%f
”,&a,&b,&c);给a赋于10.0,b赋予22.0,c赋予33.0,不正确的输入形式是:
A)10<回车> B)10.0,22.0,33.0<回车>
22<回车>
33<回车>
C)10.0<回车> D)1022<回车>
22.033.0<回车>33<回车>
(15)有如下程序
main0
{inty=3,x=3,z=1;
printf(“%d%d\n”,(++x,y++),z+2);
}
运行该程序的输出结果是
A)34
B)42
C)43
D)33
(16)下列程序执行后的输出结果是(小数点后只写一位)
A)666.06.0B)666.76.7
C)666.06.7D)666.76.0
main()
{doubled;floatf;lingl;inti;
i=f=1=d=20/3;
printf("%d%ld%f%f\n",i,l,f,d);
}
(17)以下说法中正确的是
A)#define和printf都是C语句
B)#define是C语句,而printf不是
C)printf是C语句,但#define不是
D)#define和printf都不是C语句
(18)以下程序的输出结果是
A)17,021,0x11B)17,17,17
B)17,0x11,021D)17,21,11
main()
{intk=17;
printf("%d,%o,%x\n",k,k,k);
}
(19)以下叙述中正确的是
A)输入项可以是一个实型常量,如:
scakf("%f",3.5);
B)只有格式控制,没有输入项,也能正确输入数据到内存,例如:
scakf("a=%d,b=%d");
C)当输入一个实型数据时,格式控制部分可以规定小数点后的位数,例如:
scakf("%4.2f",&f);
D)当输入数据时,必须指明变量地址,例如:
scakf("%f",&f);
(20)若有以下定义和语句:
intu=010,v=0x10,w=10;
printf("%d,%d,%d\n,u,v,w);
则输出结果是:
A)8,16,10B)10,10,10C)8,8,10D)8,10,10
(21)请读程序片段:
inti=65536;printf("%d\n",i);
上面程序片段的输出结果是
A)65536
B)0
C)有语法错误,无输出结果
D)-1
(22)若x和y都是int型变量,x=100,y=200,且有下面的程序片段:
printf("%d",(x,y));
上面程序片段的输出结果是
A)200
B)100
C)100200
D)输出格式符不够,输出不确定的值
(23)请读程序:
#include
main()
{inta;floatb,c;
scanf("%2d%3f%4f",&a,&b,&c);
printf("\na=%d,b=%f,c=%f\n",a,b,c);
}
若运行时从键盘上输入9876543210
A)a=98,b=765,c=4321
B)a=10,b=432,c=8765
C)a=98,b=765.000000,c=4321.000000
D)a=98,b=765.0,c=4321.0
(24)以下程序的输出结果是 【24】。
#include
#include
main()
{inta=1,b=4,c=2;
floatx=10..5,y=4.0,z;
z=(a+b)/c+sqrt((double)y)*1.2/c+x;
pritnf("%f\n",z);}
A)14.000000
B)015.400000
C)13.700000
D)14.900000
(25)以下程序的输出结果是 【25】。
#include
main()
{inta=2,c=5;
printf("a=%%d,b=%%d\n",a,c);}
A)a=%2,b=%5
B)a=2,b=5
C)a=%%d,b=%%d
D)a=%d,b=%d
(26)执行下面程序中的输出语句,a的值是
A)65
B)20
C)15
D)10
main()
{inta;
printf("%d\n",(a=3*5,a*4,a+5));}
二、填空题:
(1)以下程序运行后的输出结果是【1】。
main()
{intx=0210;printf("%X\n",x);
}
(2)以下程序运行后的输出结果是【2】。
main()
{charc;intn=100;
floatf=10;doublex;
x=f*=n/=(c=50);
printf("%d%f\n",n,x);
}
(3)以下程序运行时若从键盘输入:
102030<回车>。
输出结果是.
#include
main()
{inti=0,j=0,k=0;
scanf("%d%*d%d",&i,&j,&k);
printf("%d%d%d\n",i,j,k);
}
(4)以下程序段的输出结果是【4】。
inti=9;
printf("%o\n",i);
(5)以下程序运行后的输出结果是【5】。
main()
{inta,b,c;
a=25;
b=025;
c=0x25;
printf("%d%d%d\n",a,b,c);
}
(6)有以下语句段
intn1=10,n2=20;
printf(“【6】”,n1.n2);
要求按以下格式输出n1和n2的值,每个输出行从第一列开始,请填空。
n1=10
n2=20
(7)若有语句
inti=-19,j=i%4;
printf("%d\n",j);
则输出结果是 【7】 。
(8)若有程序
main()
{inti,j;
scanf("i=%d,j=%d";&i,&j);
printf("i=%d,j=%d\n",i,j);
}
要求给i赋10,给j赋20,则应该从键盘输入 【8】 。
(9)以下程序的输出结果是【9】。
main()
{inta=177;
printf("%o\n",a);
}
(10)以下程序的输出结果是【10】。
main()
{inta=0
a+=(a=8);
printf("%d\n",a);
}
(11)以下程序的输出结果是【11】
main()
{inta=1,b=2;
a=a+b;b=a-b;a=a-b;
printf(“%d,%d\n”,a,b);
}
(12)下列程序的输出结果是16.00,请填空。
。
main()
{inta=9,b=2;
floatx=【12】,y=1.1,z;
z=a/2+b*x/y+1/2;
printf(“%5.2f\n”,z);
}
(13)以下程序的输出结果是[13]。
main()
{unsignedshorta=65536;intb;
printf(“%d\n”,b=a);
}
(14)若想通过以下输入语句使a=5.0,b=4,c=3,则输入数据的形式应该是【14】。
intb,c;floata;
scanf("%f,%d,c=%d",&a,&b,&c);
(15)若想通过以下输入语句给a赋于1,给b赋于2,则输入数据的形式应该是【15】。
inta,b;
scanf("a=%b,b=%d,&a,&b);
答案:
一、选择题
01)A 02)C 03)B 04)C 05)B
06)A 07)D 08)A 09)C 10)C
11)B 12)C 13)B 14)B 15)D
16)A 17)D 18)D 19)D 20)A
21)B 22)A 23)C 24)C 25)D
26)C
二、填空题
(1)88
(2)220.000000
(3)10300
(4)11
(5)252137
(6)n1=%d\nn2=%d
(7)-3
(8)i=10,j=20
(9)261
(10)16
(11)2,1
(12)6.6
(13)0
(14)5.0,4,c=3
(15)a=1,b=2
水滴石穿C语言之指针、数组和函数
基本解释
1、指针的本质是一个与地址相关的复合类型,它的值是数据存放的位置(地址);数组的本质则是一系列的变量。
2、数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。
指针可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来操作动态内存。
3、当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。
问题:
指针与数组
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 程序结构 语法 规则