------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一.数据类型和变量
1.变量的初始化
(1)int i=5;
(2)int i; i=5;
(3)int i; scanf("%d",&x);
2.常量
关键字:const
如:const floatPI=3.1415926;
定义了一个常量以后这个常量是不允许被改变的;
3.标准输入输出
使用输入输出函数是一定要包含头文件 #include<stdio.h>
(1)输出函数
printf(format string,data list);
format string :格式字符串
data list :数据列表可以是一个或多个数据,多个时要用“,”给隔开;
如:printf("%d\n%d",a,b);
几个常用的格式字符:
%d(输出十进制整型数据)
%hd(输出十进制短整型数据)
%ld(输出十进制长整型数据)
%c(输出字符型数据)
%f(输出浮点型数据)
%f:默认输出六位小数,不够六位的时候小数位要补0,多于六位的时候四舍五入保留六位小数;
如:printf("%d\n%c\n%f",23,'a',4.23);
结果是:23
a
4.230000
(2)scanf(format string,address list);
address list :变量的地址
如
#include<stdio.h>
intmain()
{
int i;
float p;
scanf("%d%f",&i,&p);
printf("%d\n%f\n",i,p);
return 0;
}
从键盘上输入一个整型数据和一个浮点型数据,分别赋值给了i和p;
输入数据时候可以用空格,tab,回车来进行分隔,最后输入回车结束!!
4.枚举类型
关键字:enum
格式:enum名称{成员1,成员2,成员3....};
如:enum city{beijing,shanghai,guangzhou};
定义枚举类型的变量:
(1)可以声明枚举类型接着就定义枚举类型变量
如:enum city{beijing,shanghai,guangzhou}city1,city2;
(2)可以声明枚举类型以后在定义变量
如:enum city city1,city2;
(3)还可以不写名称直接定义枚举类型接着定义变量(不常用)
如:enum{beijing,shanghai,guangzhou} city1,city2;
5.数组
(1)一维数组
在内存中分配连续的一组存储空间,存放相同数据类型的数据;
格式:数据类型数组名 [数组的长度];
定义数组是必须指定数组的长度
数组的下表是从0开始的
如:int a[5];
数组的初始化:int a[]={1,2,3,4,5};(方括号中的长度可以省略不写)
数组元素的赋值:
如:for(i=0;i<5;i++)a[i]=i;
还可以为数组中的元素逐个赋值;
(2)二维数组
如:int a[3][4]表示一个三行四列的二维数组;
赋值:
for(inti=0;i<3;i++)
{
for(intj=0;j<4;j++)
a[i][j]=3*i+j;
}
二.操作符和表达式
1.算术运算符
+,-,*,/,%(取余运算符)
++,--:只能对变量进行运算
2.赋值运算符
= ,-=,+=,*=,/=,%=;
3.逻辑运算符
&&,||,!
先算前面的表达式的值,若前面的表达式的结果已经确定了整个表达式的结果,后面的表达式就不用计算了
4.sizeof();
5.if else 语句
1.if语句和elseif语句的区别
(1)
#include<stdio.h>
int main()
{
int grade;
char letter_grade;
printf("Please input a mark out of100:");
scanf("%d",&grade);
if(grade<=100 &&grade>=80)
{
letter_grade='A';
}
if(grade<80 && grade>=70)
{
letter_grade='B';
}
if(grade<70 && grade>=60)
{
letter_grade='C';
}
if(grade<60 && grade>=50)
{
letter_grade='D';
}
if(grade<50 && grade>=0)
{
letter_grade='F';
}
if(grade<0)
{
printf("输入错误!!\n");
}
printf("A mark of %d is an%c\n",grade,letter_grade);
return 0;
}
(2)
#include<stdio.h>
int main()
{
int grade;
char letter_grade;
//printf("Please input a mark outof 100:");
//scanf("%d",&grade);
//输入一个满足条件的grade,如果不满足条件要一直输入,直到满足条件为止
do
{
printf("请输入一个成绩(0~100之间的数):");
scanf("%d",&grade);
}while( grade<0 || grade>100 );
if(grade>=80)
{
letter_grade='A';
}
else if(grade>=70)
{
letter_grade='B';
}
else if(grade>=60)
{
letter_grade='C';
}
else if(grade>=50)
{
letter_grade='D';
}
else
{
letter_grade='F';
}
if(grade<=100 &&grade>=0)
{
printf("A mark of %d is an%c\n",grade,letter_grade);
}
return 0;
}
在程序1中如果输入的是90,那么没一个if语句都要执行一遍,而在程序2中如果输入90则执行第二个elseif语句
2.开关语句switch
格式:switch(表达式)
{
case 常量表达式:语句1;break;
case 常量表达式:语句2;break;
....
default:语句n+1;
}
#include <stdio.h>
int main()
{
char c;
printf("Enter your letter gradeand press return:");
scanf("%c",&c);
switch(c)
{
case 'A':
printf("Your mark isbetween 80 and 100\n");
break;
case 'B':
printf("Your mark isbetween 70 and 79\n");
break;
case 'C':
printf("Your mark isbetween 60 and 69\n");
break;
case 'D':
printf("Your mark is between50 and 59\n");
break;
case 'F':
printf("grade is below50\n");
break;
default:
printf("You have typed inan illegal letter\n");
}
return 0;
}
如果case后面没有break;的话,程序将一直执行知道遇到break,或者到了程序的末尾
3.循环
(1)for():
格式:for(expr1;expr2;expr3)statement
如:
#include<stdio.h>
int main()
{
int i;
for(i=0;i<3;i++)
{
printf("count=%d\n",i);
}
return 0;
}
输出的结果为:
count=0
count=1
count=2
(2)while()循环
格式:while(条件)
{
语句;
}
#include<stdio.h>
int main()
{
int count=0;//统计输入的整数的个数
int sum=0;//求和
int a;//输入的整数
printf("请输入若干个整数,输入负数结束!\n");
printf("请输入第%d个整数:",count+1);
scanf("%d",&a);
while( a>=0 )
{
sum=sum+a;
count++;
printf("请输入第%d个整数:",count+1);
scanf("%d",&a);
}
if(count!=0)
{
printf("一共输入了%d个整数\n",count);
printf("这%d个整数的平均值为%f\n",count,sum/(double)count);
}
else
printf("你没有输入整数!");
return 0;
}
(3)do while 语句和while循环语句的区别:
while循环是先判断条件,如果满足则执行循环
do while是先循环一次,在判断条件,如果不满足的话,退出循环
while循环至少执行0次循环,而do while语句至少执行一次循环
(4)continue :终止本次循环,进行下一次循环
#include<stdio.h>
int main()
{
int i=0;
int a[3];
int num;
/**
*要求输入10~20之间的整数,将这个整数放到数组a中,如果不是这个范围的数据的话,将提示重新输入
**/
while(i<3)
{
printf("请输入第%d个数:",i+1);
scanf("%d",&num);
if(num>20||num<10)
{
printf("输入错误,请重新输入(输入10~20之间的整数)!!\n");
continue;//返回到while循环的开始部分,后面的不再执行
}
a[i]=num;
i++;
}
printf("\n数组a的数据为:\n");
for(i=0;i<3;i++)
{
printf("a[%d]=%d\n",i,a[i]);
}
return 0;
}
break:结束循环
#include<stdio.h>
int main()
{
//输入一个整数,计算这个整数的阶乘
int n;
int a=1;
int i;
printf("请输入一个整数:");
scanf("%d",&n);
for(i=1;;i++)
{
a*=i;
if(i==n)
{
break;
}
}
printf("%d!=%d\n",n,a);
return 0;
}
6.强制类型转换
float i=0; int j=(int)i;
7.运算符优先级从高到低的排列顺序:
(1):!
(2):算术运算符
(3):关系运算符
(4):逻辑运算符
(5):赋值运算符
三.函数
格式:
返回值类型函数名(形参表)
如:double area (double length,doublewidth);
函数要先声明在调用。
括号中的形参表中形参的名称是可以省略的
如:double area (double,double)
但是实现函数的时候,一定要加上形参的名称
#include<stdio.h>
//求三角形的面积
doublearea(double width,double height)
{
double area;
area=width*height/2;
return area;
}
intmain()
{
double w,h;
printf("请输入底的长度:");
scanf("%lf",&w);
printf("请输入高的长度:");
scanf("%lf",&h);
printf("这个三角形的面积是%.2f\n",area(w,h));
return 0;
}
//求两个数的最大公约数:
#include<stdio.h>
//求两个数的最大公约数
//先找到两个数中最小的一个数min,
//最大公约数可能是这个最小的数min到1之间的数
//通过循环从大到小一次判断这几个数哪个是最大公约数
//如果a,b能够整除i,则i即为最大公约数
intzdgys(int a,int b)
{
int i;
int min=a;
if(min>b)
{
min=b;
}
for(i=min;i>=1;i--)
{
if(a%i==0 && b%i==0)
{
break;
}
}
return i;
}
intmain()
{
int a,b;
printf("请输入两个数:\n");
scanf("%d%d",&a,&b);
printf("%d和%d的最大公约数是%d\n",a,b,zdgys(a,b));
return 0;
}