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

C语言学习

2016-07-01 18:19 459 查看

C语言简要概述

简单来说一个C程序就是由若干头文件和函数组成。

简单示例:

//头文件
int main() //主函数
{
printf("I love C");
return 0;
}" data-snippet-id="ext.5235cf5f09bed0480e089e6b42fa2eaa" data-snippet-saved="false" data-codota-status="done">[code]#include <stdio.h>//头文件
int main() //主函数
{
printf("I love C");
return 0;
}


一个C程序,有且只有一个主函数,即main函数,C程序就是执行主函数种的代码。

良好的代码规范

在写C语言程序的时候为了书写清晰、便于阅读、便于理解、便于维护,在编写程序时应遵循以下规则:

1、一个说明或一个语句占一行,例如:包含头文件、一个可执行语句结束都需要换行;

2、函数体内的语句要有明显缩进,通常以按一下Tab键为一个缩进;

3、括号要成对写,如果需要删除的话也要成对删除;

4、当一句可执行语句结束的时候末尾需要有分号;

5、代码中所有符号均为英文半角符号。

int main()
{
printf("一个说明或者一个语句占一行\n");
printf("函数体内的语句要有明显缩进\n");
printf("括号要成对写,成对删除\n");
printf("当一句可执行语句结束的时候末尾需要有分号\n");
printf("代码中所有符号均为英文半角符号")
return 0;
}" data-snippet-id="ext.ea7570196beb03acb6bd2e5c0d06712d" data-snippet-saved="false" data-codota-status="done">[code]#include <stdio.h>
int main()
{
printf("一个说明或者一个语句占一行\n");
printf("函数体内的语句要有明显缩进\n");
printf("括号要成对写,成对删除\n");
printf("当一句可执行语句结束的时候末尾需要有分号\n");
printf("代码中所有符号均为英文半角符号")
return 0;
}


c语言的注释:

C语言注释方法有两种:

多行注释: /* 注释内容 */

单行注释: //注释一行

int main()
{
printf("C语言的注释");
printf("/*这是多行注释*/");
printf("//这是单行注释");

}
" data-snippet-id="ext.8afe2a56b41feb4baf3b214691f06d52" data-snippet-saved="false" data-codota-status="done">[code]//C语言的注释
/*多行注释
与单行注释
*/
#include<stdio.h>
int main()
{
printf("C语言的注释");
printf("/*这是多行注释*/");
printf("//这是单行注释");

}


标识符

标识符

编程时给变量或者函数起的名字

C 语言规定,标识符可以是字母(A~Z,a~z)、数字(0~9)、下划线_组成的字符串,并且第一个字符必须是字母或下划线。在使用标识符时还有注意以下几点:

(1)标识符的长度最好不要超过8位,因为在某些版本的C中规定标识符前8位有效,当两个标识符前8位相同时,则被认为是同一个标识符。

(2)标识符是严格区分大小写的。例如Imooc和imooc 是两个不同的标识符。

(3)标识符最好选择有意义的英文单词组成做到”见名知意”,不要使用中文。

(4)标识符不能是C语言的关键字。想了解更多C语言关键字的知识

int main()
{
//这个是错的 int 3myAge = 18;
int myAge = 18;
printf("我的年龄是18");
return 0;
}" data-snippet-id="ext.334c00ef59d4ccd168bc4d2e5159fcc3" data-snippet-saved="false" data-codota-status="done">[code]#include<stdio.h>
int main()
{
//这个是错的 int 3myAge = 18;
int myAge = 18;
printf("我的年龄是18");
return 0;
}


变量及赋值

变量 就是可以变化的量,而每个变量都会有一个名字(标识符)。变量占据内存中一定的存储单元。使用变量之前必须先定义变量,要区分变量名和变量值是两个不同的概念。就好比:住在房间里的客人与房间号是两个不同的概念。

变量名和标识符的命名规范完全相同

int age = 18;
int a,b,c;//同时赋值多个变量,然后再分别赋值
a = 18;
b = 19;
c = 20;


基本数据类型:

在C语言中数据类型可以分为:

1.基本数据类型

2.构造数据类型

3.指针类型

4.空类型



基本数据类型中最简单最常用的是:整型,实型,字符型



整型数据是指不带小数的数字



