C语言习题

2024-10-16

C语言习题(共9篇)

C语言习题 篇1

一、判断题

1.格式字符%md中的m不能为负。(×)2.实际上,可以用顺序、分支、循环三种结构构造任何算法。()3.printf(“%d”,sizeof(1234));其结果是4。(×)4.在C语言中,任何一个表达式的最后加上一个分号就构成一个合法的语句。()

二、单选题

1.下述程序的输出结果是(B)

#include

void main()

{int a,b,c=241;

a=c/100%9;

b=-1&&-1;

printf(“%d,%d”,a,b);

} 2.若有定义:int x,y;char a,b,c;并有以下输入数据:x=1 2 A B C,则能给x赋整数1,给赋整数2,给a赋字符A,给b赋字符B,给c赋字符C的正确程序段是(D)A)scanf(“x%d y=%d”,&x,&y);

a=getch();b=getch();c=getch();B)scanf(“x=%d%d”,&x,&y);

a=getch();b=getch();c=getch();C)scanf(“x=%d%d%c%c%c”,7x,&y,&a,&b,&c);D)scanf(“x=%d%d%c%c%c%c%c”,&x,&y,&a,&b,&b,&c,&c);3.已有定义double d,f;数据的输入方式为:3.45 1.2 根据定义和数据的输入方式,输入函数调用语句的正确形式为(A)A)scanf(“%lf%lf”,&d,&f)B)scanf(“%f%f”,&d,&f)

5.下面程序执行结果是32768。(×)

main()

{int a,b;

printf(“%dn”,b=(a=32767,a+1));}

C)scanf(“3.2f%3.1f”,&d,&f)D)scanf(“%3.2lf%3.1lf”,&d,&f)4.如下程序: #include

void main()

{ int m,n,k;

m=(n=4)+(k=10-7);

printf(“m=%dn”,m);

}

运行后m的值为(C)。

(A)(B)(C)7

(D)14

5.下面程序的输出是(C)。

#include

void main()

{ int x=10,y=3;

printf(“%dn”,y=x/y);

}

(A)0

(B)

1(C)3(D)不确定的值

6.下面程序运行情况是(D)。

#include

void main()

{ int x=3,y=0,z=0;

if(x=y+z)

printf(“****”);

else

printf(“####”);

}

(A)有语法错0不能通过编译

(B)输出****

(C)可以通过编译,但不能通过连接,因而不能运行

(D)输出#### 7.结构化程序的三种基本结构是(A)。(A)顺序结构、选择结构、循环结构

(B)递归结构、循环结构、转移结构

(C)嵌套结构、递归结构、顺序结构

(D)循环结构、转移结构、顺序结构

8.以下程序的输出结果是(B)。#include main(){ int i=010,j=10;

printf(“%d,%d”,++i,j--);}(A)11,10

(B)9,10

(C)010,9

(D)10,9 9.运行完下列程序后,在屏幕上的内容是(D)。main(){ int a=0;

a+=(a=12);

printf(“%dn”,a);} 10.语句printf(“s=%-5.3s”,“computer”);的输出结果是(B)。

A)s= com B)s=com

C)s= ter D)s=ter

11.下面程序的输出是(C)

main()

{int

x=10,y=3;

printf(“%dn”,y=x/y);

}

A)0

B)C)

3D)不确定的值 12.执行下面程序中输出语句后,a的值是(C)。

main()

{ int

a;

printf(“%dn”,(a=3*5,a*4,a5));

}

A)65 B)20

C)1

5D)10 13.下列程序的输出结果是(A)。

main()

{int a=-1,b=1,c;

c=(a++<=0)&&!(b--<=0));

printf(“%d,%d,%d”,a,b,c);}

A)0,0,1

B)-1,1,1

C)0,1,0

D)0,0,0

14.以下程序运行后,m的值为(C)。

#include

void main()

{ int m,n,k;

m=(n=4)+(k=10-7);

printf(“m=%dn”,m);}

A)B)3

C)7

D)14

15.下面程序的输出结果是(D)。

main()

{int x=10;

printf(“%dn”,~x);}

A)9

B)-9

C)11

D)-11 16.以下程序的输出结果是(D)。

main()

{int x=10,y=10;

printf(“%d,%dn”,x--,--y);}

A)10,10

B)9,9

C)9,10

D)10,9 A.B.C.D.17.printf函数中用到格式符%5s,其中数字5表示输出的字符串占用5列,如果字符串长度大于5,则输出按方式(B)。

A)从左起输出该字符串,右补空格

B)按原字符长从左向右全部输出

C)右对齐输出该字串,左补空格

D)输出错0信息

18.putchar函数可以向终端输出一个 D A)整型变量表达式值

B)实型变量值 C)字符串

D)字符或字符型变量值

19.根据定义和数据的插入方式,输入语句的正确形式为(B)。

已有定义:float f1,f2;数据的输入方式:4.52

3.5 A)scanf(“%f,%f”,&f1,&f2);B)scanf(“%f%f”,&f1,&f2);C)scanf(“%3.2f %2.1f”,&f1,&f2);D)scanf(“%3.2f%2.1f”,&f1,&f2);20.已知ch是字符型变量,下面不正确的赋值语句是(A)。

A)ch='a+b'

B)ch='O';

C)ch='7'+'9';D)ch=5+9;

21.假设int a=4;以下不正确的语句是(A)。

A)a+1=4;

B){a+++ +4;a/=4}

C);

D)printf(“a+1=4”);22.如下程序的执行结果是(B)。

main()

{ int x=023;

printf(“%dn”,--x);}

A)17

B)18

C)23

D)24 23.以下程序的输出结果是(D)。

main()

{char x=040;

printf(“%dn”,x=x<<1);}

A)100

B)80

C)120

D)64

24.假如一个整型变量的最大允许值为32767,那

么运行如下程序后屏幕上会输出的结果是(B)

main()

{ int a,b;

a=32767;

b=a+1;

printf(“%d,%d”,a,b);

}

A)32767,32768 B)32767,-32768 C)

32767,0 D)运行时报错

25.已知字母A的ASCII码为十进制的65,下面程序的输出是C main()

{ char ch1,ch2;ch1='A'+'5'-'3';

ch2='A'+'6'-'3';

printf(“%d,%cn”,ch1,ch2);

}

A)67,D

B)B,C

C)C,D

D)不确定的值

26.请读程序片段:int i=65536;printf(“%dn”,i);上面程序片段的输出结果是(B)。A)65536

B)0

C)有语法错0,无输出结果

D)-1 27.在下列程序段中:

int x, y;

scanf(“%3d*2d%d”,&x,&y);

若输入的数据为:12345678,则x、y的值分别为(B)。

A)123,456

B)123,678

C)12345 678

D)无法得到正确的值

28.有如下程序,输入数据12 345后,y的值是(B)。

#include main(){ int x;float y;

scanf(“%3d%f”,&x,&y);}

(A)12.000000

