编程是一种控制计算机的方式,和我们平时双击打开文件、关机、重启没有任何区别 ——闫学灿
“首先欢迎大家来到ACM这个大集体,不管你有无基础,只要跟着我们ACM队伍集训,不久的将来,你也会是一个很强大的ACMer,让我们一切的一切都从Hello World开始吧!”
一、头文件
头文件就是一类文件,你写c语言是必须要有头文件的,就相当于你电脑开机你需要按电源键,你的代码也必须要有它的头文件,目前来说,你们基本能用上的就以下几个头文件
#include <stdio.h> //相当于一个基本头文件,任何c语言代码都要有这个头文件!!!
#include <stdlib.h> //里面包含一些方便的函数,具体包含什么可以自己搜索;
#include <string.h> //跟一些字符和字符串有关,你们都会慢慢了解的
#include <math.h> //可以调用一些数学函数,你们以后用的到的时候会知道的这里不多说
二、主函数
主函数比较好理解,简单来说,你要写的代码都要在主函数里写
int main()//这就是一个主函数的基本框架
{
//你的代码在主函数里写;
//并且注意每条语句后面记得加 ;
printf("Hello World");
return 0;
}
三、变量类型
数字:1、2、55、33.2
字符:c、A
这些类似数字和字符在C语言中都有它们对应的数字类型
int a; //定义了一个int型的a变量 这里a的大小不能超过2147483647,你们只需要记住int最大能存10^9的数就行;
long long b; //定义了一个long long型的b变量 当你需要定义超过10^9次方数的时候 就需要用long long型的变量;
char c; //定义了一个字符c;
float d; //定义了一个浮点数(小数)d,例如33.2;
double e; //定义了一个双浮点数e, 例如33.2;
四、输入
输入即需要输入到程序中的内容,比如输入一个数字或输入一个字符
输入需要用scanf()
用scanf()前需要清楚每个变量类型
int
-> %d
long long
-> %lld
float
-> %f
double
-> %lf
char
-> %c
int a;
long long b;
float c;
double d;
char e;
scanf("%d",&a); //一定要记得&符号,没有你就会出错!!! &&&&&&重点
scanf("%lld",&b);
scanf("%f",&c);
scanf("%lf",&d);
scanf("%c",&e);
多组输入
#include<stdio.h>
int main()
{
int a,b;
while(~scanf("%d%d",&a,&b) //while(scanf("%d%d",&a,&b)!=EOF){}
{
}
return 0;
}
五、输出
输出容易理解,就让你想让你的代码输出什么
废话不多说直接上代码
#include <stdio.h>
int main()
{
printf("Hello World");
return 0;
}
printf(“你想输出到屏幕的任何想的”)
printf 高级用法就是 printf(“变量类型”,变量)
#include<stdio.h>
int main()
{
int a = 30;
printf("%d",a);
return 0;
}
#include<stdio.h>
int main()
{
char c;
scanf("%c",&c);
printf("%c",c);
return 0;
}
六、转义字符
+ - * / %
加 减 乘 除 取余数
\n
换行字符
%.3lf
保留小数后面几位数字,保留几位就.几lf
%3d
保留宽度为3 宽度小于3 在前面补空格
%-3d
保留宽度为3 宽度小于3 在后面补空格
%03d
保留宽度为3 宽度小于3 在前面补0
//
注释
七、if-else语句
学习if-else语句之前,需要先了解基本比较运算符和条件表达式
>
大于
<
小于
>=
大于等于
<=
小于等于
==
相等
!=
不相等
&&
同时
||
或者
*1.基本if-else语句*
当条件成立时执行某些语句;否则执行另一些语句
#include <stdio.h>
int main()
{
int a=2;
if(a==2)
{
printf("Yes\n");
}
else
{
printf("No\n");
}
return 0;
}
else
语句可以省略
#include <stdio.h>
int main()
{
int a;
scanf("%d",&a);
if(a>2)
{
printf("Yes\n");
}
return 0;
}
if-else
语句内部还可以是if-else
语句
适当条件下,可以用&&
或者 ||
#include <stdio.h>
int main()
{
int a,b;
scanf("%d%d",&a,&b);
if(a==2)
{
if(b==2)
{
printf("Yes\n");
}
else
{
printf("No\n");
}
}
else
{
printf("No\n");
}
return 0;
}
#include <stdio.h>
int main()
{
int a,b;
scanf("%d%d",&a,&b);
if(a==2 && b==2) //if(a!=2 || b!=2)
{
printf("Yes\n");
}
else
{
printf("No\n");
}
return 0;
}
if-else
连写
#include<stdio.h>
int main()
{
int score;
scanf("%d",&score);
if (score >= 85)
{
printf("A");
}
else if (score >= 70)
{
printf("B");
}
else if (score >= 60)
{
printf("C");
}
else
{
printf("D");
}
return 0;
}
八、循环语句
学习循环之前,大家要先了解几个运算
++
加1
--
减1
+=
加完赋值
-=
减完赋值
*=
乘完赋值
/=
除完赋值
学习循环语句只需要抓住一点——代码执行顺序!
一.while循环
可以简单理解为循环版的if
语句。if
语句是判断一次,如果条件成立,则执行后面的语句;while
是每次判断,如果条件成立,则执行循环体中的语句,否则停止。
while循环框架
while(判断语句)
{
}
判断语句就是你循环的条件,条件成立便执行,不成立结束循环
#include <stdio.h> //例子
int main()
{
int i=0;
while(i<10) //输出0-9数字
{
printf("%d\n",i);
i++;
}
return 0;
}
在举个例子,计算数字1-10
的和
#include <stdio.h>
int main()
{
int res=0; //记录和
int i=1;
while(i<=10)
{
res=res+i;
i++;
}
printf("%d",res);
return 0;
}
讲一个经常需要while循环的地方
//比如我们有时候一个整数314,我想求出他的每一位如何做
int x=314;
int c; //记录当前位是几
while(x) // 同等于while(x!=0)
{
c=x%10; //c就是取出当前这位数字,最开始从个位开始
x/=10;
}
死循环
写循环常出现的错误
我们写循环一定要避免出现死循环的问题
#include <stdio.h>
int main()
{
int x = 1;
while (x == 1) printf("!\n");
return 0;
}
do-while循环
do while循环不是很常用 但需掌握
do while语句与while语句非常相似 唯一的区别是,do while语句不管判断条件是什么,我们都要先执行一次循环,进行完一次循环后,再去判断语句
中判断是否继续进行循环
do-while语句
框架
do
{
循环内容……
}while(判断语句); //注意do-while语句这里要有`;`;
例子
#include<stdio.h>
int main()
{
int i=1; //while循环
while(i<1)
{
printf("i\n");
i++;
}
int j=1; //do-while循环
do
{
printf("j\n");
j++;
}while(j<1);
return 0;
}
二、for循环
for循环
也是一种循环方式
for循环
框架
for(语句1;语句2;语句3)
{
循环内容……;
}
//语句1:可以是声明语句、表达式、空语句,一般用来初始化循环变量;
//语句2:是条件表达式,和while中的条件表达式作用一样;
//语句3:一般负责修改循环变量,可以为空。
输出数字0-9
#include <stdio.h>
int main()
{
int i;
for(i=0;i<10;i++)
{
printf("%d\n",i);
}
return 0;
}
语句1也可以有多个变量,语句3也可以同时修改多个变量
例如求1*10+2*9+3*8+4*7+5*6
#include <stdio.h>
int main()
{
int res=0;
int i;
for(i=1,j=10;i<j;i++,j--)
{
res = res + i*j;
}
printf("%d",res);
return 0;
}
双重for循环
//输入一个字符,输出字符4×4的矩阵
#include <stdio.h>
int main()
{
char c;
scanf("%c",&c);
int i,j;
for(i=0;i<4;i++) //我要输出哪一行
{
for(j=0;j<4;j++) //我当前第i行输出什么东西
{
printf("%c",c);
}
//每次输出完一行 换行
printf("\n");
}
return 0;
}
用循环控制次数
//比如给定一个n ,输入n个数字,求输出每个数字之和
#include <stdio.h>
int main()
{
int n,x,sum=0;
int i;
scanf("%d",&n);
for(i=1;i<=n;i++) //输入n次数字 1,2,3,4....n 一共循环n次
{
scanf("%d",&x); //每次循环输入一次x 也就是输入了n个数字
sum+=x;
}
printf("%d",sum);
return 0;
}
三、break语句
我们有时执行一个循环语句时,有时不希望它直到执行完成,我们希望它执行到某个条件就停止下来,那么就需要我们的break语句
例子
//还是循环是要输出数字0-9
//但是我们想输出到数字5就退出循环
#include <stdio.h>
int main()
{
int i;
for(i=0;i<10;i++)
{
printf("%d\n",i);
if(i==5)
{
break;
}
}
return 0;
}
四、continue语句
continue语句和break语句类似,只不过continue语句并不会直接将循环结束,而continue语句的功能是跳过本次循环
例子
// 输出数字0-9,但当数字为5不输出
#include <stdio.h>
int main()
{
int i;
for(i=0;i<10;i++)
{
if(i==5)
{
continue;
}
printf("%d\n",i);
}
return 0;
}
九、Ascll码
何为Ascll码 即每一个Ascll码值相对应一个字符:
第33~126号(共94个)是字符,其中第48~57号为0~9十个阿拉伯数字;65~90号为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等
上图即为Ascll码表
直接用代码为大家展示(此处只给大家展示最常用的几种Ascll码及其字符
//注意 c语言中字符要用' '来表示 比如 '?' 'c' 'A' '2' '4', 一个 ' '里只能有一个字符 比如 '23'不可以
char c='a';
printf("%d",c); //会输出97 为什么?这是因为可以在上面表看,'a'对应的Ascll值为97
char c='A';
printf("%d",c) //输出65 同理
//这里大家仔细观察, 'a' 和 'A' Ascll码值是不是相差32;
//所以我们又有一种写法,是什么呢?
char c='a';
printf("%c",c-32); //输出A对不对 //因为c-32这个操作,代码就会先将你的字符变量c转换Ascll再-32,然后用%c输出字符
//同理
int a=69;
printf("%c",a); //输出69所对应的字符吧
//最后说几个Ascll还可以用的到的操作
'a'-'a'=0;
'z'-'a'=25;
'8'-'0'=8;
char c;
scanf("%c",&c);
if(c>='a' && c<='z') //判断`输入的字符变量c`是否是`小写字母`
if(c>='0' && c<='9') //同理 这里就是判断输入的字符变量c是否是数字字符
输出所有小写字母按照字母表顺序 例:a,b,c,d……
#include <stdio.h>
int main()
{
char i;
for(i='a';i<='z';i++)
{
printf("%c,",i);
}
return 0;
}
十、数组
一、数组入门
何为数组
数组是一个固定长度的存储相同数据类型的数据结构,数组中的元素被存储在一段连续的内存空间中。它是最简单的数据结构之一,大多数现代编程语言都内置数组支持。
每个变量类型都有对应的变量数组
比如 int a[]
double b[]
char c[]
[]
里写你要定义数组的大小
下图即为 int a[6]
开辟一个数组都是从0开始
数组大小也是有限制的!!!
一般来说,一维数组大小不超过10^6,二维数组[5050][5050] 为5000左右正常做题并非极限
关于如何给数组存储元素和如何输出数组元素
//首先先定义一个你想要的数组
int a[5]; //值得注意的是,没有a[5],原理参考上图;
a[0]=1,a[2]=3,a[4]=6;
int a[5]={1,2,3,4,5};
int n=5;
int i;
for(i=0;i<5;i++) //使用循环为数组中每一个空间赋值
{
scanf("%d",&a[i]);
}
// 数组也可以进行加减乘除等运算符号
a[0] + a[1];
a[1] - a[2];
a[2] * a[3];
a[3] / a[4];
if(a[0]>a[1]) 等等
//输出数组
printf("%d",a[0]);
printf("%d",a[2]);
int i;
for(i=0;i<5;i++)
{
printf("%d",a[i]);
}
举个例子 : 给定n个数字,输出n个数字之和
#include <stdio.h>
int main()
{
int n,i;
scanf("%d",&n);
int a[n]; //这里提醒大家,如果定义了数组且不给数组空间赋值,那么数组值是随机数;
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
int x=0;
for(i=0;i<n;i++)
{
x+=a[i];
}
printf("%d",x);
return 0;
}
字符串
学习字符串 需要一个新的头文件 #include<string.h> 里面包括strlen()等....
‘a’ ‘c’ 表示字符
“helloworld” 表示字符串
表示字符串 需要用char数组
输入字符串 用%s
且scanf不需要&
符号
char c[20];
char c[20] = "helloworld";
int len=strlen(c); //strlen() 求字符串长度;
scanf("%s",c); //输入字符串会默认空格或者回车为输入结束
gets(c); //也是输入字符串,此字符串输入可以包含空格
printf("%s",c);
输入一个字符串 输出字符串中每一个字符,用空格隔开
#include <stdio.h>
#include <string.h>
int main()
{
char c[20]; //定义字符数组
int i;
scanf("%s",c); //输入字符串
int len=strlen(c); //求字符串长度
printf("%d",len); //输出字符串长度
for(i=0;i<len;i++) //输出每一个字符
{
printf("%c ",c[i]);
}
printf("\n");
printf("%s",c); //输出字符串
return 0;
}
二维数组
二维数组就是多个一维数组
int a[4][4] 就是一个4×4的数组
望同学们多自我进行尝试
赋值方式和一维数组无区别
a[0][0]=1,a[1][0]=2......
int a[4][4]={1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4};
int a[4][4]={{1,2,3,4},
{1,2,3,4},
{1,2,3,4},
{1,2,3,4}};
//循环输入
int i,j;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
scanf("%d",&a[i][j]);
}
}
//输出数组
int i,j;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
printf("%d",a[i][j]);
}
printf("\n");
}
例题: 输入n 输入n×n的小写字母,输出n×n对应的大写字母
/*
4
abcd
danc
dawb
asow
*/
#include <stdio.h>
#include <string.h>
int main()
{
int n;
int i,j;
scanf("%d",&n);
char c[n][n];
for(i=0;i<n;i++)
{
getchar();
for(j=0;j<n;j++)
{
scanf("%c",&c[i][j]); //输入给定的n×n的小写字母
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
c[i][j]=c[i][j]-32; //小写转换成大写
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%c",c[i][j]);
}
printf("\n");
}
return 0;
}
多个字符串
当有多个字符串时,我们考虑用二位字符数组,因为我们知道一个一维char数组可以表示一个字符串,所有我们用二维char数组,那么char[][] 第一个[]代表有多少个字符串 第二个[] 代表字符串大小
//举个例子
//输入n个字符串
//输出n个字符串
3
abcd
acdaaff
acbabf
//Code:
#include <stdio.h>
#include <string.h>
int main()
{
char s[1000][1000];
int n;
scanf("%d",&n);'
getchar();
for(int i=0;i<n;i++)
{
scanf("%s",s[i]);
}
for(int i=0;i<n;i++)
{
printf("%s\n",s[i]);
}
return 0;
}
十一、排序
排序 基本对数组进行操作
从小到大排序
从大到小排序
//冒泡排序 模板
int a[10] = { 25,35,68,79,21,13,98,7,16,62 };
int n=10;
int i,j,t;
for(i=0;i<n-1;i++) //需要排的轮数
{
for(j=0;j<n-i-1;j++) //当前轮数需要比较相邻的次数
{
if(a[j]>a[j+1]) //如果当前大于后面 要交换一下
{ //a[j]>a[j+1] 为从小到大排序
//a[j]<a[j+1] 为从大到小排序
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
十二、函数
函数的神奇性 请同学们自学 网上很多教程
C语言入门到这里也基本结束了 同学们如果还想提升自己 建议大家多去网上搜索教程去学习
你说的对,但是C++是一款由C语言开发的编程语言。游戏发生在一个被称作内存的物理世界,在这里,被程序员选中的变量将被授予空间,导引CPU之力。你将扮演一位名为ACMer的神秘角色……