主函数main
一个C程序有且只有一个主函数,即main函数。
C程序就是执行主函数里的代码,也可以说这个主函数就是C语言中的唯一入口。
这个道理就好比每个电梯只有一扇门,要想乘坐电梯的话就必须从这扇门进入;而main前面的int就是主函数的类型,好比乘坐的这个电梯是什么材料做的。
#include <stdio.h>
int main() /*这里输入我们的主函数哦*/
{
printf("C程序中一定是从我开始的");
return 0;
}
c语言代码规范
在写C语言程序的时候为了书写清晰、便于阅读、便于理解、便于维护,在编写程序时应遵循以下规则:
1、一个说明或一个语句占一行,例如:包含头文件、一个可执行语句结束都需要换行;
2、函数体内的语句要有明显缩进,通常以按一下Tab键为一个缩进;
3、括号要成对写,如果需要删除的话也要成对删除;
4、当一句可执行语句结束的时候末尾需要有分号;
5、代码中所有符号均为英文半角符号。
不规范的源代码
#include <stdio.h>
int main
{printf("你是我的小呀小苹果儿\n");printf("怎么爱你都不嫌多\n");
printf("红红的小脸儿温暖我的心窝\n");
printf("点亮我生命的火 火火火火\n");
return 0;
修后的源代码
#include <stdio.h>
int main() //主函数,括号成对出现
{
printf("你是我的小呀小苹果儿\n");//换行,缩进
printf("怎么爱你都不嫌多\n");
printf("红红的小脸儿温暖我的心窝\n");
printf("点亮我生命的火 火火火火\n");
return 0;//英文半角输入
}
程序解释——注释
注释是为了使别人能看懂你写的程序,也为了使你在若干年后还能看得懂你曾经写的程序而设定的。注释是写给程序员看的,不是写给电脑看的。所以注释的内容,C语言编译器在编译时会被自动忽略。
C语言注释方法有两种:
多行注释: /* 注释内容 */
单行注释: //注释一行
错误的源代码:
#include <stdio.h>
int main()
{
这是一首思念家乡的诗
printf("床前明月光,");
printf("疑是地上霜。");
printf("举头望明月,");
printf("低头思故乡。");
短短四句诗,写得清新朴素,明白如话。它的内容是单纯的,但同时却又是丰富的。
它是容易理解的,却又是体味不尽的。诗人所没有说的比他已经说出来的要多得多。
它的构思是细致而深曲的,但却又是脱口吟成、浑然无迹的。从这里,我们不难领
会到李白绝句的“自然”、“无意于工而无不工”的妙境。
return 0;
}
修改后的源代码:
#include <stdio.h>
int main()
{
//这是一首思念家乡的诗 //单行注释勇双斜杆
printf("床前明月光,");
printf("疑是地上霜。");
printf("举头望明月,");
printf("低头思故乡。");
//多行注释用星号加斜杠***
/* 短短四句诗,写得清新朴素,明白如话。它的内容是单纯的,但同时却又是丰富的。
它是容易理解的,却又是体味不尽的。诗人所没有说的比他已经说出来的要多得多。
它的构思是细致而深曲的,但却又是脱口吟成、浑然无迹的。从这里,我们不难领
会到李白绝句的“自然”、“无意于工而无不工”的妙境。*/
return 0;
}
运行结果:
标识符
编程时给变量或者函数起的名字就是标识符,就好比我们慕课网的每一位童鞋都有姓名,姓名就是这位童鞋的标识符。C语言的标识符是不可以随便起名字的,必须遵守一定的规则。
C 语言规定,标识符可以是字母(A~Z,a~z)、数字(0~9)、下划线_组成的字符串,并且第一个字符必须是字母或下划线。在使用标识符时还有注意以下几点:
(1)标识符的长度最好不要超过8位,因为在某些版本的C中规定标识符前8位有效,当两个标识符前8位相同时,则被认为是同一个标识符。
(2)标识符是严格区分大小写的。例如Imooc和imooc 是两个不同的标识符。
(3)标识符最好选择有意义的英文单词组成做到"见名知意",不要使用中文。
(4)标识符不能是C语言的关键字。想了解更多C语言关键字的知识,请查阅WIKI。
错误的源代码:
#include <stdio.h>
int main()
{
int 3myAge = 18; //这里命名正确吗?
printf("恭喜修改正确");
return 0;
}
修改后:
变量及赋值
变量就是可以变化的量,而每个变量都会有一个名字(标识符)。变量占据内存中一定的存储单元。使用变量之前必须先定义变量,要区分变量名和变量值是两个不同的概念。就好比:住在房间里的客人与房间号是两个不同的概念。
变量定义的一般形式为:数据类型 变量名;
多个类型相同的变量:数据类型 变量名, 变量名, 变量名…;
注意:在定义中不允许连续赋值,如int a=b=c=5;是不合法的。
变量的赋值分为两种方式:1.先声明再赋值 2.声明的同时赋值,例如:
#include <stdio.h>
int main()
{
/*这里定义年龄*/
printf("我今年%d岁!\n", age);
return 0;
}
修改后:
#include <stdio.h>
int main()
{
int age=18; /*这里定义年龄*/
printf("我今年%d岁!\n", age);
return 0;
}
基本数据类型
C语言中,数据类型可分为:基本数据类型,构造数据类型,指针类型,空类型四大类。如图所示:
整型数据是指不带小数的数字。生活中有很多信息适合使用整型数据来表示,比如:人的年龄、班级的人数、书的总页数等等。因此整型的类型比较多:
注:int、short int、long int是根据编译环境的不同,所取范围不同。而其中short int和long int至少是表中所写范围,但是int在表中是以16位编译环境写的取值范围。另外 c语言int的取值范围在于他占用的字节数 ,不同的编译器,规定是不一样。ANSI标准定义int是占2个字节,TC是按ANSI标准的,它的int是占2个字节的。但是在VC里,一个int是占4个字节的。
浮点数据是指带小数的数字。生活中有很多信息适合使用浮点型数据来表示,比如:人的体重(单位:公斤)、商品价格、圆周率等等。因为精度的不同又分为3种:
题目:
小明今年15岁,身高只有162CM,可是体重已经有82.5公斤了,
小明是否属于肥胖儿童呢?我们如何用程序描述这个情形呢?
在右边编辑器中
在第4、5、6行中将变量的类型补全
#include <stdio.h>
int main()
{
age = 15;
height = 162;
weight = 82.5;
isfat = 'y';
printf("年龄:%d 岁\n", age);
printf("身高:%d CM\n", height);
printf("体重:%f KG\n", weight);
printf("是否属于肥胖儿童:%c\n", isfat);
/*%d,%f,%c此类符号在后面会有讲解*/
return 0;
}
修改后:
#include <stdio.h>
int main()
{
int age = 15; //整形
int height = 162; //整形
float weight = 82.5; //浮点型
char isfat = 'y'; //字符型
printf("年龄:%d 岁\n", age);
printf("身高:%d CM\n", height);
printf("体重:%f KG\n", weight);
printf("是否属于肥胖儿童:%c\n", isfat);
/*%d,%f,%c此类符号在后面会有讲解*/
return 0;
}
运行结果:
格式化输出语句
格式化输出语句,也可以说是占位输出,是将各种类型的数据按照格式化后的类型及指定的位置从计算机上显示。这样做的好处,是有利于计算机能够准确的将我们所要类型数据给我们。
其格式为:printf(“输出格式符”,输出项);
C语言中的常用格式化符:
当输出语句中包含普通字符时,可以采用一下格式:
printf(“普通字符输出格式符”, 输出项);
#include<stdio.h>
int main (void)
{
int i;
i= 3 ; //把i放入内存,程序终止后,内存释放掉,3就没有了
printf("i=%d\n",i);
return 0;
}
如果要输出多个变量的并指定变量的位置时候,格式符还可以连用,变量之间需要用逗号隔开,如:
#include<stdio.h>
int main (void)
{
int a=10;//整形
float b=20;//浮点型
char c='a';//字符型,必须是单个字符,多个字符需要用字符数组
printf("a=%d,\n\nb=%f,\n\nc=%c\n\n",a,b,c);//分别打印输出,逗号隔开
//注意:格式符的个数要与变量、常量或者表达式的个数一一对应
return 0;
}
运行结果:
题目:
小明的个人信息如下:
#include <stdio.h>
int main(){
int age = 18;
float height = 1.85;
char unit = 'm';
printf("小明今年?岁\n", age);
printf("小明身高??\n", height, unit);
printf("小明正在读大学!");
return 0;
}
修改后:
#include<stdio.h>
int main (void)
{
int age=18;//年龄
float height=1.85;//身高
char c='m';//单位:米
printf("小明年龄%d岁,\n\n小明身高%f%c\n\n",age,height ,c);
//分别打印输出,逗号隔开
printf("小明正在读大学!");
return 0;
}
常量
在程序执行过程中,值不发生改变的量称为常量。C语言的常量可以分为直接常量和符号常量。
直接常量也称为字面量,是可以直接拿来使用,无需说明的量,比如:
•整型常量:13、0、-13;
•实型常量:13.33、-24.4;
•字符常量:‘a’、‘M’
•字符串常量:”I love imooc!”
下面的代码分别打印这四种直接常量:
#include <stdio.h>
int main()
{
printf("%d\n\n",100);//整形常量
printf("%f\n\n",10.5);//浮点型常量
printf("%c\n\n",'DDDD');//字符常量
printf("我是一个人");//字符窜常量
return 0;
}
在C语言中,可以用一个标识符来表示一个常量,称之为符号常量。符号常量在使用之前必须先定义,其一般形式为:
#define 标识符 常量值
符号常量的标示符一般习惯使用大写字母,变量的标示符一般习惯使用小写字母,加以区分。下面是一个使用符号常量的小例子:
#include <stdio.h>
//#define PI=3.14; 错误:定义符号常量不能加等号
//# define PI 3.14; 错误:定义符号常量语句末尾不能加分号
#define PI 3.14
int main()
{
// printf("%d\n\n",100);//整形常量
// printf("%f\n\n",10.5);//浮点型常量
// printf("%c\n\n",'DDDD');//字符常量
// printf("我是一个人");//字符窜常量
// return 0;
// #define PI=3.14; 错误 定义符号常量应在函数体外
printf("打印圆周率%f",PI);
return 0;
}
题目:
小明每天都有10元钱固定的零花钱。
在代码编辑器中:
第2行定义常量为小明每天的零花钱;
第5行中小明私自增加零花钱对吗?
运行结果为: 小明今天又得到10元零花钱
#include <stdio.h>
POCKETMONEY //定义常量及常量值
int main()
{
POCKETMONEY = 12; //小明私自增加零花钱对吗?
printf("小明今天又得到%d元零花钱\n", POCKETMONEY);
return 0;
}
修改后
#include <stdio.h>
#define POCKETMONEY 12 //定义常量及常量值
int main()
{
// POCKETMONEY = 12; //前面已经定义了,这里不能重复定义
printf("小明今天又得到%d元零花钱\n", POCKETMONEY);
return 0;
}
自动类型转换
#include <stdio.h>
int main()
{
char c='a';//定义字符型常量
int x=10;//定义整形常量
double t=20;//定义浮点型常量
//打印赋值的各个常量值
printf("c=%c\n",c);
printf("x=%d\n",x);
printf("t=%f\n\n",t);
printf("类型转换:\n\n");
x=c;//把字符型转换为整形
t=x;//把整型转化为浮点型
//打印转换后的各个值,对比变化
printf("t=%c\n",t);
printf("x=%d\n",x);
printf("t=%f\n",t);
return 0;
}
自动转换发生在不同数据类型运算时,在编译的时候自动完成。自动转换遵循的规则就好比小盒子可以放进大盒子里面一样,下图表示了类型自动转换的规则。
char类型数据转换为int类型数据遵循ASCII码中的对应值,ASCII码请查看WIKI。字节小的可以向字节大的自动转换,但字节大的不能向字节小的自动转换.
题目:
小伙伴们这里有个字符型的变量c,我们将它自动转换为整型和实型来看看效果,你会惊呆的
第5、6、7行中分别将c赋给各变量
运行结果:
#include <stdio.h>
int main()
{
char c = 'a';
int n = c; //将c赋值给n
float f = c; //将c赋值给f
double d = c; //将c赋值给d
printf("%d\n",n);
printf("%f\n",f);
printf("%lf\n",d);
return 0;
}
强制类型转换
强制类型转换是通过定义类型转换运算来实现的。其一般形式为:
(数据类型) (表达式)
其作用是把表达式的运算结果强制转换成类型说明符所表示的类型,例如:
#include <stdio.h>
int main()
{
double f = 5.23; //把5.23赋值给f,f的类型为double型
int d=(int)f; //强制类型转换 double---->>int
printf("%f\n",f);//打印出原来的f
printf("%d\n",d);//打印出转换后的f(d)
return 0;
}
在使用强制转换时应注意以下问题:
1、数据类型和表达式都必须加括号,如把(int)(x/2+y)写成(int)x/2+y则成了把x转换成int型之后再除2再与y相加了。
2、转换后不会改变原数据的类型及变量值,只在本次运算中临时性转换。
3、强制转换后的运算结果不遵循四舍五入原则。
题目:
#include <stdio.h>
int main()
{
double num = 2.5; //定义浮点型变量num并赋值为2.5
printf("num的整数部分是%d\n", num);
return 0;
}
小编在这出了一道题,考考童鞋们,如何使代码编辑器中的程序输出结果: num的整数部分是2
在代码编辑器中,第5行将num强制转换为整型
#include <stdio.h>
int main()
{
double num = 2.5; //定义浮点型变量num并赋值为2.5
int num1=(int)num;
printf("num的整数部分是%d\n", num1);
return 0;
}
运算符
我们上小学的时候都学过各种运算,如:加法运算、乘法运算、混合运算等,而运算就要用到运算符,如:+、-、×、÷等等。
在C语言中同样有运算符,只是写法可能有所不同。先说一下C语言中的运算是什么?C语言中的运算就是对数据进行操作、处理的过程。那么运算符又干什么的呢?运算符就是指定该运算的处理方式。
那么C语言中又有哪些运算符呢?
如下所示:
※ 算术运算符
※ 赋值运算符
※ 关系运算符
※ 逻辑运算符
※ 三目运算符
在第10行每个变量之间填写+、-、*、/中的一种运算符进行体验;
#include <stdio.h>
int main()
{
int a,b,c,d;
double result;
a = 1;
b = 2;
c = 3;
d = 4;
result = a b c d; //在这里体验哦~
printf("%f\n", result);
return 0;
}
#include <stdio.h>
int main()
{
int a,b,c,d;
double result;
a = 1;
b = 2;
c = 3;
d = 4;
result = a+b*c+d; //在这里体验哦~
printf("%f\n", result);
return 0;
}
算术运算符
C语言基本算术运算符如下表:
除法运算中注意:
如果相除的两个数都是整数的话,则结果也为整数,小数部分省略,如8/3 = 2;而两数中有一个为小数,结果则为小数,如:9.0/2 = 4.500000。
取余运算中注意:
该运算只适合用两个整数进行取余运算,如:10%3 = 1;而10.0%3则是错误的;运算后的符号取决于被模数的符号,如(-10)%3 = -1;而10%(-3) = 1。
注:C语言中没有乘方这个运算符,也不能用×,÷等算术符号。
#include <stdio.h>
int main()
{
int x,y;
x = 10;
y = -3;
printf("x+y=%d\n", );
printf("x-y=%d\n", );
printf("x*y=%d\n", );
printf("x/y=%d\n", );
printf("x%y=%d\n", );
return 0;
}
#include <stdio.h>
int main()
{
int x,y;
x = 10;
y = -3;
printf("x+y=%d\n", x+y );
printf("x-y=%d\n", x-y );
printf("x*y=%d\n", x*y );
printf("x/y=%d\n", x/y );
printf("x%%y=%d\n", x%y );
return 0;
}