高级语言程序设计Word文档下载推荐.docx

上传人:b****5 文档编号:18838549 上传时间:2023-01-01 格式:DOCX 页数:16 大小:28.59KB
下载 相关 举报
高级语言程序设计Word文档下载推荐.docx_第1页
第1页 / 共16页
高级语言程序设计Word文档下载推荐.docx_第2页
第2页 / 共16页
高级语言程序设计Word文档下载推荐.docx_第3页
第3页 / 共16页
高级语言程序设计Word文档下载推荐.docx_第4页
第4页 / 共16页
高级语言程序设计Word文档下载推荐.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

高级语言程序设计Word文档下载推荐.docx

《高级语言程序设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《高级语言程序设计Word文档下载推荐.docx(16页珍藏版)》请在冰豆网上搜索。

高级语言程序设计Word文档下载推荐.docx

②是否是只有字母、数字、下划线的序列③是否选用了关键字

练习:

下列哪一个是合法的用户自定义标识符______。

A、_do_while;

B、begin?

end;

C、for;

D、1st_run;

掌握所有的运算符及其优先级、结合方向及特殊的运算规则:

34种运算符的优先级关系大致为:

[]、()、->

、.---一元运算符---乘除类算术运算符---加减类算术运算符---移位运算符---有大小关系的关系运算符---等与不等的关系运算符---位运算符---逻辑与---逻辑或---条件运算符---各种赋值运算符---逗号运算符。

结合方向:

一元运算符、条件运算符、赋值运算符三种为自右向左结合,其它均为自左向右结合

能改变变量值的运算符:

赋值、++、--,注意前后++、--的区别

具有特殊运算规则的运算符:

逻辑与&

&

、逻辑或||、条件运算符,具有断路功能,表达式中的某些部分可能不运算;

%运算符要求两个运算对象均为int型

注意两个运算符的区别:

=与==

表达式运算过程中可能进行类型转换,原则:

低类型自动向高类型转换

1、表达式a=4,a*5,b=a+3的结果是?

x/=(a=4,b=a*5,b++)+9执行后,变量a、b、x的值分别是多少?

表达式的值呢?

2、if(!

x)…此处!

x相当于x==0

if(x)…此处x相当于x!

=0

常量与变量:

常量是其值不可变化的量,有两种表现形式:

字面常量和符号常量,C是定义符号常量只有一种方法:

#define常量名串

C中的字面常量有五种:

整型常量、实型常量、字符常量、字符串常量、枚举常量(不作要求)

整型常量有三种合法制式:

十、八(如012)、十六(如oxa3),另外还可以有L(l)、U(u)作后缀,分别表示长整型及无符号常量

实型常量有两种表示形式:

小数形式、指数形式,注意:

小数形式要求一定要有小数点,小数点前面或后面的数字可以缺省;

指数形式一定要有E(e),并且在其左边一定是合法的整数或小数形式的实数,右边必须是合法的整数。

字符常量是以一对单‘’括起的单个字符(‘\191’错),需要特别注意的是以右\开头的转义字符的三种形式:

‘\n’、‘\121’、‘\xa5’,记住’A’、’a’、‘0’、‘\n’的ASCII码分别为:

65、97、48、10,字符常量的大小就是其ASCII码值的大小

小写转大写:

ch=ch-32;

大写转小写:

ch=ch+32;

字符串常量是以一对双“括起的0个或多个字符,需要特别注意字符串的长度与字符串所占的字节数之间相差1

1、字符串"

12\\\t345\012\xa489"

的长度是______,占____字节。

2、charc=’m’;

c=c-35;

putchar(c);

的输出结果是____

3、下列哪一个不是合法的常量

A、027B、2.5e2.5C、0xfdaLD、10.e+0

 

变量:

在程序运行过程中其值可变的量,需要先定义后使用。

每一个变量都具有:

变量名、变量的当前值、变量的地址、变量的存储属性,指针变量中存的是地址,其余变量中存放的是值。

在所有函数之外定义的变量称为全局变量,其作用域为定义点开始到程序结束(去掉含同名局部量的作用区域);

在函数内部定义的变量称为局部变量(形式参数也是局部变量),局部变量分auto(默认)和static两种,前者是在函数被调用时分配空间,每次函数执行完毕后将不再存在,但是static型的局部变量在函数第一次被调用时进行分配空间,只初始化一次,每次函数执行完毕后将继续存在,但是只在本函数中才起作用,因此这种变量的读程序题一定要注意!

#include<

stdio.h>

intcal(intn)

{staticintf=20;

f+=n;

returnf;

}

voidmain()