浮点数据是指带小数的数字



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);
return 0;
}" data-snippet-id="ext.ae33c2a8c5897514e7f19f611be5bbde" data-snippet-saved="false" data-codota-status="done">[code]#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);
return 0;
}


格式化输出语句

格式化输出语句,也可以说是占位输出,是将各种类型的数据按照格式化后的类型及指定的位置从计算机上显示。

格式:

printf(“输出格式符”,输出项);

%d(带符号十进制整数)

%c(单个字符)

%s(字符串)

%f(6位小数)

int main(){
int age = 18;
float height = 1.85;
char unit = 'm';
printf("小明今年%d岁\n", age);
printf("小明身高%f%c\n", height, unit);
printf("小明现在学习IT技术");
return 0;
}
" data-snippet-id="ext.ef6276ea1559584160f90ea4e98a7eed" data-snippet-saved="false" data-codota-status="done">[code]#include <stdio.h>
int main(){
int age = 18;
float height = 1.85;
char unit = 'm';
printf("小明今年%d岁\n", age);
printf("小明身高%f%c\n", height, unit);
printf("小明现在学习IT技术");
return 0;
}


不可改变的常量

常量:

在程序执行过程中,值不发生改变的量称为常量。

C语言中,常量分为两种:

1.直接常量

2.符号常量

直接常量:

直接常量也叫字面量,可以直接拿来使用,不需要说明。

例如:

* 整型常量:12, 0, -12;

* 实型常量:23.4,12.9;

* 字符常量:”a”,”M”;

* 字符串常量:”String”,”state”;

int main()
{
printf("%d\n",100);//整型常量
printf("%f\n",12.55);//实型常量
printf("%c\n","N");//字符常量
printf("%s","I love coding");//字符串常量
return 0;
}" data-snippet-id="ext.f52a21f779b3dba7821564e2df5fa6db" data-snippet-saved="false" data-codota-status="done">[code]#include <stdio.h>
int main()
{
printf("%d\n",100);//整型常量
printf("%f\n",12.55);//实型常量
printf("%c\n","N");//字符常量
printf("%s","I love coding");//字符串常量
return 0;
}


符号常量:

C语言中,可以用一个标识符来表示一个常量,称之为符号常量。符号常量在使用之前必须先定义

格式: #define 标识符 常量值

#define POCKETMONEY 10     //定义常量及常量值
int main()
{
printf("今天得到%d元零花钱\n", POCKETMONEY);
return 0;
}" data-snippet-id="ext.a83975efd8fdca06796c7c033a2bcd05" data-snippet-saved="false" data-codota-status="done">[code]#include <stdio.h>
#define POCKETMONEY 10     //定义常量及常量值
int main()
{
printf("今天得到%d元零花钱\n", POCKETMONEY);
return 0;
}


自动转换类型

数据类型存在自动转换的情况

char c ="A";
int  b ;
double g ;
b = c;(字符串可以转换为整型)
g = b;(整型可以转换为浮点类型)


自动类型转换发生在不同数据类型运算时,在编译期间自动完成。

遵行的规则:

好比大盒子里放小盒子

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;
}" data-snippet-id="ext.3446119a80fc3cb59bb9e21ad7e6d728" data-snippet-saved="false" data-codota-status="done">[code]#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;
}


强制类型转换

强制类型转换:

通过定义类型转换运算来实现的,

作用是把表达式的运算结果强制转换成类型说明符所表示的类型

格式:

(数据类型) (表达式)

在使用强制转换时应注意以下问题:

1.数据类型和表达式都必须加括号,如把(int)(x/2+y)写成(int)x/2+y则成了把x转换成int型之后再除2再与y相加了。

2.转换后不会改变原数据的类型及变量值,只在本次运算中临时性转换。

3.强制转换后的运算结果不遵循四舍五入原则。

int main()
{
double num = 2.5; //定义浮点型变量num并赋值为2.5
printf("num的整数部分是%d\n", (int)num );
return 0;
}" data-snippet-id="ext.edd7023e766c67115d1c1574725d3fd2" data-snippet-saved="false" data-codota-status="done">[code]#include <stdio.h>
int main()
{
double num = 2.5; //定义浮点型变量num并赋值为2.5
printf("num的整数部分是%d\n", (int)num );
return 0;
}


C中的运算符:

C语言中的运算就是对数据进行操作、处理的过程。