(B)345.000000

(C)12345.000000

(D)0.000000 29.有如下程序,若要求a1,a2,c1,c2的值分别为10,20,A,B,正确的数据输入是(D)

main()

{int a1,a2;

char c1,c2;

scanf(“%d%d”,&a1,&a2);

scanf(“%c%c”,&c1,&c2);

}(A)1020AB

(B)10 20AB(C)10 20 AB

(D)10 20AB 30.下列语句的输出为(A)。

int x=-1;

printf(“%d,%u,%o”,x,x,x);

A)-1,65535,177777

B)-1,-1,-1 C)-1,32767,-177777

D)-1,32768,177777

31.若有定义int a=3;则执行完printf(“%d”,-a--);语句后,a 的值为(B)。

A)-

3B)

2C)-2

D)3 32.以下程序的输出结果是(C)。int x=3,y=4;void main(){ int x,y=5;

x=y++;

printf(“%d”,x);}

A)3

B)

4C)

5D)6

33.设有如下定义:int x=10,y=3,z;则语句:

z=(x%y,x/y));

printf(“%dn”,Z);

的输出结果是(D)

A)B)0

C)4

D)3

34.以下程序的输出结果是(D).main()

{ int a=3;

printf(“%dn”,(a+a-=a*a));}

A)-6

B)12

C)0

D)–12

35.设有定义:int x=1,y=-1;则语句:

printf(“%dn”,(x--&++y);的输出结果是(B).A)1

B)0

C)-1

D)2

36.设有如下定义: int x=10,y=3,z;则语句: printf(“%dn”,z=x%y,x/y));的输出结果是

(D)。

A)1

B)0

C)4

printf(“n=%dn”,n);}

A)30

B)24

C)60

D)48 D)3

42.下面程序的运行结果是(B)

37.下列程序的输出结果是(A)

main()

main()

{ double

{int x=0,y=0;

while(!x)y+=++x;

printf(“%dn”,y);

}

d=3.2;

int x,y;

x=1.2;

y=(x+3.8)/5.0;

printf(“%d n”, d*y);

}

A)3

B)3.2

C)0

D)3.07

38.已知E的ASCII码是69,则执行以下语句的结果是(A)。

printf(“%c”,'D'-'8'+'5');

A)66

B)A

C)B

D)E 39.执行下面程序后,n的值为(C)。

main()

{int n,a=2,b=3,c=4;

n=(a

n=(n>b)?b:c;

n=(n

A)5

B)4

C)3

D)2 40.以下程序执行完后,a 的值为(C)

#inlcude

void main()

{int a;

printf(“%dn”,(a=3*5,a*4,a+5));}

A)65

B)20

C)15

D)10 41.下面程序的运行结果是(B)

main()

{int n;

(n=6*4,n+6),n*2;

A)1

B)0

C)控制表达式非法

D)程序执行无限次

43.下面程序的运行结果是(B)

main()

{int n,a=2,b=3,c=4;

n=(a

n=(n>b)?b:c;

}

A)5

B)4

C)3

44.以下程序的运行结果为

(C)

。D)2

main()

{unsigned a=3,b=10;

printf(“%dn”,a<<2|b>>1);}

A)3

B)10

C)13

D)14 45.以下程序的运行结果为(A)。

main()

{int x=17,y=26;

printf(“%d”,y/=(x%=6));}

A)5

B)8

C)2

D)26 46.以下程序的输出是(B).

main()

{int a,b,d=241;

a=d/100%9;

b=(-1)&&(-1);

printf(“%d,%dn”,a,b);}

A)6,1

B)2,1

C)6,0

D)2,0 47.下列程序段的输出结果是(A)。

int x=1 , y=1 , z;z=1||++x&&y--;

printf(“n%d,%d,%d”,x,y,z);

A)1,1,1

B)2,0,1

C)2,1,1

D)2,0,0

48.下列程序的运行结果是(B).

#include

main()

{unsigned a,b,c;

a=0x255;b=a<<4;

x=(~b)&0xff;

printf(“%f”,x);}

a++<=25&&b--<=2&&c++

?

A)0x55

B)0xaf

C)0x50

pritnf(“%d,%d,%dn”,a,b,c):printf(“%d,%d,%dn”,a,b,D)0xda 49.若有定义int a=25,b=14,c=19;则以下三目运算符构成的语句的执行结果是(B)

三、多选题

1.结构化程序设计思想应该包括(ABCD)。

(A)使用顺序、分支、循环三种基本结构;(B)限制使用goto语句;

(C)应该使用自顶向下、逐步求精的方法;(D)应该使用模块化的方法;

(E)编码过程中,变量名的命名只要程序员自己明白就可以了;

c);

A)25,14,19

B)26,13,19

C)25,13,19

D)26,14,19 2.2.对于scanf()函数,下列说法正确的是(ABD)。

A)如果相邻格式符之间没有数据分隔,则对应的输入数据之间可用空格、回车分隔。B)输入数据时不能指定精度。

C)在用格式说明符“%c”输入单个字符时,空格字符和转义字符是无效字符,即不能被输入。D)遇到空格、或者回车时,系统认为一个数据输入结束。

3.3.已知ch是字符型变量,下面正确的赋值语句是(BC)。

A)ch='123';

B)ch='xff';

C)ch='t';

D)ch=“";

4.4.若有定义int a,b;float x;,则以下不正确的赋值语句是(ACD)。

A)a=1,b=2,B)b++;

C)a=b=

5D)b=int(x);

四、填空题

1.在C语言中没有固有的输入和输出语句,但是用C语言编写的程序可以用函数调用的形式来实现输入、输出,这些函数由(标准I/O库/系统)提供。

2.语句printf(”%d“,(a=2)&&(b=-2));的输出结果是____1________。3.执行以下程序段后,a 的值是______1____.int a;a=-2*4%-5/2;

五、阅读程序

1.下列程序的运行结果是(3 2 1).

main()

