1.4 分支结构程序设计

例题 1-4 鸡兔同笼

  已知鸡和兔的总数量为n, 总腿数为m。输入 n 和 m,依次输出鸡的数目和兔的数目。如果无解,输出No answer

  样例输入:

    14 32

  样例输出:

    12 2

  样例输入:

    10 16

  样例输出:

    No answer

【分析】

  简单的数学问题,设鸡的数量为a, 兔的数量为b。则 a+b = n, 2*a + 4*b = m;联立方程组 a=(4n - m)/2, b=n-a;结合实际a,b的值必须是非负整,而且 m 必为偶数。

程序 1-11 鸡兔同笼

 1 #include<stdio.h>
 2 int main()
 3 {
 4     int n, m;  //总只数与总腿数
 5     scanf("%d %d", &n, &m);
 6     int a, b;  //a代表的是鸡的数量,b代表兔的数量
 7     a = (4 * n - m) / 2;
 8     b = n - a;
 9 
10     if (m % 2 == 1 || a < 0 || b < 0)  //当m为奇数,鸡兔的数量小于0时输出No answer
11         printf("No answer");
12     else  //否则解符合实际输出a,b的值
13         printf("%d %d", a, b);
14 }

 这里 || 是 逻辑或 运算符,真值表在高中学集合就知道了。

C系列中的逻辑运算符都是短路运算符,一旦可以确定表达式的值,后面的内容就不再计算,被短路了。比如 || ,当a为真,就可以断定 a||b 为真,无需判定b是否为真。这样做的唯一优点就是速度快。

 

例题 1-5 三整数排序

   输入3个整数,从小到大排序后输出。

   样例输入:

    20 7 33

   样例输出:

    7 20 33

 1 #include<stdio.h>
 2 int main()
 3 {
 4     int a, b, c, t;
 5     scanf("%d %d %d", &a, &b, &c);
 6     if (a > b){t = a, a = b, b = t;}//执行完毕后a <= b
 7     if (a > c){t = a, a = c, c = t;}//执行完毕后a <= c,且a <= b仍然成立
 8     if (b > c){t = b, b= c, c = t;}
 9     printf("%d %d %d",a, b, c);
10     
11     return 0;
12 }

 

 简单,就不多说了。

 

最后抛一个简单的问题。如何连续输出“%”和“d”两个字符?

答案: 用 “%%” 输出字符 “%” 。。。。

 

posted @ 2015-07-02 13:17  Traim304  阅读(208)  评论(0编辑  收藏  举报