变量类型 变量名 = 初值;
int a = 0;
格式:(新类型名)变量名
double r = 12.35;
printf("%d\n",(int)r);
//宏定义,在main函数之前定义,不加分号,定义的标志符pi在全局值都为3.14
#define pi 3.14
//const常量,同宏定义一样,一旦定义好,其值就无法改变。
//一般定义常量值推荐const定义。
const double pi = 3.14;
#include <stdio.h>
#define ADD(a,b) (a+b)
int main()
{
printf("%d\n",ADD(3,2));
return 0;
}
#include <stdio.h>
int main()
{
int a=5,b=4;
float c = 5.0;
double d = 6.0;
printf("%d %f %d",a/b,c/b,a%b);
return 0;
}
运行结果:
1 1.250000 1
#include <stdio.h>
int main()
{
int a=1,b=1,n1,n2;
n1 = a++;
n2 = ++b;
printf("%d %d\n",n1,a);
printf("%d %d\n",n2,b);
}
运算结果:
1 2
2 2
格式 A?B:C
其含义是,如果A为真则执行并返回B的结果,A为假则执行并返回C的结果。
#include <stdio.h>
int main()
{
int a=3,b=5;
int c = a>b?7:11;
printf("%d\n",c);
return 0;
}
运算结果:
11
const int INF = (1<<30)-1;
const int INF = 0x3fffffff;
int n = 0;
scanf("%d",&n);
注意:&为取地址运算符,在变量定义之后,就会在计算机内存中分配一块空间给这个变量,除了char数组不加&之外,其他变量类型在scanf中都要加上取地址运算符&。char数组本身就代表这个数组第一个元素的地址,所以不需要加&。
数据类型 | 格式符 | 举 例 |
---|---|---|
int | %d | scanf("%d",&n) |
float | %f | scanf("%f",&n) |
double | %lf | scanf("%lf",&n) |
long long | %lld | scanf("%lld",&n) |
char | %c | scanf("%c",&n) |
字符串(char数组) | %s | scanf("%s",str) |
记住:字符数组使用%s格式读入时以空格跟换行为读入结束的标志。
#include <stdio.h>
int main()
{
char str[10];
scanf("%s",str);
printf("%s",str);
return 0;
}
//输入数据
abcd efgh
//输出数据
abcd
记住:printf中的float和double输出格式都是%f,float精度比较低,书中推荐使用double类型;下面例子中两个float比较大的数相乘,得到的数在整数位就已经不准了,所以在有效位超过7位的数选择double类型计算。
#include <stdio.h>
int main()
{
float f1 = 8765.4,f2 = 8765.4;
double d1 = 8765.4,d2 = 8765.4;
printf("%f\n%f\n",f1*f2,d1*d2);
return 0;
}
输出结果:
76832244.007969
76832237.160000
#include <stdio.h>
typedef long long LL;
int main()
{
LL a = 123456789012345LL, b = 234567890123456LL;
return 0;
}
//break示例
#include <stdio.h>
int main()
{
int n,sum = 0;
for(int i = 1;i<=100;i++)
{
sum += i;
if(sum>=2000) break;
}
return 0;
}
//continue示例
#include <stdio.h>
int main()
{
int sum =0;
for(int i = 1;i<=5;i++)
{
if(i%2==1) continue;
sum += i;
}
printf("sum = %d\n",sum);
return 0;
}
输出结果:sum = 6
数组是把相同数据类型的变量组合在一起产生的数据集合(容器),数组的每个变量地址是连续的。
注意:C99标准之前,数组大小必须是整数常量,不可以是变量;C99之后数组大小可以是变量。
1)int a[10] = {0};
2)int a[10] = {};
3) int a[5] = {};
memset(a,0,sizeof(a));
#include
int main()
{
int a[10] = {3,1,4,5,2};
for(int i = 0;i < 5 - 1;i++)
{
for(int j=0;j<5-i-1;j++)
{
if(a[j]>a[j+1])
{
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
for(int i= 0;i<5;i++)
{
printf("%d ",a[i]);
}
return 0;
}
#include <stdio.h>
void change(int x)
{
x = x + 2;
printf("%d\n",x);
}
int main()
{
int x = 1;
change(x);
printf("%d\n",x);
return 0;
}
运行结果:
3
1
(2)数组参数
#include <stdio.h>
void change(int a[],int b[][5])
{
a[0] = 1;
a[1] = 3;
a[2] = 5;
b[0][0] = 1;
}
int main()
{
int a[3] = {0};
int b[5][5] = {0};
change(a,b);
for(int i=0;i<3;i++)
{
printf("%d\n",a[i]);
}
return 0;
}
运行结果:
1
3
5
#include <stdio.h>
int f(int n)
{
if(n == 0) return 1;
else return f(n-1)*n;
}
int main()
{
int n = 6;
printf("%d\n",f(n));
return 0;
}
运行结果:
720
#include <stdio.h>
int main()
{
int a = 1;
printf("%d,%d\n",&a,a);
return 0;
}
运算结果:
648728,1
int* p;
double* p;
char* p;
当存在多个同类型指针变量时如下定义:
//三个都是指针变量
int *p1,*p2,*p3;
//只有第一个p1是指针变量,p2、p3是int类型
int* p1,p2,p3;
//三个都是指针变量
#include <stdio.h>
int main()
{
int a;
int* p = &a;
*p = 233;
//
printf("%d,%d,%d,%d\n",*p,a,p,&a);
return 0;
}
输出结果:
233,233,6487620,6487620
#include <stdio.h>
void swap(int a,int b)
{
int temp = a;
a = b;
b = temp;
}
int main()
{
int a=1,b=2;
swap(a,b);
printf("a = %d,b = %d\n",a,b);
return 0;
}
输出结果:
a = 1,b = 2
2)使用指针函数参数
#include <stdio.h>
void swap(int* a,int* b)
{
int temp = *a;
*a = *b;
*b = temp;
}
int main()
{
int a=1,b=2;
int *p1 = &a,*p2 = &b;
swap(p1,p2);
printf("a = %d,b = %d\n",a,b);
return 0;
}
输出结果:
a = 2,b = 1
#include <stdio.h>
void change(int &x)
{
x = 2;
}
int main()
{
int a = 1;
change(a);
printf("%d\n",a);
return 0;
}
输出结果:
2
#include <stdio.h>
struct Point
{
int x,y;
//不经过初始化定义构造函数
Point(){}
//提供x,y的初始化构造函数
Point(int _x,int _y):x(_x),y(_y){}
}pt[10];
int main()
{
int num = 0;
for(int i = 0;i<=3;i++)
{
for(int j=0;j<=3;j++)
{
pt[num++]= Point(i,j);
}
}
for(int i=0;i<num;i++)
{
printf("%d,%d\n",pt[i].x,pt[i].y);
}
return 0;
}
运行结果:
0,0
0,1
0,2
0,3
1,0
1,1
1,2
1,3
2,0
2,1
2,2
2,3
3,0
3,1
3,2
3,3
C++的输入输出函数,不需要像C语言scanf与printf那样指定输入输出格式,与不需要取地址运算符&,比较简便。