{

inti;

for(i=1;

i<

7;

i++)

if(i%2)printf("

%d"

cal(i));

模块二:

三种基本结构及流程控制

C程序的三种基本结构是顺序结构、选择结构、循环结构。

这三种结构分别需要借助于特定的语句控制实现。

(1)顺序结构:

赋值语句和函数调用语句是控制该结构的主要语句。

函数调用语句中最常用的是:

scanf()、printf()、getchar()、putchar()等用于控制输入输出的语句。

注意用scanf()输入变量值时要严格按照格式控制串的形式要求输入,用printf()输出时要进行相应的格式控制,需要熟记几种格式转换说明符:

%c、%s、%d、%f、%lf(当变量为double类型时,在scanf中必须用%lf,但输出时用%f就可以了)。

1、已知a、b、c为int型变量,用于输入的语句为:

scanf("

a=%d,b=%d,c=%d"

&

a,&

b,&

c);

,若想使a的值为1,b的值为2、c的值为3,应当怎样输入?

如果提供的输入方法为1,2,3<

回车>

,则对应的输入语句是什么?

2、floatv=1234.5678;

,输出格式为:

输出总宽度为10,精度为3,则应使用语句printf(_______);

实现;

若输出语句为:

printf(“%.3f”,v);

,输出的内容为:

______

(2)选择结构:

用if...else、switch语句配合复合语句、break语句控制实现。

If语句有三种形式:

单分支if、双分支if、嵌套if,注意else应与其前最靠近的未匹配过的if相对应,而与对齐的形式无关,每一个else实际上都隐含了一个条件,要充分利用这些条件分析程序;

if后的条件通常是关系表达式,但是实际上可以是任何表达式,仅以该表达式是0或非0来判断条件的假和真。

注意:

if()及else后面都只能控制一条语句,经常需要用到复合语句。

switch语句中特别要注意的是:

(1)switch后面的表达式类型应当为整型、字符型、枚举型,而不可以是float或double型,因为表达式的取值必须是离散值。

(2)找到与表达式匹配的常量后开始执行,直到遇到break或语句结束才会停止。

因此每一个分支后如果没有及时用break,则继续向下执行,这样,switch结构可以选择多个分支执行

(3)这些常量的顺序调整不影响程序的正确性,只要每个分支执行的功能固定就可以了。

1、已知变量tf为整型,下面的条件语句中,五种表达有一种与其它四个不等价,它是?

A、if(tf)语句1;

else语句2;

B、if(tf==0)语句2;

else语句1;

C、if(tf!

=0)语句1;

D、if(!

tf)语句2;

E、if(tf==1)语句1;

2、设以下所有变量均为整型,下列程序所实现的分段函数是?

if(x>

0)y=1;

elsey=0;

if(x<

0)y=-1;

3、下列程序段执行后,a、b的值是?

a=1;

b=2;

c=0;

if(a>

b)

c=a;

a=b;

b=c;

4、设有声明inta=1,b=2,则下面程序段的输出结果是?

如果是内层的每个case后有break,而外层没有break,输出结果是?

switch(a)

{

case1:

printf("

#\n"

);

switch(b)

{

case1:

printf("

*\n"

case2:

**\n"

case3:

***\n"

}break;

case2:

##\n"

break;

}

(3)循环结构:

常用while、do…while、for三种流程控制语句实现,注意while和for属于当型循环,do…while属于直到型循环,若while后的条件为非0则继续循环,若为0则结束,三种循环是可以相互转化的。

这里特别强调的是:

循环的退出一般是条件为0(for的表达式2,如果表达式2缺省,则表示永真条件、while或dowhile后的表达式就可以表示条件,如:

while(‘A’),这就是一个永真条件)时不进入循环体,但是在循环体内也可以用一定条件下的break语句退出本层循环。

如果表示条件的表达式值永远不可能为0,则为一个死循环,这一点要注意!

在循环语句中可以用break表示退出本层次循环、continue表示忽略本次循环体中的后续语句,重新开始下一次循环条件的判断,以便决定是否要继续循环。

循环体只有一条语句,注意复合语句的正确使用,不要误用分号形成循环体为空语句,例如:

for(i=0;

3;

i++);

s+=i;

有关退出的几个操作:

(1)在循环结构中用break结束本层循环、在switch语句中用break结束本层switch中当前分支的执行;

(2)在函数体内的return语句结束本函数的调用,返回到调用点;

(3)库函数exit结束程序的执行,返回到操作系统,该函数在<

stdlib.h>

头文件中

1、若已有定义inti,则对于如下循环语句,循环体执行的次数分别为______。

①for(i=0;

;

i++)

printf("

i);

②for(;

i=0;

i++)

③for(i=0;

i<

0;

④i=0;

while(i=1)

i++;

2、下列程序运行后,x和y的值分别是?

#include<

voidmain()

intx=1,y=2;

for(;

x<

10;

x++)

x+=2;

if(x>

7)

{

printf("

x=%dy=%d\n"

x,y);

break;

}

if(x==6)continue;

y*=x;

}

}

这一模块中有很多经典算法,下面几个是同学们必须非常熟悉的:

(1)质数问题

1判断一个整数是否为质数(用一层循环可以解决)

会定义函数实现,函数原型:

intprime(intn);

判断参数n是否为质数,如果是,返回1,如果不是,返回0。

2找出一定范围内所有的质数(用两层循环可以解决)

voidprime(intlow,inthigh);

找出从low到high范围内的所有质数,是质数则输出。

如果函数需要返回该范围内的质数个数,则应该将返回值类型修改为int。

③能按一定的格式输出

(2)求最大公约数问题

可以用辗转相减或相除的方法都可以得到。

intgcd(intm,intn);

在辗转相除法中,当余数为0时的除数即为最大公约数,注意循环控制方式的不同可能导致返回值的不一样。

求最小公倍数:

a*b/gcd(a,b)

(3)求和问题:

掌握求和问题中条件的控制方式、累加的方式:

1可以根据求和的项数要求来求解,例如:

求100项之和;

2可以根据每一项的精度进行求解,例如:

求到这一项的绝对值不超过1E-6为止,注意这时的循环条件应该为:

while(fabs(term)>

=1E-6),如果用do...while循环,条件也是这样表示。

3注意分子、分母、当前项、和分别用一个变量表示,正确定义变量的类型,正确解决变符号问题:

s=-s;

(4)输出规则图形式问题

分析行号与当前行前导空格数、符号个数、符号形状之间的关系,正确控制换行。

(5)利用循环可以控制输入数据的范围,这在实验三的P23页。

inta,b;

do

{scanf(”%d%d”,&

b);

}while(a<

10||a>

b||b>

1000);

实现输入的a,b范围是:

10<

=a<

=b<

=1000

模块四:

数据类型

C语言源程序中所处理的任何数据(常量或变量)都是属于某一种数据类型的,数据类型将决定该类型的值在内存中占用空间的大小、数据值的表现形式及数据范围、可进行的运算及操作、变量值的组成情况等。

C中数据类型分为:

基本类型、构造类型、指针类型、空类型四大类,其中基本类型包括整型、实型、字符型、枚举型;

构造类型有:

数组类型、结构体类型、共同体类型,指针类型的特殊性在于其变量中存放的是内存地址信息而不是内存中的值。

这一模块的重点是数组、结构体、指针类型。

(1)数组类型:

基本知识:

一维及二维数组变量的定义及初始化、如何正确访问元素、一维字符数组操作字符串、会正确输入输出数组的元素、正确输出字符串,掌握string.h函数中的一些常用函数的使用,如:

两个字符串的比较(例如:

判断串s1是否大于s2,不能用s1>

s2,而应该用strcmp(s1,s2)>

0)、字符串的赋值、字符串的连接等。

算法:

首先要理解一维数组名作实参和形式能数传地址的实质;

掌握在一维数组中:

输入数组所有元素、输出数组所有元素、寻找最大数、最小数、求元素的平均值、查找某一个值是否是数组中的元素、数组元素逆置、某种常见排序算法等。

数组元素实际个数随着输入动态统计的方法:

应当设定一个输入结束标志,在输入该标志之前的元素都依次作为数组的有效元素,该标志不计入内,用如下代码输入以-1为结尾标志的数组并输出所有的有效元素:

inta[100],num=0,i=0;

{

%d"

a[i++]);

}while(a[i-1]!

=-1);

