一个众所周知的概念,程序是由语句组成的,语句又由表达式组成。一条语句必须要以一个分号当作结尾。
输入输出,数据类型先用每个小白都写过的程序来讲解
一个完整的程序中,要有头文件(include…)
,要有主函数(main) 这是不能缺少的。
头文件可以让我们调用库里的函数或方法。
如#include
scanf的使用:我们需要先定义一个变量,然后对这个变量赋值
int a;
scanf("%d",&a); 这就是输入一个整型的语句
int --%d–&变量名
char–%c–&变量名(如果是字符串就是%s,不需要加&)
double–%lf–&变量名(%后加.数字表示保留几位小数,最高12位)
数据范围:
int:2^31-1
double:±1.7×10^308
char:2^7 -128~127
然后我们来讲讲空间
1T=1024GB
1GB=1024MB
1MB=1024KB
1KB=1024B(byte字节)
1B=8bit(比特位)
很有规律吧,基本全是1024进制只有最后的字节和位的转换是8进制的
那让我们来看看这道题
printf使用方法:
printf("%d",a);表示打印a(打印的时候不加&)
printf(“hello world”); 也可以直接在双引号中打印字符串
#includeint main() { printf("hello world!n"); return 0; }
c是一个强类型的语言,它的意思就是每个数据都有类型,不同类型的数据不能随便使用,比如一个整数类型的变量就不能放入一个小数数据。
接下来介绍一些数据类型:
int :整型 顾名思义用来存整数的
char:字符型 存字符的像字母,符号,数字都可以存
float:单精度浮点型 保留小数点后6位
double:双精度浮点型 比float精度更高 可以保留更多的小数点后位数
(bool:布尔类型 用来进行判断的 存false 或true)
至于为什么main函数前有时前面的数据类型是int,有时是void,有时候甚至不写,这是因为函数定义时可以在其名前加返回类型。当不写时,意思就是不返回任何东西,当为int main()时,返回类型就是int,意思是返回一个整数,一般来讲都是写int main() 最后要写return 0;表示程序运行正常结束。如果不返回0,在竞赛提交代码时可能会出错。
然后咋们来讲讲一些新手很容易写的错误
1.关键字的大小写打错或单词拼错
2.标识符是英文的打中文会报错
3.关键字的使用有问题
所以写代码时需要细心,需要把语法的使用记住
这里顺带提一下c++的输入输出流
c++里头文件是
#include
i:input 输入 o:output 输出
主要的语句就是cin>>和cout<<
cin>>相当于scanf,cout相当于printf
endl相当于c里面的n 也就是换行
cin,cout和scanf,printf不同的地方就是cin和cout是自动适配类型的,
会根据你所定义变量的类型来输入或输出。cin和cout的运行速度比scanf和printf慢很多,当输入次数为10的5次方以上就不要用cin,cout了,会非常非常慢。在10的5次方下这两者没有太大的区别,但cin和cout还是慢,只是慢的不明显。
在只需要输入输出简单且独立的变量时用cin和cout很节省时间,用到那种需要输入输出格式的时候就需要用scanf和printf。
就比如保留小数点后3位用printf("%.3f",变量名),就很方便。
或者说打印一个括号里面放坐标。
cout<<’(’<
是不是printf就方便许多。
所以最好是这两种输入输出方式结合着用,看具体情况使用。
但是cin和cout是真的好敲,多短啊qwq。
若要使用iostream 下行还需要using namespace std;这一句
命名空间:namespace 是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。
如果不加using namespace std;
在使用cin和cout时就需要写成 std::cin>>变量名;
因此using namespace std;可以帮我们少写这些复杂的代码。
#includeusing namespace std; int main() { cout<<"hello world"< 选择结构 接下来我们从一些简单的例题来学习一下基础的语法吧
|| && !
或 且 非
|| :一个为真则为真,全为假则为假
&&:全为真则为真,一个为假则为假
! :条件为真,运算后为假,反之。eg1. 判断一年是否为闰年。闰年的条件是:能被4整除但不能被100整除;
能被4整除,又能被400整除#includeint main() { int n; scanf("%d",&n); if(n%4==0&&n%100!=0||n%400==0)//n%4==0||(n%400==0&&n%100!=0) printf("%d为闰年",n); else printf("%d不为闰年",n); return 0; } 先来讲讲if语句
if(表达式) 语句 若表达式成立 为真则执行语句 否则跳过语句eg2.输入整数判断其是奇数还是偶数
#includeusing namespace std; int main() { int n; cin>>n; if(n%2==0)//能被2整除表示是偶数 否则是奇数 cout<<"此数字是偶数"; else cout<<"此数字是奇数"; return 0; } if和else这种选择结构是可以带{}的 }后面一定不能加分号
上面的代码更细致的写法是
if(n%2==0)
{
cout<<“此数字是偶数”;
}
else
{
cout<<“此数字是奇数”;
}如果不打大括号,那么这种语句就只能影响其语句的下一行
后面的for循环 ,while循环也是如此eg3.三个数排序,输入三个数,输出为升序
#includeusing namespace std; int main() { int a,b,c,t; cin>>a>>b>>c; if(a>b) {t=a;a=b;b=t;} if(a>c) t=a,a=c,c=t; if(b>c) {t=b;b=c;c=t;} cout< 这里的代码三个if语句之间是并列的结构,只要满足if的条件,就会执行
if(…) …
if(…) …
if(…) …
和
if(…) …
else if() …
else …
上下部分的区别就是 上部分并列关系中只要满足if的条件那其对应的语句就会执行而下半部分三个语句中只会有一个执行,如果if里满足了 else if else都不会再去判断。上图的第一个if和第二个if里语句中的作用是一样的。
因为语句中三个部分都是一样的,都是赋值的操作,所以可以用逗号运算符之间隔开,不需要大括号包起来。这三个部分组成一个语句,分号表示结束一个语句。switch语句:
循环结构
switch(表达式)
{
case 常量1 :语句 1;break;
case 常量2 :语句 2;break;
…(以此类推)
default : 语句;
}
这也是选择结构的一种while语句:
while(表达式)
{
…
}while和if有些相似 也是括号内的表达式如果成立,则进入循环,不成立则跳过
eg.4 计算1+2+3+…+100
#includeusing namespace std; int main() { int res=0;//从0开始计数求和 int t=1;//从1开始加到100 while(t<=100) { res+=t; t++; } cout< t++就等于t=t+1
res+=t 累加(res初始为0)
res*=t 累乘(res初始为1)eg.5 利用公式求PI/4=1-1/3+1/5-1/7+… 求PI的近似值,直到最后一项绝对值小于10^-4为止
#include#include //math库中有abs绝对值 fabs 浮点型的绝对值 using namespace std; int main() { int f=1;//控制正负 int a=1;//a分母 double res=1; double s=0; while(fabs(res)>=1e-4) { s+=res; f=-f; a+=2; res=(double)f/a; } cout< 需要提一下的是c语言中头文件一般都是以.h结束
而c++中头文件不需要以.h结束如: c --> #include#include #include c++ -->#include #include #include for语句:
for(表达式1;表达式2;表达式3)
{
循环体;
}计算1+2+…+100
#includeusing namespace std; int main() { int res=0; int i; for(i=1;i<=100;i++) { res+=i; } cout< //声明变量可以写在for里 for和选择结构一样 有{} 如果语句只有一句 //则可以不写大括号 int res=0; for(int i=1;i<=100;i++) res+=i; cout<eg.6 输入5个学生成绩,输出其中最低分
#includeusing namespace std; int main() { double x,min=1000; for(int i=1;i<=5;i++) { cin>>x; //如果当前输入的数据比历史最小值小 就更新min为更小的值 if(x min初始化时要初始的比所有输入数据都大。
eg.7 计算n!
#includeusing namespace std; int main() { int ans=1,n; cin>>n; for(int i=1;i<=n;i++) { ans*=i; } cout< eg.8 输出斐波那契数列 1,1,2,3,5,8…的前n项,要求每五个一行
#include#include using namespace std; int main() { int f1,f2,n,ans; cin>>n; f1=f2=1; printf("%3d %3d ",f1,f2); for(int i=3;i<=n;i++) { ans=f1+f2; f1=f2; f2=ans; printf("%3d ",ans); if(i%5==0) cout< 这题就展现了printf的好处,可以很简单的控制格式,%3d向右对齐,用cout写就会很麻烦。
eg.9 九九乘法表
#include#include using namespace std; int main() { for(int i=1;i<=9;i++) { for(int j=1;j<=i;j++) printf("%3d*%d=%2d",i,j,i*j); cout< 然后我们来讲讲break和continue
break一般用在选择结构和循环结构。
break是直接终止此判断,或直接终止当前层的循环
continue是跳过当前层的本次循环我们用代码来理解
int i=0; if(i<100) { i++; if(i==25) break; cout<int i=0; if(i<=100) { i++; if(i==25) continue; cout<和上面的不同之处在于当i自加到25时,continue语句会让本次循环跳过,就直接进入下次循环,不会执行cout,所以最后输出的时1 到24,26到100。不会打印25。
eg.10 输出100-200间不能被3整除的数
#includeusing namespace std; int main() { for(int i=100;i<=200;i++) { if(i%3==0) continue;//只要被三整除了 就直接跳过此次循环 不打印数 cout< 那么来总结一下我们这次所学的内容
空间转换1T=1024GB
数据类型
1GB=1024MB
1MB=1024KB
1KB=1024B(byte字节)
1B=8bit(比特位)int char double bool
输入输出
%d %c %lfc :scanf("%d",&a); printf("%d",a);
c++:cin>>a; cout< 选择结构|| && !
或 且 非if(语句)
…;
if: 若语句为真执行 下一句(语句后一定加;) 或者下一个用{}包起来的程序块,注意}后面不加;if(语句)
循环结构
{
…;
…;
}
else if(语句)
{
…;
}
else
{
…;
}
{}里面的每一个语句一定要带;
反括号后不能加;
if , if else ,else 语句后不加;while(语句)
{
…;
}
和if差不多,语句为真进循环,代码块中顺序运行,从上至下依次运行,为假则跳过这个代码块for(语句1;语句2;语句3)
{
…;
}for的语句1一般是赋的初始值
语句2是判断语句,为真则进入for循环的代码块,否则就跳过代码块
语句3是让改变的值,一般是让语句1的初始值改变例:for(i=0;i<5;i++) 这句话意思就是循环五次
for语句的运行规则是 先执行语句1,然后判断语句2是否成立,
成立就进入代码块…; 然后执行语句3;然后下一次循环从语句2开始,
判断是否成立,然后执行代码块,然后执行语句3,再进行循环。语句1->语句2->代码块->语句3->语句2->代码块->语句3…
反之语句1 就一开始执行依次 后面全都是语句2 代码块 语句3的循环了如果判断语句不成立就直接跳过。
for括号中有三个语句,有两个; 一定不能打成, for语句后面没有; 可以加{}



