考试参考题目3课件例题文档格式.docx
《考试参考题目3课件例题文档格式.docx》由会员分享,可在线阅读,更多相关《考试参考题目3课件例题文档格式.docx(34页珍藏版)》请在冰点文库上搜索。
{/*主函数开始*/
}/*主函数结束*/
·
功能:
空操作。
说明:
.必须有且仅有一个main()函数;
.可由一个或多个函数组成;
.程序都从调用main()开始执行;
.花括号(大括号)中,写该函数所要做的事情,可称为函数体。
C语言源程序的基本结构:
函数体
(2)一个简单的C程序
程序:
#include<
main()
{
inta,b,c;
a=1;
b=2;
c=a+b;
/*预处理命令
作用:
.告诉编译器,在编译时需要文件stdio.h;
.stdio.h含有的库函数,称为包含文件。
说明:
.C系统提供了大量包含文件;
.写在程序头部,亦称为头文件;
.以h为扩展名。
.一个源程序,可能需要多个头文件。
*/
main()
/*变量说明语句
.告诉编译器,程序用到三个整型数值的变量;
.变量名分别为a、b、c。
.变量须先说明(定义),后使用;
.说明中包括变量名和它的类型;
.int定义整型变量,int叫做关键字;
.变量名由用户定。
注意:
.变量名中字母的大小写是有区别的,
例:
A和a是不同的变量。
*/
a=1;
/*赋值语句。
将整数1赋给变量a*/
/*将整数2赋给变量b*/
/*计算a+b并将计算的结果赋给变量c*/
}
计算两个整数a与b的和,其结果为c。
.每一语句以分号“;
”结尾;
.运行时,将书写的顺序逐条语句执行;
执行完最后一个语句,运行结束。
(3)有输出功能的程序。
要求:
在显示器上的输出(显示)字符串“I'
m20yearsold.”。
程序:
/*Myfirstprogram*/
intage;
age=20;
printf("
I'
m%dyearsold.\n"
age);
}
/*Myfirstprogram*//*注释语句
对程序的一些说明;
格式:
以/*开始,以*/结束;
printf("
/*输出的库函数
显示程序的输出信息;
内容:
."
.age*/
(4)有输入数据功能的程序。
通过键盘给程序中变量a和b赋值,并求其和。
/*ThisisaCprogram*/
scanf("
%d%d"
&
a,&
b);
/*输入函数,由键盘输入2个整数*/
(5)例:
编写一程序,具体任务是将输入的英尺数转换为公尺数。
/*Sampleprogram--feettometers*/
floatfeet,meters;
Enterthevalueoffeet:
"
%f"
&
feet);
meters=feet*0.3048;
%ffeetis%fmeters"
feet,meters);
/*Sampleprogram--feettometers*/
/*feet和meters为浮点型变量*/
/*由键盘给float赋值*/
/*英尺转换为公尺*/
.用关键字float定义浮点数型(带小数)的变量;
.scanf()/printf()中的控制码“%f”,用于读入/输出一个浮点数。
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
1.基本数据类型
(1)种类(5种):
字符型、整型、浮点型、长浮点型、无值型。
(2)列表:
类型
宽度(bit)
取值范围
内容
char
8
-128~127
ASCII字符
int
16
-32768~32767
整数
float
32
3.4E-38~3.4E+38(10-38~1038)
含有小数的数
double
64
1.7E-308至1.7E+308
很大/很小的实数
void
无值
2.标识符
(1)定义:
变量、函数、标号和用户定义的其它用途的对象的名字的统称。
(2)格式:
字母/下划线字母/数字/下划线(长度任意)。
(3)说明:
.大小写字母意义不同;
变量count、COUNT、Count为三个不同的变量。
.不能用系统的关键字、用户定义的函数名、C语言库函数的名。
3.整型数据
(1)整型变量
①特点:
关键字为int;
内存所占位数为16bit,即2个字节(byte);
取值范围为从-32768到32767(-215~215-1)。
②修饰符:
a.signed带符号的数据;
b.unsigned无符号的数据;
c.long长型数据;
d.short短型数据。
③整型变量的所占位数和取值范围示于表.
类型
所占位数(bit)
数的范围
int
16
-32768~+32767
signedint
unsignedint
0~65535
shortint
longint
32
-2147483648~2147483647
unsignedlongint
0~4294967925
④说明:
例1:
写两个函数,分别求两个整数的最大公约数、最小公倍数,用主函数调用这两个函数,并输出结果。
两个整数由键盘输入。
.解:
设两个整数为u、v,
最小公倍数=u*v/最大公约数。
.程序:
#incloud<
hcf(u,v)/*求最大公约数*/
intu,v;
{
inta,b,t,r;
if(u>
v)
t=u;
u=v;
v=t;
a=u;
b=v;
while((r=b%a)!
=0)
b=a;
a=r;
return(a);
lcd(u,v,h)
intu,v,h;
return(u*v/h);
intu,v,h,l;
scanf(“%d,%d”,&
u,&
v);
h=hcf(u,v);
printf(“H.C.F=%d\n”,h);
l=lcd(u,v,h);
printf(“L.C.D=%d\n”l);
.运行结果:
24,16↙
H.C.F=8
L.C.D=48
例2:
求方程ax2+bx+c=0的根。
用三个函数分别求当b2-4ac大于0、等于0和小于0时的根,并输出结果。
从主函数输入a、b、c的值。
.程序:
#include<
math.h>
floatx1,x2,disc,p,q;
greater_than_zero(a,b)
floata,b;
{
x1=(-b+sqrt(disc))/(2*a));
x2=(-b-sqrt(disc))/(2*a));
}
equal_to_zero(a,b)
x1=x2=(-b)/(2*a);
small_than_zero(a,b)
p=-b/(2*a);
q=sqrt(disc)/(2*a);
floata,b,c;
printf(“\n输入方程的系数a,b,c:
\n”);
scanf(“%f,%f,%f”,&
b,&
c);
printf(“\n方程是:
%5.2f*x*x+%5.2f*x+%5.2f=o\n”,a,b,c);
disc=b*b-4*a*c;
printf(“方程的解是:
\
if(disc>
0)
great_than_zero(a,b);
printf(“X1=%5.2f\tX2=%5.2f\n\n”,x1,x2);
elseif(disc==0)
equal_to_zero(a,b);
else
small_than_zero(a,b,c);
printf(“X1=%5.2+%5.2fi\tX2=%5.2f-%5.2fi\n”,p,q,p,q);
例3:
编写函数printd,其功能为:
使用putchar打印数字。
pintd(n)
intn;
inti;
if(n<
0){
putchar(‘-‘);
n=-n;
}
if((i=n/10)!
=0)printd(i);
putchar(n%10+’0’);
当调用参数为-123时,执行过程为:
参数为-123调用函数
printd(-123)
打印符号“-”
参数为12递归调用
printd(12)
参数为1递归调用
printd
(1)
└→
打印字符2←┘
打印字符3←┘
例4:
间接递归调用的例子。
fn1执行中调用函数fn2;
fn2执行中调用函数fn1;
设置外部变量n,以计算递归调用fn1的次数,初值为0;
b为外部变量,由函数main、fn1共用,存放计算的值。
intb
intn=0;
inta;
scanf(“a=%d”,&
a);
fn2(a);
printf(“n=%4db=%4d”,n,b);
fn1(y)
inty;
y=2*y+10;
b=y/30;
fn2(y);
fn2(x)
intx;
if(x<
400)
n++;
fn1(x);
输入
输出
21
n=4b=16
152
n=2b=21
七1.例1:
取一个整数a从右端开始的4~7位。
.a右移4位;
a>
>
4
.设置一低4位全1,其余为全0的数;
~(~0<
<
4)
00000…000000
~01111…111111
~0<
41111…110000
4)0000…001111
.将以上两者“&
”运算。
4&
unsigneda,b,c,d;
scanf(“%o”,&
b=a>
4;
c=~(~0<
4);
d=b&
c;
printf(“%o\n%o\n”,a,d);
331↙
331
15
.说明:
a的二进制数为11011001;
结果为00001101,即八进制15。
将a进行右循环移位。
——将a中原来左面(16-n)位右移n位,原来右端n位移到最左面n位。
.方法:
.将a的右端n位放到b中的高n位中;
b=a<
(16-n)
.将a右移n位,其左面高位n位补0;
c=a>
n;
.将c与b进行按位或运算。
c=c|b
unsigneda,b,c;
intn;
scanf(“a=%o,n=%d”,&
n);
(16-n);
c=c|b;
printf(“%o\n%o”,a,c);
a=157653,n=3↙
157653
75765
(157653)8=(110111*********1)2
循环右移3位后,(0111101111110101)2=(75765)8
6.例:
宏定义作成一个用户定义的包含文件my_include.h。
.文件名:
my_include.h
#definePROMPT"
Enter2integers:
#defineMAX(a,b)((a)>
(b))?
(a):
(b)
.主程序文件修改如下:
#include"
my_inlude.h"
inta,b,max;
printf(PROMT);
a,&
max=MAX(a,b);
Themanximum=%d\n"
max);
Enter2integers:
510↙
Themanximum=10
③例
将从键盘输入的一个字符串存入磁盘文件test中。
inti;
charstr[80];
FILE*fp;
if((fp=fopen("
test"
"
w"
))==NULL)
cannotopenfile."
exit
(1);
gets(str);
for(i=0;
str[i];
i++)
fputc(str[i],fp);
fclose(fp);
}
.注意:
⑴首先定义一个文件指针fp;
⑵ 用写模式打开(建立)文件test并检查是否确实打开;
⑶ 将从键盘读入的字符串用fputc()函数写入(输出)到文件test;
⑷关闭文件。
将前例中建立的磁盘文件test读出并显示在屏幕上。
charch;
r"
ch=fgetc(fp);
while(ch!
=EOF)
putchar(ch);
}
例3:
将前例中建立的文件test复制(拷贝)到另一个文件test1.dat。
#include<
intch;
FILE*fp1,*fp2;
if((fp1=fopen("
"
))==NULL)
Cannotopenfiletest.\n"
exit(0);
if((fp2=fopen("
test1.dat"
Cannotopenfiletest1.dat.\n"
while((ch=fgetc(fp1))!
fputc(ch,fp2);
fclose(fp1);
fclose(fp2);
return;
2.函数feof()、ferror()和rewind()的应用
①函数feof()(定义在头文件stdio.h中)
.功能:
用于读二进制文件时判定文件的结束。
.原型:
intfeof(FILE*fp);
.返回值:
若文件结束,它返回一个真值;
否则返回0。
.例:
将前例中的两个文件用二进制模式打开。
程序:
rb"
wb"
ch=fgetc(fp1);
while(feof(fp1)==0)
}
②函数ferror()(定义在头文件stdio.h中)
.功能:
用来确定文件操作是否出现了错误。
intferror(FILE*fp);
.返回值:
如果在文件操作过程中发生了错误,它返回真值,否则返回假值。
③函数rewind()(定义在头文件stdio.h中)
用于将其参数所指示的文件指针,定位到文件的开头。
.原型:
viodrewind(FILE*fp);
.例:
应用函数ferror()的例子。
要求:
复制任意类型的文件,即读入一个文件f1,然后将其写入另一个文件f2。
整个程序分为以下几个部分:
打开文件f1(“rb”模式)
打开文件f2(“wb”模式);
读文件f1;
写文件f2;
关闭两个被打开的文件。
FILE*fin,*fout;
if((fin=fopen("
f1"
cannotopensourcefile"
}
if((fout=fopen("
f2"
cannotopendestinationfile"
while(!
feof(fin))
ch=fgetc(fin);
if(ferror(fin))
errorr