{int x=1;

{int x=2;

{int x=3;

printf(”%d“,x);

}

printf(”%d“,x);

}

printf(”%d",x);

}

C语言习题 篇2

关键词:汇编语言,C/C++语言

在计算机系统的应用程序中, 所有汇编任务都由汇编语言来完成, 这样虽然完成任务的效率很高, 但是工作量却非常大, 会影响到对于应用程序的维护。若是所有的程序都是由C/C++语言进行编程, 虽然执行过程比较的简单, 但是这种方式却导致了目标代码的执行任务效率低, 实时性很差。所以在嵌入式系统中, 主要采用的编程方式是汇编语言与C/C++语言混合编程形式, 在编程过程中, 初始化任务由汇编语言来完成, 主要的任务则是由C/C++语言来完成, 从而达到了最大的效果。

1 ARM处理器

ARM处理器主要是利用编译器将汇编语言以及C/C++语言进行相互的切换, 并且ARM制定了相关标准, 来保障切换过程中的顺利实施。

1.1 寄存器使用规则

ATPCS为ARM寄存器进行不同命名, 从而在编程的过程中来利用ATPCS寄存器进行编程。

1.2 堆栈的使用规则

在ATPCS中规定, 堆栈的主要类型是FD, 被称为满递减堆栈, 所以必须要利用STMFD/LDMFF进行堆栈的操作。

1.3 参数传递规则

参数传递的规则不一样, 利用参数的数量可以将子程序分为参数数量固定, 以及参数数量不固定的子程序, 对于参数变化的子程序, 若参数的数量少于四个, 那么要利用寄存器来进行参数的传递, 若参数的数量多余四个, 那么必须要利用堆栈来进行参数的传递, 所以参数之间传递的规则不同。

2 C语言

2.1 汇编语言调用C语言

在对计算机程序的开发中, 前期由汇编语言进行初始化的编程, 然后在进行C语言之间的切换, 对于C语言的切换, 主要是通过BL来实现的。以下是调用的字符:

汇编语言的集成环境如图1所示。

2.2 C语言调用汇编语言

在程序中, 使用“C++”程序来调用C程序, 以下是调用C程序的字符:

2.3 汇编程序调用C++程序

在汇编语言与C++程序的切换时, 必须要利用关键词进行声明, 在C++程序的结构中, 如果没有基类, 则要使相应的存储结构与ARMC相同。并且在汇编过程中将参数的数据放在数据栈中, 只有这样才能使被调用的C++程序访问到相应的参数。

3 混合编程

在进行混合编程的过程中, 若汇编代码较短, 那么可以利用内嵌汇编的方式进行混合编程, 不会直接指定寄存器, 而是直接利用编译器进行分配。主要的内嵌汇编语言如下:

以下是利用字符串复制的方式实现混合汇编:

4 结语

在计算机系统嵌入式应用程序的开发中, 利用ARM汇编语言与C/C++语言相互结合的混合编程方式, 可以在很大程度上提高编程的最佳效果。本文主要举出了ARM汇编语言以及C/C++语言汇编中的实例, 提出了设计的方法, 阐述了ARM汇编语言与C/C++语言相互结混合编程方式的实现。

参考文献

[1]翟乃强, 隋树林.汇编语言与C语言及Visual C++混合编程[J].青岛科技大学学报 (自然科学版) , 2003.

[2]王付山.汇编语言程序设计教学初探[J].福建电脑, 2005.

C语言习题 篇3

关键词:C语言;编程技巧;应用

中图分类号:G642 文献标识码:B 文章编号:1002-7661(2014)24-002-01

C语言属于一种程序设计类语言,其使用在数据处理方面有突出作用,在很多的学习工作领域都有大规模的应用,像是软件开发、科研建设等都离不开C语言的利用。C语言编程,就是用C语言进行相应计算机代码的编写,C语言的学习,需要掌握一定的技巧,不然没有头绪的学习是得不到良好学习效果的,掌握了C语言的学习技巧,才能够更好的促进C语言的学习[1]。

一、C语言与C语言的优势

当下世界上使用范围最广,流行度最高的计算机编程语言便是C语言,要想良好的学习和使用C语言,必须加深对C语言的了解。C语言发源于上个世纪60年代,成熟在70年代,最近半个世纪的使用过程中,C语言表现了如下几种优势:第一,C语言简洁紧凑,使用方式灵活方便,且语法运用宽松不受限制,书写方式自由随意,结合了高级编程语言的结构性与实用性的特点,组成了一种全新式的有强大使用功能的编程语言;第二,C语言有广泛的应用层面,且可植性强,C语言在各种系统中都能够被兼容使用;第三,C语言的运算符丰富多样,各种数据结构类型的使用,除了C语言可以将各种复杂的数据运算完成外,还具有强大的图形功能;第四,结构式的语言特点分割了代码和数据,其中的程序表现层次条理清楚,后期的使用和维护工作便利,使用C语言可以访问物理地址[2]。从中可知,C语言具有强大的功能,因此在信息技术的领域中,C语言所占据的地位是非常高的。

二、C语言学习难度大的原因

因为C语言所具备的各种强大功能,因此人们对其的关注程度也越来越高,想要学会并且全面掌握C语言技术的人也越来越多。可是大部分在刚刚接触C语言的时候,觉得C语言过于枯燥乏味,学习了一段时间后都没有掌握到多少知识,也没有一个清楚全面的认识对于C语言,觉得十分的茫然。出现这种情况的原因还是因为C语言是一种高级语言,这种语言和面向对象的语言之间存在较大的差别,在C语言的学习过程中,学习者难以从中看到形象的画面,只能够在编程程序成功后,经过调试才可以看到效果。在编程的过程中,只要出现一点粗心错误,就会让整个编程无法成功调试,出现一些错误的现象,除此之外,C语言的使用过程中,包含了大量的算法与数据组成结构,这些没有任何的技巧,就是要死记硬背,所以很多学习者在遇到这些枯燥晦涩的问题时,就会丧失学习兴趣,降低学习效率和学习质量。

三、C语言编程技巧的应用

1、用空间换时间

例如对字符串进行赋值,方法有以下几种:

(1)基础方法:

#define LEN 32

Char string I[LEN];

memset(string 1,0,LEN);

ctrcpy(string 1,“this is a example”) ;

(2)方法2:

const char string2[LEN]=“this is a example”;

char*cp;

cp=string2;

从这个案例中可以发现,方法(1)与方法(2)在电脑上的执行效率是不一样的,第一种方法必须使用两个字符函数才可以完成,而第二种方法直接使用指针就可以完成了。但是第二种方法相比第一种方法灵活性欠缺,如果这个字符串有不断变化的要求,那么第一种方法就有很大的使用优势了,第二种方法要占用较大的内存,但是效率比第一种更高[3]。

2、位运算掌握

在利用位运算的时候,能够让代码变得更加的简洁,提升运算效率,让问题得到顺利解决。在所有的计算机程序之中,最小的数据单位就是位,无特殊情况的话,所有的数据运算和操作都可以使用“位运算”方式完成,从这里就就可以看出,在编程语言之中,“位”有多么重要了。“位”使用在C语言的运算过程中,可以提升工作效率,顺利的将更多难度大的问题解决。

3、C语言特有函数掌握

很多时候进行编程,都需要使用C语言的特有函数,函数不是一种数据,而是一种功能,每一个函数都能够执行一定的功能建设,而相对应的函数名称中也将函数的功能反映了出来。开展函数定义的时候,要求操作者包含名字、参数名、类型和函数返回类型的数据,编译过程中,数据库系统是之前被定义好了的,使用过程中只要通过#include这项指令,把各种相关的头文件包含在本文件当中就可以了。

但是不管在C语言编程过程中使用怎样的技巧,还是需要做到具体问题具体分析,以上各种技巧使用起来因人而异,整体是能够提升编程效率,在学习过程中使用会获得一定的成效,而降低学习的枯燥感,拓宽C语言的使用范围。

C语言的学习过程中,每一位学习者都应该对C语言的特性有充分的了解,学习并且掌握每一种编程技巧,学习好了C语言的编程技巧,可以帮助学生提升C语言的学习兴趣,让学生的学习目的性更强,提升学生的C语言学习效率与学习质量。

参考文献:

[1] 余 勍.王 捷.浅谈C语言编程技巧在C语言学习中的应用[J].信息通信,2013,07:108.

[2] 赵 黎.范君君.C语言编程技巧在C语言学习中的应用研究[J]. 信息与电脑(理论版),2014,09:252.

C语言习题 篇4

第一章

习题

一、单项选择题 1.C 2.B 3.B 4.C 5.D 6.A 7.C 8.A

二、填空题

1.判断条件 2.面向过程编程 3.结构化 4.程序

5.面向对象的程序设计语言 6.基本功能操作、控制结构 7.有穷性

8.直到型循环结构 9.算法 10.可读性 11.模块化

12.对问题的分解和模块的划分

第二章

习题

一、单项选择题

1.B 2.D 3.C 4.B 5.A 6.A 7.B 8.C

二、填空题

1.主 2.C编译系统 3.函数、函数 4.输入输出 5.头 6..OBJ 7.库函数 8.文本

第三章

习题

一、单项选择题 1.D 2.B 3.A 4.C 5.C 6.D 7.D 8.B 9.B 10.C 11.A 12.D 13.C 14.C 15.C 16.A 17.C 18.C 19.C 20.D 21.A 22.D 23.D 24.D,A 25.D 26.A 27.B

二、填空题

1.补码 2.308 10  (~)

308 10,—

2.308 10  (~)

308 10,— 3.逻辑

4.单目,自右向左 5.函数调用 6.a 或

b(题目有错 , 小括号后面的

c<=98 改成(c>=97&&c<=98)就可以得到所给的答案了)7.1 8.65,89

第四章

习题

一、单项选择题

1.D 2.C 3.D 4.A 5.D 6.B 7.A 8.C 9.B 10.B

二、填空题

1.一

2.5.169000 3.(1)-200 2500

(2)i=-200,j=2500(3)2500 200   

j i 4.a=98,b=765.000000,c=4321.000000 5.100 25.81 1.89234,100

25.81 按

Enter 键)

