一、概述
C语言具有功能丰富,表达能力强,灵活方便,应用广泛等特点,一经推出就得到了全世界的推广及普及。C语言不但执行效率高而且可移植性好,可以用来开发应用软件、驱动、操作系统等。C语言也是其它众多高级语言的鼻祖语言,所以说学习C语言是进入编程世界的必修课。
转眼学习C语言已经半个月了,时间飞逝,不管是学习什么过程中都会或多或少都会遇到问题,我也不例外,在这十几天的学习中也遇到了很多问题,今天就让我来谈谈我的C 语言学习之旅吧!
二、数据类型
学习C语言就不得不说说数据类型了,数据类型是C语言的重中之重,掌握各种数据类型是学习C语言第一步。C语言的数据类型分为基本数据类型和复合数据类型。
2.1基本数据类型
C语言的三种基本数据类型为整型,实型,字符型。
关键字 (系统预先定义好的,有特殊含义的,并且都是小写。不能重新定义!)(32个)
在c语言中,为了定义变量、表达语句功能和对一些文件进行预处理,还必须用到一些具有特殊意义的字符,这就是关键字,我们用户自己定义的变量函数名等要注意不可以与关键字同名。
2.1 .1 整型
包括short, int, long等,用以表示一个整数,默认为有符号型,配合unsigned关键字,可以表示为无符号型。
变量定义方法:类型名 变量名
例如:定义一个int,short,long类型的变量
2 .1.2 实型
即浮点型,包括float, double等,用来表示实数,相对于整型,该类型可以表示带有小数部分的数值。需要注意的是,实型在计算机语言中为近似值表示,并非准确值,在多次计算后可能会出现真值偏差。
变量定义方法:类型名 变量名
例如:定义一个float ,double类型的变量
2.1.3 字符型
即char型,用来表示各种字符,与ascii码表一一对应。除可以用来表示各类字符外,char型的其它规则与整型相同,可以认为char是一种特殊的整型。
2.2 复合数据类型
这里我只学习了数组指针含函数,暂时就介绍它们吧!
2.2.1 数组
1.一维数组
(1)定义
(2)一维数组的初始化
部分初始化
全部初始化
(3)一维数组的访问
(4)一维数组的相关操作
2.二维数组
(1)定义


(3)二维数组访问
数组名[下标]
(4)二维数组的相关操作
输入,输出,求鞍点: 在一行当中最大的,看是否为该列中最小的
#include <stdio.h>
void meun();//菜单
void meun()
{
printf("1-------input\n");
printf("2-------output\n");
printf("3-------鞍点\n");
printf("-1-------exit\n");
}
int main()
{
int a[3][4]={{12,34,56,89},
{36,98,59,200},
{45,3,60,78}};
int max=0,flag=0;
int i=0,j=0,k=0;
int op=0;
while(1)
{
meun();
printf("请输入选项\n");
scanf("%d",&op);
if(-1==op)
break;
switch(op)
{
case 1:
printf("请输入12 个数\n");
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
scanf("%d",&a[i][j]);
}
}
break;
case 2:
for(int i=0;i<3;i++)
{
for(int j=0;j<4;j++)
{
printf("%4d",a[i][j]);
}
printf("\n");
}
break;
case 3:
for(i=0;i<3;i++)
{
max=a[i][0];
for(j=0;j<4;j++)
{
if(a[i][j]>max)
{
max=a[i][j];
}
k=j;
}
flag=1;//假设是鞍点
for(j=0;j<3;j++)
{
if(a[j][k]<max)
{
flag=0;//不是
// continue;
}
}
if(flag)
{
printf("第%d行有鞍点=%d\n",i+1,max);
}
else
{
printf("第%d行没有鞍点\n",i+1);
}
/*
min=a[0][k];
for(j=0;j<3;j++)//用行来进行列比较
{
if(a[i][k]<min)
{
min=a[i][k];
//printf("a[%d][%d]=%d\n",i,k,a[i][k]);
}
printf("a[%d][%d]=%d\n",i,k,a[i][k]);
printf("min=%d\n",min);
}
//printf("min=%d\n",min);
if(max==min)
{
printf("第%d行有鞍点=%d\n",i+1,max);
}
else
printf("第%d行没有鞍点\n",i+1);
printf("min=%d\n",min);
*/
}
break;
}
}
return 0;
}
打印杨辉三角
#include <stdio.h>
int main()
{
int a[10][10]={0};
int i=0,j=0;
//第一列为1
for(i=0;i<10;i++)
{
a[i][0]=1;
}
//最后一行为1
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
{
if(i=j)
{
a[i][j]=1;
}
}
}
//中间
for(i=2;i<10;i++)
{
for(j=1;j<i;j++)
{
a[i][j]=a[i-1][j-1]+a[i-1][j] ;
}
}
//打印
for(i=0;i<10;i++)
{
for(j=0;j<=i;j++)
{
printf("%4d",a[i][j]);
}
printf("\n");
}
return 0;
}
2.2.2 指针
1.什么是指针?

