C语言教学指导 2-数组和函数

  • 内容
  • 评论
  • 相关

第五章 实战经验

  1. 一维数组
  • 数组是可以在内存中连续存储多个元素的结构,所有元素必须属于相同类型。
  • 数组格式:元素类型数组名[元素个数]。
  • 数组名为整个数组的起始地址。
  • 数组的特点:只能存放单一元素的数据,里面存放的数据成为元素。
  • 数组的初始化:int a[5]={1,2,3,4,5};。
  • 数组元素有顺序之分,每个元素都有唯一的下标,下标从0开始。
  • 数组的声明:声明数组的类型,声明数组的元素个数。
  • 数组常见声明方式:

int a[5];数组为空数组。

int a[]={0,1,2,3,4};长度为5,初值为0到4的数组。

int a[5]={0};初值均为0的数组。

数组元素下标应是一个整型常量或整形表达式。

只能引用数组元素而不能一次调用整个数组全部元素的值。

  1. 二维数组
  • 二维数组是把一维数组中的各个元素变成数组。
  • 二维数组的初始化:int a[2][3]={1,2,3,4,5,6};
  • 二维数组的行下标,列下标均从0开始。
  • a[2][3]={1,2,3,4,5,6}相当于一个2行3列的矩阵。
a)      a[0][0]=1 b)      a[0][1]=2 c)      a[0][2]=3
d)      a[1][0]=4 e)      a[1][1]=5 f)       a[1][2]=6
  1. 字符数组
  • 字符数组可以用来存放字符串。
  • 初始化字符数组时,元素字符前后需要有单引号。
  • 输出字符数组元素时,printf中使用%c。
  • printf中使用%s,后接数组名,可将字符串全部输出。
  • ‘\0’代表ASCLL码为0的字符,ASCll码为0的字符是一个“空操作符”。
  • 如果字符串长度短于字符数组长度,则未被赋值的元素为”\0”。
  1. 字符串函数
  • 字符串函数使用时必须有头文件#include<string.h>。
  • puts函数:输出字符串

一般形式:puts(字符数组)

  • gets函数:输入字符串

一般形式:gets(字符数组)

puts和gets函数只能输出或输入一个字符串。

  • strcat函数:连接字符串

一般形式:strcat(字符数组1,字符数组2)

字符数组2连接到字符数组1后面,但字符数组1长度必须足够大。

  • strncpy函数:复制字符串

一般形式:strcpy(字符数组1,字符数组2)

字符数组2复制到字符数组1中,但字符数组1长度不能小于字符数组2。

一般形式:strncpy(字符数组1,字符数组2,n)

字符数组2的前n个字符复制到字符数组1中,但字符数组1长度不能小于n。

  • strcmp函数:比较字符串

一般形式:strcmp(字符数组1,字符数组2)

比较规则:将两个字符串自左至右按ASCLL码值大小逐个比较

直到出现不同的字符或遇到’\0’为止。

若1>2,返回一个正整数;

若1<2,返回一个负整数;

若1=2,返回0。

字符串进行比较时,小写字母比大写字母大。

  • strlen函数:测字符串长度

一般形式:strlen(字符数组)

不包括’\0’。

  • strlwr和strupr函数:大小写转换

一般格式:strlwr(字符数组)

大写转小写。

一般格式:strupr(字符数组)

小写转大写。

 

第五章 实战练习

  1. 通过输入一系列商品的价格,求出总商品的价格。
  2. 输入学生学号与成绩,并显示出来。
  3. 从键盘接收5个数,求其中最大最小值。
  4. 输入10个数保存在一个数组中,在数组中输入查找的某个数, 若存在则显示在数组中的位置,否则没有找到。
  5. 如果一个数组元素是有序的(由大到小),向这个数组中插入 一个元素,使得插入后的数组仍有依原来的有序性。

第六章 实战经验

  1. 函数在使时必须先申明。

例如:

int main()

{

inta,b,sum;

sum=Add(a,b);

printf("%d\n",sum);

}

int Add(intx,int y)

{

int s;

s = x + y;

return s;

}

正确的应该是:

int main()

{

int Add(intx,int y);

inta,b,sum;

sum=Add(a,b);

printf("%d\n",sum);

}

int Add(intx,int y)

{

int s;

s = x + y;

return s;

}

或者可以直接在主函数之前写函数,此种情况不用申明函数。

 

 

  1. 函数头部分不能加分号,正确方法是给分号去掉。

例如:

void Swap (inta,int b);

{

int temp;

temp = a;

a = b;

b = t;

}

  1. 函数实参和形参不符,如上例,函数的作用是实现两个整数的相加,而传入实参则是两个浮点数。此外应注意的是当形参为数组时可不指明数组长度,如:void Sort(int a[],int n)调用时格式为:Sort(a,n);因为数组名就代表这个数组的起始地址。

例如:

int Add(intx,int y)

{

int s;

s = x + y;

return s;

}

int main()

{

doublea,b,sum;

sum=Add(a,b);

printf("%.2llf\n",sum);

}

 

  1. 没有设定递归出口易造成死循环调用

例如:

int Fib(int n)

{

return Fib(int n);

}

正确的应该是::

int Fib(int n)

{

if(n==1||n==2)

return 1;

else

return Fib(int n);

}

  1. 使用已知函数时没有加头文件,如使用sin,cos,sqrt,fabs,pow等函数时,不要忘写#include<math.h>使用getch,putch,exit(-1)等函数时,不要忘写#include<stdlib.h>。
  2. 函数内的形式参数是从实际参数传递的,只在函数内部起作用。
  3. 函数除void类型不需要返回值其它类型都要有return语句作返回值,因为retur

是函数结束的标志。

  1. 必须有一个且只能有一个main函数,无论main函数位于程序的什么位置,运行时都是从main函数开始执行的。
  2. 函数不能嵌套定义,也就是说一个函数不能从属于另一个函数,但可以相互调用

但是任何函数不能调用main函数,main函数是被操作系统调用的。

第六章 实战练习

  1. How do you do!

打印出

******************

How do you do!

******************

的字样。

 

  1. 比大小

要求从键盘接收两个数字,利用函数比较其值的大小,并输出最小值。

  1. n!

编写一个递归函数,当从键盘接受一个数字后,实现其阶乘的运算。

  1. 求最大值

定义一个含有10个元素的数组,编写一个函数,使其实现输出数组中最大值的运算

  1. Fibonacci。

编写并测试一个函数Fibonacci(),在该函数中使用循环代替递归完成斐波纳契数列的计算。

  1. 矩阵转置

写一个函数,使给定的二维函数进行行列转换,例如3×4,转换成4×3,并输出结果,最后将首元素置尾,其他元素前移一位。

  1. 奇怪的比大小

最近,Dr. Kong 新设计一个机器人Bill.这台机器人很聪明,会做许多事情。惟独对自然数的理解与人类不一样,它是从右往左读数.比如,它看到123时,会理解成321.让它比较23与15哪一个大,它说15大。原因是它的大脑会以为是32与51在进行比较.再比如让它比较29与30,它说29大. 给定Bill两个自然数A和B,让它将 [A,B] 区间中的所有数按从小到大排序出来。你会认为它如何排序?

  1. 聪明人的游戏

连续做10道题,通过计算机随机产生两个1~10之间的加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!”,否则显示“Not correct!”,不给机会重做,10道题做完后,按每题10分统计总得分,然后打印出总分和做错的题目数量。

评论

0条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注