**蓝桥杯备赛 第一周(C语言)
1.编写一个简单的C代码(printf)
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("Hello micu");
return 0;
}
1.1转义序列
\n换行【\\n:则是显示\n】
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("hello micu\nhello may");
return 0;
}
1.2变量和赋值
变量的声明需要在使用之前
//整数
int a = 3;
//小数
float b = 3.14;
加减乘除:+ - * / 取余:%
例题:设计一个C语言,通过长宽高计算长方体体积
#include <stdio.h>
#include <stdlib.h>
int length=2;
int width=3;
int hight=4;
int volum;
int main(int argc, char *argv[])
{
volum=length*width*hight;
printf("该长方体的体积为:%d",volum);
return 0;
}
占位符:int 类型的占位符为%d float类型的占位符为%f
scanf:输入内容赋值给变量
#include <stdio.h>
#include <stdlib.h>
int length;
int width;
int hight;
int volum;
int main(int argc, char *argv[])
{
printf("请输入长:");
scanf("%d",&length);
printf("请输入宽:");
scanf("%d",&width);
printf("请输入高:");
scanf("%d",&hight);
volum=length*width*hight;
printf("该长方体的体积为:%d",volum);
return 0;
}
注释:// /* */
main函数有且只有一个
1.3相关扩展
1.3.1预处理指令
//预处理指令
#include stdio.h
#include stdlib.h
#define PI 3.14f //宏定义
//area=3.14*r*r等价area=PI*r*r
1.3.2变量的声明
变量的命名规则:
只能包含英文字母,数字,下划线 temputure_2
不能以数字开头,必须以英文字母或者下划线开头 3val 3_val val3 val_3
不能和关键字重复 main int return
区分大小写 May mAy maY may MAY MAy May
可以一次声明多个,中间用逗号隔开
int length,width,hight;
1.3.3格式化输入/输出
int x;
f(x)=X^2 //f(2)=4
//占位符%d 整数 %f 小数
printf("a=%d\nb=%f",a,b);
/*
%n.md %n.mf
n代表最小栏宽,如果不足将会左侧补空格,超过则正常显示
前者m代表显示有效位数,不足补0,超过则正常显示
后者表示小数点后有效位数,默认6
*/
printf("a=%d\nb=%.2f",a,b);
scanf("%d%f",&a,&b);//一一匹配
随堂练习:
例1:提示用户输入圆的半径,计算体积并显示
#include <stdio.h>
#include <stdlib.h>
#define PI 3.14f
int r;
float volum;
int main(int argc, char *argv[])
{
printf("请输入半径:");
scanf("%d",&r);
volum=4.0f/3.0f*PI*r*r*r;
printf("圆的体积为:%f",volum);
return 0;
}
例2:提示用户输入两个不同的圆的半径,计算体积并显示
#include <stdio.h>
#include <stdlib.h>
#define PI 3.14f
int r1,r2;
float volum1,volum2;
int main(int argc, char *argv[])
{
printf("请输入第一个圆的半径r1:");
scanf("%d",&r1);
printf("请输入第二个圆的半径r2:");
scanf("%d",&r2);
volum1=4.0f/3.0f*PI*r1*r1*r1;
volum2=4.0f/3.0f*PI*r2*r2*r2;
printf("第一个圆的体积为:%f\n",volum1);
printf("第二个圆的体积为:%f",volum2);
return 0;
}
2.1表达式和选择语句
2.1.1注意
-
int类型和float类型 6.7f/2 = 3.35
-
%操作不能是浮点数,只能是整数
-
/和%用作负数时,结果难以确定
-
a+=2 等价于 a=a+2
-
a++和++a的区别
#include <stdio.h> #include <stdlib.h> int a=2; int b=3; int main() { a=b++; printf("a=%d\nb=%d",a,b); return 0; } -
!非 ||或 &&且
2.1.2 if语句
例1:设计一个C程序,提示用户输入一个数,并判断这个数是奇数还是偶数,如果是奇数,就乘3再显示,如果是偶数,就乘5再显示
#include <stdio.h> #include <stdlib.h> int num; int main() { printf("请输入一个数:"); scanf("%d",&num); if(num%2==0) { num=num*5; printf("这是一个偶数%d",num); } else { num=num*3; printf("这是一个奇数%d",num); } return 0; } -
else悬空问题:就近原则
//else所属后一个if if(a<b) { a=5; } if(b<c) { a=3; } else { a=2; }-
布尔值:1/0
2.1.3 switch语句
#include <stdio.h> #include <stdlib.h> int num; int main() { printf("请输入你的成绩:"); scanf("%d",&num); switch(num) { case 0: case 1: case 2: case 3: case 4: case 5: printf("您的成绩不合格"); break; case 6: case 7: printf("您的成绩合格"); case 8: case 9: case 10: printf("您的成绩优秀"); break; default: printf("您的成绩输入有误"); break; } return 0; }2.2循环语句
2.2.1 while循环
#include <stdio.h> #include <stdlib.h> int i=5; int main() { while(i) { printf("%d\n",i); i=i-1;//i-- } return 0; }2.2.2 do while循环
- 一定执行一次
#include <stdio.h> #include <stdlib.h> int i=5; int main() { do { printf("%d\n",i); i++; }while(i==5); return 0; }例:设计一个C程序,计算用户输入的整数的位数
#include <stdio.h> #include <stdlib.h> int num; int i; int main() { printf("请输入一个整数:"); scanf("%d",&num); //do while 让0也可以实现 do { num=num/10; i++; }while(num>0); printf("输入的数字有%d位",i); return 0; }2.2.3 for循环
#include <stdio.h> #include <stdlib.h> int i; int main() { for(i=5;i>0;i--) { if(i==2) { break;//跳转到循环结束之后 } printf("%d\n",i); } return 0; }2.2.4 continue和break的区别
#include <stdio.h> #include <stdlib.h> int i; int main() { for(i=1;i<3;i++) { printf("1"); printf("2"); continue; printf("3"); printf("4"); //continue语句转跳到这里 } //break转跳到循环体末尾之后执行 return 0; }2.2.5 goto语句
#include <stdio.h> #include <stdlib.h> int a,b,c; int main() { goto b; a: printf("这是a\n"); b://goto b 就会跳转到这里执行 printf("这是b\n"); c: printf("这是c\n"); return 0; }3.1数制与码制的基本数据类型
-
常见数制(纯数学层面) 2进制 8进制 10进制 16进制
-
位权
632.45
数字: 6 3 2. 4 5
位权 10^2 10^1 10^0 10^-1 10^-2
位值: 610^2 + 310^1 + 210^0 + 410^-1 + 510^-2
科学计数法: 6.3245*10^2
- 0X表示16进制
3.1.1码制
-
存储带正负的整数,一个字节,8位;正负、符号,有符号数;最高位为符号位【0为整数、1为负数】
-
逻辑层面:-6**【正数的原码、反码、补码完全相同】**
-
编码格式: 原码 反码 补码(常用)【补码=反码+1】
-
物理实在: 1000 0110 1111 1001 1111 1010
3.1.2 C语言中的基本类型
-
有符号整型int
-
无符号整型unsigned int
-
长整型long int 、long long int
-
短整型short int
-
自由组合 unsigned long long int
-
有符号字符变量char
-
无符号字符变量unsigned char
-
单精度浮点型float 双精度浮点型double
-
float比较中谨慎使用== !=
-
强制转换
#include <stdio.h> #include <stdlib.h> float a=6.7; int main() { printf("%d\n",(int)a); return 0; }
-
4.1数组和指针入门
4.1.1一维数组
例:假设已经存储了3名学生的成绩信息,学号1,2,3。编写一段C代码来让用户输入学号查询对应学员成绩
#include <stdio.h>
#include <stdlib.h>
int student1=45;
int student2=56;
int student3=67;
int num;
int main()
{
printf("请输入学员的学号:");
scanf("%d",&num);
switch(num)
{
case 1:
printf("学员1的成绩为:%d",student1);
break;
case 2:
printf("学员2的成绩为:%d",student2);
break;
case 3:
printf("学员3的成绩为:%d",student3);
break;
}
return 0;
}
例:假设需要顺序输入3名学生的成绩信息,学号为1,2,3,输入完成后支持学号查询成绩信息
#include <stdio.h>
#include <stdlib.h>
int student1;
int student2;
int student3;
int num;
int main()
{
printf("请输入学员1的成绩:");
scanf("%d",&student1);
printf("请输入学员2的成绩:");
scanf("%d",&student2);
printf("请输入学员3的成绩:");
scanf("%d",&student3);
printf("请输入学员的学号:");
scanf("%d",&num);
switch(num)
{
case 1:
printf("学员1的成绩为:%d",student1);
break;
case 2:
printf("学员2的成绩为:%d",student2);
break;
case 3:
printf("学员3的成绩为:%d",student3);
break;
}
return 0;
}
例:假设输入3个学生信息,并通过学号查询
#include <stdio.h>
#include <stdlib.h>
int student[3]={0};
int i;
int j;
int main()
{
for(i=0;i<3;i++)
{
printf("请输入学员的学号:");
scanf("%d",&j);
printf("请输入学员的成绩:");
scanf("%d",&student[j-1]);
}
printf("请输入学员的学号:");
scanf("%d",&j);
printf("学员%d的成绩为:%d",j,student[j-1]);
return 0;
}
4.1.2多维数组
#include <stdio.h>
#include <stdlib.h>
int a[2][3]={{1,2,3},{4,5,6}};
int main()
{
printf("%d",a[1][0]);
return 0;
}
-
常数数组:
-
const 关键字 在代码运行过程中不会被修改的值,节省内存
-
const char a[]={‘0’,‘1’,‘2’,‘3’,‘A’,‘B’,‘C’};
-
字符串,双引号"hello";字符,单引号’a’
-
字符串是特殊的字符数组char string[3]={‘a’,‘b’,c’}; char string[]=“abc”
-
字符串占位符%s,字符占位符%c
4.1.3指针
- 指针变量:用来存储地址的变量 int* a 指针的使用*a_p
#include <stdio.h>
#include <stdlib.h>
int a=1;
int* p=NULL;
int main()
{
p=&a;
*p=5;
printf("%d",a);//a=5
return 0;
}
5.1函数与程序结构
- 无需返回值 void
#include <stdio.h>
#include <stdlib.h>
//函数声明
void hanshu1(void)
{
printf("hello micu");
}
int main()
{
hanshu1();
return 0;
}
例:设计一个代码,求两个数的平均值
#include <stdio.h>
#include <stdlib.h>
float a=2,b=7,c=0;
//函数声明
float average(float x,float y)
{
float f=0;
f=(x+y)/2;
return f;
}
int main()
{
c=average(a,b);
printf("%f",c);
return 0;
}
例:设计一个代码,交换两个数的值
#include <stdio.h>
#include <stdlib.h>
int a=2,b=3,c=0;
void exchange(int* x,int* y)
{
int j=0;
j=*x;
*x=*y;
*y=j;
}
int main()
{
exchange(&a,&b);
printf("a=%d b=%d",a,b);
return 0;
}
例:设计一个程序,找出数组a中的最大值,找出数组b中的的最大值,然后求他们的平均值
//存在平均数如果为小数,只会显示整数的问题,要将int类型换成float类型
#include <stdio.h>
#include <stdlib.h>
int num1[5]={5,9,2,45,7};
int num2[5]={23,67,12,2,5};
int c1;
int c2;
int h;
int max(int* addr)
{
int m=0;
int i=0;
for(i=0;i<5;i++)
{
if(addr[i]>m)
{
m=addr[i];
}
}
return m;
}
int average(int x,int y)
{
int k=0;
k=(x+y)/2;
return k;
}
int main()
{
c1=max(num1);
c2=max(num2);
h=average(c1,c2);
//h=average(max(num1),max(num2))
printf("c1=%d c2=%d average=%d",c1,c2,h);
return 0;
}
例:设计一个程序,找出数组a中的最大值,找出数组b中的的最大值,然后交换他们
#include <stdio.h>
#include <stdlib.h>
int num1[5]={5,9,2,45,7};
int num2[5]={23,67,12,2,5};
int c1;
int c2;
int h;
int* max(int* addr)
{
int* m=NULL;
m=addr;//不能*m=0 空指针不能赋值
int i=0;
for(i=0;i<5;i++)
{
if(addr[i]>*m)
{
m=addr+i;//数组首地址+偏移量
}
}
return m;
}
void exchange(int* x,int* y)
{
int l=0;
l=*x;
*x=*y;
*y=l;
}
int main()
{
exchange(max(num1),max(num2));
printf("num1[3]=%d num2[1]=%d",num1[3],num2[1]);
return 0;
}
5.1.1递归
- 阶乘
#include <stdio.h>
#include <stdlib.h>
int fun2(int n)
{
if(n<=1)
{
return 1;
}
else
{
return n*fun2(n-1);
}
}
int main()
{
printf("%d",fun2(5));
return 0;
}
*函数声明必须在主函数之前
5.2程序结构
-
预处理指令
-
全局变量声明,函数声明【全局变量声明,全局变量是不在函数里面的变量,一般情况不初始化就默认等于0;局部变量是在函数里面声明的变量,只有在这个函数内部才能访问,局部变量不初始化,值随机】
-
main函数
-
其他函数原型
-
函数内,局部变量 局部变量不初始化值是随机的
-
语句必须出现在函数内
-
C语言就是由函数组成的,语句不能凭空出现
-
C语言默认从main函数开始执行
-
c文件存放各类原型,h文件存放各类声明【头文件max.h存放声明,这样main函数引入库比如#include <max.h>或“max.h"】
-
外部变量extern【可以分装main函数和其他函数】extern int p =5;也可以放在头文件
