第一部分:选择结构
1. 输入一个华氏温度f,要求输出摄氏温度c。公式为c=5/9(f-32)。输出要求有文字说明,取2位小数。
#include <stdio.h>
int main()
{
double fahrenheit, celsius;
printf("请输入华氏温度:");
scanf("%lf", &fahrenheit);
celsius = 5 * (fahrenheit - 32) / 9;
printf("%.1lf华氏度 = %.2lf摄氏度\n", fahrenheit, celsius);
}
2. 有一函数,用scanf函输入x的值,求y值。
#include <stdio.h>
int main()
{
double x, y;
printf("请输入x:");
scanf("%lf", &x);
if (x < 1)
y = x;
else if (x < 10)
y = 2 * x - 1;
else
y = 3 * x - 11;
printf("x= %f, y= %lf\n", x, y);
}
3. 从键盘上输入一个正整数,判断这个数能否同时被3和5整除
方法一:直接使用嵌套的if … else …. 来判断完成
#include <stdio.h>
int main()
{
int n;
printf("请输入n:");
scanf("%d", &n);
if (n % 3 == 0)
{
if (n % 5 == 0)
printf怎么加两个条件 printf("%d 能同时被3 和5 整除\n", n);
else
printf("%d 只能被3 整除\n", n);
}
else
{
if (n % 5 == 0)
printf("%d 只能被5 整除\n", n);
else
printf("%d 既不能被 3,也不能被 5 整除\n", n);
}
}
方法二:使用标志法来完成
#include <stdio.h>
int main()
{
int n, tag = 0; /* tag 为状态标志 */
printf("请输入n:");
scanf("%d", &n);
if (n % 3 == 0)
tag += 1;
if (n % 5 == 0)
tag += 2;
switch (tag)
{
case 0:
printf("%d 既不能被 3,也不能被 5 整除\n", n);
break;
case 1:
printf("%d 只能被3 整除\n", n);
break;
case 2:
printf("%d 只能被5 整除\n", n);
break;
case 3:
printf("%d 能同时被3 和5 整除\n", n);
break;
}
}
4. 设计算法输入一个四位正整数,将它们倒排,例如输入1234,输出4321。
方法一:直接使用顺序程序设计从个位开始往前分割
#include <stdio.h>
int main()
{
unsigned int n, a, b, c, d;
printf("请输入n(四位数):");
scanf("%d", &n);
a = n % 10; /* 个位 */
b = n / 10 % 10; /* 十位 */
c = n / 100 % 10; /* 百位 */
d = n / 1000; /* 千位 */
if (d > 9)
printf("%d 超过了四位\n", n);
else
printf("颠倒 %d%d%d%d 得到 %d%d%d%d\n", d, c, b, a, a, b, c, d);
}
方法二:使用循环完成
#include <stdio.h>
int main( )
{
int n;
printf("请输入n(四位数):");
scanf("%d", &n);
if (n < 1000 || n > 9999)
{
printf("输入的数据不在范围内!\n");
return -1;
}
printf("%d 颠倒后是 ", n);
while (n > 0)
{
printf("%d", n % 10);
n /= 10;
}
printf("\n");
return 0;
}
方法三:使用递归函数完成
#include <stdio.h>
void Reverse(int m);/* 颠倒函数原型 */
int main( )
{
int n;
printf("请输入n(四位数):");
scanf("%d", &n);
if (n < 1000 || n > 9999)
{
printf("输入的数据不在范围内!\n");
return -1;
}
printf("%d 颠倒后是 ", n);
Reverse(n);
printf("\n");
return 0;
}
void Reverse(int m)
{
if (m > 0)
{
printf("%d", m % 10);
Reverse(m / 10);
}
}
5. 由键盘输入3个整数a、b、c,作为三角形的三条边,判断能否构成三角形,若不能构成,请给出提示信息;若能构成三角形,指出构造的是何种三角形(等腰三角形、直角三角形、一般三角形)。
下面的示例程序使用了标志法来枚举所有的条件,也可以用嵌套的if … else … 来实现功能,但程序流程略重复,如果事先对输入的3 个边长来排一下序,也可以减少部分判断条件。
另外,实际运行中手工输入的数据不可能满足等腰直角三角形的条件。
另外,实际运行中手工输入的数据不可能满足等腰直角三角形的条件。
#include <stdio.h>
int main()
{
int a, b, c, tag = 0; /* tag 为状态标志 */
printf("请输入三角形的三个边长(用空格分隔):");
scanf("%d%d%d", &a, &b, &c);
if (a <= 0 || b <= 0 || c <= 0)
printf("输入的边长数据错误\n");
else if (a + b <= c || a + c <= b || b + c <= a)
printf("输入的边长无法构成三角形\n");
else
{
if (a * a + b * b == c * c || a * a + c * c == b * b || b * b + c * c == a * a)
tag += 1; /* 直角三角形 */
if (a == b || b == c || a == c)
{
if (a == b && b == c)
tag += 4; /* 等边三角形 */
else
tag += 2; /* 等腰三角形 */
}
switch (tag)
{
case 1:
printf("边长 %d, %d, %d 构成直角三角形\n", a, b, c);
break;
case 2:
printf("边长 %d, %d, %d 构成等腰三角形\n", a, b, c);
break;
case 3:
printf("边长 %d, %d, %d 构成等腰直角三角形\n", a, b, c);
break;
case 4:
printf("边长 %d, %d, %d 构成等边三角形\n", a, b, c);
break;
default:
printf("边长 %d, %d, %d 构成普通三角形\n", a, b, c);
break;
}
}
}
有兴趣可以和前面的第3题对照起来考虑,标志应当如何设置才能区分出各个情况,如果逻辑条件更复杂时又应当如何设置?
6. 从键盘上输入一个百分制成绩score,按下列原则输出其等级:A=90~100, B=80~89,C=70~79,D=60~69,F=0~59,高于100或低于0显示错误信息。
方法一:使用嵌套的if … else … 来完成
#include <stdio.h>
int main()
{
int score;
printf("请输入百分制的成绩:");
scanf("%d", &score);
if (score < 0 || score > 100)
printf("%d 分不是正确的分数\n", score);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论