文档库 最新最全的文档下载
当前位置:文档库 › c语言小知识汇总

c语言小知识汇总

c语言小知识汇总
c语言小知识汇总

1、类型的转换:

A、当表达式中存在有符号和无符号类型的数时,所有的操作数自动转换为无符号类型;

B、转换以占用内存大的类型为标准,将较小类型转换为较大类型,以保证精度不降低;

C、所有的浮点数都会先转成double型再运算,即使只有float型数据的表达式,也要先转成double再运算;

D、char型和short型运算时,要先转成int型;

E、在赋值运算中,赋值号两边的量的数据类型不同时,赋值号右边的量的类型转换为左边的量的类型。如果右边的数据类型长度比左边长时,将丢失一部分数据,这样就会降低精度,丢失的部分按四舍五入向前舍入。

2、枚举类型

3、字符逆序

4、strlen 和sizeof

sizeof 和初不初始化没关系,但是strlen和有没有初始化就有关系了。Sizeof(字符串):包括‘\0’的,但是strlen是串的实际长度,不包含’\0’。

5、字符逆序

A、

B、

C、

6、(1)Myatoi :字符转成数字

(2)Myitoc():数字转成字符(除了用sprintf()函数之外)

【注】:数字转字符

7、问

为什么返回3……?

8、一个字符串中有多少单词

9、二进制数中1的个数

问:二进制数中0的个数。

只要知道多少个有效位,然后减去该数据中1个个数,即为0的个数。那如何知道有多少个有效位呢?只要找到最高有效位即可,代码如下:

10、移位如:将0x12345678 →0x87654321

【注】移位的方法效率很高,若是用for循环也可以,但是效率低。for循环实现如下:

11、结构体的定义、初始化及赋值

【注意】这里的字符数组,要用strcpy函数实现赋值,要么就只能在定义的时候,用{}来进行初始化。切不可在赋值的时候,像普通变量那样直接赋值。

12、嵌入式linux系统组成:kernel、shell、文件系统、实用程序

13、如何在不使用第三个变量的情况下交换变量值。

(1)a=b-a; b=b-a;a=b+a;

(2)a=a^b;b=b^a;a=b^a;

14、请给出strlen函数的实现方法

15、请给出printf函数的实现方法

16、实现双向链表的删除函数

17、编写一个c语言程序,判断大端模式和小端模式

18、堆和栈的区别

19、删除串中指定的字符(做此题时,千万不要开辟新空间,否则面试官可能认为你不适合做嵌入式开发)

【注】:当str[i]不是所要删的字符时,if里边的语句不执行,那么j++就没执行。继续下一次循环,那么此时,j就比i少加了一次,执行赋值语句之后,后边的就把前面的覆盖了。达到效果!

20、

#define pi 3.14

#define Area(R) pi*R*R

int main(void)

{

int r1=5,r2=2;

double s=0;

s=Area(r1-r2);

printf(“The area is %f”,s);

}//求结果【注】这题真心要注意了

21、实现下列图形

*

*.*.

*..*..*..

*...*...*...*...

*....*....*....*....*....

*.....*.....*.....*.....*.....*.....

*......*......*......*......*......*......*......

*.......*.......*.......*.......*.......*.......*.......*.......

这个三层循环有点意思。注意k的范围,是<= i!

22、有一个字符数组A[6]=“ABCDE”,把它的存储状态变为A[6]=“EDCBA”,不要另外用多的存储空间

答22:(不就是字符逆序嘛,还有递归方法也可实现,上边有详细介绍)

23、函数void func(int *a[10])和void func(int **a)是等价的吗?

函数void func(int a[10][10])和void func(int (*a)[10])是等价的吗?

24、结构体大小计算

struct s1

{

char *ptr,ch;

union{

short a,b;

unsigned int c;

};

struct s1 *next;

};

struct s2