注释:我在学习这部分的时候,觉得指针是最难的了,单看指针还可以,与其他内容一起就晕了,例如和函数,数组的关系。
2.2.3 函数
1.变量
(1)全局变量:定义在函数体外部的变量 作用域:自定义开始到文件结束,一般默认为0
2.自定义函数
(1)函数声明
返回值类型 函数名(形式参数列表);
三、相关运算符
3.1 赋值运算符
= :左边赋值给右边
例如:
int a=6;//把6赋值给a
3.2 算数运算符
// (/)除法
#include <stdio.h>
int main(void)
{
int i=7;
int j=3;
printf("%d\n",i/j); //整数/整数=整数
float ft=3;
printf("%f\n",i/ft);//整数/小数===小数去转
return 0;
}
2.++ --
单纯++ --
//++,--
//++,--
#include <stdio.h>
int main(void)
{
int a=5;
int b=0;
//++a; //单纯的++没有和其他运算在一起的,++a ,a++ 无区别
a++;
printf("a=%d\n",a);
return 0;
}
++在变量前
++在变量后
3.(/,%) 输入一个四位数,将每一位取出求和
3.3关系运算符
3.4逻辑运算符
3.5条件运算符
条件运算符(? : )是一个三目运算符,即有三个操作数。
使用条件运算符(?:)可以实现 If else 的功能,其一般形式为:
表达式1 ? 表达式2 : 表达式3
其意思是:如果表达式1为真,则运算表达式2,整个条件表达式的值为 表达式2的值;反之,则运算表达式3,整个条件表达式的值为表达式3的值。
3.6逗号运算符
在C语言中逗号“,”也是一种运算符,称为逗号运算符。 其功能是把两个表达式连接起来组成一个表达式, 称为逗号表达式。其一般形式为:
表达式1, 表达式2
其求值过程是分别求两个表达式的值,并以表达式2(即最右边的一个表达式)的值作为整个逗号表达式的值。
四、三大结构
4.1顺序结构(标准输入输出函数)
1.scanf()函数
// 可变参数的函数 , 第一个参数也是字符串scanf ( " 格式符号 " , 地址列表 );scanf ( "%d" , & i );scanf ( "%f" , & f );scanf ( "%c" , & ch );//scanf 中不管小数还是整数 , 只能控制宽度scanf ( "%md" , & i );scanf ( "%mf" , & ft )
2.printf()函数
// 可变参数的函数 , 第一个参数一定是字符串 ""printf ( " 字符串 " )printf ( "helloworld" ); // 字符串会原样输出% d ---> 有符号的十进制整数% f ---> 单精度的浮点数 ( 默认保留小数点后 6 位 )% c ----> 字符printf ( " 字符串 + 格式化符号 " , 变量名列表 );printf ( "%-m.nf" , ft ); //m 表示可以控制数据的宽度 m< 实际宽度 原样输出// m> 实际宽度 用空格来补 , 默认右对齐 - 表示左对齐//n 表示小数点默认 n 位printf ( "%md" , i ); // 整数中可以控制宽度
4.2选择结构
1.单分支选择结构
if ( 条件为真 ){语句 1 ;}
2.双分支选择结构
if ( 条件为真 ){语句 1 ;} else{语句 2 ;}
3.多分支选择结构
if ( 条件 1 为真 ){语句 1 ;} else if ( 条件 2 为真 ){语句 2 ;} else if ( 条件 3 为真 ){语句 3 ;}.....else if ( 条件 n 为真 ){语句 n ;} else{语句 n + 1 ;}
//1. 条件必须是处于某一点上//2.case 后面的标号必须为常量//3. 表达式 == 标号时 , 执行标号后面的语句 , 直到 switch,case 结束为止 , 或者碰到 break 语句//4.case 语句之间无顺序而言,甚至说你都可以 default 都可以写在最前面//5. 表达式不能为实型 ( 单精度 (float), 双精度 (double))switch ( 表达式 ){case 标号 1 :语句 1 ;case 标号 2 :语句 2 ;case 标号 3 :语句 3 ;....case 标号 n :语句 n ;default :语句 n + 1}
4.3循环结构
1.while()
//(1). 循环的初始条件while (( 2 ). 条件判断 ){( 4 ). 循环体( 3 ). 条件更新}
2.for()
//for 其实就是 while 的变形for (( 1 ). 循环初始条件 ( 多个就逗号隔开 );( 2 ). 条件判断 ;( 3 ). 条件更新 ( 多个条件逗号隔开 )){( 4 ). 循环体}
3.do....while()
( 1 ). 循环的初始条件do{( 4 ). 循环体( 3 ). 条件更新} while (( 2 ). 条件判断 );
注释:
循环中常见的关键字:break ,continue
break:跳出循环
continue :结束本次循环,继续下一次循环
***要特别注意continue 的用法,是结束本次循环,继续下一次循环,这个地方是我容易出错的地方,希望小伙伴们不要下像我一样粗心大意!
死循环
while ( 1 ){}
for (; 1 ;){}
五、算法
算法需要在学习过程中慢慢积累掌握,在这里就不多说了。