1.bool 类型

定义bool类型之前需要导入#include <stdbool.h>

#include <stdio.h>
#include <stdbool.h>
int main()
{
bool b=>;
bool t=true;
printf("%d\n",b); //仍然是整数形式输出 得到1
return ;
}

2.逻辑运算
 非!  或||  和&&  x>4 && x<6   !age<20 永远成立,!age=0或1  优先级顺序 ! && ||
 
赋值运算等级最低 
// 短路  逻辑运算时从左向右的,左边已经可以觉得结果了,右边就不做了
//条件运算符 m<n? x:a+5  表示m<n 则 取x, 否则为a+5  ,这种表达式少用,会搞错 !!
//逗号 等级最低的

#include <stdio.h>
#include <stdbool.h>
int main()
{
int i=+, +; //出错了 为什么
printf("%d\n",i); //
int j=(+,+); // 正确
printf("%d\n",j); //
return ;
}

逗号什么用? 主要在for 中使用,可以放多个计算.  for(i=0,j=10;i<j:i++,j--)...

3.分段函数

#include <stdio.h>
int main()
{
int x=;
int f=;
if (x<){
f=-;
}
else if(x==){
f=;
}
else{
f=*x;
}
printf("%d\n",f);  //20
return ;
}

if else 后面只有一个执行语句的话,可以不加{}

#include <stdio.h>
int main()
{
int x=;
int f=;
if (x<)
f=-;
else if(x==)
f=;
else
f=*x;
printf("%d\n",f); //20
return ;
}

4.switch

为什么已经有了if 还需要用switch?

#include <stdio.h>
int main()
{
int type;
scanf("%d",&type); if (type==)
printf("nihao");
else if(type==)
printf("zaoshanghao");
else if(type==)
printf("wanshanghao") ;
else
printf("no") ; // 上述当type=4 需要一个一个判别过来,不太好 ,因此引入switch
return ;
}

用switch() {case 1:...; break; case 2:... ;break;...default:...;break;}

#include <stdio.h>
int main()
{
int type;
scanf("%d",&type);
switch(type){
case : //tpye=10 就直接做这个,
printf("nihao");
break; //一定要有break, 阻止语句往下执行
case :
printf("zaoshanghao");
break;
case : //tpye=30 就直接做这个,不用判别前面两种了
printf("wanshanghao");
break;
default:
printf("no");
return ;
}

注意:  switch 只能用整数型, type不能是double!

#include <stdio.h>
int main()
{
//成绩转化
int grade;
scanf("%d",&grade) ;
grade/=;
switch(grade){
case :
case :
printf("A\n");
break;
case :
printf("B\n");
break;
case :
printf("C\n");
break;
case :
printf("D\n");
break;
default:
printf("F\n");
break;
}
return ;
}

5.简单小例子

#include <stdio.h>
int main()
{
// 计算log2的整数部分
int x;
int ret=;
scanf("%d",&x);
int t=x;
while(x>){
x/=;
ret++;
}
printf("log2 of %d is %d\n",t,ret);
return ;
}

12

log2 of 12 is 3

求平均数,输入数字, 以-1 结束,求出-1之前的平均数

#include <stdio.h>
int main()
{
int num;
int sum=;
int count=; scanf("%d",&num); while(num!=-){
sum+=num;
count++;
scanf("%d",&num);
} printf("%f\n",1.0*sum/count);
return ;
}

猜数字游戏 (1-100)   过程中需要提示:大了 小了,记录猜数字次数.

#include <stdio.h>
#include <stdlib.h> //rand 可以用了
#include <time.h>
int main()
{ srand(time()); //让随机数能够像随机数一样
int num=rand()%+; //产生一个1-100之间的随机数
int a=;
int count=; //猜数次数
printf("我已经想好了一个1到100内的数\n"); do{
printf("please guess a number:\n");
scanf("%d",&a);
count++; //无论对错都算一次
if (a>num)
printf("大了");
else if (a<num)
printf ("小了");
}while(a!=num); printf("bingo!,你用了%d次就成功了\n",count);
return ;
}

数字逆序输出  ,整数x逆序  作用x%10 得到个位数  x/10 去掉个位数,

#include <stdio.h>
int main()
{
int x=;
int t=x;
int num;
int ret=;
while(x>){
num=x%;
ret=ret*+num;
x/=;
}
printf("the reverse of %d is %d\n",t,ret);
return ;
}

the reverse of 500 is 5  , 没有得到005 有缺陷!

注意:容易出错的地方, if后面没有加{}  如果执行语句只有一句,可以不加,有多句一定要{} .

if() 后面不用加;  否则if 直接结束了,执行后面语句

#include <stdio.h>
int main()
{
int age=;
if (age>); //加了;
{
printf("can be treat carefully");
}
return ;
}

得到:

can be treat carefully  这个结果就是 if 在不执行设么就直接结束了,进入printf 语句

好的风格的代码.

#include <stdio.h>
int main()
{
int x=;
int f=;
if (x<)
{
f=-;
}
else if (x==)
{
f=;
}
else
{
f=*x;
}
return ;
}

上述优点在于如要注释几行不会影响其他行. 特别是{ }最会受注释行的影响.

//判断素数

#include <stdio.h>
int main()
{
int x;
scanf("%d",&x);
int i;
int isprime=;
for(i=;i<x;i++)
{
if(x%i==)
{
isprime=;
// break; break也可以放在外面
} break;
}
if(isprime==)
printf("不是素数");
else
printf("是素数");
return ;
}

13

是素数

//输出30以内的素数  双重循环

#include <stdio.h>
int main()
{
int x;
for(x=;x<;x++)
{
int i;
int isprime=;
for(i=;i<x;i++)
{
if(x%i==)
{
isprime=;
} break;
}
if(isprime==)
printf("%d ",x);
}
return ;
}

2 3 5 7 9 11 13 15 17 19 21 23 25 27 29

// 输出前20个素数

#include <stdio.h>
int main()
{
int x=;
int cnt=;
while(cnt<)
{
int i;
int isprime=;
for(i=;i<x;i++) //x还是会输出2的
{
if(x%i==)
{
isprime=;
} break;
}
if(isprime==)
{
printf("%d ",x);
cnt++;
}
x++;
}
return ;
}

2 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39

//另一种方法, 不用while, 用for

#include <stdio.h>
int main()
{
int x;
int cnt=;
for(x=;cnt<;x++)
{
int i;
int isprime=;
for(i=;i<x;i++) //x还是会输出2的, 但是只有一次循环
{
if(x%i==)
{
isprime=;
} break;
}
if(isprime==)
{
printf("%d ",x);
cnt++;
}
}
return ;
}

//凑硬币 1 2 5元 凑成100元以下的金额 (输出第一个符合条件的即可)  三重循环

#include <stdio.h>
int main()
{
int x;
int one ,two,five;
int exit=;
scanf("%d",&x);
for (one=;one<x;one++){
for (two=;two<x/;two++){
for(five=;five<x/;five++){
if(one+*two+five*==x){
printf("用%d个一元 %d个两元 %d个五元得到%d元\n",
one,two,five,x);
exit=;
break; //只能结束当前循环,如何跳出三个循环 ?增加exit变量 接力break
}
}
if (exit==)break;
}
if (exit==)break;
}
}

23
用1个一元 6个两元 2个五元得到23元

//上述称为接力break,  还有一种方法 用goto, 可以免去写很多个break

#include <stdio.h>
int main()
{
int x;
int one,two,five; scanf("%d",&x);
for (one=;one<x;one++)
{
for (two=;two<x/;two++)
{
for(five=;five<x/;five++){
if(one+*two+five*==x){
goto out; //后面定out的位置
}
}
} }
out:
printf("用%d个一元%d个两元 %d个五元得到%d元\n",one,two,five,x);
}

12

用1个一元3个两元 1个五元得到12元

//求和 1+1/2+1/3+1/4...+1/n

#include <stdio.h>
int main()
{
int n;
int i;
double sum=0.0;
scanf("%d",&n);
for(i=;i<=n;i++){
sum+=1.0/i;
}
printf("f(%d)=%f\n",n,sum) ;
}

10

f(10)=2.928968

//求和 1-1/2+1/3-1/4...+(-1)^(n-1)*1/n, 增加sign符号

#include <stdio.h>
int main()
{
int n;
int i;
int sign=;
double sum=0.0;
scanf("%d",&n);
for(i=;i<=n;i++){
sum+=sign*1.0/i;
sign=-sign;
}
printf("f(%d)=%f\n",n,sum) ;
}

4

f(4)=0.583333

//求两个数的最大公约数

方法1: 先找到两数的较小者min , 循环 i=1:min找公因子, 循环结束得到的就是最后一个(最大公因数)

#include <stdio.h>
int main()
{
int a,b;
int min ;
scanf("%d %d",&a,&b);
if (a<b){
min=a;
} else{
min=b;
}
int ret=;
int i;
for(i=;i<min;i++){
if (a%i== && b%i==){
ret=i;
}
}
printf("%d and %d 的最大公约数是%d",a,b,ret);
}

10 25

10 and 25 的最大公约数是5

//方法2: 辗转相除法  a=12, b=18 ,t记录a%b  然后a=b, b=t, 继续做下去

思路:

// a b t
//12 18 12
//18 12 6
//12 6 0
//6 0   b是0的时候结束, 此时a是最小公约数

#include <stdio.h>
int main()
{
int a,b;
int t;
scanf("%d %d",&a,&b) ;
while(b!=){
t=a%b;
a=b;
b=t;
}
printf("gcd=%d\n",a);
}

//正序分解整数  12345  输出 1 2 3 4 5

//先回顾逆序输出... x%10 得到最后一个数字. x/10去掉最后一个数

#include <stdio.h>
int main()
{
int x;
scanf("%d",&x);
//x=12345;
do{
int d=x%; //得到个数数字
printf("%d ",d);
x/=;
} while(x>);
}

1200

0 0 2 1

// 正序可以通过逆序两次得到

#include <stdio.h>
int main()
{
int x;
int t=;
scanf("%d",&x);
//x=12345;
do{
int d=x%; //得到个数数字
t=t*+d;
x/=;
} while(x>);
printf("t=%d\n",t);
x=t;
do{
int d=x%; //得到个数数字
printf("%d ",d);
x/=;
} while(x>);
}

1329

t=9231
1 3 2 9

但是输入600 得到的 t=6 最后结果也是6 不是 006,修改思路如下

// 思路 :   x=1234
//1234/1000 1 ..
//1234%1000 234
//1000/10 100

//234/100  2.  ..
//234%100 34
//100/10  10

//34/10  3.  ..
//34%10  4
//10/10 1

//4/1   4 ...
//4%1  0
//1/10 0

#include <stdio.h>
#include<math.h>
int main()
{
int x;
scanf("%d",&x);
int t=x;
int cnt=; //计算位数
do{
x/=;
cnt++;
} while(x>);
printf("%d\n",cnt);
int m=pow(,cnt-);// pow没有定义?? 增加#include<math.h>
printf("%d\n",m);
x=t;
do{
int d=x/m;
printf("%d ",d);
x%=m;
m/=;
}while(m>);
}

123

3
100
1 2 3

上述没必要用pow求

#include <stdio.h>
#include<math.h>
int main()
{
int x;
scanf("%d",&x);
int m=;
int t=x;
while(x>){
x/=;
m*=;
} x=t;
do{
int d=x/m;
printf("%d ",d);
x%=m;
m/=;
}while(m>);
}

小学生都看得懂的C语言入门(2): 判别 循环的一些应用实例的更多相关文章

  1. 小学生都看得懂的C语言入门(1): 基础/判别/循环

    c基础入门, 小学生也可以都看得懂!!!! 安装一个编译器, 这方面我不太懂, 安装了DEV-C++  ,体积不大,30M左右吧, 感觉挺好用,初学者够了. 介绍下DEV 的快键键: 恢复 Ctrl+ ...

  2. 小学生都看得懂的C语言入门(5): 指针

    现在已经学到C语言的后面了, 快学完咯.... (一)取地址运算 先来看一下sizeof 计算所占字节 #include<stdio.h> int main() { int a; a=; ...

  3. 小学生都看得懂的C语言入门(6): 字符串

    1.字符用 char 表示 #include<stdio.h> int main() { char c; char d; c=; d='; if (c==d){ printf(" ...

  4. 小学生都看得懂的C语言入门(4): 数组与函数

    // 之前判断素数, 只需要到sqrt(x)即可,//更加简单的, 判断能够比已知的小于x的素数整除, 运行更快 #include <stdio.h> // 之前判断素数, 只需要到sqr ...

  5. 小学生都看得懂的C语言入门(3): 数组与函数

    #include <stdio.h> int main() { int x; ; ; scanf("%d",&x){ sum+=x; cnt++; scanf( ...

  6. 小学生都能读懂的网络协议之:WebSocket

    目录 简介 webSocket vs HTTP HTTP upgrade header websocket的优点 webScoket的应用 websocket的握手流程 WebSocket API 总 ...

  7. 胖虎都看得懂的CSS入门

    CSS入门 CSS是什么 摘自维基百科 层叠样式表(英语:Cascading Style Sheets,简写CSS),又称串样式列表.级联样式表.串接样式表.层叠样式表.階層式樣式表,一种用来为结构化 ...

  8. 小白都看得懂的Javadoc上手教程

    Javadoc是什么 官方回答: Javadoc is a tool for generating API documentation in HTML format from doc comments ...

  9. 小白都看得懂的Javadoc使用教程

    Javadoc是什么 官方回答: Javadoc is a tool for generating API documentation in HTML format from doc comments ...

随机推荐

  1. sqlmap 使用总结

    一直在用sqlmap,一直在浅层的使用方面,所以我想深入了解一下sqlmap. 参考文章: Sqlmap使用教程[个人笔记精华整理]        http://www.vuln.cn/1992 sq ...

  2. 实验吧 ASCII艺术

    题目链接:http://ctf5.shiyanbar.com/ppc/acsii.php 首先我们先理清题意,题目的意思是将下面这样这些小叉叉组成的数字,连起来输入得到flag,并且要在两秒以内. 两 ...

  3. Spring重温(三)--Spring依赖注入(DI)

    前言:在Spring框架中,DI(依赖注入)是用来定义对象彼此间的依赖,主要有set方法注入和构造器注入两种方式.另外,当一个类包含多个构造函数带的参数相同,它总是会造成构造函数注入参数类型歧义的问题 ...

  4. C++以const 作为返回值类型的意义

    const rational operator*(const rational& lhs, const rational& rhs); 很多程序员第一眼看到它会纳闷:为什么operat ...

  5. [转] pytorch指定GPU

    查过好几次这个命令,总是忘,转一篇mark一下吧 转自:http://www.cnblogs.com/darkknightzh/p/6836568.html PyTorch默认使用从0开始的GPU,如 ...

  6. P4553 80人环游世界

    题目地址:P4553 80人环游世界 上下界网络流 无源汇上下界可行流 给定 \(n\) 个点, \(m\) 条边的网络,求一个可行解,使得边 \((u,v)\) 的流量介于 \([B(u,v),C( ...

  7. 【ARTS】01_20_左耳听风-20190325~20190331

    zz## ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 ...

  8. LordPE修复从进程dump出来的内存文件

    场景 应急响应中从进程发现被注入了EXE文件,通过processhacker的Memory模块dump出来注入的文件.PE修复后在IDA里反汇编查看这个恶意代码的功能是什么. 解决 LordPE 虚拟 ...

  9. mingw zlib-1.2.11 win32-static.patch

    diff --git a/Makefile.in b/Makefile.in index 1852192..c88f5b5 100644 --- a/Makefile.in +++ b/Makefil ...

  10. (常用)configparser,hashlib,hamc模块

    configparser模块 #专门解析my.ini这种形式的文件(cnf) import configparser  config=configparser.ConfigParser()  conf ...