基础C语言学习总结-----数据类型,相关运算符,三大结构,算法

本文介绍了C语言中的数据类型,包括基本数据类型如整型、实型和字符型,以及复合数据类型如数组和指针。同时,详细讲解了指针的概念和操作,函数的声明、调用和库函数的使用。此外,还涵盖了C语言中的运算符,如赋值、算术、关系和逻辑运算符,以及三大控制结构:顺序结构、选择结构和循环结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概述

C语言具有功能丰富,表达能力强,灵活方便,应用广泛等特点,一经推出就得到了全世界的推广及普及。C语言不但执行效率高而且可移植性好,可以用来开发应用软件、驱动、操作系统等。C语言也是其它众多高级语言的鼻祖语言,所以说学习C语言是进入编程世界的必修课。

转眼学习C语言已经半个月了,时间飞逝,不管是学习什么过程中都会或多或少都会遇到问题,我也不例外,在这十几天的学习中也遇到了很多问题,今天就让我来谈谈我的C 语言学习之旅吧!

二、数据类型

学习C语言就不得不说说数据类型了,数据类型是C语言的重中之重,掌握各种数据类型是学习C语言第一步。C语言的数据类型分为基本数据类型和复合数据类型。

2.1基本数据类型

C语言的三种基本数据类型为整型,实型,字符型。

关键字  (系统预先定义好的,有特殊含义的,并且都是小写。不能重新定义!)(32个)

在c语言中,为了定义变量、表达语句功能和对一些文件进行预处理,还必须用到一些具有特殊意义的字符,这就是关键字,我们用户自己定义的变量函数名等要注意不可以与关键字同名。

数据类型: char short int long float double struct enum union void
控制语句: if else while do for switch case break continue default goto
存储类型: auto static extern register
const :只读
return :返回函数
Signed :有符号数
Unsigned :无符号数
Sizeof: 计算所占内存空间的大小:(字节) //sizeof (数据类型), sizeof (变量名)
typedef: 给已有的数据类型起别名 volatile: 防止编译器优化
标识符 :程序员自己定义的,一般用来定义变量名,函数名,类型名
1 、由数字、字母、下划线构成
2 、第一个不能为数字
3 、不能和关键字重名
建议:定义变量(见名知意)

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)定义

每个元素的数据类型 数组名 [ 元素的个数 ]; // 元素的个数必须为常量
// 定义一个长度为 5 float 数组
float scores [ 5 ];

 (2)一维数组的初始化

部分初始化

 

 全部初始化

 (3)一维数组的访问

数组名 [ 下标 ] 下标是 0 开始的

 

 (4)一维数组的相关操作

 2.二维数组

(1)定义

每个元素的数据类型 数组名 [ 元素的个数 ] // 元素的个数的必须为常量
// 定义一个长度为 5 float 数组
float scores [ 5 ];
// 定义一个长度为 20 char 的数组
char str [ 20 ];
// 定义一个长度为 3 的数组 , 该数组中的每个元素又是 ( 长度为 4 float) 一个数组
float arr [ 3 ][ 4 ];

 

(2)二维初始化

(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;
}

打印杨辉三角

int arr[10][10]
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
......
1 8 ...............1
#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.什么是指针?

指针是一种保存地址 ( & i ) 的数据类型
2.定义指针变量
类型名 变量名
例如:
// 定义一个 int 变量
int i = 5 ;
// 定义一个指向 int 的指针
int * pi ;
pi =& i ; //pi 指向 i float f=12.5 pi=&f;(×)
// 定义一个指向 int 的指针的指针
int ** ppi ;
ppi =& pi ; //ppi=&i(×)
3.指针的相关操作

 注释:我在学习这部分的时候,觉得指针是最难的了,单看指针还可以,与其他内容一起就晕了,例如和函数,数组的关系。

2.2.3 函数

1.变量

(1)全局变量:定义在函数体外部的变量 作用域:自定义开始到文件结束,一般默认为0

(2) 局部变量 : 定义在函数体内部的变量 作用域 : 自定义开始到最近的 } 结束

 

 

 2.自定义函数

(1)函数声明

返回值类型 函数名(形式参数列表);

// 函数声明
void menu ( void ); //void 空类型
(2)调用函数
变量名 = 函数名 ( 实际参数列表 );
变量名 = 函数名 ( 实际参数 1 , 实际参数 2 , 实际参数 3 );
// 函数调用
menu ();
(3)函数定义
返回值类型 函数名 ( 形式参数列表 )
{
函数体
return 变量名 ; // 若无返回值该句话可以省略
}
3.库函数
(1)引入头文件
例如:#include <stdio.h>
(2)调用库函数
例如:
变量名 = 函数名 ( 实际参数列表 );
变量名 = 函数名 ( 实际参数 1 , 实际参数 2 , 实际参数 3 );

三、相关运算符

3.1 赋值运算符

=       :左边赋值给右边

例如:

int a=6;//把6赋值给a

3.2 算数运算符

+ - * ++  --
/ 除号 整数 / 整数 = 整数 7 / 3 = 2 7 / 3.0 = 2.333
% 求余 / 取模 7 % 3 = 1
1. / (除号)
// (/)除法
#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 ;)
{
}

五、算法

算法需要在学习过程中慢慢积累掌握,在这里就不多说了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值