1.89234,100(按

Tab 键)

25.81(按

Tab 键)

1.89234 6.0,0,3 7.3 8.scanf(“ %lf %lf %lf”,&a,&b,&c);9.13 13.000000 13.000000 10.b=a;a=c;c=b;或

a=a+b;c=c-b;(对于本题来说,后者的答案更好,不仅使

a 与

c 的值进行

交换而且能保持中间变量

b 的值不发生改变)

第五章

习题

一、单项选择题

1.D 2.C 3.B 4.B 5.D 6.A 7.B 8.D

二、填空题

1.非零,零 2.k= =0 2.k= =0 3.if(abs(x)>4)

Printf(“ %d ” ,x);else

printf(“ error!”);4.if(x%2==1&&((x>=1)&&(x<=10)||(x>=200&&x<=210))printf(“%d”,x);5.k=1(原题最后一行漏了个

d, 如果认为原题正确 , 则输出

k=%。)6.10!,Right!11 7.$$$a=0 8.a=2,b=1 9.0

第六章

习题

一、单项选择题

1.B 2.C 3.C 4.B 5.C 6.B

7.C 8.A

二、填空题

1.无穷次

2.8(原题有误。应该把

b=1 后面的逗号改为分号)

3.20 4.11 5.2.400000 6.*#*#*#$ 7.8 5 2 8.①

d=1.0 ②

k++

k<=n 9.①

x>=0 ②

x

第七章

习题

一、单项选择题

1.B 2.B 3.C 4.C 5.A 3 6.A 7.B 8.A

二、填空题

1.512 256 128 64 32 16 8 4 2 1 2.①

a[age]++ ②

i=18;i<26 3.①

break

i==8 4.①

a[i]>b[j]

② i<3 ③

j<5 5.①

b[j]=a[j][0] ②

b[j]

第八章

习题

一、单项选择题

1.B 2.C 3.C 4.A 5.A 6.C 7.C 8.D 9.D 10.B 11.A 12.C 13.A 14.C 15.B

二、填空题

1.①

return(0)

return(n+sum(n-1))2.①

return(1)

n*facto(n-1)

第九章

习题

一、单项选择题

1.D 2.C 3.D 4.A 5.C 6.C 7.C 8.A 9.B 10.C 11.A 12.A 13.B 14.B 15.B 16.D 17.C 18.D 19.B 20.D

三、填空题

1.①

int * ②

* z 2.①

*p++ 3.①

’ ’

++ 4.①

q=p+1

q

*q>max

*q

习题

一、单项选择题

1.D

2.D

3.A

4.C

5.B 6.A

7.A

8.B

9.D

10.B 11.C

12.B

13.D

14.C

二、填空题

1.0x 34,0x12

2.ARRAY a[10],b[10],c[10];

3.2,3 4.“ ab ” , ” cd ”

5.(*b).day,b->day

6.ad

abcdef

ghimno

hino 7.①

node*

!=NULL

p=top 8 p1->next 9.①

list*

② list*

return h;

第十一章

习题

一、单项选择题

1.A

2.A

3.B

4.A

5.B 6.D(题目有错,将

D 中的

改成)

7.B

8.B

9.B

10.B

11.B

12.B

13.C

14.C

15.D

16.A

17.D

二、填空题

1.ASCII,二进制

2.pf=fopen(“

A:zk04dataxfile.dat ” , ” w ”);3.4.ASCII , 二进制,文件尾,非

秘书学复习题C 篇5

一、填空题

1.秘书部门、最主要的工作是为_______和_______服务。

2.秘书要为服务,并通过为_______来实现为人民服务的根本宗旨。

3.秘书人员必须按照办事,这是秘书工作_______特点决定的,但这不是对秘书人员独立人格的制约。

4._______和_______向来为秘书工作之大忌。

5.参谋智囊作用最突出地表现在_______的过程中。

二、单项选择题

1.一般秘书人员的基本任务是()。

A.参与政务B.参与政务,掌管事务

C.掌管事务,搞好服务D.搞好服务

2.反映秘书信息工作的智谋性助手作用的是()。

A.信息收集工作B.信息加工工作

C.信息传输工作D.信息反馈工作

3.进入决策层的秘书长的基本任务是()。

A.参与政务B.搞好服务C.参与政务,掌管事务,搞好服务

D.掌管事务,搞好服务

4.秘书工作的辅助性主要体现在地位的()

A.被领导性B.中介性C.从属性D.5.秘书部门参谋职能的实质是()。

A.掌管事务 B.参与决策C.参与政务,掌管事务 D.为领导决策直接服务

6.秘书发现上司的决策有错误时应()。

A.向上级反映B.参谋提醒C.记下来,不表态 D.坚决反对

7.秘书部门的基本功能是()。

A.辅助决策B.直接辅助与服务 C.参谋与决策D.决策与服务

8.秘书在领导决策前的信息收集、调查研究、草拟文稿等均属于()。

A.拓展性工作 B.技术性工作C.事务性工作 D.铺垫性工作

9.我国现在实行的是()。

A.二级密制B.三级密制C.四级密制D.五级密制

10.机关各部门向档案部门移交档案的时间是()。

A.当年底B.第二年上半年 C.第二年年中D.第二年年底

三、多项选择题

1.秘书按行业与按口分类一分为()等。

A.党政秘书B.基层秘书C.外交秘书

D.农衬秘书E.军队秘书

2.秘书按工种(岗位)分类一般分为()等。

A.农村秘书B.行政秘书C.机要秘书

D.文字秘书E.事务秘书

3.下列是秘书学性质特点的是()

A.是新兴学科B.是一门综合学科C.政治性强

D.应用性强E.实践性强

4.秘书工作:()

A.秘书活动的中介B.秘书活动的客体要素

C.秘书活动的载体要素D.秘书活动的外在要素

5.秘书机构的基本职能是()。

A.调查研究B.辅助决策

C.办理会务D.协调关系

E.服务领导

6.正在接听电话时有另外一个来电,这时候应该()。

A.长话短说,结束正在接听的电话,迅速处理另外的来电。

B.记下另外来电的号码,随后再打过去。

C.请另外的来电者随后再打来。

D.先听完已经接听的电话,再理会另外的来电。

7.秘书学具有()等学科特点。

A.属于社会科学范畴B.综合性强

C.实践性强D.历史悠久

E.学科发展受到相关学科的影响和制约

8.采取个别交谈的调研方式时,必须注意以下事项:()。

A.选准调查对象

B.直接问明调查对象的个人资料

C.必要时邀请调查对象所在单位领导成员到场,对其施加适当的心理压力,以保证访谈内容的真实准确

D.态度要诚恳,方式方法要得当

E.将调研者的个人观点或见解向调查对象进行暗示,以期求得共鸣

9.秘书工作的作用有:()。

A.沟通协调B.监督审查

C.总管D.督促检查

10.秘书工作的原则有:()。

A.统一原则B.快速原则

C.准确原则D.及时原则

四、下列带有一定文学色彩的语句,包含了不少秘书学知识。请试作分析。

1.两眼一睁,忙到熄灯。

2.今日助理,昨日秘书。

五、简答题

1.秘书工作参谋与助手职能的实现途径。

2.秘书人员的基本能力要求是什么?

3.秘书部门做好保密工作要重点把握哪几点?

4.正确处理秘书与领导集体关系的原则是什么?

5.秘书工作的助手作用主要体现在哪些方面?

六、应用题

阅读下面两篇不同时期的报道,结合你对秘书工作的认识,写一篇分析性文章。(字数要求:500~800。)

(一)领导自己写报告,专职秘书都取消

本报江西讯 江西省全南县委书记李蔚近日宣布,取消县委、县政府领导的专职秘书。该县县委只配备两个公用秘书,县政府只配三个秘书,使秘书职数减少了50%。

近年来,全南县委、县政府正、副县党政领导都配备有专职秘书。秘书职数越来越多,使部分领导养成了惰性。去年底,该县新一届领导班子组成后,要求所有领导干部提高自身业务素质,做到自己写报告、拟文稿,全面处理本职事务。(载1998年6月10日《羊城晚报》第15版)

(二)四川绵阳市委规定:县级领导不得配秘书

本报讯 据《成都商报》报道,四川省绵阳市委近日发通知规定,县(市、区)党政领导一律不得配备秘书。

众所周知,在县(市、区)党政领导班子成员中,配备秘书已是比较普遍的现象,在一定程度上加大了领导干部的工作成本,同时,对县级领导干部的形象也有一定的不良影响。为进一步加强各县(市、区)党政领导班子建设,绵阳市委下发通知规定:各县(市、区)党政干部不需要再配备专职秘书负责文字材料等日常工作,党政一把手可由办公室指定一个同志主要负责为其做好服务工作。对已配备的秘书人员安排适合的工作,属于借用、聘用的秘书人员要及时清退。

秘书学复习题C答案

一、填空题

1.最直接、领导、领导机关2.领导工作、领导服务 3.领导意图、从属性4.越位擅权5.领导决策

二、单项选择题

1.C2.B3.C4.C5.D

6.B7.B8.D9.B10.B

三、多项选择题

1.ACDE2.BCDE3.BCDE4.BC

5. BE6.A7.ABCE8. AD

9.AD10.CD

四、下列语句中包含了不少秘书学知识,请试作分析。

1.要点:秘书工作的事务性特征在这句话中得到了形象的描述。秘书工作非常具体,非常丰富,可以将其工作内容和与特点概括为“细”、“繁”、“杂”、“忙”,因而秘书工作十分辛苦,十分忙碌。

2.要点:这句话准确而形象地反映出助理与秘书的关系。二者都是领导者的助手,都为领导者的决策提供优质服务。但助理较多直接参与决策,秘书(特别是一般秘书)的主要工作内容不是直接参与决策,而是提供辅助性服务。也就是说,二者辅助决策的渠道和作用均存在较大的区别。秘书人员在得到充分的锻炼提高之后,完全可以成长为更高层次的辅助者,即助理。

五、简答题

1.(1)协助领导处理各种事务,实现事务性助手职能。

(2)辅助领导制定正确决策,实现智能性参谋职能。

2.(1)文字表达能力。(2)口头表达能力。(3)组织管理能力。(4)应变能力。(5)交际能力。

3.(1)加强对秘书人员的保密教育,秘书人员要增强保密意识,严于律己,守口如瓶,做到知密不泄密,切忌麻痹大意,掉以轻心。

(2)要有必要的组织措施保证。

(3)要采取一系列有效措施,保证文件在印制、校核、传递等工作环节手续严格健全,按照规章办事,堵塞一切可能出现的漏洞,防止党和国家机密受到损失。

4.(1)既为主要领导服务,也为领导集体服务。

(2)维护领导集体团结,努力化解矛盾。

(3)妥善处理多头指示,避免产生矛盾。

(4)明确领导职权分工,注重规范请示。

5.秘书工作的助手作用,主要体现在抓好下列诸方面的工作:第一,做好日常的文书处理、会务和档案管理工作。第二,做好文件信息的加工筛选工作。第三,做好领导临时交办的工作。第四,做好公务接洽、信访接待和领导活动安排工作。第五,做好领导人某些必要的生活服务工作,为之排忧解难等。

六、应用题

微观经济学练习题C 2 篇6

一、判断对错题

1.必需品的价格弹性必定大于高级品的价格弹性。

2.在收入制约条件下的效用最大化在现实中往往很难达到。3.无差异曲线的斜率等于两种商品的效用之比。

4.假设劳动市场是竞争性的,如果政府规定的最低工资高于市场均衡工资,必然引起失业。5.如果垄断者实行一级价格歧视,它就可以获得所有消费者剩余。

二、单项选择题

1.预算线反映了()

A.消费者的收入约束 B.消费者的偏好 C.消费者人数 D.货币的购买力。2.等成本曲线平行向外移动表明()

A.产量提高了 B.成本增加了 C.生产要素的价格按相同的比例提高了 D.生产要素的价格按不同的比例提高了

3.一个市场上只有一个厂商,生产一种没有替代品的产品,这样的市场结构被称为()A.垄断竞争 B.完全垄断 C.寡头垄断 D.完全竞争 4.寡头垄断和垄断竞争之间的主要区别是()A.厂商的广告开支不同 B.非价格竞争的数量不同 C.厂商之间相互影响的程度不同 D.以上都不对 5.鸡蛋的供给量增加是指()

A.由于鸡蛋的需求量增加而引起的增加 B.由于鸡蛋的价格上升而引起的增加 C.由于收入的增加而引起的增加 D.由于饲料价格的下降而引起的增加 6.所有下列因素除哪一种外都会使需求曲线移动()

A.消费收入变化 B.商品价格变化 C.消费者偏好变化 D.其它相关产品价格变化 7.市场失灵是指()

A.在私人部门和公共部门之间资源配置不均 B.不能产生任何有用成果的市场过程 C.以市场为基础的对资源的低效率配置 D.收入分配不平等

8.直线型需求曲线的斜率不变,因此其价格弹性也不变,这种说法()A,正确 B.不正确 C.有时正确有时不正确 D.难以确定 9.需求曲线从()导出

A.价格-消费曲线 B.收入-消费曲线 C.无差异曲线 D.预算线 10.在垄断竞争厂商长期均衡点上,长期平均成本曲线处于()

A.上升阶段 B.下降阶段 C.水平阶段 D.上升、下降、水平阶段都有可能 11.当某一经济活动存在外部经济效果是指该活动的()

A.私人利益大于社会利益 B.私人成本大于社会成本 C.私人利益小于社会利益 D.私人成本小于社会成本

三、名词解释

1.边际分析 2.供给 3.最高限价 4.消费者均衡 5.寡头市场

四、问答题

1按西方经济学家的看法,能否说“产品差别程度越大,则产品价格差别越大”? 2.为什么完全竞争中的厂商不愿为产品做广告而花费任何金钱? 3.一个企业主在考虑再雇佣一名工人时,在劳动的平均产量和边际产量中他更关心哪一个?为什么?

4.解释需求定理和供给定理。

微观经济学练习题C答案

一、判断对错题

1.F 2.T 3.F 4.T 5.T

二、单项选择题

1.A 2.B 3.B 4.C 5.B 6.B 7.C 8.B 9.A 10.B 11.C

三、名词解释

1.边际分析:通过对增量的对比来决定是否采取或取消一种经济行为。2.供给指在一个特定时期内与每一价格水平相对应、生产者愿意并且能供给市场销售的商品或劳务的数量。3.最高限价:又叫价格天花板,是指政府为限制某些商品和要素价格上涨而规定的最高价格。其目的是为了保护消费者利益,这个价格低于均衡价格。

4.消费者均衡是指消费者通过购买各种商品和劳务实现最大效用时既不想再增加、也不想再减少任何商品购买数量的这么一种相对静止的状态。5.寡头市场又称寡头垄断市场。他是指少数几家厂商控制整个市场的产品的生产和销售的这样一种市场组织。

四、问答题

1.可以这样说。因为西方经济学家认为,产品差别造成了垄断,才能使垄断厂商按不同质的产品价格来出售自己的产品。如果产品没有差别,则价格不能有差别,否则,产品会失去市场。如果产品有差别,生产者就可以在价格上也有差别。这样的价格差别并不会使生产者丧失市场,因为有差别的产品能满足人们不同的需要。产品差别越大,满足人们不同需要的程度也越大,从而使产品价格差别的可能性也越大。

2.因为在理论上完全竞争本身假定生产者和消费者具有完全的信息或知识,无需作广告。厂商做广告只会增大产品的成本,使所获利润减少甚至亏损。完全竞争厂商仅是价格的接受者,他能按市场决定的价格卖出他愿意出卖的任何数量的产品,故厂商不愿做广告。3.一个企业主在考虑再雇佣一名工人时,在劳动的平产量和边际产量中他将更关心劳动的边际产量。厂商的理性决策在劳动的第Ⅱ阶段,在这个区域中,劳动的平均产量及边际产量都是递减的,但其中却可能存在着使利润极大化的点,劳动第Ⅱ阶段的右界点是使劳动的边际产量为零的点。因此,只要增雇的这名工人的边际产量大于零,即能够带来总产量的增加,企业主就可能雇佣他。

浅析C语言递归 篇7

所谓递归,简而言之就是在调用一个函数的过程中又直接或间接地调用该函数本身,以实现层次数据结构的查询和访问。在函数中直接调用函数本身,称为直接递归调用。在函数中调用其它函数,其它函数又调用原函数,这就构成了函数自身的间接调用,称为间接递归调用。

而采用递归方法来解决问题,必须符合以下三个条件:

1、可以把要解决的问题转化为一个新问题,而这个新的问题的解决方法仍与原来的解决方法相同,只是所处理的对象有规律地递增或递减。

说明:解决问题的方法相同,调用函数的参数每次不同(有规律的递增或递减),如果没有规律也就不能适用递归调用。

2、可以应用这个转化过程使问题得到解决。

说明:使用其他的办法比较麻烦或很难解决,而使用递归的方法可以很好地解决问题。

3、必定要有一个明确的结束递归的条件。

说明:一定要能够在适当的地方结束递归调用。不然可能导致系统崩溃。

好知道是这样以后;我们来写一个众多教材上的程序:使用递归的方法求n!。当n>1时,求n!的问题可以转化为n*(n-1)!的新问题。比如n=4:

第一部分:4*3*2*1n*(n-1)!

第二部分:3*2*1(n-1)(n-2)!

第三部分:2*1 (n-2)(n-3)!

第四部分:1(n-4)!4-4=0,得到值1,结束递归。我给的源程序如下:

可以看到,加上两条printf()和getchar()语句后,可以察看各级调用及其中间答案,很清楚的看到程序的执行过程。运行结果如图1所示,当主函数第一次调用fac0函数的时候,由于n=4不等于0和1,并不立即返回结果1,而是执行c=n*fac(n-1),用实参n-1 (值为3)调用fac()函数自己,即递归调用fac(3)。于是进入第二层调用fac(),这时也没有得出结果,继续用实参n-1(值为2)调用fac()函数自己。同样经过第三层调用后进入第四层调用,这时候n=1,算出1!=1,满足结束递归的条件,然后把得出的结果1返回给第三次调用的fac函数,得出2*1!=2,然后把结果2返回给第二次调用的fac函数,得出3*2!=6,最后第一次调用的fac函数根据第二次调用的返回值算出4!=4*3!=4*6=24,结束整个递归调用,得出最终结果并输出。

我们做事情,一般都是从头开始的,而递归却是从末尾开始的。比如上面的函数,当n>1的时候,就只能求助于n-1,而(n-1)1时,就求助于n-2,然后……直到(n-k)=1时,函数fac终于有了返回值1了,它再从头开始计算,然后一直算到n为止。所以说,递归简直就是一个数学模型,它的工作过程就是自己调用自己。以下是几点对递归的说明:

1、当函数自己调用自己时,系统将自动把函数中当前的变量和形参暂时保留起来,在新一轮的调用过程中,系统为新调用的函数所用到的变量和形参开辟另外的存储单元(内存空间)。每次调用函数所使用的变量在不同的内存空间。

2、递归调用的层次越多,同名变量的占用的存储单元也就越多。一定要记住,每次函数的调用,系统都会为该函数的变量开辟新的内存空间。

3、当本次调用的函数运行结束时,系统将释放本次调用时所占用的内存空间。程序的流程返回到上一层的调用点,同时取得当初进入该层时,函数中的变量和形参所占用的内存空间的数据。

4、在开发过程中使用printf()和getchar()可以看到执行过程,并且可以在发现错误后停止运行。

很多人说所有递归问题都可以用非递归的方法来解决,能不用递归就不用递归。但是对于一些比较复杂的递归问题用非递归的方法往往使程序变得十分复杂难以读懂,而函数的递归调用在解决这类问题时能使程序简洁明了有较好的可读性,因此很多问题用递归可很容易解决。同时由于递归调用过程中,系统要为每一层调用中的变量开辟内存空间、要记住每一层调用后的返回点、要增加许多额外的开销,因此函数的递归调用通常会降低程序的运行效率(在许多情况下,速度的差别不太明显)。

我曾经碰到过这样一个动物繁殖问题:若一头小母牛,从出生起第四个年头开始每年生一头母牛,按此规律,第n年时有多少头母牛?

如果不用递归函数来做,每当母牛到第4岁的时候才会生下一头小母牛,所以,每年增加的新的1岁小母牛都是上一年3岁的母牛加上4岁的母牛生下数量之和,分析过程如图2所示,给出程序如下:

程序虽然简短,但是可读性太差,不易理解。那么如果用递归函数求此问题呢?

我们先写出函数表达式:f(n)=f(n-1)+f(n-3)

为什么f(n)=f(n-1)+f(n-3)呢,请看:

f(n)-f(n-1)=f(n-3)

因为第n年要比n-1年多的牛,都是大于三岁的牛生的小牛,而f(n-3正是那些在n年大于三岁的牛,然后它们在第n年生下相同数量的小牛。源代码如下:

运行结果如图3所示:

可见,递归函数的主要优点是可以把算法写的比使用非递归函数时更清晰更简洁,而且某些问题,特别是与人工智能有关的问题,更适宜用递归方法。递归的另一个优点是,递归函数不会受到怀疑,较非递归函数而言,某些人更相信递归函数。编写递归函数时,必须在函数的某些地方使用if语句,强迫函数在未执行递归调用前返回。如果不这样做,在调用函数后,它永远不会返回,造成无穷递归。在递归函数中不使用if语句,是一个很常见的错误。此外,象汉诺塔问题就只能靠递归才能解决,但是现实中很多问题都是比较简单的,没有象汉诺塔那么复杂,我们只要会用递归编程来为我们解决一些问题就行了,所以就不必深究了。

参考文献

浅谈C语言教学的误区 篇8

关键词:C语言;教学现状;教学误区

一﹑教学现状

在高等学校的本科教育中,“C语言程序设计”几乎成了所有专业的必开课程,从计算机科学与技术、软件工程、网络工程等相关专业,到电子信息类理工科各专业,乃至理工科院校的所有非计算机专业,有的是专业基础课,有的是公共必修基础课,有的是“非计算机专业的计算机基础课”。只是课程名稍有差异,常见的有“C语言程序设计”、“高级语言程序设计”、“C语言”、“C程序设计”、“结构化程序设计”等。无论叫什么样的课程名,也无论是哪类专业,其课程的教学要求和教材选用却无太大差别,只是课时分配差异较大。

从网络调查的16所不同类型高校的“C语言程序设计”教学大纲看,普遍都包含“通过本课程的学习,使学生了解有关程序设计的基本概念、术语及C语言的特点,掌握C语言基本数据类型、语法规则、程序控制结构、常用的标准库函数,培养学生的程序设计技能,初步积累编程经验”的教学基本要求;约百分之八十左右的“C语言程序设计”课程都选用由谭浩强主编、清华大学出版社出版的“C程序设计”作为主教材;课时分配从30~108课时不等,其中80课时以上的多为应用型本科院校的计算机相关专业以及综合性大学的非计算机专业,理论课时与实验课时的比例一般为1:1到1:1.2。与此同时,其他专业基础课(如计算机组成原理、操作系统、数据结构等)的课时一般为54课时,最多不超过72学时。相比之下,“C语言程序设计”所占课时是其他专业基础课的1.5倍至2倍。

从教学目的看,非计算机专业的“C语言程序设计”课程主要目的是“掌握语法规则和程序结构,具备一定的程序设计能力”,而计算机相关专业的“C语言程序设计”课的教学目的则要分为三个层次,一是使学生全面理解计算机程序设计语言的基本内容和结构;二是通过算法掌握程序设计的基本方法和步骤,并具备一定的程序设计能力;三是为后续课程的算法描述和其他程序设计语言的学习奠定基础。

二﹑教学误区

从以上的教学现状(特别是课时分配)看,长期以来,“C语言程序设计”的课程教学存在“教学内容背离教学要求和教学目的”的误区,主要表现在教材误区、讲授误区和考核误区三个方面。

(一)教材误区

国内高校的“C语言程序设计”课大多选用谭浩强主编、清华大学出版社出版的“C程序设计”[1]为主教材,目前使用的是2005年7月修订出版的第三版,教材共363页,主体内容分为14章,其中,第3章的数据类型与表达式占用30页,第4章的格式输入输出占用12页,前9章共占用218页,后5章共占用145页。占用如此大篇幅的原因是教材中除了介绍相关语法格式外,还增加了相当多“特殊格式”和“特殊情况”的解释和说明,因此,该教材的最大优点就是“内容详尽、解释清晰”。

然而,对于初学者来说,学习计算机程序设计语言就是为了“为计算机描述求解问题的过程”,过于详细但又远离现实问题的“特殊格式”和“特殊情况”的解释,使得学习内容复杂化,增加了程序设计语言学习的难度,误导了学习者的学习重点,由此也赋予了该教材无法掩饰的缺点,那就是教材编写的指导思想和教材内容的组织脱离了高校各专业“C语言程序设计”课程的教学目标,过分强调语法细节而忽略了程序设计语言的“正向表达能力”的应用,过分强调“语言的灵活性”而导致教材主体内容的“复杂化”,从而误导“C语言程序设计”课程的教学内容朝着“重语法学习、轻算法描述”的“语言研究”方向发展。

(二)讲授误区

由于教材内容的“复杂”,课堂讲授自然需要较多课时,教学重点当然也放在了“语法研究”上。从网上下载的“C程序设计(第三版)”的配套教学课件以及有关院校的“C语言程序设计”教学课件的内容组织上可以清楚的给出以上判断。“语法研究”型的课堂讲授,更加放大了教材对“C语言程序设计”课程内容的“扭曲”程度,给学生提供了错误的程序设计语言学习方法,把简单问题复杂化,更为严重的是,挫伤了学生学习计算机程序设计语言的兴趣和积极性,把本应“主动学习”的课程成引入了“被动学习”的歧途,直接导致“懂语法、会做题,但不会编程序”的教学后果。

(三)考核误区

多年来,“C语言程序设计”的主体考试内容就是“语法”,无论是选择题、填空题还是程序阅读题,大多都无法逃脱“语法”的束缚。考试方式以笔试为主。这在某种程度上肯定了“语言研究”的教学角度,促使“C语言程序设计”的教学重点更向“语法研究”的方向倾斜,最终误入“增加课时,强化语法,还是不会编程序”的怪圈。

C语言习题 篇9

7.1.1二维数组的定义

前面介绍的数组只有一个下标,称为一维数组,其数组元素也称为单下标变量。在实际问题中有很多量是二维的或多维的,因此C语言允许构造多维数组。多维数组元素有多个下标,以标识它在数组中的位置,所以也称为多下标变量。本小节只介绍二维数组,多维数组可由二维数组类推而得到。

二维数组定义的一般形式是:类型说明符 数组名[常量表达式1][常量表达式2]

其中常量表达式1表示第一维下标的长度,常量表达式2 表示第二维下标的长度。例如:

int a[3][4];说明了一个三行四列的数组,数组名为a,其下标变量的类型为整型。该数组的下标变量共有3×4个,即:

a[0][0],a[0][1],a[0][2],a[0][3]

a[1][0],a[1][1],a[1][2],a[1][3]

a[2][0],a[2][1],a[2][2],a[2][3] 二维数组在概念上是二维的,即是说其下标在两个方向上变化,下标变量在数组中的位置也处于一个平面之中,而不是象一维数组只是一个向量。但是,实际的硬件存储器却是连续编址的,也就是说存储器单元是按一维线性排列的。如何在一维存储器中存放二维数组,可有两种方式:一种是按行排列,即放完一行之后顺次放入第二行。另一种是按列排列,即放完一列之后再顺次放入第二列。

在C语言中,二维数组是按行排列的。即,先存放a[0]行,再存放a[1]行,最后存放a[2]行。每行中有四个元素也是依次存放。由于数组a说明为int类型,该类型占两个字节的内存空间,所以每个元素均占有两个字节)。

7.1.2二维数组元素的引用

二维数组的元素也称为双下标变量,其表示的形式为:

数组名[下标][下标] 其中下标应为整型常量或整型表达式。例如:

a[3][4] 表示a数组三行四列的元素。

下标变量和数组说明在形式中有些相似,但这两者具有完全不同的含义。数组说明的方括号中给出的是某一维的长度,即可取下标的最大值;而数组元素中的下标是该元素在数组中的位置标识。前者只能是常量,后者可以是常量,变量或表达式。

【例7.6】一个学习小组有5个人,每个人有三门课的考试成绩。求全组分科的平均成绩和各科总平均成绩。

可设一个二维数组a[5][3]存放五个人三门课的成绩。再设一个一维数组v[3]存放所求得各分科平均成绩,设变量average 为全组各科总平均成绩。编程如下:

main(){

int i,j,s=0,average,v[3],a[5][3];

printf(“input scoren”);

for(i=0;i<3;i++){

for(j=0;j<5;j++)

{ scanf(“%d”,&a[j][i]);

s=s+a[j][i];}

v[i]=s/5;

s=0;

}

average =(v[0]+v[1]+v[2])/3;

printf(“math:%dnc languag:%dndbase:%dn”,v[0],v[1],v[2]);

printf(“total:%dn”, average);}

程序中首先用了一个双重循环。在内循环中依次读入某一门课程的各个学生的成绩,并把这些成绩累加起来,退出内循环后再把该累加成绩除以5送入v[i]之中,这就是该门课程的平均成绩。外循环共循环三次,分别求出三门课各自的平均成绩并存放在v数组之中。退出外循环之后,把v[0],v[1],v[2]相加除以3即得到各科总平均成绩。最后按题意输出各个成绩。

7.1.3二维数组的初始化

二维数组初始化也是在类型说明时给各下标变量赋以初值。二维数组可按行分段赋值,也可按行连续赋值。例如对数组a[5][3]:

按行分段赋值可写为:

int a[5][3]={ {80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85} };按行连续赋值可写为:

int a[5][3]={ 80,75,92,61,65,71,59,63,70,85,87,90,76,77,85};

这两种赋初值的结果是完全相同的。

【例7.7】

main(){

int i,j,s=0, average,v[3];

int a[5][3]={{80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85}};

for(i=0;i<3;i++)

{ for(j=0;j<5;j++)

s=s+a[j][i];

v[i]=s/5;

s=0;

} average=(v[0]+v[1]+v[2])/3;

printf(“math:%dnc languag:%dndFoxpro:%dn”,v[0],v[1],v[2]);

printf(“total:%dn”, average);

}

对于二维数组初始化赋值还有以下说明:

可以只对部分元素赋初值,未赋初值的元素自动取0值。

例如:

int a[3][3]={{1},{2},{3}};是对每一行的第一列元素赋值,未赋值的元素取0值。赋值后各元素的值为:0 0

0 0

0 0

int a [3][3]={{0,1},{0,0,2},{3}};赋值后的元素值为:

0 1 0

0 0 2

0 0 如对全部元素赋初值,则第一维的长度可以不给出。

例如:

int a[3][3]={1,2,3,4,5,6,7,8,9};可以写为:

int a[][3]={1,2,3,4,5,6,7,8,9};

数组是一种构造类型的数据。二维数组可以看作是由一维数组的嵌套而构成的。设一维数组的每个元素都又是一个数组,就组成了二维数组。当然,前提是各元素类型必须相同。根据这样的分析,一个二维数组也可以分解为多个一维数组。C语言允许这种分解。

如二维数组a[3][4],可分解为三个一维数组,其数组名分别为:

上一篇:人生规划经典下一篇:贯通式教学对药理实验设计及课程认知的影响