c语言程序结构和语法规则2Word文件下载.docx
《c语言程序结构和语法规则2Word文件下载.docx》由会员分享,可在线阅读,更多相关《c语言程序结构和语法规则2Word文件下载.docx(19页珍藏版)》请在冰豆网上搜索。
其中,自定义函数由用户自己设计。
图1-1C语言程序构造示意图
结合以上例如,可以看出C语言程序构造有以下根本特点:
〔1〕C语言程序是由函数(如:
main函数和max函数)组成的,每一个函数完成相对独立的功能,函数是C语言程序的根本模块单元。
main是函数名,函数名后面的一对圆括号“()〞是用来写函数的参数的。
参数可以有,也可以没有〔本程序没有参数〕,但圆括号不能省略。
〔2〕一个C语言程序总是从main()函数开始执行。
主函数执行完毕,程序执行完毕。
〔3〕C语言编译系统区分字母大小写。
C语言把大小写字母视为两个不同的字符,并规定每条语句或数据说明均以分号(;
)完毕。
分号是语句不可缺少的组成部分。
〔4〕主函数main()既可以放在max()函数之前,也可以放在max()函数之后。
习惯上,将主函数main()放在最前面。
〔5〕C语言程序中所调用的函数,既可以是由系统提供的库函数,也可以是由设计人员自己根据需要而设计的函数。
例如,在【例】中,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);
intnum1,num2;
printf(“Inputthefirstintegernumber:
〞);
scanf(“%d〞,&
num1);
printf(“Inputthesecondintegernumber:
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
〔〕
5
+-
9
&
13
||
2
++--!
~instanceof
6
>
<
<
10
^
14
?
3
new
7
=<
=
11
!
15
=+=-=*=/=
4
*/%
8
==!
=
12
&&
16
&=!
=<
=>
记住这些优先次序是困难的,—个较好的方法是使用括号(),比方:
b&
&
b>
c&
c>
a可以用括号写为((a>
b)&
(b>
c))&
(c>
a)
这样即明晰易懂,也不易出错。
三、表达式
表达式是由操作数和运算符按一定的语法形式组成的符号序列。
—个常量或一个变量名字是最简单的表达式,其值即该常量或变量的值。
表达式的值还可以用作其他运算的操作数,
形成更复杂的表达式。
表达式的类型由运算以及参与运算的操作数的类型决定,可以是简单类型,也可以是复合类型,如下面的例子所示:
布尔型表达式:
x&
y||z;
整型表达式:
num1十num2;
顺序构造:
输入与输出
一、选择题
(1)有以下程序
{intm,n,p;
m=%dn=%dp=%d"
m,&
n,&
p);
%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)有以下程序
{intm=0256,n=256;
%o%o\n"
mn,n);
程序运行后的输出结果是
A)02560400
B)0256256
C)256400
D)400400
(3)有以下程序
{inta=666,b=888;
%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)有以下程序
{inta;
charc=10;
floatf=100.0;
doublex;
a=f/=c*=(x=6.5);
%d%d%3.1f%3.1f\n"
a,c,f,x);
A)16516.5
C)1651.06.5
(6)有定义语句:
intx,y;
,
假设要通过scanf("
x,&
y);
语句使变量x得到数值11,变量y得到数值12,下面四组输入形式中,错误的选项是
A)1112<
回车>
B)11,12<回车>
C)11,12<回车>
D)11,<回车>
12<回车>
(7)设有如下程序段:
intx=2002,y=2003;
(x,y));
那么以下表达中正确的选项是
A)输出语句中格式说明符的个数少于输出项的个数,不能正确输出
B)运行时产生出错信息
C)输出值为2002
D)输出值为2003
(8)假设有以下程序段〔n所赋的是八进制数〕
intm=32767,n=032767
%d,%o/n"
m,n);
A)32767,32767B)32767,032767
C)32767,77777D)32767,077777
(9)假设有以下程序段
intm=0xabc,n=0xabc;
m-=n;
%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〞,&
C)scanf(“%d,%d,%d〞,&
D)scanf(“i=%d,j=%d,k=%d〞,&
(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;
%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〞,&
y,&
z);
C)scanf(“%d%d%d〞,x,y,z);
D)read(“%d%d%d〞,&
(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)以下程序执行后的输出结果是(小数点后只写一位)
{doubled;
floatf;
lingl;
inti;
i=f=1=d=20/3;
%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
{intk=17;
%d,%o,%x\n"
,k,k,k);
(19)以下表达中正确的选项是
A)输入项可以是一个实型常量,如:
scakf("
%f"
3.5);
B)只有格式控制,没有输入项,也能正确输入数据到内存,例如:
a=%d,b=%d"
);
C)当输入一个实型数据时,格式控制部分可以规定小数点后的位数,例如:
%4.2f"
f);
D)当输入数据时,必须指明变量地址,例如:
(20)假设有以下定义和语句:
intu=010,v=0x10,w=10;
%d,%d,%d\n,u,v,w);
那么输出结果是:
A)8,16,10B)10,10,10C)8,8,10D)8,10,10
(21)请读程序片段:
inti=65536;
printf("
i);
上面程序片段的输出结果是
A)65536
B)0
C)有语法错误,无输出结果
D)-1
(22)假设x和y都是int型变量,x=100,y=200,且有下面的程序片段:
%d"
A)200
B)100
C)100200
D)输出格式符不够,输出不确定的值
(23)请读程序:
#include<
stdio.h>
floatb,c;
%2d%3f%4f"
\na=%d,b=%f,c=%f\n"
a,b,c);
假设运行时从键盘上输入9876543210<
CR>
(<
表示回车),那么上面程序的输出结果是
A)a=98,b=765,c=4321
B)a=10,b=432,c=8765
C)a=98,b=765.000000,c=4321.000000
(24)以下程序的输出结果是 【24】。
#include<
math..h>
{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
(25)以下程序的输出结果是 【25】。
{inta=2,c=5;
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
(a=3*5,a*4,a+5));
二、填空题:
〔1〕以下程序运行后的输出结果是【1】。
{intx=0210;
x);
〔2〕以下程序运行后的输出结果是【2】。
{charc;
intn=100;
floatf=10;
x=f*=n/=(c=50);
%d%f\n"
n,x);
〔3〕以下程序运行时假设从键盘输入:
102030<
。
输出结果是.
#include<
{inti=0,j=0,k=0;
%d%*d%d"
i,j,k);
(4)以下程序段的输出结果是【4】。
inti=9;
%o\n"
(5)以下程序运行后的输出结果是【5】。
{inta,b,c;
a=25;
b=025;
c=0x25;
%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;
j);
那么输出结果是 【7】 。
(8)假设有程序
{inti,j;
i=%d,j=%d"
;
j);
i=%d,j=%d\n"
i,j);
要求给i赋10,给j赋20,那么应该从键盘输入 【8】 。
(9)以下程序的输出结果是【9】。
main()
{inta=177;
(10)以下程序的输出结果是【10】。
{inta=0
a+=(a=8);
(11)以下程序的输出结果是【11】
{inta=1,b=2;
a=a+b;
b=a-b;
a=a-b;
printf(“%d,%d\n〞,a,b);
(12)以下程序的输出结果是16.00,请填空。
{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]。
{unsignedshorta=65536;
intb;
printf(“%d\n〞,b=a);
(14)假设想通过以下输入语句使a=5.0,b=4,c=3,那么输入数据的形式应该是【14】。
intb,c;
floata;
%f,%d,c=%d"
,&
a,&
b,&
c);
(15)假设想通过以下输入语句给a赋于1,给b赋于2,那么输入数据的形式应该是【15】。
inta,b;
a=%b,b=%d,&
b);
答案:
01)A 02)C 03)B 04)C 05)B06)A 07)D 08)A 09)C 10)C11)B 12)C 13)B 14)B 15)D16)A 17)D 18)D 19)D 20)A21)B 22)A 23)C 24)C 25)D26)C
二、填空题
(1)88(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(13)0(14)5.0,4,c=3(15)a=1,b=2
水滴石穿C语言之指针、数组和函数
根本解释
1、指针的本质是一个与地址相关的复合类型,它的值是数据存放的位置〔地址〕;
数组的本质那么是一系列的变量。
2、数组名对应着〔而不是指向〕一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。
指针可以随时指向任意类型的内存块,它的特征是“可变〞,所以我们常用指针来操作动态内存。
3、当数组作为函数的参数进展传递时,该数组自动退化为同类型的指针。
问题:
指针与数组
听说chara[]与char*a是一致的,是不是这样呢?
答案与分析:
指针和数组存在着一些本质的区别。
当然,在某种情况下,比方数组作为函数的参数进展传递时,由于该数组自动退化为同类型的指针,所以在函数内部,作为函数参数传递进来的指针与数组确实具有一定的一致性,但这只是一种比较特殊的情况而已,在本质上,两者是有区别的。
请看以下的例子:
chara[]="
Hi,pig!
"
char*p="
上述两个变量的内存布