您的位置:首页 > 编程语言 > C语言/C++

12天学好C语言——记录我的C语言学习之路(Day 1)

2015-07-19 11:23 281 查看
12天学好C语言——记录我的C语言学习之路

Day 1:

刚刚入门C语言,那么肯定要先把什么是C语言和大家讲清楚,那么大家看下面一段程序(program 1.1):

/*//program 1.1

#include<stdio.h> //编译预处理指令,编译系统要求提供程序中有关函数的信息,而stdio是”standard input&output”的缩写(标准输入输出)

//后缀.h的意思是header file(头文件)

int main() //定义主函数(main函数是int类型,也就是整数类型,执行主函数会得到一个值,其值应该为int类型)

{ //函数开始的标志

printf("this is a C program.\n"); // 输出信息

return 1; //函数执行完毕返回函数值1,因为必须返回一个int类型的值。

} //函数结束的标志

*/

各位上机敲一下 program1.1 中的代码,感受一下C语言的魅力所在,C语言是最基础的语言了,他是面向过程的语言,怎么理解呢?比方说你做一道数学题,那么C语言就是解题步骤了。如果你不会概率,你不会圆锥曲线方程,你不会函数,那么你也看不懂这道数学题的解体思路。所以说,C语言是给计算机读的,是给程序员看的,一般人看不懂,所以说是面向过程的。

下面看 program 1.2 ,在这个程序里我们认识到了变量,也对变量进行了一系列的操作。

/*//program 1.2

#include<stdio.h>

int main()

{

int a=1,b=2,sum; //这里的a,b,sum都是变量名,int为变量的类型

sum=a+b;

printf("sum is %d\n",sum); //在输出时,变量sum取代了格式符%d,sum的计算结果是3,所以输出的结果也是3。

return 1;

}*/

简单的处理了一个变量的程序之后我们不妨再来看看C语言中更富有魅力的东西。为什么要编程?因为我们用人脑无法处理大量的计算,那些人脑遥不可及的运算必须用计算机程序来实现,这就是计算机的优势所在了。下面我们就来初步感受一下。 program 1.3 为大家展示的是一个函数max。大家可能多少了解C语言,如果学过那就再好不过了,老师肯定会让大家先去写一个max函数来比较两个数字的大小并输出最大值,在这里我要为大家列举一个新手经常犯的错误。错误代码如下:

/*//program 1.3

#include<stdio.h>

#include<math.h>

int main()

{

int a=1,b=3,c;

c=max(a,b); //我在这里直接调用了max函数,但是程序是错误的,我已经写了math.h的头文件了,为什么还是无法正确调用这个函数呢? 显然问题的答案就是math.h里面并没有max这个函数,我们需要自己去写一个比较两个数大小的max函数。

printf("max is d%\n",c);

return 0;

}*/

正确代码如下:

/*//program 1.4

#include<stdio.h>

int main()

{

int a,b,c;

scanf(“%d,%d”,&a,&b); //这里格式上两个%d之间有“,”,所以说在输入的时候一定要加上逗号。如果格式中什么都不加,那么也可以,只是要在输入的时候加上空格或回车。scanf函数中包含两部分,一个是你输入的数据要按照什么格式,后一部分就是输入的两个数存入到两个地址中,&a就是变量a的地址,而&b就是变量b的地址,你定义的变量a,b,所以后面也要跟&a,&b,不能前面定义的a,b,而后面&e,&f

int max(int a,int b); //一定要在main函数中声明,因为程序自上而下的进行,执行到下一句c=max(a,b)的时候使用到了max函数,如果不去声明max函数,那么程序是不认识max这个函数的,就会报错。但是如果把下面max的定义部分代码提前到main函数的前面,那么执行的时候就不用加这一句话了(如下面 program 1.5)。(但是为了程序的可读性,还是要规范一点加上函数声明)

c=max(a,b);

printf("c= %d\n",c);

return 0;

}

int max(int x,int y) //被调用的函数,函数名后面必须跟圆括号

{

int z;

if(x<=y)

z=y;

else

z=x;

return (z); //根据需要选择返回值,而不是每一个函数后面都要return 0;

}

*/

在上面的函数中,函数声明的地方我们看到声明了两个变量a,b,下面函数定义部分,我们也看到了,这里的a,b是函数的形参变量,而在调用函数的时候( c=max(a,b); ),这里的a,b有具体的值,是定义好的或者是手动输入的,属于实参。那么形参和实参又有怎样的区别呢?

我们可以这样考虑:形参的本质是一个名字,不占用内存空间。实参的本质是一个变量,已经占用内存空间。

