编辑(.c) 编译(obj) 链接(exe) 运行
int main(){ printf("hello word"); return 0;} 只能有字母、数字、下划线组成
数字不能开头
严格区分大小写
不能用关键字
被C语言本身使用的那些字,比如:include,int,return
包含基本(简单)数据类型、复合(复杂、构造)数据类型
基本数据类型包括整形(整数)、浮点型(实数)、字符型(单个字符)。
6个:
有符号数:short(2)、int(2/4)、long(4)
无符号数:unsigned short、unsigned int、unsigned log
bit/b 1byte=8b 1KB=1024byte 1GB=1024MB 1TB=1024GB
单精度:float(4)
双精度:double(8)
char(1)
十进制、八进制、十六进制三种表示方法
100 0100 0x100
例如:048是错误八进制是0-7
0x23EF是十六进制
十进制、指数形式两张表示方法
表示单个字符,使用‘’单引号界定
转译字符:回车‘/n’ Tab制表符位'/t' '/'
表示一串字符,使用“”双引号界定
“Hello Word”
#define 符号 常量
定义变量的格式:
数据类型 变量名 [=初始]
int a;float max;char ch='a';变量的三要素:变量的数据类型、变量的名、变量的值
可以同时定义多个变量
int a,b,c;int a,b=5,c;int a=b=c=5;/*错误的*/ => int a,b,c; a=b=c=5;
符号、运算规则、使用规则
符号:+ - * / % ++ --
运算规则:%求模运算(取余数)5%3(=2)
++和--:自增自减,自己+1或自己-1;++/--的运算规则和所在位置有关系
int b=2;a = b++;/*先参加运算,后自增结果a=2 b=3*/a = ++b;/*先自增,后运算 a=3 b=3*/使用规则:
/:如果两个操作数都是整形的,结果是整形的(商);只要有一个操作数是浮点型的,那么结果就是浮点型的。
%:两个操作数都必须是整形的
符号:=
运算规则:把=右边的数据赋值给左边的变量
符号:> >= < <= == !=
使用规则:关系表达式的值是逻辑值(true/false),但是C语言是不是没有布尔类型,因此C语言规定true=1、false=0表示
例如:5>6(结果为0) 4!=5(结果为1)
符号:&(&&) |(||) !
运算规则:true & true = true;true & false=false;false & true=false;false & fales = false;
true | true =true; true | false = true; false | true = true; false | false = false
! true = false; !false = true;
使用规则:逻辑运算的操作应该是布尔类型,但是C语言没有布尔类型。C语言规定,非0或者非控制为true,0或空位false。
&&、||:短路与/或;当&&的第一个操作数为false将发生短路效应,即不再计算第2个操作数
三目运算符(3个操作数)
符号:? : 表达式1?表达式2:表达式3
运算规则:
if(表达式1){
表达式2;
}
else{
表达式3;
}
例如:int a=3,b=4,c; c=(a>b)?a:b; 结果c=4
二进制的运算
运算符:
| & | | | ~ | ^ | << | >>> | >>> |
|---|---|---|---|---|---|---|
| 按位与 | 按位或 | 按位求反 | 按位异或 | 按位左移 | 按位右移 | 按位算数右移 |
运算规则:
0&0=0;0&1=0;1&0=0;1&1=1
0|0=0;0|1=1;1|0=1;1|1=1
~0=1;~1=0
0^0=0;0^1=1;1^0=1;1^1=0
5<<2 0000010100
5>>2 0000000101
顺序结构、选择结构、循环结构
从上自下顺序执行每一条语句
printf("格式字符串",输出列表);
格式字符串:用""括起来
普通字符:原样输出
格式符:%+字母(%d-整数,%f-实数,%c-字符,%s-字符串)
输出列表:输出项之间用,号隔开
注意:输出列表中的输出项要一一对应前面的格式符(个数、类型、内容)
/*例如*/printf("area=%f",area);printf("length=%f,width=%f,area=%f",lenght,width,area);scanf("格式字符串",输出地址列表);
求地址运算符:&
格式字符串:用""括起来
普通字符:原样输入
格式符:%+字母(%d-整数,%f-实数,%c-字符,%s-字符串)
输入地址列表:用,号隔开
scanf("%f,%f",&length,&width);注意:多个数值类型数据输入的时候,如果没有指定分隔符,使用默认的分隔符(空格、回车、tab)
多个字符型数据输入的时候,如果没有指定分隔符,不需要使用默认的分个数,编译器会按照字符是的顺序自动接收
int main(){// float length,width,area;// scanf("%f%f",&length,&width);// area = length * width;// printf("area = %.2f",area); char ch1,ch2; scanf("%c,%c",&ch1,&ch2); printf("ch1=%c,ch2=%c",ch1,ch2); return 0;};xxxxxxxxxxint main(){ float r,l,s; printf("请输入圆的半径:"); scanf("%f",&r); l = 2 * PI * r; s = (r*r)*PI; printf("圆的周长=%.2f,圆的面积=%.2f",l,s); return 0;};xxxxxxxxxxint main(){ /*定义变量*/ int a1,n,d,an,sn; /*输入*/ printf("请输入首项和公差:"); scanf("%d%d",&a1,&d); n = 10; /*计算*/ an =a1+(n-1)*d; sn=n*a1+n*(n-1)*d/2; /*输出*/ printf("第十项的值为:%d,前十项的和:%d",an,sn); return 0;};
选择结构:根据某个条件的判断结果,来控制程序的流程。
实现选择结构:if语句、switch语句
当某个条件满足的时候,执行语句块a;不满足的时候不执行
xif(条件)
{
语块a;
};
当某个条件满足的时候,执行语块a,不满足的时候执行语块n
xxxxxxxxxxif(条件)
{
语块a;
}else{
语块b;
};
当条件1满足的时候,执行语块a;否则,条件2满足的时候,执行语块b,否则条件3满足的时候,执行语块c.....
xxxxxxxxxxif(条件){
语块a;
}elseif(条件2){
语块b;
}elseif(条件n){
语块n;
}switch(条件)
{
case 条件的结果1(整型):语句块1;
case 条件的结果2(整型):语句块2;
case 条件的结果3(整型):语句块3;
.......
case 条件的结果n(整型):语句块n;
default: 语句块n+1;
}
说明:
switch语句的条件和if语句的条件不一样
if语句的条件可以是任意表达式
switch只能是整形表达式,例如:int a; switch(a){....}
case是入口,按照整型表达式的结果进行顺序匹配。因此,case的值都是唯一的
break语句,作用是结束switch语句。break不是switch语句必须有的一部分。
default:如果整型表达式的结果和所有的case都无法匹配,那么就会执行default后面的语句块。
xxxxxxxxxxint main(){ int n,ge,shi,bai; printf("输入一个三位整数:"); scanf("%d",&n); ge = n % 10; shi = n / 10%10; bai = n / 100; printf("结尾是: %d %d %d",ge,shi,bai); return 0;};xxxxxxxxxxint main(){ int HH,SS,MM,time; printf("请输入总秒数"); scanf("%d",&time); HH = time / 3600; SS = time % 3600 / 60; MM = time % 3600 % 60; printf("转换后的为%d:%d:%d",HH,SS,MM); return 0;};xxxxxxxxxx
int main(){ char ch; printf("请输入一个字符:"); // scanf("%c",&ch); ch = getchar(); putchar(ch); printf("这个字符的ACSII为:%d",ch); return 0;};
xxxxxxxxxx
int main(){ //1.定义变量 float x,y; //2.输入已知数据 printf("请输入x的值"); scanf("%f",&x); //3.计算 if(x <= 0) { y = 0; } else if(x>0 && x<10) { y = 1 / x; } else if(x == 10) { y = 2.0/3*x+1; } else { y = sqrt(5*x-1); } //4.输出结果 printf("x的值为:%.2f,y的值为:%.2f",x,y); return 0;}xxxxxxxxxx
int main(){ //1.定义变量 int year; //2.获取值 printf("请您输入一个年份"); scanf("%d",&year); //3.计算 if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) { //4.返回结果 printf("%d年是闰年",year); }else{ //4.返回结果 printf("%d年不是闰年",year); } return 0;}xxxxxxxxxxint main(){ //1.定义变量 int x,y,z; //2.获取值 printf("请输入3个整数"); scanf("%d%d%d",&x,&y,&z); //3.计算 if(x + y == z ) { //4.返回结果 printf("%d+%d=%d",x,y,z); } else { //4.返回结果 printf("%d+%d!=%d",x,y,z); }}xxxxxxxxxxint main(){ //1.定义变量 float x,y; //2.获取值 printf("请输入两个实数:"); scanf("%f%f",&x,&y); //3.计算 if(x < y) { //4.返回结果 printf("较小的数是%f",x); }else { //4.返回结果 printf("较大的数是%f",y); } return 0; } xxxxxxxxxxint main(){ float a,b,c,t; printf("请输入三个实数:"); scanf("%f%f%f",&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; } printf("三个实数从小到大的排序是:%f,%f,%f",a,b,c); return 0;}xxxxxxxxxxint main(){ printf("***************************\n"); printf("计算正方形面积,请输入a\n"); printf("计算直角三角形面积,请输入b\n"); printf("***************************\n"); char choice; float side,base,height,area; scanf("%c",&choice); if(choice == 'a') { printf("计算正方形面积,请输入边长:"); scanf("%f",&side); area = side * side; printf("计算的面积结果为:%f",area); } else if(choice == 'b') { printf("计算直角三角形面积,请输入底,高:"); scanf("%f%f",&base,&height); area = 0.5 * base * height; printf("计算的面积结果为:%f",area); } else { printf("选择有误请重新输入"); } return 0; } xxxxxxxxxxint main(){ float ave; printf("请输入平均成绩0.0~4.0:"); scanf("%f",&ave); if(ave < 0) { printf("您的输入有误"); } else if(ave < 0.99) { printf("失败的学期,暂缓登记"); } else if(ave < 1.99) { printf("下学期留校察看"); } else if(ave < 2.99) { } else if(ave < 3.49) { printf("本学期优秀学生"); } else if(ave <= 4.00) { printf("本学期最高荣誉学生"); } else { printf("输入的值不在范围中"); } return 0;} xxxxxxxxxxint main(){ //大于等于90,A;89-80,B,79-70,C;69-60,D;60以下是E int score; char grade; printf("请输入成绩:"); scanf("%d",&score); if(score <= 100) { switch(score/10){ case 10 : grade = 'A';break; case 9 : grade = 'A';break; case 8 : grade = 'B';break; case 7 : grade = 'C';break; case 6 : grade = 'D';break; default : grade = 'E';break; } printf("成绩为:%d,成绩为%c档位",score,grade); } else { printf("输入的分值存在问题"); } return 0;}
xxxxxxxxxxint main(){ int a; printf("请输入风速"); scanf("%d",&a); if(a>0) { if(a<25) { printf("弱风"); }else if(a<39) { printf("强风"); }else if(a<55) { printf("大风"); }else if(a<73) { printf("狂风"); }else { printf("飓风"); } } else { printf("输入有误"); } return 0;}xxxxxxxxxxint main(){ int w,lm; printf("请输入灯泡的功率值:"); scanf("%d",&w); switch(w) { case 15: lm = 125;break; case 25: lm = 215;break; case 40: lm = 500;break; case 60: lm = 880;break; case 75: lm = 1000;break; case 100: lm = 1675;break; default : lm = -1; } printf("当前的亮度值为:%d",lm); return 0;} 
xxxxxxxxxxint main(){ float a,b,c; printf("请输入a、b、c的值"); scanf("%f%f%f",&a,&b,&c); if(a==0 && b==0){ printf("a=%.2f,b=%.2f,c=%.2f此方程没有解\n",a,b,c); }else if(a == 0){ float x = -c / b; printf("一元一次方程解:x = %.2f\n", x); }else{ float de = b * b - 4 * a * c; if(de < 0){ printf("a=%.2f,b=%.2f,c=%.2f此方程没有实数解\n",a,b,c); } else if(de == 0){ float x = -b / (2 * a); printf("方程有两个相等解:x1 = x2 = %.2f\n", x); }else{ float x1 = (-b + sqrt(de)) / (2 * a); float x2 = (-b - sqrt(de)) / (2 * a); printf("方程两个解:x1 = %.2f,x2 = %.2f\n", x1, x2); } } return 0;}
xxxxxxxxxxint main(){ float salary,in,tax_start; float tax,money,rate,num; float x,y; printf("请输入某员工的应发工资、五险一金、个税起征点:"); scanf("%f%f%f",&salary,&in,&tax_start); y = salary - in - tax_start; if(y <= 0 ){ rate = 0; num = 0; }else if (y <= 1500){ rate = 0.03; num = 0; }else if (y <= 4500){ rate = 0.1; num = 105; }else if (y <= 9000){ rate = 0.2; num = 555; }else if (y <= 35000){ rate = 0.25; num = 1005; }else if (y <= 55000){ rate = 0.3; num = 2755; }else if (y <= 80000){ rate = 0.35; num = 5055; }else { rate = 0.45; num = 13505; } if(y <= 0){ tax = 0; }else{ tax = y * rate - num; } money = salary - in - tax; printf("某员工应缴纳个人所得税为:%.2f,实发工资为:%.2f",tax,money); return 0;}循环的四个部分:循环变量的初始值;判断循环的条件;执行语句(循环内容);增量表达式(循环的两个要素:循环条件、循环体)
循环类型:for、while、do....while
修改循环的关键字:break、continue
for(表达式1;表达式2;表达式3){
循环体;
}
表达式1:初始化(只执行一次)
表达式2:控制表达式(用来控制循环什么时候结束)
表达式3:调节器(调整循环变量的值)
第一步,先执行表达式1
第二步,执行表达式2(判断是否符合循环的条件);
如果表达式2满足,执行循环体;执行第三步
如果表达式2不满足,循环结束。
第三步,执行表达式3,跳到第二步
循环变量初始化;
while(循环条件){
循环体;
增量表达式;
}
第一步,先执行循环变量初始化
第二步,进行循环条件判断
如果条件满足,执行循环体,执行第三步
如果条件不满足,循环结束
第三步,执行增量表达式,跳到第二步。
循环变量初始化;
do{
循环体;
增量表达式;
}while(循环条件)
第一步,先执行循环变量初始化
第二步,执行循环体
第三步,执行增量表达式
第四部,判断条件
如果条件满足,跳到第二步
如果条件不满足,循环结束
循环体又是一个循环结构
两层循环:外层循环和内层循环
xxxxxxxxxxint main(){ int i; int num = 0;// for(i=1;i<=100;i++)// {// num = num + i;// }
// i = 1;// while(i <= 100){// num = num +i;// i++;// }
i=1; do{ num = num + i; i++; }while(i<=100); printf("1到100的和为:%d",num); return 0;} xxxxxxxxxxint main(){ int i; int sum = 1;// for (i=2;i<=100;i=i+2)// {// sum = sum + i;// }
for(i=1;i<=10;i++) { sum = sum * i; } printf("sum=%d",sum); return 0;}
xxxxxxxxxxint main(){ int i,sum = 0; for(i=1;i<101;i++) { if(i % 2 == 0) { sum = sum - i; }else{ sum = sum + i; } } printf("sum=%d",sum); return 0;}xxxxxxxxxx//第六题int main(){ float i,sum=0; for(i=12;i<103;i=i+10) { sum = sum + ( 1.00 / i); } printf("sum=%.4f",sum); return 0;}//第七题int main(){ int n; float i, sum; scanf("%d",&n); sum = 1.0; for(i=3.0; i<=n; i=i+2) { if((int)i % 4 == 3) { sum = sum - 1.0/i; } else { sum = sum + 1.0/i; } } printf("sum = %.4f\n", sum); return 0;}xxxxxxxxxxint main(){ int n,s; printf("n\t2的n次幂\n"); for(n=0;n<=6;n++) { s = pow(2,n); printf("%d\t%d\t\n",n,s); } return 0;}xxxxxxxxxxint main(){ int i,min,max; printf("请输入转换表的最小数和最大数"); scanf("%d%d",&min,&max); printf("英寸\t厘米\n"); for(i=min;i<=max;i=i+6) { printf("%d\t%.2f\n",i,i*2.54); } return 0;}xxxxxxxxxx//两种写法//int main(){// int people,year,z;// z = 0;// year = 2026;// for(people=9870;people<=30000;people = people +z)// {// z = people * 0.1;// year = year + 1;// printf("本%d年人口为%d,增加人数%d\n",year,people,z);// }// printf("到达%d人口,为%d年",people,year);// return 0;//}
int main(){ int n; int y=1; n = 9870; while(n<=30000){ n = (int)n * 1.1; printf("经过%d年,小镇人口为%d人\n",y,n); y++; } return 0;}
xxxxxxxxxxint main(){ int i; for(i=100;i<=200;i++) { if(i % 3 ==0 || i % 5 ==0) { printf("%d,",i); } } return 0;}xxxxxxxxxxint main(){ int i; char ch; for(i=1;i<=10;i++) { ch = getchar(); printf("%d,",ch); } return 0;}xxxxxxxxxxint main(){ int i,ge,shi,bai,sum; for(i=100;i<=999;i++) { sum = 0; ge = i % 10; shi = (i / 10) % 10; bai = i /100 ; sum = ge + shi + bai; if(sum == 15) { printf("%d,",i); } } return 0;}xxxxxxxxxxint main(){ int i,ge,shi; for(i=1;i<=99;i++) { ge = i % 10; shi = (i / 10) % 10; if(i % 7 == 0 ||ge == 7 || shi == 7) { printf("%d,",i); } } return 0;}xxxxxxxxxxint main(){//正三角 // int i,j;// int n;// printf("请输入要显示的行数");// scanf("%d",&n);// for(i=1;i<=n;i++)// {// for(j=1;j<=i;j++)// {// printf("*");// }// printf("\n");// } //倒三角 // int i,j;// for(i=5;i>=1;i--)// {// for(j=1;j<=i;j++)// {// printf("*");// }// printf("\n");// }//躺着的等腰三角形// int i,j;// int n;// printf("请输入要显示的行数");// scanf("%d",&n);// for(i=1;i<=n;i++)// {// for(j=1;j<=i;j++)// {// printf("*");// }// printf("\n");// }// for(i=n-1;i>=1;i--)// {// for(j=1;j<=i;j++)// {// printf("*");// }// printf("\n");// }//菱形 int i,j,k; int n; printf("请输入要显示的行数"); scanf("%d",&n); for(i=1;i<=n;i++) { for(j=1;j<=n-i;j++) { printf(" "); } for(k=1;k<=i*2-1;k++) { printf("*"); } printf("\n"); } for(i=n-1;i>=1;i--) { for(j=1;j<=n-i;j++) { printf(" "); } for(k=1;k<=i*2-1;k++) { printf("*"); } printf("\n"); }//九九乘法表 // int i,j;// for(i=1;i<=9;i++)// {// for(j=1;j<=i;j++)// {// printf("%d*%d=%d\t",i,j,i*j);// }// printf("\n");// }//数字三角形// int i,j;// for(i=1;i<=5;i++)// {// for(j=1;j<=5-i;j++)// {// printf(" ");// }// for(j=1;j<=i;j++)// {// printf("%d",j);// }// for(j=i-1;j>=1;j--)// {// printf("%d",j); // }// printf("\n");// } return 0;}1.定义:将常用的代码以固定的格式封装成一个独立的模块。
2.C语言的函数分为两类:库函数(C语言自带的),自定义函数(自己开发的)
定义的格式
数据类型 函数名([形式参数列表])
{
具体实现功能的代码;
}
例如:
int main()
{
........
}
说明:
(1)数据类型:函数的返回值(函数结果)的数据类型。如果没有返回值,那么返回数据类型应该写成void
(2)形式参数列表:形式参数就是函数运算所需要用到的数据。简称形参,形参可以有0个(即便没有形参,函数名后面的括号也不能省略)或多个。
形参列表的格式:数据类型 形参1,数据类型 形参2,......
(3)函数体:一般包括变量的声明、实现功能的语句
(4)函数不能嵌套定义
(5)重要的原则:函数定义后,不能自动运行,必须带调用函数,才能实现相应的功能
(6)返回值:即运算结果,需要return返回
编写一个函数,实现两个整数的求最大值的功能,结果:两个整数的最大值,所以结果是整形
xxxxxxxxxxint max_num(int x,int y){ if(x < y){ return y; }else{ return x; }}
int main(){ int num1,num2; printf("请输入第一个数"); scanf("%d",&num1); printf("请输入第二个数"); scanf("%d",&num2); int max = max_num(num1,num2); printf("两个数的最大值为:%d",max); return 0;} 实际参数列表:调用函数实现功能需要用到的具体数据。简称实参
(1)函数定义的时候是形参,函数调用的时候是实参
(2)形参在定义的时候是不分配内存的,只有调用的时候才会分配内存。一旦函数运行结束,立即释放内存。
(3)函数调用的时候,实参会复制给形参(传递).因此,实参必须有明确的值
(4)实参和形参需要在数量、类型、顺序上保持严格的一致.
(5)实参和形参可以同名
函数调用的时候,会返回结果
说明:return语句可以有多个,但是只有一个被执行
定义一个函数:判断一个年份是否是闰年
xxxxxxxxxxint fun(int year){ if(year % 4 ==0 && year % 100 != 0||year % 400 == 0) return 1; else return 0;}
int main(){ int y; printf("请输入一个年份:"); scanf("%d",&y); if(fun(y)) printf("%d年是闰年!",y); else printf("%d年不是闰年!",y); return 0; }求三角形的面积
xxxxxxxxxxdouble area(int a,int b,int c){ double s; double aa; s = 0.5*(a+b+c); aa = sqrt(s*(s-a)*(s-b)*(s-c)); return aa;}
int main(){ int a,b,c; double ss; printf("请输入三角形的三条边:"); scanf("%d%d%d",&a,&b,&c); ss = area(a,b,c); printf("三角形的面积为%.2f",ss); return 0;}判断一个数是否为素数
xxxxxxxxxxint fun(int n){ int f=1; int i; for(i=2;i<n;i++) { if(n%i == 0){ f = 0; break; } } return f;}
int main(){ int m,n; int i; printf("请输入您想判断的范围:"); scanf("%d%d",&m,&n); for(i=m;i<=n;i++) { if(fun(i)){ printf("%d\t",i); } } return 0;}求两个整数的最大公约数
xxxxxxxxxxint fun(int a,int b){ int min; int i; int n; if(a>b) min=b; else min=a; for(i=min;i>=1;i--) { if(a%i==0&&b%i==0){ n = i; break; } } return n;}
int main(){ int x,y; printf("请输入您要寻找的两个整数"); scanf("%d%d",&x,&y); printf("两个整数的最大公约数是:%d",fun(x,y)); return 0;} 原则:函数不能嵌套定义,但是可以嵌套调用
例如:
int_max(int a,int b){
........}
int_min(int x,int y){
........}
int twomax(int a,int b){
........}
int fourmax(int a,int b,int c,int d){
........}
twomax(twomax(int a,int b),twomax(int c,int d)){
........}
xxxxxxxxxx//自定义函数:求两个数的最大值 int twomax(int a,int b){ int max; if(a>b) max = a; else max = b; return max;}//自定义函数:求四个数中的最大值int fourmax(int a,int b,int c,int d){ int max; max = twomax(twomax(a,b),twomax(c,d)); return max;} int main(){ int m1,m2,m3,m4; int max; printf("请输入四个整数"); scanf("%d%d%d%d",&m1,&m2,&m3,&m4); max = fourmax(m1,m2,m3,m4); printf("四个数中最大的数是:%d",max); return 0;}xxxxxxxxxx//计算sum = 1!+2!+3!.....N!N从键盘输入 int fun(int n){ int result = 1; int i; for(i=1;i<=n;i++){ result = result * i; } return result;}//计算求累计和int sum(int n){ int s = 0; int i; for(i=1;i<=n;i++){ s = s + fun(i); } return s;}
int main(){ printf("请输入N的值"); int n,re; scanf("%d",&n); re = sum(n); printf("累加和为:%d",re); return 0;}在一个函数的调用过程中,又调用了这个函数自身。
例如:求N的阶乘
分析: n=5
5! => 5*4!
4! => 4*3!
3! => 3*2!
2! => 2*1!
1!是已知条件1!=1
递归算法:
(1)如果计算的问题是已知情况,那么直接出结果
(2)如果计算的问题不是已知的情况,进行分解。
xxxxxxxxxx//自定义函数:使用递归求N的阶乘int fun(int n){ int result; if(n==1){ result = 1; } else{ result = n * fun(n-1); }}
int main(){ int n; printf("请输入一个整数:"); scanf("%d",&n); printf("%d!=%d",n,fun(n)); return 0;}xxxxxxxxxx//斐波那契数列//自定义函数:使用递归实现斐波那契数列 int fun(int n){ int i; int result; if(n == 1 || n == 2){ result = 1; } else{ result = fun(n-1) + fun(n-2); } return result;}
int main(){ int n,i; printf("请输入一个整数"); scanf("%d",&n); for(i=1;i<=n;i++){ printf("斐波那契数列的第%d项结果为:%d\n",n,fun(n)); }}有效范围
1.变量分为局部变量和全局变量
局部变量:作用域是所在的函数或者语句块内
全局变量:作用域是变量定义后到结束的区域。
2.变量的存储类型(没有指明的变量都是auto变量)
(1)自动变量auto
(2)外部变量extern 作用域是全局
(3)静态变量static 静态变量只初始化一次
(4)寄存器变量register
变量的定义格式: 存储类型 数据类型 变量名[=初始值]

xxxxxxxxxxint fun(int x,int n){ int i; i = (pow(x,n)-6); return i;}
int main(){ int x,n,i; int sum = 0; for(i=1;i<=2;i++){ printf("请输入两个数的值X,N:"); scanf("%d%d",&x,&n); sum = sum + fun(x,n); } printf("最终的值为:%d",sum); return 0;}
xxxxxxxxxx//显示计算器界面float a,b;int choice;float result;//新版编译器不需要声明void calculator();void readdate();void jisuan();float sum(float x,float y);float minus(float x,float y);float multiple(float x,float y);float devide(float x,float y);void printresult();
void calculator(){ printf("*********\n"); printf("1.求合\n"); printf("2.求差\n"); printf("3.求积\n"); printf("4.求商\n"); printf("*********\n"); scanf("%d",&choice); readdate(); jisuan(); printresult();}//读取两个数void readdate(){ printf("请输入两个数的值:"); scanf("%f%f",&a,&b);} //计算void jisuan(){ switch(choice){ case 1: result = sum(a,b);break; case 2: result = minus(a,b);break; case 3: result = multiple(a,b);break; case 4: result = devide(a,b);break; default:printf("输入有误");result = 0;break; }}//求和float sum(float x,float y){ return x+y;}//求差float minus(float x,float y){ return x-y;}//求积float multiple(float x,float y){ return x*y;}//求商 float devide(float x,float y){ return x/y;}//显示结果void printresult(){ printf("计算的结果为%.2f",result);}//主函数 int main(){ calculator(); return 0;}
数组:符合数据类型(构造数据类型,复杂数据从类型)
定义:多个,相同类型,有序
数据类型 数组名[长度]
例如:int a[10]; //定义一个整形的数组,有10个整数。
说明:
(1)数组名是数组的首地址
(2)数组里的数据叫元素
(3)长度是一个常量表达式
比如,int a[3+4]
#definde N 9
int a[N]
数组的元素都是有顺序的。所以,每个元素都有一个编号,这个编号就索引或者下表都是从0开始的
元素的引用方式:数组名[索引]
比如: int a[10]; a[0]-a[9];
定义数组的时候进行赋值
(1)全部元素赋值:int a[10]={1,3,5,7,9,2,4,6,8,10};
int a[10]={0};//数组的10个元素为0
(2) 部分元素赋值
int a[10] = {3,4,5}; //a[0]=3 a[1]=4 a[2]=5
原则:一般操作是针对元素进行的。不能够对数组进行操作
例如:int a[5]=a[4]+10

xxxxxxxxxxint main(){ int a[5]={8,6,5,4,1}; int b[5]; int j=0,i; for(i=4;i>=0;i--){ b[j]=a[i]; printf("数组a为:%d数组b为:%d\n",a[i],b[j]); j++; } printf("数组b的元素为:"); for(i=0;i<=4;i++){ printf("%d",b[i]); }}
xxxxxxxxxx//输入三十个学生的成绩求最高分,最低分,平局分,求低于平均分的人数。 int main(){ //定义变量 float scores[30]; int i,count=0; float max,min,sum=0,ave; //获取数据 for(i=0;i<30;i++) { printf("输入第%f学生的成绩",i+1); scanf("%f",&scores[i]); } //计算 max=min=scores[0]; for(i=0;i<30;i++) { //求所有分的总和 sum = sum + scores[i]; //求最高分 if(scores[i]>max){ max=scores[i]; } if(min<scores[i]){ min=scores[i]; } } ave = sum / 30; for(i=0;i<30;i++){ if(scores[i]<ave){ count++; } } printf("三十名学生里最高分数为:%.2f,最低分为:%.2f,平均分为:%.2f,低于平均分的共有:%d人",max,min,ave,count); return 0;} 从左往右,两两相比,大的往后移动,小的往前移动,最后最末尾为最大数
xxxxxxxxxx//使用冒泡排序十个学生从小到大的年龄int main(){ int age[10]; int i,j,t; printf("请输入10名学生的年龄\n"); for(i=0;i<10;i++){ printf("请输入%d名学生的年龄:",i+1); scanf("%d",&age[i]); } //冒泡排序 for(i=0;i<9;i++){ for(j=0;j<9-i;j++){ if(age[j]>age[j+1]){ t = age[j]; age[j] = age[j+1]; age[j+1] = t; } } } printf("年龄按照从小到大后的结果:\n"); for(i=0;i<10;i++){ printf("%d,",age[i]); } return 0;}
数据类型:数组名[行数] [列数]
说明:行数和列数分别表示行和列各有多少个元素,一定是常量表达式
数组名[行下标] [列下表]
说明:从0开始的
int a=[3] [4]={{1,2,3,6},{5,6,7,8},{2,4,6,8}};
int a=[3] [4]={1,2,3,4,5,6,7,8,2,4,6,8};
int a=[] [4]={1,2,3,4,5,6,7,8,2,4,6,8};//行下表可以省略
int a=[3] [4]={{1,2},{5},{2,4,6}};//没有赋值的为0
二维数组的操作一般需要结合两层的循环
xxxxxxxxxxint main(){ int a[4][4]; int sum = 0; int i,j; printf("请输入矩阵的数据:"); for(i=0;i<4;i++){ for(j=0;j<4;j++){ scanf("%d",&a[i][j]); } } for(i=0;i<4;i++){ for(j=0;j<4;j++){ if(i == j){ sum = sum +a[i][j]; } } } printf("这个矩阵的主对角线之和是%d",sum); for(i=0;i<4;i++){ for(j=0;j<4;j++){ if(i + j == 3){ sum = sum +a[i][j]; } } } printf("这个矩阵的次对角线之和是%d",sum); return 0;}xxxxxxxxxx//这个二维数组中最大的值及其下标int main(){ int a[4][5]; int max,row,col; int i,j; //输入二维数组 for(i=0;i<4;i++){ for(j=0;j<5;j++){ scanf("%d",&a[i][j]); } } //寻找最大值及所在的行列 max = a[0][0]; row = col = 0; for(i=0;i<4;i++){ for(j=0;j<5;j++){ if(max < a[i][j]){ max = a[i][j]; row = i; col = j; } } } printf("这个二维数组中最大的为:%d,其行为:%d列为:%d",max,row,col); return 0;}xxxxxxxxxx//生成一个上三角是1次对角线是0下三角是-1的5*5的二维数组int main(){ int a[5][5]; int i,j; for(i=0;i<5;i++){ for(j=0;j<5;j++){ if(i+j<4){ a[i][j] = 1; } else if(i+j==4){ a[i][j] = 0; } else{ a[i][j] = -1; } } } printf("生成的五行五列数组为:\n"); for(i=0;i<5;i++){ for(j=0;j<5;j++){ printf("%d\t",a[i][j]); } printf("\n"); } return 0;}xxxxxxxxxx//输入15个学生的4门成绩,输出平均成绩和单科成绩 int main(){ float scores[5][4]; int i,j; float ave[5]; float sum; printf("请输入学生的成绩:\n"); for(i=0;i<5;i++){ for(j=0;j<4;j++){ scanf("%f",&scores[i][j]); } } for(i=0;i<5;i++){ sum = 0; for(j=0;j<4;j++){ sum = sum + scores[i][j]; } ave[i] = sum/4; } printf("5个人的平均成绩如下\n"); printf("学生\tC语言\t软件\t原理\t思政\t平均分\n"); for(i=0;i<5;i++){ //序号 printf("%d\t",i+1); for(j=0;j<4;j++){ //输出四科成绩 printf("%.2f\t",scores[i][j]); } //输出平均分 printf("%.2f\n",ave[i]); }}char 数组的名字[字符的个数];
数组的名字[数组的下标]
char ch[5]={'h','a','p','p','y'};
char ch[6]='happy'; 或者 char ch[6] = {"happy"};
//字符串"happy"在内存中占6个字节,字符串长度为5个字节
注意:用字符串进行初始化的时候,字符串本身是有一个结束符("\0"),所以,数组的长度要比用字符常量进行初始化的时候+1;
逐个字符的输入输出
char ch[6]="china";
for(int i=0;i<=6;i++){
printf("%c",ch[i]);}
char ch[6]="china";
printf("%s",ch);
puts();
gets();
例如:char ch[6];
ch = gets();
puts(ch);
string.h
strcat(ch1.ch2)
例如:char ch1[11]="china",ch2[2]="A"
strcat(ch1,ch2); //ch1中的内容变为"chinaA"
strcopy(ch1,ch2)
例如:char ch[11]="china",ch2[2]="A";
strcopy(ch1,ch2); //ch1中的内容变为"A"
strcmp(ch1,ch2);ch1>ch2,函数结果为正整数;ch1<ch2,结果为负整数;ch1=ch2,结果为0
strlen(ch);
注意:结束符("\0")不算长度
strlwr(ch);变成小写
strupr(ch);变成大写
xxxxxxxxxxint main(){ int a,b,c; int max; printf("请输入三个整数:"); scanf("%d%d%d",&a,&b,&c); max = a; if(max < b){ max = b; } if(max < c){ max = c; } printf("三个数中最大的是:%d",max); return 0;} xxxxxxxxxxint main(){ int a[10]={4,7,2,3,9,1,0,8,6,5}; int i,j,max; for(i=0;i<10;i++){ printf("%d,",a[i]); } //冒泡排序 for(i=0;i<10;i++){ for(j=0;j<9-i;j++){ if(a[j] > a[j+1]){ max = a[j]; a[j] = a[j+1]; a[j+1] = max; } } } printf("排序后的顺序为:"); for(i=0;i<10;i++){ printf("%d,",a[i]); } return 0;}xxxxxxxxxxint main(){ int a[2][3]={0}; int max,i,j,row,rol; for(i=0;i<2;i++){ for(j=0;j<3;j++){ scanf("%d",&a[i][j]); } } max = a[0][0]; for(i=0;i<2;i++){ for(j=0;j<3;j++){ if(max < a[i][j]){ max = a[i][j]; row = i; rol = j; } } } printf("这个数组中最大的值为:%d,行和列为:%d,%d",max,row+1,rol+1); return 0;}xxxxxxxxxxint main(){ int year; printf("请输入要判断的年份:"); scanf("%d",&year); if(year % 400 == 0 || year % 4 == 0 && year % 100 != 0) { printf("是闰年"); }else{ printf("不是闰年"); } return 0;}xxxxxxxxxx//*****// ****// ***// **// *int main(){ int i,j,m; for(i=0;i<5;i++){ for(m=1;m<=i;m++){ printf(" "); } for(j=0;j<5-i;j++){ printf("*"); } printf("\n"); } return 0;}
xxxxxxxxxxint main(){ float r,l,a; printf("请输入圆的半径:"); scanf("%f",&r); l = 2 * PI * r; a = PI * (r*r); printf("圆的周长为:%.2f,圆的面积为:%.2f",l,a);}xxxxxxxxxxint main(){ int a1,a2,a3; printf("输入三条整数边:"); scanf("%d%d%d",&a1,&a2,&a3); if(a1 == a2 && a1 == a3){ printf("为等边三角形"); }else if(a1 == a2 || a1 == a3 || a2 == a3){ printf("为等腰三角形"); }else{ printf("为三角形"); } return 0;}
xxxxxxxxxxint main(){ int salary,x; scanf("%d",&x); if(x<2500 && x>0){ salary = x + 500; } else if(x<3500){ salary = x + 400; } else if(x<4500){ salary = x + 300; }else if(x<6000){ salary = x + 200; }else if(x >6000){ salary = x + 100; }else{ printf("输入工资有误"); } printf("工资更改后为:%d",salary); return 0;}xxxxxxxxxxint main(){ float x,y,sum,t; int i; x = 2.0; y = 1.0; sum = 0; for(i=0;i<20;i++){ sum = sum + (x / y); t = x; x = x + y; y = t; } printf("前20项的最终结果为:%.2f",sum); return 0;}xxxxxxxxxxint main(){ int m; int i,j,max,p; scanf("%d",&m); if (m>2){ for(i=m;i>=2;i--){ p = 1; for(j=2;j<i;j++){ if(i % j == 0){ p = 0; break; } } if(p == 1){ max = i; break; } } printf("不大于这个数的最大素数是:%d",max); }else if(m == 2){ printf("大于这个数的最大素数是:2"); }else{ printf("输入有误"); } return 0;}

xxxxxxxxxxint main(){ float x,y; scanf("%f",&x); if(x<0){ y = 0; }else if(x<1){ y = (3.0/5.0)*x; }else{ y = sqrt(x)+x*x; } printf("y=%.2f,x=%.2f",y,x); return 0;}xxxxxxxxxxint main(){ int i; int sum = 0; int fact = 1; for(i=1;i<=10;i++){ fact = fact * i; sum = sum + fact; } printf("最后的的数为:%d",sum); return 0;}xxxxxxxxxxint main(){ int a[12]; int max,min,i; float sum = 0.0; float total = 0.0; for(i=0;i<12;i++){ scanf("%d",&a[i]); } max = min = a[0]; for(i=0;i<12;i++){ if(max < a[i]){ max = a[i]; } if(min > a[i]){ min = a[i]; } sum = sum + a[i]; } sum = sum - (max + min); total = sum / 10; printf("选手最后得分为:%.2f",total); return 0;}xxxxxxxxxxint main(){ int a[4][5]; int i,j,max,sum = 0; for(i=0;i<4;i++){ for(j=0;j<5;j++){ scanf("%d",&a[i][j]); } } for(i=0;i<4;i++){ max = a[i][0]; for(j=0;j<5;j++){ if(max < a[i][j]) max = a[i][j]; } printf("第%d行的最大值是%d\n",i+1,max); sum = sum + max; } printf("最大的值的合为:%d",sum); return 0;}xxxxxxxxxxint fun(int x,int y){ int t,i; if(x < y){ t = y; y = x; x = t; } for(i=x;i>0;i++){ if(i%x==0&&i%y==0){ return i; } }}int main(){ int x,y; scanf("%d%d",&x,&y); printf("这两个数的最小公倍数是:%d",fun(x,y)); return 0;}