运算符就是指定该运算的处理方式。

C语言中的运算符:

* 算术运算符

* 赋值运算符

* 关系运算符

* 逻辑运算符

* 三目运算符

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;
}" data-snippet-id="ext.df731e4e9f97d1996c299b63321a175f" data-snippet-saved="false" data-codota-status="done">[code]#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;
}


基本算术运算符:



除法运算中注意:

如果相除的两个数都是整数的话,则结果也为整数,小数部分省略,如8/3 = 2;而两数中有一个为小数,结果则为小数,如:9.0/2 = 4.500000。

取余运算中注意:

该运算只适合用两个整数进行取余运算,如:10%3 = 1;而10.0%3则是错误的;运算后的符号取决于被模数的符号,如(-10)%3 = -1;而10%(-3) = 1。

int main()
{
int x,y;
x = 10;
y = -3;
printf("x+y=%d\n",  7   );
printf("x-y=%d\n",  13   );
printf("x*y=%d\n",  -30   );
printf("x/y=%d\n",  -3   );
printf("x%y=%d\n",  1   );
return 0;
}" data-snippet-id="ext.119f93ade78ffa2ce97c4a65271a22b4" data-snippet-saved="false" data-codota-status="done">[code]#include <stdio.h>
int main()
{
int x,y;
x = 10;
y = -3;
printf("x+y=%d\n",  7   );
printf("x-y=%d\n",  13   );
printf("x*y=%d\n",  -30   );
printf("x/y=%d\n",  -3   );
printf("x%y=%d\n",  1   );
return 0;
}


自增与自增运算符

自增运算符为“++”,其功能是使变量的值自增1;自减运算符为“–”,其功能是使变量值自减1。它们经常使用在循环中。

自增自减运算符有以下几种形式:



无论是a++还是++a都等同于a=a+1,在表达式执行完毕后a的值都自增了1,无论是a–还是–a都等同于a=a-1,在表达式执行完毕后a的值都自减少1。

int main()
{
int x = 0;
printf("x=%d\n",x++);
printf("x=%d\n",++x);
return 0;
}" data-snippet-id="ext.3dbcd35673201a3a75a50d76dff3b1d0" data-snippet-saved="false" data-codota-status="done">[code]#include <stdio.h>
int main()
{
int x = 0;
printf("x=%d\n",x++);
printf("x=%d\n",++x);
return 0;
}


练习题:

int a = 3; b = 4;

计算a+b%(a+b)/a+a*b-b该算式的运算结果?

答案:12

赋值运算符:

C语言中赋值运算符:

1.简单赋值运算符

简单赋值运算符“=”

2.复合赋值运算符

复合运算符就是在简单赋值符“=”之前加上其它运算符构成,

例如+=、-=、*=、/=、%=。

int main()
{
int x = 10;
int y = 10;
//简单赋值语句实现x乘以2。
x = x*2;
//复合赋值语句实现y乘以2。
y*=2;
printf("x=%d\n", x);
printf("y=%d\n", y);
return 0;
}" data-snippet-id="ext.b0486c569541f1efb0ebecaed7140379" data-snippet-saved="false" data-codota-status="done">[code]#include <stdio.h>
int main()
{
int x = 10;
int y = 10;
//简单赋值语句实现x乘以2。
x = x*2;
//复合赋值语句实现y乘以2。
y*=2;
printf("x=%d\n", x);
printf("y=%d\n", y);
return 0;
}


关系运算符:

C语言中的关系运算符:



关系表达式的值是“真”和“假”,在C程序用整数1和0表示

