我看了很多同学写的程序,有以下几个问题:
1.不会用函数。大部分同学函数用得不好。好的函数能把晦涩难懂的代码封装起来;代码行数不是很多;功能明显,能用在很多地方。有很多同学整个程序只有一个 main 函数,要不就是两三个函数,一个函数上百行代码,这样的程序没法调试也没法修改,这种情况属于没有掌握结构化程序设计方法,以后学习面向对象程序设计方法会遇到困难的。
2.不会用循环。大多数程序功能是由循环构成的,循环用不好,很难写出好程序。
3.不会活用打印函数 printf()。好程序是逐步调试出来的, printf() 函数用不好,怎么来确认程序是否存在逻辑错误呢?
4.不会用宏。用宏定义常量非常方便,改程序只改一个地方就行了。
5.不会用数组。数组用得活,能替代大部分数据结构,包括链表、树和图,写数组的代码量,是所有数据结构中最少的。具体怎么替代呢?
①需要存取多种数据类型怎么办?可以用指针强制类型转换啊!
②只要用指针申请内存空间创建数组,数据将要溢出时,重新申请一段更大的内存空间,把数据拷贝进去,之前的内存空间释放掉,反之亦然,可以代替链表了。
③树是有层级的,每一层级的节点都链接一个或多个下一层级节点,只要用多维数组把每个节点,链接的下一层级节点的下标,保存好就行了。
④图也是一样的,只是稍微麻烦点,需要大体分一下层级,只要用多维数组把每个节点,链接的相邻节点的下标,保存好就行了。
一、手把手教你写程序,单重循环、一维数组及形参、一级指针及形参。(高手可以跳过本节)
#include<stdio.h>
//i<UNIT 单元
#define UNIT 7
int main(void)
{
int aiArray[UNIT] = {0,1,2,3,4,5,6};
int i;
for(i=0; i<UNIT; i++)
printf("%d", aiArray[i]);
return 0;
}
程序运行结果如下:
构图太死板,不方便观察,需要改一下:
#include<stdio.h>
//i<UNIT 单元
#define UNIT 7
int main(void)
{
int aiArray[UNIT] = {0,1,2,3,4,5,6};
int i;
printf("%s", "\n\n");
for(i=0; i<UNIT; i++)
printf("\t%d", aiArray[i]);
printf("%s", "\n\n\n\n");
return 0;
}
程序运行结果如下:
这样就美观多了,'\t' 是制表符,相当于多个空格,接下来我们用循环来给数组赋值:
#include<stdio.h>
//i<UNIT 单元
#define UNIT 7
int main(void)
{
int aiArray[UNIT];
int i;
for(i=0; i<UNIT; i++)
aiArray[i]=i;
printf("%s", "\n\n");
for(i=0; i<UNIT; i++)
printf("\t%d", aiArray[i]);
printf("%s", "\n\n\n\n");
return 0;
}
for(i=0; i<XXX; i++) 这个语句可以作为一种模式来使用,复制粘贴就行,尽量不用破坏这个结构。
我们可以把打印数组的代码用函数封装起来,顺便看一下一维数组形参的用法:
#include<stdio.h>
//i<UNIT 单元
#define UNIT 7
// 形参方括号内的数据可以省略,这两种用法都可以
//void Array_print(int aiArray[UNIT])
void Array_print(int aiArray[])
{
int i;
printf("%s", "\n\n");
for(i=0; i<UNIT; i++)
printf("\t%d", aiArray[i]);
printf("%s", "\n\n\n\n");
}
int main(void)
{
int aiArray[UNIT];
int i;
for(i=0; i<U