{

char a;

struct s1 b;

short c;

25、线程通信方式有?进程的通信方式有?特点?

答:线程间无需特别的手段进行通信,因为线程间可以共享数据结构,也就是一个全局变量可以被两个线程同时使用,但是要做好同步一般用mutex

进程间通信方式:pipe fifo 信号量消息队列共享内存socket 信号灯

26、myatoi

int atoi(const char *s)

{

char *p = s;

char c;

int i = 0;

while(c=*p++)

{

if(c>='0' && c<='9')

{

i = i*10 + (c-'0');

}

else

return -1;

}

return i;

}

27、1 ——100 间的素数(只能被1和本身整除的数)

int funSushu(void)

{

int i, j, k;

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

{

k = 0;

for (j = 2; j <= i / 2; j++)

{

if (0 == i % j)

{

k = 1;

break;

}

}

if (!k)

printf("%d ", i);

}

putchar(10);

return 0;

}

28、简单选择排序

int fun_Simple_select_sort(void)

{

int arr[] = {32, 12, 21, 1, 3, 56, 87, 90, 10, 58, 39, 33};

int i, j, k;

for (i = 0; i < sizeof(arr) / sizeof(int); i++)

{

k = i;

for (j = i + 1; j < sizeof(arr) / sizeof(int); j ++)

{

if (arr[k] < arr[j])//降序若是">", 则是升序排列

k = j;

}

if (k != i)

{

arr[i] = arr[i] ^ arr[k];

arr[k] = arr[i] ^ arr[k];

arr[i] = arr[i] ^ arr[k];

}

}

//输出

for (i = 0; i < sizeof(arr) / size(int); i++)

printf("%d ", arr[i]);

putchar(10);

}

29、

后又多吃一个,如此,到第10天的时候剩下1个,问总共有多少个桃子。

32、将数组中的元素奇偶分开,奇数在前,偶数在后(奇左偶右)

代码:

算法的时间复杂度:

关于二叉树的遍历:

先序、中序、后序,以及给出其中2序,求第三序(如:指导先序后序,求中序)(递归比较常见、简单)

关于链表的操作

链表逆序:

原理:(最初:curr是指向头的下一个节点,first指向curr的下一个节点,而second指向first的下一个节点!)

找出链表中倒数第四个节点:

【注释】:定义2个指针,让其中一个指针先走四个节点,然后俩指针同步走,当先走的指针走到链表的结尾时,后走的指针正好是倒数第四个节点。

31、约瑟夫的简单实现

32、单链表头插、尾插、删、改、查(1)头插

(2)尾插

(3)删目标节点

33、建循环链表以及约瑟夫法(1)建循环链表

代码:

【注】新插入的节点总是head的下一个节点(2)约瑟夫

代码:

c语言数组习题优选稿

c语言数组习题 集团文件版本号:(M928-T898-M248-WU2669-I2896-DQ586-M1988)

数组练习解答 1 定义一个名为a的单精度实型一维数组,长度为4,所有元素的初值均为0的数定义语句是___________ 【分析】按照一般数据定义语句的格式,可以直接写出方法一(参看答案);考虑到所有元素均赋初值时可以省略数组长度,可以写出方法二(参看答案);考虑到不省略数组长度,给部分元素赋初值时,所有未赋初值的元素均有空值(对数值型数组来说,初值为0),可以写出方法三(参看答案);考虑到选用静态型,不赋初值所有元素也自动赋予。空值(对数值型数组来说,初值为0),可以写出方法四(参看答案)。 【答案】方法一:float a[4]={0.0,0.0,0.0,0.0}; 方法二:float a[]={ 0.0,0.0,0.0,0.0}; 方法三:float a[4]= {0.0}; 方法四: static float [4]; 2 下列数组定义语句中,错误的是() ① char x[1]='a'; ②auto char x[1]={0}; ③ static char x[l]; ④ char x[l]; 【分析】显然答案①中给字符型数组赋初值的格式不对(不能直接赋予字符常量,必须用花括号括住),所以备选答案①是符合题意的答案。 【答案】① 3 用"冒泡排序法"对n个数据排序,需要进行n一1 步。其中第k步的任务是:自下而上,相邻两数比较,小者调上;该操作反复执行n-k次。现在假设有4个数

据:4、l、3、2要排序,假定4为上、2为下,则利用"冒泡排序法"执行第2步后的结果是_________________。 【分析】开始排序前的排列执行第1步后的排列执行第2步后的排列 4 1 1 1 4 2 3 2 4 2 3 3 【答案】 l、2、4、3 4 用"选择排序法"对n个数据排序,需要进行n-1步。其中第k步的任务是:在第k个数据到第n个数据中寻找最小数,和第k个数据交换。现在假设有4个数据:4、1、3、2要排序,则利用"冒泡排序法"执行第2步后的结果是 ______________________。 【分析】开始排序前的排列为: 4 1 3 2 执行第1步后的排列为: 1 4 3 2 执行第2步后的排列为: 1 2 3 4 【答案】1、2、3、4 5 下列数组定义语句中,正确的是() ① int a[][]={1,2,3,4,5,6}; ② char a[2]「3]='a','b'; ③ int a[][3]= {1,2,3,4,5,6}; ④ static int a[][]={{1,2,3},{4,5,6}};

C语言:数组的应用实验报告

课程名称:结构化程序设计与C语言开课实验室:年月日 一、实验目的 用C语言编写和调试数组的程序,包括一维数组和二维数组。从而对数组的程序设计有比较深入的了解。 二、内容及结果 1、程序二选择排序法 1)题目:用选择法对10个整数排序。 2)代码: #include int main() { int a[10]; int i,j,t; printf("input 10 numbers:\n"); for(i=0;i<10;i++) scanf("%d",&a[i]); printf("\n"); for(j=0;j<9;j++) for(i=0;i<9-j;i++) if(a[i]>a[i+1]) {t=a[i];a[i]=a[i+1];a[i+1]=t;} printf("the sorted numbers:\n");