函数的形参和实参具有以下特点:

1. 形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只有在函数内部有效。函数调用结束返回主调函数后则不能再使用该形参变量。

2. 实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使实参获得确定值。

3. 实参和形参在数量上,类型上,顺序上应严格一致,否则会发生类型不匹配”的错误。

4. 函数调用中发生的数据传送是单向的。即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。 因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化。

读者一定要仔细把握上面的这几句话,并深入理解,这很重要。走好一小步,夯实基础,对以后的程序会有莫大的帮助。

/*//program 1.5

#include<stdio.h>

int max(int a,int b)

{

int z;

if(a<=b)

z=b;

else

z=a;

return(z);

}

int main(void) //函数名后面必须跟小括号,括号内写参数名和参数类型,如果函数没有参数,小括号中写void或者是不写

//一个程序总是从主函数(main函数)开始执行的,所以main函数的位置可以靠前也可以靠后

{

int a,b,c;

scanf("%d%d",&a,&b); //记住,scanf和printf都是库函数,输入输出在C中实现函数化,C本身不提供输入输出的语句!!!!!

c=max(a,b);

printf("max is %d\n",c);

return 0;

}

void abc() //这是一个空函数,类型为void,这样写一个空函数在程序里,是合法的

{

}

*/

像 program 1.5 ,在主函数中并没有声明max函数,但是由于在main函数前我们定义了一个max函数,所以程序“认识”这个函数了,所以程序依旧正常执行。

上面我们又提到了一个新的知识点,就是空函数,空函数只是没有什么作用,但是却是合法的。比如下面程序 program 1.6,也是合法的。

/*//program 1.6

#include<stdio.h>

int main()

{

}

*/ //这也是没有错误的

下面,我们要探讨当遇到大量的循环数据的时候应该怎么操作呢?比方说求1+3+5+…+99的结果。显然这个式子我们不能把所有项都写下来,这时候我们就要考虑循环了。(如:program 1.7)

/*//program 1.7

#include<stdio.h>

int main()

{

long p=0;

for (int n=1; n<=99; n=n+2) {

p=p+n;

}

printf("%ld",p);

return 0;

}

*/

上面的循环仅供读者参考,具体的for循环如何实现,在后面的章节中有介绍。

在for循环中我们将处理好的变量p输出,这里我们必须要提一个事情,那就是在for循环中的什么变量可以输出,什么变量无法输出。这牵扯到一个变量释放的问题,再看下面 program 1.8 。

/*//program 1.8

#include<stdio.h>

int main()

{

for(int i=1;i<=10;i++)

{

int j=4;

}

printf("%d",i); //这里可以输出i,因为i并没有被释放,而如果输出j,j是被释放的,换句话说输出的时候j已经不存在了。因为大括号内声明的变量随大括号内的程序块消失而释放,而上面的i属于main函数下的大括号,所以只有main函数结束时,i才被释放,故在输出语句中,i是存在的,可以输出。这一点大家一定要小心注意!

return 0;

}

*/

不管是哪个版本的C语言书籍,肯定会在前几章中就像大家介绍一个判断是否是闰年的C程序。下面我们就来写一下这个程序。(program 1.9)

/*//program 1.9

#include<stdio.h>

int main()

{

int year;

scanf("%d",&year); //输入一个年份,判断是不是闰年。这个地方我们需要注意一点,那就是scanf(“%d\n",&year); 这样写是错误的,因为\n不能加在scanf中

if((year%4==0&&year%100!=0)||(year%400==0)) //这一句就是整个程序的关键了,用了if语句,里面分好几个层次,用来分别判断条件是否满足。这里的数学运算判断符号过于简单,请读者自行查阅相关书籍进行学习,这里不做解释

printf("是闰年");

else

printf("不是闰年");

return 0;

}

*/

第一天我们粗略的认识了C语言最基本的变量,循环,判定语句,输入输出语句。并且对里面经常犯的错误和模糊的定义做了解释,上面的程序都很基础,比较适合初学者去读。之后的学习会逐渐深入,代码行数也会逐渐增加,变得越来越复杂。记住,编程和做数学题一样,多写多练就能成功。不要只是看书,看学习视频,看别人的总结。这些都是辅助工具。最重要的还是去自己敲一敲代码,去多练习。在调试程序的同时获得收获。15天学好C语言这篇连载的文章是我切身实践并总结的,我的的确确只用了15天的时间并将每天的收获记录下来,这个过程所需时间不长,半个月而已,但是速成也不是那么容易的,我建议读者每天至少写500行代码,15天之后你会感觉你对编程已经有初步了解了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: