目录
最小程序
最基础写法
#include <stdio.h>
int main()
{
printf("嘻嘻嘻 \n"); //printf()表示输出,需要头文件stdio.h
return 0;
}
下面代码探究没有返回值和返回值除了0的情况,前者将主函数设置成void,后者在不改变int的情况下返回值甚至可以写不是整数的值。
#include <stdio.h>
void main()//相当于设置没有返回值
{
printf("xiaoheizhenheri");
}
#include <stdio.h>
int main()
{
printf("xiaoher");
return 0.1;
}
整数浮点类型初始化
利用sizeof()可求所占空间
#include <stdio.h>
int main()
{
int age = 23;
long a =1;
short b =2;
long long c =3;
printf("%d\n",sizeof(age));
printf("%d\n",sizeof(int));
printf("%d\n",sizeof(long));
printf("%d\n",sizeof(long long));
//sizeof(数据类型)表示字符长度 或sizeof(age) sizeof age
return 0;
}
单精度及双精度浮点数初始化及占据空间。
#include <stdio.h>
int main()
{
float a = 4.5;//单精度数据类型
double b=2.5;//双精度数据类型
printf("%f\n",a);
printf("%fl\n",b);
printf("%d\n",sizeof(a));//单精度运行结果4
printf("%d\n",sizeof(b));//双精度运行结果8
return 0;
}
字符及字符串类型初始化
字符
单引号,输出用%c .
若使用%d,打印出来的是它的ASCII码值。
#include <stdio.h>
int main()
{
char a = '1';
printf("%d",a);
printf("%c",a);
return 0;
}
试试看咯
字符串
双引号
第一种是用指针,第二三种就是正常的定义。
#include<stdio.h>
int main()
{
const char* c;
char a[6]="12345";
char b[]="12345";
c="12345";
printf("%s\n%s\n%s\n",a,b,c);
return 0;
}
注意字符串空间占用的时候,会再申请一个空间\0,所以表面上a内部只有一个5个字符,实际上其作为字符串有6份空间。我们把其长度输出,得到6,如下图。
另外注意要输出字符串的时候用的是“%s” 。
常量设置
const
const int a =1;
define +常量名 + 值或算式
define ZZQ 120
define ZZQ 100 + 120
注意,代码末尾不需要加分号。
并且,define是符号常量,如果采用第二种定义的话,是同替换而不是值的替换,具体看下面的例子。
#include <stdio.h>
#define IP 6+2 //符号常量 同替换不包括计算
int c = 4; //全局变量 而下面的只能在main函数中执行
int main()
{
const int b =48;//修饰常量
printf("%d",b);
printf("%d",IP*IP);//输出结果为20
return 0;
}
注意define写在什么位置。
IP * IP不是(6+2)*(6+2)即值替换,而是6+2*6+2,即同等替换,答案是20.
运算符
加减运算符就不用说了,谈一谈高级一点的
整除【/】:只有至少有一边是浮点数才能得到浮点数
#include <stdio.h>
int main()
{
float c;
c=5/2;//dedaodshi整数
c=5.0/2;//得到的才是浮点数
return 0;
}
取余【%】:只能用于整数
输入输出函数
scanf() printf()
printf前面都在用,先不提了,讲下scanf.也是在<stdio.h>里面的。注意取地址符号&,其中%d是因为a是整数类型,其他类型可参考printf。
int a;
scanf("%d",&a)
是严格的按格式输入的函数。注意到中间有一个空格,输入的时候必须按整数空格整数输入
#include<stdio.h>
int main()
{
int a,b,c;
scanf("%d %d",&a,&b);
c=a+b;
printf("%d",c);
return 0;
}
getchar 和 putchar
#include<stdio.h>
int main()
{
int a,b,c;
a=getchar();
b=getchar();
c=getchar();
putchar(a);
putchar(b);
putchar(c);
putchar('\n');
return 0;
}
#include <stdio.h>
int main()
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
printf("%d%d%d\n",a,b,c);
return 0;
}
上面两个代码完成等同功能。putchar 和getchar只能一次输出一个字符,空格也需要单独输出。但不用另外设置一些参数,有利有弊。
分支结构
if-else
if(表达式) {语句块}
else{语句块}
当if语句嵌套时,判断else是哪个if下的,重点看距离这个else的远近。它是跟随最近的if的。与python不同,它不考虑缩进。
当语句块有多条代码,需要用大括号括起来。只有一条代码则可省略
#include <stdio.h>
int main()
{
int a,b;
scanf("%d",&a);
scanf("%d",&b);
if (a==b)
printf("ab相等");
else
{
if (a>b)
printf("a大");
else
printf("b大");
}
return 0;
}
简洁表达式
条件?表达式1:表达式2;
两个表达式中间式冒号隔开。表达式1相当于if下的语句。
if (a<b) min=a;
else min=b;
min = (a<b)?a:b;
上面两个代码等价。
switch语句
(用于表达式值为整数或字符类型)
swich(表达式)
{
case 常量1:语句1
case 常量2:语句2
default:语句n
}
可以设很多个case,一旦满足条件,则这行以后的代码都执行,例如:
#include <stdio.h>
int main()
{
int a,b;
scanf("%d%d",&a,&b);
switch(a + b)
{
case 0:printf("等于0");
case 1:printf("等于1");
case 2:printf("等于2");
default:printf("卖萌,人家只是幼儿园,要是前面答案都不对,我也不会,哭哭");
}
return 0;
}
输入0 1,也就是满足了case 1;则之后的语句皆输出
输入13 3,就是没有常量相等,则只执行default后面的语句
break
如果在swich里面用,就很方便像这样
要是每一句后面都加一个break,那就相当于只能走一条
注意break单独成一个语句,仔细观察里面的分号使用。
循环结构
while
while(表达式) 循环体
#include <stdio.h>
int main()
{
int i=0,sum=0;
while (i<10)
{
sum+= i;
i++;
}
printf("%d",sum);
return 0;
}
do-while
do
语句块
while(表达式);
注意分号。下面代码与上面的等价
#include <stdio.h>
int main()
{
int i=0,sum=0;
do
{
sum+= i;
i++;
}
while (i<10);
printf("%d",sum);
return 0;
}
for
for(表达式1;表达式2;表达式3)语句块
两数交换代码
//交换两个数
#include <stdio.h>
int main()
{
int a=1,b=2,t;
t=a;
a=b;
b=t;
printf("a=%d\nb=%d",a,b);
return 0;
}