num=i-1;

num;

%5d"

a[i]);

\n%d\n"

num);

1、有数组定义inta[m][n],则在a[i][j]之前的元素的个数为______。

2、以下一维数组的定义正确的是___

A、intn=3,a[n];

B、#defineN=3inta[N];

C、constintn=3;

inta[n];

D、#defineN3inta[N*3];

3、以下一维数组定义及初始化正确的是____

A、inta[];

B、inta[]={1,2,3}

C、inta[3]={1,2,3,4}D、inta[3]={,2,}

4、以下选择中,能正确定义二维数组的是______。

A、intx[][2];

B、intx[][2]={2*2};

C、intx[2][]={1,2,3,4};

D、inta[2][3]={,{1}};

5、若定义inta[10]={9,1,15,6,2,11,8,7,19,3};

则m[m[1]+2*m[4]]的值是______,*m+m[8]的值为______。

6、下列字符数组定义与初始化不正确的是____

A、chars[]=”abc”;

B、chars[]={”abc”};

C、chars[3]={‘a’,’b’,’c’};

D、chars[3]=”abc”;

7、下列关于数组的描述中不正确的是______。

A、可以对字符型数组进行整体输入、输出

B、可以对整型数组进行整体输入、输出

C、利用字符型数组可以实现字符串操作