for(i=0;i<10;i++) printf("%d",a[i]); printf("\n"); return 0; } 3)运行截图: 2、程序二将一个数组中的值按逆序重新存放。 1)题目:将一个数组中的值按逆序重新存放。 2)代码: # include int main () { int a[5]={8,6,5,4,1}; int i,t; for(i=0;i<=2;i++) { t=a[i]; a[i]=a[4-i]; a[4-i]=t;

} for(i=0;i<=4;i++) printf("%d ",a[i]); return 0; } 3)运行截图: 3、程序三输出杨辉三角形(10行) 1)题目:输出杨辉三角形(10行) 2)代码: #include int main() { int yh[10][10]={0}; int i,j; for(i=0;i<10;i++) yh[i][0]=1; for(i=1;i<10;i++) for(j=1;j<10;j++) yh[i][j]=yh[i-1][j-1]+yh[i-1][j]; for(i=0;i<10;i++) { for(j=0;j

C语言字符数组总结

字符数组总结 字符数组不仅可以存储字符还可以存储字符串,而且存储字符串时必须包含…\0?,因为此字符是字符串的结束标志。因此,对字符数组的初始化、输入输出与一般数组又有不同。现总结如下: 数组的赋值(其中前两种赋值后不能以字符串进行处理) 1. 逐个元素赋值 char a[5]; a[0]=…C?; a[1]=…H?; a[2]=…I?; a[3]=…N?; a[4]=…A?; 2. 一般整体赋值 char a[5]={…C?, …H?, …I?,?N?,?A?}; char a[ ]={…C?, …H?, …I?, …N?, …A?} 3. 字符串整体赋值 char a[ ]={“abc”}; char a[ ]=“abc”; char a[4]={…a?,…b?,…c?,…\0?}; 字符串的输入(已知:char str[ 10 ]; int i;) 1. 逐个元素输入(必须输入9个) for(i=0;i<9;i++) scanf(“%c”,&str[i]); //此句也可以用str[i]=getchar();代替 str[9]=…\0?; 注意:?\0?只能直接赋值,不能从外部输入,外部输入的\0是\和0两个字符 2. 整个字符串输入(以空格,回车或TAB键结束) scanf(“%s”,str); 注意:此语句执行后自动会在str后添加一个?\0?,如:运行时输入:abc回车键,则str 中将有4个字符,依次为:?a?,?b?,?c?,?\0?,其中?\0?是自动添加上的。 3. 整个字符串输入(只以回车键结束) gets(str); 注意:此语句执行后自动会在str后添加一个?\0?,如:运行时输入:abc回车键,则str 中将有4个字符,依次为:?a?,?b?,?c?,?\0?,其中?\0?是自动添加上的。 字符串的输出(已知:char str[ 10 ]; int i;) 1. 逐个字符输出(注意此时for语句表示从第一个字符一直到?\0?) for(i=0;a[i]!=…\0?;i++) //此句中的a[i]!=…\0?;也可以用i

C语言数组知识点总结

C语言数组知识点总结 IMB standardization office【IMB 5AB- IMBK 08- IMB 2C】

