C语言 手册
Posted 王睿丶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 手册相关的知识,希望对你有一定的参考价值。
文章目录
- 1、知识总结
- 2、常见问题
- 3、题库
- 1、int fun(int x){int p;if(x == 0 || x==1) return p=3;else p = x-fun(x-2);}void main(){printf(“%d\\n“)}
- 2、void main(){char str[] = “\\tab\\n\\014\\\\\\“;printf(“%d“,strlen(str))}
- 3、int fun(int n){switch(n){case 0: return 0;case 1: return 1;case 2: return 1;default:return fun(n-)}}
- 4、以下程序运行后的输出结果是:int fun(int n){static int s=1;s*=n;return s;main(){int i,s=0;for(i=1;i<=4;i++){s+=f}}}
- 5、执行下面程序段后,y的结果是____。int x,y;x=y=2;x=x-2&&(y=y+1);printf(“%d“,y);A。3 B.2 C.1 D。0
喜欢记得点个赞哟,我是王睿,很高兴认识大家!
1、知识总结
1.1、关键字
1.2、ASCLL码表
1.3、冒泡排序法
#include<stdio.h>
#define n 7
int main()
{
int i,j;
int x[n];
printf("请输入7个数字:\\n");
for(i=0;i<n;i++)
scanf("%d",&x[i]);
for(i=0;i<n-1;i++) //控制趟次,7个数就需要交换6趟(两两交换),∴ :i<n-1
{
for(j=0;j<n-i-1;j++)
{
/*控制交换次数,每执行完一趟后,就可以保证最后一个数一定是最大或者最小的数,
下一轮就无需再管这个数,继续排前面的数就好,那么两趟后就确定了两个最大或者
最小的数,那么就在继续排列前面的数,∴ :j<n-i-1 */
if(x[j]>x[j+1])
{
int temp = x[j]; // temp是两个数交换值的中间变量
x[j]=x[j+1];
x[j+1]=temp;
}
}
}
printf("按从小到大排序为:\\n");
for(i=0;i<n;i++)
printf("%d\\t",x[i]);
printf("\\n");
return 0;
}
1.4、选择排序法
#include<stdio.h>
#define N 7
int main(int argc,char* argv[])
{
int i,j,x[N],min,temp;
//i,j→用于循环和数组下标、min→标记最小值,temp→交换两数的中间变量
printf("请输入7个数字:\\n");
for(i=0;i<N;i++)
scanf("%d",&x[i]);
for(i=0;i<N-1;i++) //控制趟次
{
min=i; /*假设初始下标i就为最小值,那么下面一层的循环应从下一个数与它就行比较,而不应该再是自己比自己
那样是毫无意义的,∴ j=i+1 */
for(j=i+1;j<N;j++)
{
/*放入到全部数据里面去比大小,当比完第一趟以后第一个数
就一定是这个数组中的最大或者最小值,此时就无需再关顾第一个数
而应该是继续排序剩下来的所有数字,∴ j<N */
//如果有比min这个下标数组的值还要小的数,就标记住这个数,继续参与比较,这么下来,min标记的一定是最小值
if(x[min]>x[j])
min=j;
}
if(min!=i) /*说不定这个数从一开始就是一个有序的数,所以,判断如果min的下标从未发生过改变,那么说明这个数
排序后就肯定还是在原来的位置,那么此时无需再交换两数,保持这个位置就好 */
{
temp=x[min];
x[min]=x[i];
x[i]=temp;
}
}
printf("按从小到大排序为:\\n");
for(i=0;i<N;i++)
printf("%d ",x[i]);
printf("\\n");
return 0;
}
1.5、插入排序法
#include<stdio.h>
#define N 7
int main()
{
int i;
int index1,index2;
int x[N];
printf("请输入7个数字:");
for(i=0;i<N;i++)
scanf("%d",&x[i]);
for(i=1;i<N;i++)
{
index1=i-1; //因为开始是先拿两个最前面的值进行,比较,所以第一个值就应该是x[1-1]来与x[1]比较,以此类推
index2=x[i]; //取出这个数赋值给index2
while(index1>=0 && x[index1]>index2)//进入循环,与index2之前有序的数列进行比较,到index2时,它前面的数一定都是有序的
{
x[index1+1]=x[index1];
index1--; //每遍历完依次循环就往前面移一位
}
x[index1+1]=index2; //将取出来的这个数,赋值给对应的位置
}
printf("按从小到大排列为:\\n");
for(i=0;i<N;i++)
printf("%d\\t",x[i]);
printf("\\n");
return 0;
}
1.6、结构体快排
代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct Stu{
char name[100]; //名字
char xue[100]; //学号
int c; //成绩
}stu[10010];
int comp(const void* a,const void* b)
{
struct Stu *aa = (struct Stu *)a;
struct Stu *bb = (struct Stu *)b;
return ((aa->c)-(bb->c)); //aa->c为结构体的成员,bb->c也为结构体的成员
}
int main()
{
int n;
int i,j;
scanf("%d",&n);
getchar();
for(i=0;i<n;i++)
{
scanf("%s%s%d",&stu[i].name,&stu[i].xue,&stu[i].c);
}
printf("\\n");
qsort(stu,n,sizeof(stu[0]),comp); //参数1:结构体数组名,个数,首地址的字符数,自定义比较函数名
for(i=0;i<n;i++)
printf("%s %s %d\\n",stu[i].name,stu[i].xue,stu[i].c);
return 0;
}
1.7、转义字符
1.8、数据类型,基本整型所占字节数
C语言 — 数据类型,基本整型所占字节数
20/100
发布文章
qq_27494201
未选择任何文件
注意!基本整型所占的字节数除了跟操作系统位数有关外,还跟编译器有关,比如说:VC++ int 占据4个四节,但是在 tuborC下则是2个字节
在这里插入图片描述
注意!基本整型所占的字节数除了跟操作系统位数有关外,还跟编译器有关,比如说:VC++ int 占据4个四节,但是在 tuborC下则是2个字节
1.9、编程规范、标识符命名规范
C语言 — 编程规范、标识符命名规范
18/100
发布文章
qq_27494201
未选择任何文件
△ 编程规范:
一丶代码缩进:
二丶变量与常量的命名规范:
常量命名统一为大写格式。如果是成员变量,均以m_开始。如果是普通
变量,取与实际意义相关的名称,要在前面添加类型的首字母,并且名称的
首字母要大写。如果是指针,则为其标识符前添加p字符,并且名称首字母
要大写。例如:
#define AGE 20 /定义常量/
int m_iAge; /定义整型成员变量/
int iNumber; /定义普通整型变量/
int * pAge; /定义指针变量/
三丶函数命名规范:
在定义函数时,函数名的首字母要大写,其后的字母大小写混合。例如:
int AddTwoNum(int num1,int num2);
四丶注释:
尽量采用行注释。如果行注释与代码处于一行,则注释应位于代码右方
。如果连续出现多个行注释,并且代码较短,则应对齐注释。例如:
int iLong; /长度/
int iWidth; /宽度/
int iHieght /高度/
△ 标识符命名规范:
标识符是什么?
在C语言中为了在程序的运行过程中可以使用变量、常量、函数、数组等,
就要为这些形式设定一个名称,而设定的名称就是所谓的标识符。
C语言标识符应该遵守的一些命名规则:
所有标识符必须由字母或下划线开头,而不能使用数字或者符号作为开头
int !number; /错误,标识符第一个字符不能为符号/
int 2hao; /错误,标识符第一个字符不能为数字/
int number; /正确,标识符第一个字符为字母/
int _hao; /正确,标识符第一个字符为下划线/
△ 编程规范:
一丶代码缩进:
在这里插入图片描述
二丶变量与常量的命名规范:
常量命名统一为大写格式。如果是成员变量,均以m_开始。如果是普通
变量,取与实际意义相关的名称,要在前面添加类型的首字母,并且名称的
首字母要大写。如果是指针,则为其标识符前添加p字符,并且名称首字母
要大写。例如:
#define AGE 20 /定义常量/
int m_iAge; /定义整型成员变量/
int iNumber; /定义普通整型变量/
int * pAge; /定义指针变量/
三丶函数命名规范:
在定义函数时,函数名的首字母要大写,其后的字母大小写混合。例如:
int AddTwoNum(int num1,int num2);
四丶注释:
尽量采用行注释。如果行注释与代码处于一行,则注释应位于代码右方
。如果连续出现多个行注释,并且代码较短,则应对齐注释。例如:
int iLong; /长度/
int iWidth; /宽度/
int iHieght /高度/
△ 标识符命名规范:
标识符是什么?
在C语言中为了在程序的运行过程中可以使用变量、常量、函数、数组等,
就要为这些形式设定一个名称,而设定的名称就是所谓的标识符。
C语言标识符应该遵守的一些命名规则:
所有标识符必须由字母或下划线开头,而不能使用数字或者符号作为开头
int !number; /错误,标识符第一个字符不能为符号/
int 2hao; /错误,标识符第一个字符不能为数字/
int number; /正确,标识符第一个字符为字母/
int _hao; /正确,标识符第一个字符为下划线/
文章目录
暂无目录
文章内添加文章内添加@[TOC]自动根据文章标题生成目录
Markdown 845 字数 47 行数 当前行 1, 当前列 0html 619 字数 30 段落
1.10、运算符的优先级与结合性
最高级
↓
最低级
1.11、编程规范
遵循编程规范,可以改善软件的可读性,可以让开发人员尽快而彻底地理解新的代码,好的编码规范可以最大限度的提高团队开发的合作效率。
1、代码缩进
代码缩进统一为4个字符。不采用空格,而用Tab 键制表位
2、变量、常量命名规范
常量命名统一为大写格式
#define SUM 100 /*定义常量*/
成员变量,均以m开始
int m_iSum; /*定义整型成员变量*/
普通变量,取与实际意义相关的名称,要在前面添加类型的首字母,并且名称的首字母要大写
int iNumber; /*定义普通整型变量*/
指针,为其标识符前添加p字符,并且名称首字母要大写
int* pAge; /*定义指针变量*/
3、函数的命名规范
在定义函数时,函数名的首字母要大写,其后的字母大小写混合。例如:
int AddTwoNum(int num1,int num2);
4、注释
- 一种是以/开始、以/结束的块注释(block comment);
- 另一种是以//开始、以换行符结束的单行注释(line comment)。
2、常见问题
2.1、两点间的距离公式
公式:
如果点A(x1,y1)、点B(x2,y2)则AB的距离为
∣AB∣=√[(x1-x2)2+(y1-y2)2]
代码:
#include<stdio.h>
#include<math.h>
int main()
{
int x1,y1,x2,y2,x3,y3; //任意三点坐标
double lenght1,lenght2,lenght3; //三角形的各三边长度
int high; //三角形的高
scanf("%d %d %d %d %d %d",&x1,&y1,&x2,&y2,&x3,&y3); //输入3个点的坐标
lenght1 = sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
lenght2 = sqrt((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3));
lenght3 = sqrt((x3-x1)*(x3-x1)+(y3-y1)*(y3-y1));
//printf("%lf\\n%lf\\n%lf\\n",lenght1,lenght2,lenght3); 调试用的,观察数据
if( (lenght1+lenght2)>lenght3 && (lenght1+lenght3)>lenght2 && (lenght2+lenght3)>lenght1 && (lenght1-lenght2)<lenght3 && (lenght1-lenght3)<lenght2 && (lenght2-lenght3)<lenght1)
//上面这个是判断是否构成三角形条件的决定性因素
{
printf("L = %.2lf",lenght1+lenght2+lenght3); // 若构成三角形
}
else
{
printf("Impossible\\n"); // 若不构成三角形,输出Impossible
}
return 0;
}
2.2、利用三条边求得三角形的面积公式(海伦公式)
C语言中利用三条边求得三角形的面积公式 —【海伦公式】
27/100
发布文章
qq_27494201
未选择任何文件
3、题库
1、int fun(int x){int p;if(x == 0 || x==1) return p=3;else p = x-fun(x-2);}void main(){printf(“%d\\n“)}
1、题目
2、知识点
- 函数调用
3、要做好的功课
这就是一个 完整的函数
随后,这块部分是函数体。当有地方调用(可以理解为使用)到 fun这个函数的时候,下面圈起来的这部分代码都会执行,范围在第一个左括号到最后一个右括号。
好,那么理解了这个过程后,我们就开始解题了!
4、开始解题
下图红线圈住的这行代码调用了 fun(7)这个函数。
第1次计算:
上图把7传入到了 fun函数中,此时x =7
X=7,经过 if else判断
会执行
else p = x-fun(x-2) = else p = 7 - fun(7-2)
经过上面的第一次计算fun(7-2)=fun(5),它调用了自身,此时x = 5
第2次计算:
else p = 5-fun(5-2) => p = 5-fun(3)
又调用自身的 fun函数,此时:x=3
第3次计算:
else p = 3-fun(3-2) => p =3-fun(1)
又调用自身的 fun函数,此时:x=1
第4次计算:
此时注意,if(x==0||x==1)
,|| 的意思是说,左边或者右边只要有一个条件是成立的就执行if代码,如果左右两边都不成立,就执行else代码
带入 x=1,此时 1==1,成立
执行: return p = 3。
2、void main(){char str[] = “\\tab\\n\\014\\\\“;printf(“%d“,strlen(str))}
1、题目
2、知识点
- strlen 函数
- 转义字符
3、要做好的功课
- 3.1、strlen 函数
strlen 是C语言里的内置函数,它的作用是计算长度。
可以看到 strlen(str)这句代码,意思是要计算出 str的字符串长度。
- 3.2、转义字符
\\t,\\n,\\这些都是转义字符,他们都只代表一个字符
4、开始解题
3、int fun(int n){switch(n){case 0: return 0;case 1: return 1;case 2: return 1;default:return fun(n-)}}
1、题目
2、知识点
- 函数调用
- 函数的递归
- 其实这是一道:求斐波那契数列第n项的值
3、开始解题
好,那么 fun(7)传入的话,就可以得出以下公式:
fun(3)=fun(2)+fun(1)=2,看上图,根据f(1)=f(2)=1得出=>f(3) = 1+1,以此类推
fun(4)=fun(3)+fun(2)=3
fun(5)=fun(4)+fun(3)=5
fun(6)=fun(5)+fun(4)=8
fun(7)=fun(6)+fun(5)=13
4、以下程序运行后的输出结果是:int fun(int n){static int s=1;s*=n;return s;main(){int i,s=0;for(i=1;i<=4;i++){s+=f}}}
1、题目
2、知识点
- static的作用
- 函数调用
- for 循环
3、要做好的功课
一般情况下
那么得到当这个函数执行完,s这个变量就销毁(不存在)了
但是有了 static 修饰后的变量,他就有了一个新作用,看下图
4、开始解题
调用了 fun()方法(也叫函数)。那我们就开始带值去计算
第一次循环,s=0,i=1
s+=fun(i) => s+=fun(1) 执行这条代码,进入fun函数
n=1,s=1
s*=n的意思相当于 s = sn
s = 11 = 1
return 1;
再来看这行代码
因为s += fun(i),右边的fun(i)经过第一次计算完后,返回了1
所以main函数中,s += fun(i) => s = 0+1=1,s=1
第二次循环,s=1,i=2
进入fun函数计算,n=2,s=1(用上一次计算后的值)
s*=n => s=sn=12=2
return 2(返回2)
因为s += fun(i),右边的fun(i)经过第一次计算完后,返回了2
所以main函数中,s += fun(i) => 1+2 = 3,s = 3
第三次循环,s=3,i=3
进入fun函数计算,n=3,s=2(用上一次计算后的值)
s*=n => s=sn=23=6
return 6(返回6)
因为s += fun(i),右边的fun(i)经过第一次计算完后,返回了6
所以main函数中,s += fun(i) =>s= 3+6= 9,s = 9
第四次循环,s=9,i=4
进入fun函数计算,n=4,s=6(用上一次计算后的值)
s*=n => s=sn=46=24
return 24(返回24)
因为s += fun(i),右边的fun(i)经过第一次计算完后,返回了24
所以main函数中,s += fun(i) =>s= 9+24= 33,s = 33
5、执行下面程序段后,y的结果是____。int x,y;x=y=2;x=x-2&&(y=y+1);printf(“%d“,y);A。3 B.2 C.1 D。0
1、题目
2、知识点
- 基础运算
- 运算符的优先级顺序
- &&短路机制
3、要做好的功课
讲之前,先看下这张表
4、开始解题
根据运算符的优先级顺序
‘-’号要比‘&&’符号优先级更高,所以先执行
那么x-2等于0
&& 的意思是说:两边都为真,才会返回真,否则为假
为此, && 有个短路机制,就是当一方为假时,另一方不再执行,因为没有意义。
所以说,当 x-2=0,执行&&的时候,发现左边为假,右边的(y=y+1)就不执行了。
所以y = 2
喜欢记得点个赞哟,我是王睿,很高兴认识大家!
以上是关于C语言 手册的主要内容,如果未能解决你的问题,请参考以下文章
我的C语言学习进阶之旅解决 Visual Studio 2019 报错:错误 C4996 ‘fscanf‘: This function or variable may be unsafe.(代码片段
我的C语言学习进阶之旅解决 Visual Studio 2019 报错:错误 C4996 ‘fscanf‘: This function or variable may be unsafe.(代码片段