D、不能通过赋值运算符“=”对字符型数组进行整体赋值

8、下列程序的输出结果是?

intf(int*a,intnum,intx);

voidmain()

{inta[10]={8,6,17,29,34,5,7,23,2,1};

intpos;

pos=f(a,10,7);

pos+1);

intf(int*a,intnum,intx)

{inti;

for(i=0;

n;

i++)

if(x==a[i])returni;

return-1;

};

教材P239的6.3程序填空题,需要认真理解。

其中的(3)如果改为统计某一个字母出现的次数,可以作怎样的简化?

(2)指针类型:

定义形式为:

数据类型*指针变量名,例:

int*p;

注意p与*p的区别。

指针变量若未赋值,不能对*p操作,若对指针赋值为空值,也不能对*p操作。

例如:

1、int*f=NULL;

scanf("

f)或*f=10.5;

都不正确

2、intt='

A'

*f;

f=&

t或*f=t均正确;

f=t,*f=&

t都不正确

3、int*f;

f=NULL;

正确

1、已知:

char*s="

student"

;

则printf("

%s\n"

c+3)输出为____

2、若有说明:

inta,b=9,*p=&

a;

,则能完成a=b赋值功能的语句是____

A、a=*p;

B、*p=*&

b;

C、a=&

D、*p=&

*b;

指针与数组的关系:

对指针操作一维数组要熟练掌握,理解数组名是地址常量的概念,指针指向数组的时候执行p++、p--的意义,以及数组元素的下标法访问及指针运算符访问方法:

例:

inta[4]={1,2,3,4},*p=a 

++p;

p[2]或*(p+2)都是表示元素a[3],但是p+1或a+2都是表示地址概念的,都等于&

a[2]

各种指针的含义:

int*p 

//一级指针,可等于普通int变量地址、一维数组名、二维数组中的列地址

int(*p)[3];

//一个行指针,指向具有3个整型元素的一维数组,与二维数组一起使用,用于获得行指针值,例inta[2][3] 

p=a;

int*p[3];

//含3个整型指针元素的一维指针数组p

int(*p)();

//函数指针,指向返回值为int型的函数入口

int*p(形式参数表);

//返回值为int指针的函数p

int**p 

//二级指针p,用来获得一级指针的地址,必须两次间接寻址才能访问int值,例如:

inta,int*r=&

a,**p=&

则下列三句等效:

(1)a=1 

(2)*r=1 

(3)**p=1 

这里,有几种访问是不正确的:

(1)r=1 

(2)p=&

(3)p=r 

(4)*p=1 

二维数组中元素的表示:

inta[3][4];

元素a[i][j]的正确表示:

a[i][j]、*(a[i]+j)、*(*(a+i)+j)、*(*a+i*4+j),但是*(a+i*4+j)不正确,这里需要正确理解行指针与列指针的表示及它们执行算术运算每次移动的字节数

用字符指针操作字符串:

比用字符数组操作字符串具有更大的灵活性,注意二者的区别

char*s=“ABC”;

char*s;

s=”ABC”;

都是正确的

charp[4]=“ABC”;

正确,但是charp[4];

p=”ABC”;

却错误

s=p;

是正确的赋值,但是s=*p,*s=”AB”都是错误的 

下面的函数代码是否都能正确实现字符串的拷贝(将p1串拷贝到p2串中?

代码段一:

voidMyStrcpy(char*p2,char*p1)

while((*p2=*p1)!

='

\0'

)//此处换成......!

=’\n’呢?

p1++;

p2++;

代码段二:

while(*p1!

{

*p2=*p1

(3)结构体类型:

会正确定义结构体类型,掌握三种变量定义的方式及变量的初始化方式,理解结构体变量内存占用的情况(各成分依次存放,故结构体变量所占空间至少为所有成员需要的空间之和),会正确访问结构体变量的成员(用点运算符或是箭头运算符),结合结构体数组及指针会正确访问结构体的元素。

1、定义structPoint{intx,y;

}pos[]={{1,2},{3,4},{5,6}},*pt=pos;

则表达式(++pt)->

y的值为______,++(pt->

x)的值为_________,++pt->

x的值为______、(*pt).y的值为_____。

2、以下对结构体变量stu中成员

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 日语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1