C基础
printf()输出函数,scanf()输入函数,出现在scanf("请输入%d,%d",&a&b),“”中的东西一定都要出现
#include<stdio.h>//heading标准输入输出头文件
void main()// 返回类型 函数名(形式参数)
{
printf("HELLOWORLD!\n");//语句都是以分号结尾
//有具体的返回值,就一定在函数体内有return
}
//单行注释,/* */多行注释
//void 表示空类型,可理解为不返回任何数据
常量
不会变的就是常量
变量
变量就是可变的,直接写在程序里的是直接量
变量必须先定义,后使用
变量初始化,int i=0;就是初始化,变量等于初始值,一行也可定义多个变量,一旦初始化就不能再修改
c99可以在代码任意位置定义变量,ANSIC只能在代码开头的地方定义变量
数据类型
整数的运算只能是整数%d,浮点数就是有小数点的数%f,小数点是浮动的,当浮点数和整数放到一起运算时,用double会将整数转换成浮点数,然后进行浮点数运算%lf
PI符号常量,以标识符的形式出现,const修饰符,表示这个变量的值
整数:char,short,int,long,longlong
浮点数:float,double,long double
范围:char<short<int<float<double
表达形式:二进制(补码),编码
float单精度浮点数,浮点数常量一般默认存储为双精度浮点数double
1byte=8bit byte,1bit1个位,只能存放1个1或1个0
sizeof()是静态运算符,sizeof(int)
变量值在存储单元中都是以补码形式存储的
标识符
用来标识变量,常量,函数等的名称(文件的名称),标识符应该由字母,数字,下划线_组成,而且首字符一定不能是数字
int,void....关键词,预定义标识符不能作为变量名
赋值
将一个表达式赋值给一个变量,定义时,不可连续赋值,定义完成后,可以连续赋值
int x,y;
x=y=10;//是对的
不可以int x=y=10;
自加,自减
++在前先加后用,++在后先用后加
++递增,--递减,b=++a,a的值+1赋给b,b=a++,a赋给b再+1
运算符
- 算数运算符
优先级也就是数学中四则运算的优先级,先加减,后乘除
- 关系运算符
关系运算符比算数运算符低,连续运算符,从左向右算
=是赋值,==才是等于
- 逻辑运算符
字符型
字符型是按其代码形式存储的
#include<stdio.h>
void main()
{
/*1 char ch1='M';//ASCLL对照表中m为109
char ch2;
ch2=ch1+('a'-'A');
printf("%d\n",ch2);
printf("%c\n",ch2);
2 int x=6;
x-=x*=x+x;//(x=x*3)
printf("%d\n",x);
3 int x=15;
printf("x=%d\n",++x);//x=16,自加++,x=x+1先使用,再自加,x=x+1先自加,后使用;x--/--x,x=x-1,x=x-1(同加)
printf("x=%d\n",x++);//x=16
printf("x=%d\n",x);//x=17*/
int a=1,b=2;
b=a++*++b;
printf("%d,%d\n",a,b);
}
#include<stdio.h>
void main()
{
double a=5.8;
int s=5;
char ch='a';
//printf("%d\n",sizeof(int));//sizeof(),统计某个类型(或者变量)在内存中所占字节数
printf("%d,%d\n",sizeof(a+s),sizeof(s+ch));
}
#include<stdio.h>//包含标准输入输出头文件
//#编译预处理命令:1.文件包含 2.宏定义 3.条件编译
int main ()
//int返回类型 main函数名 ()有东西的话叫形式参数
//int main()一般叫函数首部或函数头
// 主函数:函数名为main的函数
//1.C程序执行的入口点 ,都是主函数 (一个C语言程序可以有多个函数组成,但有且只有一个主函数)
//2.C的代码严格区分大小写
{
int a,b,sum;//a,b,sum变量,变量相当于在内存中开出三个盒子,都用于存放整数,大小一样 ,第一个盒子叫a,第二个盒子叫b,第三个盒子叫sum
//专业说法,开辟出三个四字节大小的空间 1字节=8位 32位表示整数
//int整数类型
//float单精度浮点数
//double双精度浮点数
a=123;//123常量 = 赋值
//赋值将符号右侧的内容放到左边的变量所在的内存单元当中去
//a赋值为123或将123赋值给a
b=456;
sum=a+b;
printf("a=%d\n",a);//%d占位符(整数)\n回车
//格式符号:d,f以带符号的十进制形式输出整数(正数不输出符号)
//c以字符形式输出,只输出一个字符
//s输出字符串
//f以小数形式输出单,双精度数,隐含输出6位小数/
//o以八进制无符号形式输出整数(不输出前导符0)
//x,X 以十六进制无符号形式输出整数(不输出前导符0x)用x则输出十六进制数的a~f时以小写形式输出用X时则以大写字母输出
//u 以无符号十进制形式输出整数
//e,E 以指数形式输出实数用e时指数以“e”表示(如12e+02)用E时指数以“E”表示(如12E+02)
//g,G 选用%或%e格式中输出宽度较短的一种格式,不输出无意义的0。用G时.若以指数形式输出。则指数以大写表示
printf("b=%d\n",b);
printf ("sum= %d\n",sum);
return 0;
} //{}里叫函数体
ASCII码
if语句
if如果条件成立,则执行循环体,不成立则输出其他
if-else语句
#include <stdio.h>
void main()
{
int x;
int a;
scanf("%d",&x);
if(x>5){
a=3;
}else{
a=4;
}
printf("%d\n",a);
求三个数中的最大值
#include <stdio.h>
void main()
{
int x,y,z;
int max;
printf("请输入三个整数,用空格分隔:");
scanf("%d%d%d",&x,&y,&z);
if(x>y)
max=x;
else
max=y;
if(max<z)
max=z;
printf("最大值为:%d\n",max);
}
if-else if语句
if写的不是关系,说明,是步骤,所以用else if
#include <stdio.h>
void main()
{
int x;
int a;
scanf("%d",&x);
if(x>5){
a=3;
}else if(x<=5){
a=4;
}
printf("%d\n",a);
}
if-else if-else语句
#include <stdio.h>
void main()
{
int x;
int a;
scanf("%d",&x);
if(x>5){
a=3;
}else if(x<5){
a=4;
}else{
a=8;
}
printf("%d\n",a);
}
swith-casse语句
case是常量表达式语句
break:结束整个循环,跳出循环体,执行循环之后的语句
continue:结束本次循环,接着执行下一次循环
#include <stdio.h>
void main()
{
int num;
printf("输入:");
scanf("%d",&num);
switch(num){
case 60:
;
printf("你好\n");
break;
case 70:
printf("world\n");
break;
default:
printf("123\n");
break;
}
}
whlie循环
当条件满足时,先判断,后进入循环体,可能一次都不做循环
#include <stdio.h>
void main()
{
int i;
int j=0;
scanf("%d",&i);
while(i<10){
j++;
i=j+1;
printf("i=%d,j=%d\n",i,j);
}
printf("%d\n",j);
}
do-while循环
先进循环体,再判断条件,比while少做一次循环
for循环
先判断,后循环,for==while可相互转化
1+2+3+,,,+100求和
#include <stdio.h>
void main()
{
int i;
int sum=0;
for(i=1;i<=100;i++)
sum=i+sum;
printf("%d",sum);
}
for嵌套
#include <stdio.h>
void main()
{
int i,j;
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
printf(" ");
for(j=0;j<5;j++)
printf("*");
printf("\n");
}
}
#include<stdio.h>
void main()
{
/* int n,sum=0;
1. for(n=1;n<=100;n++)//循环首部 for(表达式1:循环变量初始化,表达式2:判断条件是否成立
//表达式3:修改循环变量的值,确保循环能够结束)1到2,2到3,(Y)3回到2循环,(N)输出
if(n%5==0)//余数为0
sum+=n;//sum=sum+累加求和5+10+15+20...+100
//循环体 语句(块)条件成立执行循环体
2. for(n=0;n<=100;n++)
sum=sum+n;//0+0+1+2+3...+100
3. int n=0,sum=0;
for(;;)
{
if(n>100)break;
sum=sum+n;
n=n+1;
}
printf("%d,%d\n",sum,n);//1050,101;5050,101;5050,101
4. int i,k;
for(i=0,k=-1;k=1;k++)//第三语句,k=1无数次,k一次
printf("*****");*/
int y=9;
for(;y>0;y=y-1)//y--,y=y-1
if(y%3==0)
printf("%d",--y);//852
}
函数的参数传递
#include<stdio.h>
int main()//void main()是不需要写return那行,int main()需要写 return
{
int max(int x,int y);//函数声明
int a,b,c;
scanf("%d,%d",&a,&b);//scanf输入函数 ""中是输入格式 &取地址符(也叫and运算符)
//输入两个整数,两个%d前填4,5,把4放到a的地址,5放到b的地址
c=max(a,b);//c赋值max(a,b)
printf("max=%d\n",c);
return 0;
}
//求两个函数中较大者的max函数
int max(int x,int y)//定义max函数
//函数调用,把8调用到13,a-x,b-y参数传递:实际参数传递给形式参数
//a=4,b=5则int x=4 int y=5
{
int z;
if(x>y)//if判断真假,真执行if z=x,假执行else x=y
//x=4,y=5,4>5,不成立,条件为假
z=x;
else
z=y;//所以 z=y=5
return(z);//z返回到8,c赋值为z里面的值,z=y=b=5
}
数组
int a[10],<类型>变量名称[元素数量],定义数组下标必须为整形常量或整形常量表达式
每个单元就是一个变量,可以出现在赋值的左边或右边a[2]=a[1]+6
一维数组
int a[6]=[1,2,3,4,5,6]
二维数组
int a[6]b[3]=[1,2,3,4,5,6,]
字符串
指针
文件
#include"no2.c"
main()
{add(29,30);
``````
}//no1.c
int add(inta,intb)
{
return a+b;
}//no.2
(后面补充)