数组定义:数组是有序的并且具有相同类型的数据的集合。 一维数组 1、一般形式:类型说明符数组名[常量表达式];例如:inta[10];元素为a[0]----a[9]. 2、常量表达式中不允许包含变量,可以包含常量或符号常量。 3、数组元素下标可以是任何整型常量、整型变量或任何整型表达式。 4、可以对数组元素赋值,数组元素也可以参与运算,与简单变量一样使用。 5、使用数值型数组时,不可以一次引用整个数组,只能逐个引用元素。 6、需要整体赋值时只可以在定义的同时整体赋值。如 inta[10]={0,1,2,3,4,5,6,7,8,9};正确。 inta[10];a[10]={0,1,2,3,4,5,6,7,8,9};错误。 7、可以只给一部分元素赋值。例如: inta[10]={5,8,7,6};后面没有赋值的元素值默认为0。 8、对全部数组元素赋值时可以不指定数组长度,例如: inta[10]={0,1,2,3,4,5,6,7,8,9};可以写成inta[]={0,1,2,3,4,5,6,7,8,9}; 但是,既不赋初值,也不指定长度是错误的。例如:inta[];错误。 二维数组 1、一般形式:类型说明符数组名[常量表达式1][常量表达式2];例如: inta[3][4];可以看成是包含3个一维数组,每个一维数组里包含4个元素。一共3*4=12个元素。 所有元素为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] 2、与一维数组一样元素下标可以是是任何整型常量、整型变量或任何整型表达式。 3、需要整体赋值时只可以在定义的同时整体赋值。例如: inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};正确。 inta[3][4];a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};错误。 4、可以把所有数据写在一个花括号内。例如: inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};正确。 5、可以只对部分元素赋值。例如: inta[3][4]={{1},{5},{9}};其余未赋值的元素默认为0。 inta[3][4]={{1},{5,6}};可以看成是inta[3][4]={{1,0,0,0},{5,6,0,0},{0,0,0,0}}; 6、对全部数组元素赋值时可以省略第一维长度,第二维不可以省略。例如: a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 可以写成a[][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 或者a[][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 字符数组 1、定义:chara[10];字符数组a长度为10。每个元素只能存放一个字符。例如: a[0]='h';a[1]='a';a[2]='p';…… 2、初始化: chara[]={'h','a','p','p','y'}; chara[]="happy"; chara[]={"happy"};注意,因为字符串结尾自动加'\0',所以chara[]="happy";长度为6,不是5。

C语言数组知识点总结

数组 定义:数组就是有序的并且具有相同类型的数据的集合。 一维数组 1、一般形式: 类型说明符数组名[常量表达式];例如: int a[10]; 元素为a[0] a[9] 、 2、常量表达式中不允许包含变量,可以包含常量或符号常量。 3、数组元素下标可以就是任何整型常量、整型变量或任何整型表达式。 4、可以对数组元素赋值,数组元素也可以参与运算,与简单变量一样使用。 5、使用数值型数组时,不可以一次引用整个数组,只能逐个引用元素。 6、需要整体赋值时只可以在定义的同时整体赋值。如 int a[10]={0,1,2,3,4,5,6,7,8,9}; 正确。 int a[10]; a[10]={0,1,2,3,4,5,6,7,8,9}; 错误。 7、可以只给一部分元素赋值。例如: int a[10]={5,8,7,6}; 后面没有赋值的元素值默认为0。 8、对全部数组元素赋值时可以不指定数组长度,例如: int a[10]={0,1,2,3,4,5,6,7,8,9}; 可以写成int a[]={0,1,2,3,4,5,6,7,8,9}; 但就是,既不赋初值,也不指定长度就是错误的。例如:int a[]; 错误。 二维数组 1、一般形式:类型说明符数组名[常量表达式1][常量表达式2];例如: int a[3][4]; 可以瞧成就是包含3 个一维数组,每个一维数组里包含4 个元素。一共3*4=12 个元素。所有元素为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] 2、与一维数组一样元素下标可以就是就是任何整型常量、整型变量或任何整型表达式。 3、需要整体赋值时只可以在定义的同时整体赋值。例如: int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 正确。 int a[3][4]; a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 错误。 4、可以把所有数据写在一个花括号内。例如: int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 正确。 5、可以只对部分元素赋值。例如: int a[3][4]={{1},{5},{9}}; 其余未赋值的元素默认为0。 int a[3][4]={{1},{5,6}}; 可以瞧成就是int a[3][4]={{1,0,0,0},{5,6,0,0},{0,0,0,0}}; 6、对全部数组元素赋值时可以省略第一维长度,第二维不可以省略。例如: a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 可以写成a[][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 或者a[][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 字符数组

C语言中数组的总结

C语言中数组的总结 目录 1.数组的定义 2.一维数组的创建和初始化 3.给数组元素赋值 4.数组下标越界 5.二维数组 6.多维数组 7.指针与一维数组 8.指针与多维数组 9.指针,数组与函数 10.变长数组 11.以上全部内容 数组的定义 1.数组:一系列相同数据类型的有序序列。 2.声明数组: int states[50]; char code[28]; float candy[13]; 等等…… 通过声明将会告知编译器三个信息:1)数组内含有多少元素2)元素的数据类型3)数组名

一维数组的创建和初始化 1.数组的初始化:在数组创建时,我们要为数组初始化。 int months[12]={31,28,31,30,31,30,31,31,30,31,30,31};//数组的初始化 int months[ ]={ 31,28,31,30,31,30,31,31,30};//初始化时省略方括号中的数字,编译器会根据初始化列表中项数来确定数组的大小。(本例中数组的大小为9)const int months[12]={31,28,31,30,31,30,31,31,30,31,30,31};//将数组设置为只读,这样程序只能从数组中检索值,不能把新值写入数组。(一旦声明为const,便不能再给他赋值) 以花括号括起来,用逗号分隔数组元素来初始化数组,逗号和值之间可以使用空格。 C const 与C++ const 区别一:c++允许在声明数组时使用const整数变量,而c不允许。 区别二:const定义的变量未初始化时,c会使用一个变量地址上的随机的值,c++会报错未初始化的const 'y'。 区别三:const int y; const int *p2 =&y; int * p1; p1 = p2;//c++不允许这么做(从'const int*'到'int*' [- fper]的无效转换),c 会给出一个警告(赋值从指针目标类型中丢弃“const”限定符) 1)失败的初始化数组 a)未初始化数组:数组元素和未初始化的普通变量一样,编译器使用的值是内存地址上现有的值,使得数组储存的都是垃圾值。

c语言学习笔记(数组、函数)