int main()
{
int x=5;
int y=5;
int z=10;
printf("x是否大于y:%d\n",    x>y        ); //x是否大于y
printf("y是否大于等于x:%d\n",  y>=x       ); //y是否大于等于x
printf("y是否小于z:%d\n",       y[code]#include <stdio.h>
int main()
{
int height = 175;   //身高为175cm
double money = 1500000;  //银行存款为150万
printf("是否符合条件:%d\n", height>=180 && money>=1000000
);
return 0;
}


例题2:

int a = 5; int b = 9;

在以下算式中,选出运算结果为真,即结果为1的算式

A: b++>=a*2 && b-a<=a

B: b++>=a*2 || b-a<=a

C: !(a*2-b)

D: ++b-a*2

结果为B

三目运算符:

C语言中的三目运算符:“?:”,

格式

表达式1 ? 表达式2 : 表达式3;

执行过程是

先判断表达式1的值是否为真,如果是真的话执行表达式2;如果是假的话执行表达式3。

例题:

小明下班回家兜里有12元钱,打车回家需要花费11.5元,请用三目运算符写一个算式,计算一下小明能不能打车回家?

int main()
{
//定义小明兜里的钱
double money = 12     ;
//定义打车回家的费用
double cost =    11.5   ;
printf("小明能不能打车回家呢:");
//输出y小明就打车回家了,输出n小编就不能打车回家
printf("%c\n",money>=cost ? 'y' : 'n' );
return 0;
}
结果:
小编能不能打车回家呢:y" data-snippet-id="ext.7c56c8e47279b8c0e00decc56f31ac20" data-snippet-saved="false" data-codota-status="done">[code]#include <stdio.h>
int main()
{
//定义小明兜里的钱
double money = 12     ;
//定义打车回家的费用
double cost =    11.5   ;
printf("小明能不能打车回家呢:");
//输出y小明就打车回家了,输出n小编就不能打车回家
printf("%c\n",money>=cost ? 'y' : 'n' );
return 0;
}
结果:
小编能不能打车回家呢:y


运算符的优先级:

优先级?

优先级就是在运算中运算的先后顺序。

各种运算符号的顺序

优先级别为1的优先级最高,优先级别为10的优先级别最低



示例:

int main()
{
int x = 5;
int y = 8;
//在这里合适的位置加上括号使z的值为4
int z = x*8/(y+2);
printf("z=%d\n", z);
return 0;
}" data-snippet-id="ext.39c76fed3ef98f0d226a1e954cdeddee" data-snippet-saved="false" data-codota-status="done">[code]#include <stdio.h>
int main()
{
int x = 5;
int y = 8;
//在这里合适的位置加上括号使z的值为4
int z = x*8/(y+2);
printf("z=%d\n", z);
return 0;
}


C语言结构语句:

简单if语句

基本结构:



语义:

如果表达式的值为真,则执行其后的语句,否则不执行该语句

例题:

学校入选篮球队的资格条件为身高必须大于等于180CM,小明身高185CM,那么小明能入选吗?

int main()
{
int height = 185;
if(height >= 180)
{
printf("%s\n","恭喜小明可以参加校篮球队");
}
return 0;
}" data-snippet-id="ext.1804fa8ef2da7890dafde043fee9f4b9" data-snippet-saved="false" data-codota-status="done">[code]#include <stdio.h>
int main()
{
int height = 185;
if(height >= 180)
{
printf("%s\n","恭喜小明可以参加校篮球队");
}
return 0;
}


简单if-else语句

基本结构:



语义是:

如果表达式的值为真,则执行代码块1,否则执行代码块2

例题:

int main()
{
int year = 2014; //今年是2014年
if(year%4==0&&year%100!=0)
{
printf("%s\n","今年是瑞年");
}
else{
printf("%s\n","今年是平年");
}
return 0;
}" data-snippet-id="ext.dd2aa88eea5e9b94b5c6a6482d76faeb" data-snippet-saved="false" data-codota-status="done">[code]#include <stdio.h>
int main()
{
int year = 2014; //今年是2014年
if(year%4==0&&year%100!=0)
{
printf("%s\n","今年是瑞年");
}
else{
printf("%s\n","今年是平年");
}
return 0;
}


多重if-else语句

基本结构:



语义:

依次判断表达式的值,当出现某个值为真时,则执行对应代码块,否则执行代码块n

例题:

某游戏对不同等级的积分的玩家赋予不同的荣誉称号,其对应关系如下:

积分>=10000分为钻石玩家

积分>=5000并且<10000为白金玩家

积分>=1000并且<5000为青铜玩家

积分<1000为普通玩家。

小明现在是有7200分,请在代码编辑器中完善代码,看一下小明是什么级别的玩家。

int main()
{
int score = 7200;
if(score >= 10000)
{
printf("钻石玩家");
}
else if(score >= 5000 && score =1000 && score [code]#include <stdio.h>
int main()
{
int sale=120; //销售业绩为120万
int year=1; //刚刚进入公司1年
if(sale > 100)
{
if(year >= 2)
{
printf("%s\n","优秀员工奖");
}
printf("%s\n","很遗憾,期待你再接再厉");
}
else
{
printf("%s\n","很遗憾,希望你再接再厉");
}
return 0;
}


C语言循环语句

循环结构之while循环

基本结构:



表达式表示循环条件执行代码块循环体

例题:

用while循环实现100以内所有整数之和。

int main()
{
int i,sum=0;
i=1;
while( i [code]#include <stdio.h>
int main()
{
int number=200;
int year=2014;
do{
year++;
number*=1.2;
}while(number<1000);
printf("到%d年招工规模突破1000人\n", year);
return 0;
}


循环结构for循环

基本结构:



在for循环中,表达式1是一个或多个赋值语句,它用来控制变量的初始值;表达式2是一个关系表达式,它决定什么时候退出循环;表达式3是循环变量的步进值,定义控制循环变量每循环一次后按什么方式变化。这三部分之间用分号(;)分开。

例题:

实现一个10以内的数之和的小程序

int main()
{
// 定义变量sum, num
int sum, num;
sum = 0;
for(num = 0; num[code]#include <stdio.h>
int main()
{
//定义三位数num,个位数sd,十位数td,百位数hd
int num, sd, td, hd;
//循环所有三位数
for(  num =100  ; num<1000   ;  num++  )
{
//获取三位数字num百位上的数字
hd = num/100 ;
//获取三位数字num十位上的数字
td = num%100/10;
//获取三位数字num个位上的数字
sd = num%10;
//水仙花数的条件是什么?
if( num==hd*hd*hd+td*td*td+sd*sd*sd )
{
printf("水仙花数字:%d\n", num);
}
}
return 0;
}


三种循环结构的比较

(while , do-while , for )使用场合上是有区别的:

1.在知道循环次数的情况下更适合使用for循环;

2.在不知道循环次数的情况下适合使用while或者do-while循环,如果有可能一次都不循环应考虑使用while循环,如果至少循环一次应考虑使用do-while循环。

例题:

使用循环计算1-2+3-4+5-6+…-100的值?

int main()
{
int sum = 0;  //定义计算结果变量sum
int i = 1;    //定义循环数字变量i
int flag = 1; //定义符号状态变量flag
//do-while循环
do{
//sum=sum+flag*i;
// flag=-flag;
i++;
}while(i[code]#include <stdio.h>
int main()
{
int i, j, k;
for(i=1; i<5; i++)
{
/* 观察每行的空格数量,补全循环条件 */
for( j=i;j<5; j++  )
{
printf(" ");    //输出空格
}
/* 观察每行*号的数量,补全循环条件 */
for(k=0;k<i*2-1;k++)
{
printf("*");   //每行输出的*号
}
printf("\n");     //每次循环换行
}
return 0;
}


for多重循环练习题:

打印99乘法表

int main()
{
// 定义相乘数字i,j以及结果result
int i, j, result;
/*
* 使用for循环解决本题相对简单哦~
*/
for(i=9;i>=1;i--)
{
for(j=1;j[code]#include <stdio.h>
int main()
{
int m, n;
for(m=2; m<=50; m++)
{
for(n=2; n<m; n++)
{
if(m%n==0  )       //什么条件下跳出当前循环
break;      //这里退出当前循环
}
if(m == n)   //n循环结束后,如果m=n的话就输出m
printf("%d  ", m);
}
return 0;
}


结束语句之continue语句

break语句与continue语句的区别是:

break是跳出当前整个循环,continue结束本次循环开始下一次循环。

例题:

计算1到20之间不能被3整除的数字之和。

#include <stdio.h>
int main()
{
int i, sum;
for(i=1, sum=0; i<=20; i++)
{
if(i%3==0  )    //能被3整除这个条件如何写呢?
{
continue;             //应该用哪个循环结束语句呢?
}
sum += i;
}
printf("sum=%d\n", sum);
return 0;
}


分支结构之switch语句

基本结构:



例题:

小明参加期末考试,分数等级分为A-D,等级划分方式如下:

90<=分数<=100 ,等级为A。

80<=分数<90 ,等级为B。

60<=分数<80 ,等级为C。

分数<60 ,等级为D。

小明期末考试分数为87分,其输出结果为: 等级B

代码示例:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: