C语言程序设计入门


学习自中国大学MOOC(慕课)上,作为学习心得,这篇文章不对C语言的历史和编译器作解释,直接进入代码部分,会持续更新,如有错误,愿大家指出。


1.C语言的第一个程序

#include <stdio.h>

int main()
{
    printf("Hello World!\n");
    
    return 0;
}

我们来看这段代码,它能输出 Hello world!

  • 头文件:其中include有包含的意思,是指这个程序需要用到头文件stdio.h中的函数,一个头文件会有多个函数,一个程序可能包含多个头文件(可以没有),总而言之,用就include,不用可以不include。

别忘了include前的井号

  • 函数:函数就是一段已经写好的,可以帮我们实现某一任务的代码。这里面的printf就是一个函数(print为打印;输出,f是函数的英文function的首字母)它可以帮我们在命令行输出前面的字符串。

函数的使用一定要有括号

  • 字符串:""双引号里面的Hello World!\n这一整段叫字符串,printf会原封不动得输出。而\n没被输出是因为它表示换行,如果非要输出\n,可以用\n。

除了字符串内,都必须使用英文标点符号

当然,你可以写成这样:

#include <stdio.h>

int main()
{
    printf("你好\n");
    
    return 0;
}

它能输出 你好

  • 分号: C语言规定,在每个可执行语句的后面必须有分号。如:return 0;

最后来看这个:

int main()
{

    return 0;
}
  • 主函数:这是主函数,你写的代码都在这里面(除函数外),到将函数时会说明它的原理,现在只要知道每个程序都要有它,它是一个程序必要框架就行。

另:如果你看到这样写主函数的:

void main()
{

}

这是主函数的一种古老的写法,C99已经规定int是主函数的唯一写法。当然,如果你的编译器比较古老,说不定能通过。

C主要语言版本(ANSI C—C89—C95—C99—C11)


2.计算

2.1数字的输出

我们可以把数字直接放进字符串进行输出,如:

#include <stdio.h>

int main()
{
    printf("123\n");
    
    return 0;
}

很明显,它能输出 123

不过我们有一种更常用的方式:

#include <stdio.h>

int main()
{
    printf("%d ",123);
    printf("%f ",3.14);
    printf("%d,%f\n",123,3.14);
    
    return 0;
}

它能输出 123 3.14 123,3.14

  • 初始化字符:其中%d和%f叫初始化字符,%d输出整数,%f输出小数,将要输出的数依次放在字符串后面,并用逗号隔开

我们也可以用它来输出算式的结果:

#include <stdio.h>

int main()
{
    printf("23+43=%d\n", 23+43);

    return 0;
}

它能输出 23+43=66

C语言中的加减乘除分别是+ - * /

两个整数用除法时的结果会直接舍弃小数部分


2.2变量

我们能不能做这样一个程序:让用户输入两个整数,并把它们的和算给用户看。

完成这个程序,我们还有两个问题:

  • 1.怎么接受数据
  • 2.怎么把收到的数据保存起来,以便用于运算

2.2.1变量的作用及定义

我们先看第二个问题,C语言提供了变量来让我们存放数据。

#include <stdio.h>

int main()
{
	int a;
	int b=1;
	int c,d;
	int e=1,f=1;
	
    return 0;
}

定义一个变量,要用 变量类型 变量名;

  • 变量类型:变量类型有许多种,如:int,double,long,short,char等,其中int为整形,即整数

  • 变量名:变量名的命名遵循一定规则,必须是英文,数字,下划线,不能以数字开头,且字母区分大小写,还有不能使用C语言的关键字(或叫保留字)

C语言关键字(不需要记忆,会慢慢在学习中熟悉):
在这里插入图片描述

当你定义出一个变量时,电脑会根据类型划出一块内存让你放数据,但如果你没有对变量赋值,那那片内存本来有的值就是你变量的值。你可以用上面的代码printf查看一下a,c,d,的值,一定是一些乱七八糟的,如同34641103,15640335之类的值。

  • 赋值和初始化:赋值就是给变量一个值,如a=5;就是让a的值为5,初始化就是变量的第一次赋值

可以用 变量类型 变量名=初始值; 在定义变量时进行初始化,如 int b=1;

可以用逗号将不同的变量名隔开以定义多个相同类型的变量,但只能分别赋值,不能直接 int e=f=1;你可以int e=1,f=1;,你可以int e, f; e=f=1;

每个变量使用前都应该要初始化

这样,我们的第二个问题就解决了

  • 2.怎么把收到的数据保存起来,以便用于运算

2.2.2数据的读入

stdio.h头文件中包含了一个scanf函数,它可以帮助我们进行数据的读入。

#include <stdio.h>

int main()
{
	int a,b;
	scanf("%d %d",&a,&b);
	printf("a=%d,b=%d\n",a,b);
	
	return 0;
}

我们定义了int类型的a,b,并从用户处读取了两个整数分别赋给a,b,两个整数用空格隔开,接受数据的变量a,b前要加&符号,具体到指针那部分再讲。

尽量用空格隔开两个初始化字符

当然用户肯定有输入错误的情况,我们试试输入错误的情况::

  1. 输入一个数后就按回车(scanf不会认为你输入完了,它会一直等待,知道你输入一个字符——非空格,非回车,非Tab)
  2. 输入了非数字(scanf会将没有接受到值的变量原封不动,但如果它没有被初始化,就会赋为0)

另外,还有一个初学者理解有误的地方,scanf的字符串中的是必须要输入的东西,不是提示语:

#include <stdio.h>

int main()
{
	int a,b;
	scanf("a=%db=%d",&a,&b);
	printf("a=%d,b=%d\n",a,b);
	
	return 0;
}

如果写成这样,就要输入成 a=1b=0 这样的才能读到a和b的值。
如果要有提示语,可以在scanf前加一句末尾没有\n的printf,如:

#include <stdio.h>

int main()
{
	int a;
	printf("a=");
	scanf("%d",&a);
	printf("a=%d\n",a);
	
	return 0;
}

这样,第一个问题也解决了

  • 1.怎么接受数据

2.2.3注释

那么开头的程序就可以很轻松得写出来:

#include <stdio.h>

int main()
{
	int a=0,b=0;
	scanf("%d %d",&a,&b);
	printf("a+b=%d\n",a+b);
	
	return 0;
}

这个程序倒是很简单,但我们可以加点东西:

#include <stdio.h>

int main()
{
	/*
	//本程序可以计算两个整数的和
	为正确输入的数视为0
	*/

	//定义两个参与运算的变量
	int a=0,b=0;
	scanf("%d %d",&a,&b);//接受变量的值
	//计算并输出
	printf("和为%d\n",a+b);
	
	return 0;
}

-注释:注释是给人类看的,可以更清楚得让人明白你的程序的作用,计算机编译时会忽略

// 后的所有内容为注释,它是一个单行注释,一般出现在代码的上面或后面
从 /* 到 */中间的都为注释,它是一个多行注释,多行注释中可以有单行注释,但不能有多行注释


2.2.4常量

比如这个程序:

#include <stdio.h>

int main()
{
	int a=0;
	printf("请输入身高(cm):")
	scanf("%d",&a);
	printf("身高为%dm\n",a/100.0);
	
	return 0;
}

它可以将你cm的身高转换成m,由于两个整数用除法时的结果会直接舍弃小数部分,所以我们用100.0代替100以保留小数部分。

如果这个100.0后面还要用到,我们能不能用一个变量把它保存起来,如:

#include <stdio.h>

int main()
{
	int a=0;
	double HIGHT=100.0;
	printf("请输入身高(cm):")
	scanf("%d",&a);
	printf("身高为%dm\n",a/HIGHT);
	
	return 0;
}

double表示双精度浮点数,我们下一章再讲,现在知道它可以定义小数就行。

相比会随着用户输入而变化的a,HIGHT的100.0不会改变,这种变量我们称为常量,常量的变量名通常全部使用大写,所以习惯是看到全是大写的变量就不更改。

#include <stdio.h>

int main()
{
	int a=0;
	const double HIGHT=100.0;
	printf("请输入身高(cm):")
	scanf("%d",&a);
	printf("身高为%dm\n",a/HIGHT);
	
	return 0;
}

C99以后,就可以加上const关键词使此变量不可被赋值,即除了定义时的初始化,其他时候它都不能出现在等号的左边,成了真正意义上的常量。


2.3数据类型

2.3.1整数

整数类型有以下几种:

数据类型取值范围所占字节
整形(int)-2147783648~21474836474
长整形(long)-9223372036854774808~92233720368547748078
短整型(short)-32768~327672
字符(char)-128~1271

另外,数据类型前可以加上signe(有符号),unsigne(无符号)两个关键字,如 signe long 或unsigne short表示有无正负号。singne可以省略,unsigne使用后取值范围变为0~原值的两倍-1


2.3.2小数

小数类型有以下几种:

数据类型小数精度所占字节
单精度浮点数(float)64
双精度浮点数(double)15~178

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜月星海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值