数组 2010-3-29 22:40 一维数组的定义和一维数组的引用 内存中一串连续的存储单元(变量),叫数组。指针移动和比较只有在一串连续的数组中才有意义。 当数组中每个变量只带一个下标时,为一维数组。 定义一个一维数组: 类型名数组名【常量表达式】如:int a[8]; 说明:①定义一个一维整型名为a的数组。 ②方括号中规定此数组有8个元素,(a【0】-a【7】),不存在a【8】这个元素。 ③a数组中每个元素均为整型,且每个元素只能存放整型。 ④每个元素只有一个下标,且第一个元素的下标总为0。 ⑤c编译程序,为a数组开辟8个连续存储单元。 3)在定义数组语句中,可以有多个数组说明符;它们用逗号隔开。 例:double a【22】,v【100】,u【5】,a,b,c;注:双精度型每个单元占用8个字节的存储空间。另外,也可以和普通变量一起定义。 用逗号分隔开。 2010-3-23 10:29 一维数组元素的引用2 1) 引用形式:数组名【下标表达式】可以是:常量,变量,表达式。 如:double x【8】则x【0】x【j】x【i+k】均合法 2) (1)一个数组元素实际上就是一个变量名,代表内存中的一个存储单元。我们可以把数组元素看做一个变量名来处理。 (2)一个数组不能整体引用,数组名中存放的是一个地址常量,它代表整个数组的首地址。当学习指针时,引用的变量的地址,就是变量中第一个字节的地址。数组的首地址也是它的第一个元素的第一个字节的地址,即它的首地址。 数组的首地址存放在数组名中。所以说,数组名就代表一个地址。数组名是一个地址值。 (3)在引用数组元素时,数组元素下标表达式必须是整数,下标表达式下限为0.系统并不自动检验数组元素下标是否越界,因此编程时要注意。 如:double a,b; int c[10]; a=2.0;b=3.0; 则a[i]; 是不合法的。 给数组赋初值时,如果所赋初值少于元素个数时,后面的元素补为0,字符补为’\0’可以通过赋初值来定义一个数组的大小。如:int a[]={0,0,0,0,0}; 相当于:a[5]={0};

C语言数组知识点总结

数组 定义:数组是有序的并且具有相同类型的数据的集合。 一维数组 1、一般形式:类型说明符数组名[常量表达式];例如:int a[10]; 元素为a[0]----a[9]. 2、常量表达式中不允许包含变量,可以包含常量或符号常量。 3、数组元素下标可以是任何整型常量、整型变量或任何整型表达式。 4、可以对数组元素赋值,数组元素也可以参与运算,与简单变量一样使用。 5、使用数值型数组时,不可以一次引用整个数组,只能逐个引用元素。 6、需要整体赋值时只可以在定义的同时整体赋值。如 int a[10]={0,1,2,3,4,5,6,7,8,9};正确。 int a[10]; a[10]={0,1,2,3,4,5,6,7,8,9};错误。 7、可以只给一部分元素赋值。例如: int a[10]={5,8,7,6};后面没有赋值的元素值默认为0。 8、对全部数组元素赋值时可以不指定数组长度,例如: int a[10]={0,1,2,3,4,5,6,7,8,9};可以写成int a[]={0,1,2,3,4,5,6,7,8,9}; 但是,既不赋初值,也不指定长度是错误的。例如:int a[];错误。 二维数组 1、一般形式:类型说明符数组名[常量表达式1][常量表达式2];例如: int a[3][4];可以看成是包含3个一维数组,每个一维数组里包含4个元素。一共3*4=12个元素。 所有元素为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] 2、与一维数组一样元素下标可以是是任何整型常量、整型变量或任何整型表达式。 3、需要整体赋值时只可以在定义的同时整体赋值。例如: int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};正确。 int a[3][4];a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};错误。 4、可以把所有数据写在一个花括号内。例如: int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};正确。 5、可以只对部分元素赋值。例如: int a[3][4]={{1},{5},{9}};其余未赋值的元素默认为0。 int a[3][4]={{1},{5,6}};可以看成是int a[3][4]={{1,0,0,0},{5,6,0,0},{0,0,0,0}}; 6、对全部数组元素赋值时可以省略第一维长度,第二维不可以省略。例如: a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 可以写成a[][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 或者a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};

c语言数组习题

数组练习解答 1 定义一个名为a的单精度实型一维数组,长度为4,所有元素的初值均为0的数定义语句是___________ 【分析】按照一般数据定义语句的格式,可以直接写出方法一(参看答案);考虑到所有元素均赋初值时可以省略数组长度,可以写出方法二(参看答案);考虑到不省略数组长度,给部分元素赋初值时,所有未赋初值的元素均有空值(对数值型数组来说,初值为0),可以写出方法三(参看答案);考虑到选用静态型,不赋初值所有元素也自动赋予。空值(对数值型数组来说,初值为0),可以写出方法四(参看答案)。 【答案】方法一:float a[4]={0.0,0.0,0.0,0.0}; 方法二:float a[]={ 0.0,0.0,0.0,0.0}; 方法三:float a[4]= {0.0}; 方法四: static float [4]; 2 下列数组定义语句中,错误的是() ① char x[1]='a';②auto char x[1]={0}; ③ static char x[l];④ char x[l]; 【分析】显然答案①中给字符型数组赋初值的格式不对(不能直接赋予字符常量,必须用花括号括住),所以备选答案①是符合题意的答案。 【答案】① 3 用"冒泡排序法"对n个数据排序,需要进行n一1 步。其中第k步的任务是:自下而上,相邻两数比较,小者调上;该操作反复执行n-k次。现在假设有4个数据:4、l、3、2要排序,假定4为上、2为下,则利用"冒泡排序法"执行第2步后的结果是_________________。 【分析】开始排序前的排列执行第1步后的排列执行第2步后的排列 4 1 1 1 4 2 3 2 4 2 3 3 【答案】 l、2、4、3 4 用"选择排序法"对n个数据排序,需要进行n-1步。其中第k步的任务是:在第k个数据到第n个数据中寻找最小数,和第k个数据交换。现在假设有4个数据:4、1、3、2要排序,则利用"冒泡排序法"执行第2步后的结果是______________________。 【分析】开始排序前的排列为: 4 1 3 2 执行第1步后的排列为: 1 4 3 2 执行第2步后的排列为: 1 2 3 4 【答案】1、2、3、4 5 下列数组定义语句中,正确的是() ① int a[][]={1,2,3,4,5,6};② char a[2]「3]='a','b'; ③ int a[][3]= {1,2,3,4,5,6};④ static int a[][]={{1,2,3},{4,5,6}}; 【分析】C语言规定,二维数组定义时不允许省略第二维的长度,所以备选答案①④是错误的。C语言还规定,定义字符型数组时不允许直接使用"字符常量"的方式赋初值,所以备选答案②也是错误的。显然备选答案③符合题意。【答案】③ 6 定义一个名为"s"的字符型数组,并且赋初值为字符串"123"的错误语句是() ①char s[]={‘1','2','3','\0 '};②char s「」={"123"}; ③char s[]={"123\n"}; ④ char s[4]={'1','2','3'}; 【分析】备选答案①中省略了数组长度,所以每个元素都赋了初值,共计4个元素,初值依次为'l'、'2'、'3'、'\0',最后一个元素的值为字符串结束标记,所以数组S中存放的是字符串"123",该答案不符合题意(即正确的);备选答案③中直接赋予字符串作为初值所以数组s的长度为4,其中的初值是字符串"123",不符合题意(即正确的);备选答案

c语言编程有关数组的几道例题

实验四一维数组、二维数组 一、实验目的与要求 1、熟练掌握一维数组、二维数组的定义、赋值和输入输出的方法。 2、掌握与数组有关的算法。 二、实验内容 1、(1)输入N个整数,使用冒泡排序,将数据由大到小输出。 #include "" #include<> void swap2(int*,int*); void bubble(int a[],int n); int main(void) { int n,a[8]; int i; printf("Enter n(n<=8):"); scanf("%d",&n); printf("Enter a[%d]:", n); for(i=0;i

printf("After sorted,a[%d]=", n); for(i=0;ia[j+1]) swap2(&a[j],&a[j+1]); /*交换*/ } void swap2(int *px,int *py) { int t; t=*px; *px=*py; *py=t; }

单向冒泡排序法: //输入10个整数,按从大到小输出// #include<> void main() { int i,j,t,a[10]; printf("请输入10个整数\n"); for(i=0;i<10;i++) scanf("%d",&a[i]); for(j=1;j<10;j++) //10个数要来回做(10-1)趟次// for(i=1;i<11-j;i++) //第j趟要做(10-j)次比较// if(a[i]>a[i-1]) //每做完一趟,就会将数组中较小的一个数沉淀下来,较大的数不断往上冒// {t=a[i];a[i]=a[i-1];a[i-1]=t;} printf("按从大到小排序输出结果是:\n"); for(i=0;i<10;i++) printf("%-3d",a[i]); printf("\n"); } 双向冒泡排序法: //输入10个整数,按从大到小输出// #include<>

c语言第五章 数组算法总结

第五章数组 数组的概念:一组相同类型数据的集合,数组中的所有元素都只能是同一个类型的,数组中的元素在内存中的空间是连续的,数组的定义、数组元素的引用和数组的初始化看书或者课件 容易错的地方: ◆数组的定义语句如:int a[10]是定义了10个整型元素的数组,表示一共有a[0]----a[9]10 个元素,切记Tc中元素的下标是从0开始,所以最后一个元素的下标是9而不是10!!!!! ◆只有定义语句Int a[10] 时,表示定义了一个数组,数组名为a,一共有10个元素, 其他任何地方出现a[i]都表示一个元素的引用!!! (一)一维数组 主要算法: 1.数组元素的遍历:数组元素的输入输出,如果a数组中数组元素有n个,那 么数组元素的引用是从a[0]----a[n-1],我们的思想是通过一个变量i从0循环到n-1,那么a[i]就可以表示a[0]到a[n-1]一共n个元素了 main() { int a[10],i; for(i=0;i<10;i++) /*变量i做下标,取值0~9,分别表示对第一个元素a[0]到最后一个scanf(“%d”,&a[i]);元素a[9]进行赋值*/ printf(“\n”);

for(i=0;i<10;i++) printf(“%5d”,a[i]);/*从头到尾输出数组的每一个元素*/ printf(“\n”); } 2.从一个数组中到处最大值和最小值:算法思想是用一个变量max表示存储 最大值,那么给max赋初值为a[0],即从第一个开始,假设第一个元素是当前最大的,然后遍历数组中的每一个元素,每一个元素都跟max进行比较,如果有比max大的则修改max的值,求最小值的思路跟最大值类似。 main() { int i,n; float a[10],max,min; printf(“input data numbers:”); for(i=0;i<10;i++) scanf(“%f”,&a[i]); max=min=a[0]; /*设最大数和最小数都为a[0]*/ for(i=1;i<10;i++) { if(a[i]>max) max=a[i]; if(a[i]

C语言实验报告 数组

C语言实验报告 实验七数组 1.实验目的 (1)熟练掌握一维数组、二维数组的定义、初始化和输入/输出方法; (2)熟练掌握字符数组和字符串函数的使用; (3)掌握与数组有关的常用算法(如查找、排序等)。 2.实验指导 (1)对任意一个一维型数组,从中找出数组元素的最大值和最小值并输出。要求: ①数组有十个元素; ②使用scanf函数实现数组元素的输入前给出必要的提示; ③输出时,首先输出数组的十个元素,然后输出其最大值和最小值。 分析指导: ①算法分析:首先定义一个数组,通过循环从键盘输入十个数组元素的值,再 通过另一个循环判断数组元素的最大只和最小值; ②根据分析情况编写程序: #include main() { int a[10],i,max,min; printf("please input ten integers:"); for(i=0;i<=9;i++) { scanf("%d",&a[i]); } max=a[0]; min=a[0]; for(i=1;i<=9;i++) { if(a[i]>max) max=a[i]; if(a[i]

min=a[i]; } for(i=0;i<=9;i++) { printf("a[%d]=%d\n",i,a[i]); } printf("The maximum value is %d,and the minimum value is %d\n",max,min); } 运行程序,输入十个整数,如: 21 37 6 17 9 12 89 76 35 59 运行结果如下: (2)编写函数cmpStr(char s1[],char s2[])比较两个字符串s1和 s2的大小。 如果s1>s2,返回一个正数;s1=s2,返回0;s1

C语言数组知识点总结

C语言数组知识点总结内部编号:(YUUT-TBBY-MMUT-URRUY-UOOY-DBUYI-0128)

数组定义:数组是有序的并且具有相同类型的数据的集合。 一维数组 1、一般形式:类型说明符数组名[常量表达式];例如: int a[10]; 元素为 a[0]----a[9]. 2、常量表达式中不允许包含变量,可以包含常量或符号常量。 3、数组元素下标可以是任何整型常量、整型变量或任何整型表达式。 4、可以对数组元素赋值,数组元素也可以参与运算,与简单变量一样使用。 5、使用数值型数组时,不可以一次引用整个数组,只能逐个引用元素。 6、需要整体赋值时只可以在定义的同时整体赋值。如 int a[10]={0,1,2,3,4,5,6,7,8,9};正确。 int a[10]; a[10]={0,1,2,3,4,5,6,7,8,9};错误。 7、可以只给一部分元素赋值。例如: int a[10]={5,8,7,6};后面没有赋值的元素值默认为0。 8、对全部数组元素赋值时可以不指定数组长度,例如: int a[10]={0,1,2,3,4,5,6,7,8,9};可以写成 int a[]={0,1,2,3,4,5,6,7,8,9}; 但是,既不赋初值,也不指定长度是错误的。例如:int a[];错误。 二维数组 1、一般形式:类型说明符数组名[常量表达式1][常量表达式2];例如: int a[3][4];可以看成是包含3个一维数组,每个一维数组里包含4个元素。 一共3*4=12个元素。

所有元素为 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] 2、与一维数组一样元素下标可以是是任何整型常量、整型变量或任何整型表达式。 3、需要整体赋值时只可以在定义的同时整体赋值。例如: int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};正确。 int a[3][4]; a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};错误。 4、可以把所有数据写在一个花括号内。例如: int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};正确。 5、可以只对部分元素赋值。例如: int a[3][4]={{1},{5},{9}};其余未赋值的元素默认为0。 int a[3][4]={{1},{5,6}};可以看成是int a[3][4]={{1,0,0,0},{5,6,0,0},{0,0,0,0}}; 6、对全部数组元素赋值时可以省略第一维长度,第二维不可以省略。例如: a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 可以写成a[][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 或者a[][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 字符数组 1、定义:char a[10];字符数组a长度为10。每个元素只能存放一个字符。例如: a[0]='h';a[1]='a';a[2]='p';…… 2、初始化:

c语言数组方法总结

数组方法总结 1.输入元素的值: int i,a [10]; for ( i = 0; i < 9; i ++ ); a[i] = i; (1)正序排列:(2)倒序排列: for ( i = 0; i < 10; i ++) for ( i = 9; i >= 0; i -- ) printf (“%d”, a[i]); printf(“%d”, a[i]); 2.初始化元素的值: (1)在定义时,将数组元素一次放在一对花括号里; eg: int a[10]={1,2,3,4,5,6,7,8,9,0}; (2)可以只给一部分元素赋值: eg: int a[10]={1,3}; (3)使数组全部元素为0: eg: int a[10]={0,0,0,0,0,0,0,0,0,0};或者int a[10]={0}; (4)在对全部元素赋初值的时候,由于元素数已经确定,因此,可以不指定数组长度。 (注:数组长度与提供初值个数不相同时,则长度不可以省略。) 3.巧妙地将两个元素列在一个循环中输出:(用for循环处理fobonacci数列); eg:int f[20]={1,1}; for(i=2;i<20;i++) f[i]=f[i-1]+f[i-2]; 4.数列Fobonacci数列核心: int f[20]={1,1}; for(i=2;i<20;i++) f[i]=f[i-1]+f[i-2]; 5. 换行操作: for (i=0;i<=20;i++) /*当然也可以在for循环中处理,直接将 {if (i%5= =0) printf(“\n”); if (i%5= =0) printf(“\n”);插入换行*/ Printf(“%12ld”,f[i]); } 6.起泡法: int a[10]; for (j=0;j<9;j++) /*进行n-1趟比较*/ for (i=0;i<9-j;i++) /*在j趟比较中,比较n-1次*/ if(a[i]>a[i+i]) /*由小到大排列,if (a[i]

最新C语言一维数组教案

学科:计算机科学与技术 课程:C语言程序设计 课题:一维数组 课时:2 教学目标:1、掌握一维数组的定义和引用 2、掌握一维数组的初始化方法 3、了解与一维数组有关的应用编程方法 教学重点:一维数组的定义和引用、初始化方法 教学难点:与一维数组有关的应用编程方法 教学方法:举例法,引导法 教学步骤:1、通过一个例子提出问题来引出本节课的知识点 2、讲授一维数组的定义和引用、初始化方法 3、示例训练 4、进行本节课的总结及作业布置 教具:黑板计算机投影仪 教学过程: 一、导入: 提问:保存一个班50位同学的一门功课的成绩,并且找出最高分和最低分,应如何实现? 解题思路:定义50个变量,从键盘中输入值,然后再相互比较。处理起来很复杂,是否有更简便的方法?引出本节课的知识点-----数组。

二、讲授: 1、数组概述: ·数组:是数目固定,类型相同的若干个变量的有序集合,用数组名标识。 序:是数组元素之间的位置关系,不是元素值的大小顺序。 数组名:是用于区别其它数组及变量的。 ·数组元素:集合中的变量,属同一数据类型,用数组名和下标确定。 下标:是数组元素在数组中的位置。 ·数组的维数:数组名后所跟下标的个数。 2、一维数组的定义 一维数组是指由一个下标数组元素组成的数组。其定义形式为: 存储类型数据类型数组名[常量表达式] 例如:static int score[50]; 它表示定义了一个名为score的数组,该数组有50个元素,其存储类型为静态型,数据类型为整型。 说明: (1)存储类型为任选项,可以是auto、static、extern存储类型,但是没有register 型。 (2)数据类型是用来说明数组元素的类型:int , char , float。 (3)数组名的命名应遵守标识符的命名规则,但是不能与其他变量同名。 (4)数组名后是用方括号[ ]括起来的常量表达式。常量表达式表示的是数组元素的个数,即数组的长度。在上例中定义了数组score [50],第一个元素为score [0],最后一个为score [49]。 (5)常量表达式中可以包括常量和符号常量,不能包含变量,因为C语言规定不允许对数组的大小作动态定义。 (6)允许在同一个类型说明中,说明多个数组和多个变量,彼此间以逗号相隔。 例如:int a,b,k1[10],k2[20]; //定义了两个一维数组、两个整型变量 判断下面的定义是否合法: int b, b[5]; //不合法,数组名不能与变量名同名 #define size 10 int b[size]; //合法,size已经在宏定义中说明,在程序中作为符号常量 int a(6); //不合法,数组名后不能使用(),只能用[] int n=5; int a[n]; //不合法,不能用变量定义数组元素的个数 int a[n+2]; //不合法,不能用变量表达式定义数组元素的个数 一维数组的存储结构:C语言在编译时给数组分配一段连续的内存空间。内存字节数=数组元素个数*sizeof(元素数据类型) 数组元素按下标递增的次序连续存放。数组名是数组所占内存区域的首地址,即数组第一个元素存放的地址。 例int a[5]; 内存地址

相关文档