小学生都看得懂的C语言入门(1): 基础/判别/循环
c基础入门, 小学生也可以都看得懂!!!!
安装一个编译器, 这方面我不太懂, 安装了DEV-C++ ,体积不大,30M左右吧, 感觉挺好用,初学者够了.
介绍下DEV 的快键键:
恢复 Ctrl+Z 重做 Ctrl+Y 剪切 Ctrl+X 拷贝 Ctrl+C 粘贴 Ctrl+V 搜索替换内容 Ctrl+F
编译 F9 运行 F10 编译运行 F11 设置注释 Ctrl+/ 取消注释再重复一次即可 (keep it in heart!)
复制行 Ctrl+E 删除行 Ctrl+D
整体左移一个tab位置 shift+tab 整体右移一个tab位置 tab
整体代码缩进对齐 Ctrl+Shift+A
1. hello world
C基础框架
#include <stdio.h> int main() { printf("hello world"); return 0; }
#include <stdio.h> int main() { printf("23+32=%d\n",23+32); int price=0; //定义变量类型与初始值 可以定义两个变量int price1,price2 printf("please input the price:"); scanf("%d",&price); //输入一个数 & 与指针有关 若不是输入整数,则默认为初值0 int change=100-price; printf("找您%d元",change); return 0; }
#include <stdio.h> int main() { int a=0; int b=0; scanf("%d %d",&a,&b); //也可以是逗号,那么输入也是1,3 输入要遵循"%d %d"形式 printf("%d %d\n",a,b); return 0; }
2.数据类型, int类型的数据之间的运算得到的还是int 1/10=0, 但是1.0/10=0.1了
#include <stdio.h> int main() { int foot=5; int inch=7; //整数的运算结果还是整数,会导致结果不准确,只需要将/12 改成12.0!! 10/3=3,10.0/3=3.333333 //scanf("%d %d",&foot,&inch) ; printf("身高是%f米\n",((foot+inch/12)*0.3048)); printf("身高是%f米\n",((foot+inch/12.0)*0.3048)); //也可以定义变量中修改 double foot1=5; //双精度浮点数 double inch1=7; //scanf("%lf %lf",&foot1,&inch)1 ; //改成lf格式 printf("身高是%f米\n",((foot1+inch1/12)*0.3048)); return 0; }
得到:
身高是1.524000米
身高是1.701800米
身高是1.701800米
3. 计算时间差:
#include <stdio.h> int main() { int h1,m1; int h2,m2; scanf("%d %d",&h1,&m1); scanf("%d %d",&h2,&m2); int t1=h1*60+m1; int t2=h2*60+m2; int t=t2-t1; printf("the diff of the time is %d小时%d分钟",t/60,t%60); return 0; }
输入:
2 40
3 12
the diff of the time is 0小时32分钟
用if 语句计算时间差修改
#include <stdio.h> int main() { int h1,m1; int h2,m2; scanf("%d %d",&h1,&m1); scanf("%d %d",&h2,&m2); int ih=h2-h1; int im=m2-m1; if (im<0) { im=60+im; ih--; } printf("the diff of time is %d hours %d minutes",ih ,im); return 0; }
2 15
3 40
the diff of time is 1 hours 25 minutes
4.交换两个数
#include <stdio.h> int main() { // 运算顺序 * / % + - =赋值 a=b=6 表示,a=(b=6)赋值是从右向左!! // int a=5; int b=6; int t; t=a; a=b; b=t; printf("a is %d,b is %d",a,b); return 0; }
a is 6,b is 5
5. n++ \++n区别
#include <stdio.h> int main() { // 调试之前一定要先编译!!!很重要 // 复合赋值 s+=1, s*=a+b n++ n-- 分别加1 减1 也有++n,--n, //结果不同,n++ 表示+1之前的值,++n 是加一之后的值 , int a; a=10; printf("a++=%d\n",a++); //10 printf("a=%d\n",a);//11 printf("++a=%d\n",++a); //12 printf("a=%d\n",a); //12 return 0; }
a++=10
a=11
++a=12
a=12
6.关系运算符
#include <stdio.h> int main() { //关系运算符 printf("%d \n",5>3); //1 printf("%d \n",5<=3); //0 printf("%d \n",5<=3+4); //1 加法优先 //关系运算符的优先级 大于 赋值 int x=a>0 就是先判别a>0 再赋值 // 6>5>4 从左向右判别, 最后等于0 // /* */ 多行注释 return 0; }
7. if else语句
#include <stdio.h> int main() { // 语法 if(){}else{} int a,b; printf("please input two integers:"); scanf("%d %d",&a,&b); int max=0; if(a>b){ max=a; }else{ max=b; } printf("%d",max); return 0; }
另一种:
#include <stdio.h> int main() { // 语法 if(){}else{} int a,b; printf("please input two integers:"); scanf("%d %d",&a,&b); int max=b; if(a>b){ max=a; } printf("%d",max); return 0; }
注意: if 要是没有{} 时, 紧跟着if() 后面的语句作为条件成立时的执行语句!
8.应用实例-计算工资
#include <stdio.h> int main() { const double rate=8.25; const int standard=40; double pay=0.0; int hours; printf("please input working hours:"); scanf("%d",&hours); printf("\n"); if (hours>standard) pay=standard*rate+(hours-standard)*rate*1.5; else pay=hours*rate; printf("salaty is %f:\n",pay); }
please input working hours:100
salaty is 1072.500000:
9.循环语句
实例1
#include <stdio.h> int main() { //循环 while(条件判断){循环体} 循环体中要有改变条件的程序,否则为死循环 //判断一个数字是几位数 int x; int n=0; scanf("%d",&x); n++;//一定有一位数了 x/=10; while(x>0){ n++; x/=10; } printf("%d\n",n); return 0; }
对比以下
#include <stdio.h> int main() { int x; int n=0; scanf("%d",&x); while(x>0){ n++; x/=10; } printf("%d\n",n); return 0; } //这个方法不能数0 .输入0 得到的是0 不是1
可以增加if 判别进行修正
#include <stdio.h> int main() { int x; int n=0; scanf("%d",&x); if(x>0) { while(x>0){ n++; x/=10; } }else{ n=1; } printf("%d\n",n); return 0; }
也可以用 do while 修正
#include <stdio.h> int main() { //do-while 循环 do{循环体语句} while(循环条件); 第一次进入不用判别条件 int x; int n=0; scanf("%d",&x); do{ n++; x/=10; //这两行可以交换位置 } while(x>0); printf("%d\n",n); return 0; } // 输入0 得到1
实例2--阶乘
#include <stdio.h> int main() { //阶乘 int i=1; int n; scanf("%d",&n); int f=1; while(i<=n){ f*=i; i++; } printf("%d!=%d\n",n,f) ; return 0; }
10
10!=3628800
用for 修改上述
#include <stdio.h> int main() { //for 循环 for(初值;终值;步长变化){} int i=1; int n=4; //scanf("%d",&n); int f=1; for (i=1;i<=n;i++){ f*=i; } printf("%d!=%d\n",n,f) ; return 0; }
4!=24
进一步改进:
#include <stdio.h> int main() { //改进 i可以从2开始,省去一轮循环,并且当n=1时,循环不被执行,正确!! int i=1; int n=4; int f=1; for (i=2;i<=n;i++){ f*=i; } printf("%d!=%d\n",n,f) ; return 0; }
再次改进 从n开始乘
#include <stdio.h> int main() { //改进 从n开始乘 int i=1; int n=4; int f=1; for (i=n;i>1;i--){ f*=i; } printf("%d!=%d\n",n,f) ; return 0; }
最后改进, 不用引入变量i, 让n自己变小
#include <stdio.h> int main() { //改进 让n自己变小 ,不用变量i int n=4; int f=1; int n0=n; for (n=n;n>1;n--){ f*=n; } //或者 //for (;n>1;n--){ // f*=n; //} printf("%d!=%d\n",n0,f) ; return 0; }
注意for 的初始值 终值.
//int i; //for(i=0;i<5;i++) { // printf("i=%d",i); //0 1 2 3 4 //} //printf("\n最后i=%d",i); //循环结束之后i=5 for(i=1;i<=5;i++) { printf("i=%d",i); //12345 } printf("\n最后i=%d",i); //循环结束之后i=6 //上述两个循环同样走5次,但是结果不同 int i; //for(初始条件;条件;每轮动作)
最后提一个问题....
提问待解决??
#include <stdio.h> int main() { //int i=1;//定义可以放在for 循环里面,因为只有在循环中才用到了i, for 之外没有用到 int n=4; int f=1; for (int i=1;i<=n;i++){ f*=i; } 22 printf("%d!=%d\n",n,f) ; //这个出错了 只有在C99 中才可以在for中定义变量 ,如何修正??? return 0; }