1.写代码将三个整数数按从大到小输出。
例如:
输入:2 3 1
输出:3 2 1
第一种方法:
首先输入三个数,然后判断a是不是最大的,如果是,再判断b和c之间谁大;如果不是,则判断b和c谁是最大的,之后同理。代码如下:
int main() { /*写代码将三个整数数按从大到小输出。 例如: 输入:2 3 1 输出:3 2 1*/ int a, b, c = 0; scanf("%d %d %d", &a,&b,&c); if (a > b && a > c) { if (b >= c) { printf("%d %d %d\n", a, b, c); } else { printf("%d %d %d\n", a, c, b); } } else if (b > a && b > c) { if (a >= c) { printf("%d %d %d\n", b, a, c); } else { printf("%d %d %d\n", b, c, a); } } else if (c > a && c > b) { if (a >= b) { printf("%d %d %d\n", c, a, b); } else { printf("%d %d %d\n", c, b, a); } } else { printf("%d %d %d\n", a, b, c); } return 0; }第二种方法:
比较a和b的大小,如果b大,则交换a和b的值,如果a大,再比较a和c的大小,如果c大,交换a和c的值,之后再比较b和c的值,如果c大,交换b和c的值,最后依次输出a,b,c。代码如下:
//方法二 int main() { int a, b, c = 0; scanf("%d %d %d", &a, &b, &c);////如果这里加上scanf会导致进入循环后输入的数据被丢弃,导致程序无法执行 while (scanf("%d %d %d", &a, &b, &c)!=EOF) { if (a < b) { int i = a; a = b; b = i; } if (a < c) { int i = a; a = c; c = i; } if (b < c) { int i = b; b = c; c = i; } printf("%d %d %d\n", a, b, c); } return 0; }2.下面代码的执行结果是什么( )
#include <stdio.h> int main() { int x = 3; int y = 3; switch (x % 2) { case 1: switch (y) { case 0: printf("first"); case 1: printf("second"); break; default: printf("hello"); } case 2: printf("third"); } return 0; }A.secondthird
B.hello
C.firstsecond
D.hellothird
答案解析:
switch语句时多分支的选择语句,switch中表达式结果命中那个case,就执行该case子项,如果case子项后没有跟break语句,则继续往下执行。
关于该题解析,请看以下注解:
#include <stdio.h> int main() { int x = 3; int y = 3; switch (x % 2) { // x%2的结果为1,因此执行case1 case 1: switch (y) // y是3,因此会执行case3,而case3不存在,那只能执行default { case 0: printf("first"); case 1: printf("second"); break; default: printf("hello"); // 打印hello,打印完之后,内部switch结束,此时外部case1结束 } // 因为外部case1之后没有添加break语句,所以继续执行case2 case 2: // 打印third printf("third"); // 外部switch结束 } return 0; }即:先在内部switch的default位置打印hello,紧接着在外部case2中打印third
因此:选择D
3.KiKi想知道,已经给出的三条边 aa、bb、cc 能否构成一个非退化三角形,如果能构成,判断三角形的类型(等边三角形、等腰三角形或普通三角形)。
【名词解释】
非退化三角形:三条边长均大于 00 且任意两边之和均大于第三边的三角形。
输入描述:
在一行上输入三个整数 a,b,c(0<a,b,c<10)a,b,c(0<a,b,c<10),表示三角形的三条边。
输出描述:
在一行上输出一个字符串,表示三角形的类型,具体地:
∙ ∙如果三角形是等边三角形,则输出 Equilateral triangle!Equilateral triangle!;
∙ ∙如果三角形是等腰三角形,则输出 Isosceles triangle!Isosceles triangle!;
∙ ∙如果三角形是普通三角形,则输出 Ordinary triangle!Ordinary triangle!;
∙ ∙如果不能构成非退化三角形,则输出 Not a triangle!Not a triangle!。
解题思路:
首先判断是不是等边三消息,如果是则输出,如果不是再判断是不是等腰三角形,如果是则输出,如果不是则后面类推,代码如下:
#include <stdio.h> int main() { int a = 0; int b = 0; int c = 0; while(~scanf("%d %d %d", &a, &b, &c)) { if((a+b>c) && (a+c>b) && (b+c>a)) { //三角形 if(a==b && b==c)//等边三角形 { printf("Equilateral triangle!\n"); } else if(((a==b)&&(b!=c)) || ((a==c)&&(c!=b)) || ((b==c)&&(c!=a)))//等腰 { printf("Isosceles triangle!\n"); } else { printf("Ordinary triangle!\n"); } } else { //不是三角形 printf("Not a triangle!\n"); } } return 0; }4.计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值,打印出结果
解题思路:
1. 从上述表达式可以分析出
a. 该表达式主要由100项,基数项为正,偶数项为负
2. 设置一个循环从1~100,给出表达式中的每一项:1.0/i, 注意此处不能使用1,否则结果全部为0
然后使用flag标记控制奇偶项,奇数项为正,偶数项为负
然后将所有的项相加即可
代码如下:
#include <stdio.h> int main() { int i = 0; double sum = 0.0; int flag = 1; for (i = 1; i < 100; i++) { sum = sum + (1.0 / i) * flag;//如果不是double类型会导致后面计算结果都为0 flag = -flag; } printf("%lf\n", sum); return 0; }5.编写程序数一下 1到 100 的所有整数中出现多少个数字9
解题思路:
1. 给一个循环从1遍历到100,拿到每个数据后进行一下操作
2. a. 通过%的方式取当前数据的个位,检测个位数据是否为9
如果是,给计数器加1
b. 通过/的方式取当前数据的十位,检测十位数据是否是9,
如果是,给计数器加1
循环一直继续,直到所有的数据检测完,所有9的个数已经统计在count计数中。
代码如下:
#include <stdio.h> int main() { int i = 0; int count = 0; for (i = 1; i <= 100; i++) { if (i % 10 == 9) { count++; } if (i / 10 == 9)//if前面不要加else,不然轮到99时,执行完前面的if就不会执行下个if了 { count++; } } printf("%d\n", count); return 0; }6.打印1000年到2000年之间的闰年
解题思路:
要求1000年到2000年之间的闰年,只需要知道求解闰年的方法即可。
闰年的条件:如果N能够被4整除,并且不能被100整除,则是闰年
或者:N能被400整除,也是闰年
即:4年一润并且百年不润,每400年再润一次
代码如下:
#include <stdio.h> int main() { int year = 0; for(year=1000; year<=2000; year++) { if(((year%4==0)&&(year%100!=0))||(year%400==0)) { printf("%d ", year); } } return 0; }