选择结构
1
编写程序,要求程序运行时,从键盘输入三个整数,输出其中最小的一个数。
#include <stdio.h>
int main() {
int a, b, c, min;
scanf("%d%d%d", &a, &b, &c);
min = a;
if (b < min) {
min = b;
}
if (c < min) {
min = c;
}
printf("%d\n", min);
return 0;
}
程序首先使用scanf
函数从键盘读取这三个整数的值,存储在变量a
、b
和c
中。然后使用一个变量min
来存储这三个数中的最小值,初始化为第一个数a
。接着分别与第二个数b
和第三个数c
进行比较,如果有更小的数,则更新min
的值。最后使用printf
函数输出最小数的值。
2
编写程序,要求程序运行时,从键盘输入某个学生某门课程的成绩(0-100间的整数),当成绩高于90分时,输出A;成绩在 80-89之间,输出B;成绩在70-79之间,输出C;成绩在60-69之间,输出D;成绩在0-59之间,输出E。输入成绩不在0-100 范围,输出error!
#include<stdio.h>
int main(){
int score;
scanf("%d",&score);
if(score>=90&&score<=100)
printf("A");
if(score>=80&&score<=89)
printf("B");
if(score>=70&&score<=79)
printf("C");
if(score>=60&&score<=69)
printf("D");
if(score>=0&&score<=59)
printf("E");
if(score>100||score<0)
printf("error!");
return 0;
}
3
编写程序,要求程序运行时,从键盘输入一个三位正整数,将它反向输出。(提示:若输入的不是正整数,输出error!若输 入三位正整数的个位数为0,十位数不为0,则输出十位数和百位数;若输入三位正整数的个位数和十位数均为0,则输出百 位数。)
方法一:
#include<stdio.h>
int main()
{
int n,a,b,c;
scanf("%d",&n);
a=n/100;
b=n/10%10;
c=n%10;
if(n<=0)
printf("error!");
else if(c==0&&b!=0)
printf("%d%d",b,a);
else if(c==0&&b==0)
printf("%d",a);
else if(n>0)
printf("%d%d%d",c,b,a);
return 0;
}
方法二:
#include<stdio.h>
int main()
{
int n,x,m;
scanf("%d",&n);
x=n;
if(n>0)
{
if(n%10!=0)
{
n/=10;
if(n%10!=0)
{
while(x>0)
{
m=x%10;
x/=10;
printf("%d",m);
}
}
}else{
n/=10;
if(n%10!=0)
{
x/=10;
while(x>0)
{
m=x%10;
x/=10;
printf("%d",m);
}
}else{
x/=10;
x/=10;
m=x;
printf("%d",m);
}
}
}else{
printf("error!");
}
return 0;
}
4
编写程序,根据利润计算奖金。要求程序运行时,从键盘输入利润,计算并输出奖金(结果保留两位小数)。已知,利润低 于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可 提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100 万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润,求应发 放奖金总数?
#include <stdio.h>
int main() {
double profit;
scanf("%lf", &profit);
double bonus = 0;
if (profit <= 100000) {
bonus = profit * 0.1;
} else if (profit <= 200000) {
bonus = 100000 * 0.1 + (profit - 100000) * 0.075;
} else if (profit <= 400000) {
bonus = 100000 * 0.1 + 100000 * 0.075 + (profit - 200000) * 0.05;
} else if (profit <= 600000) {
bonus = 100000 * 0.1 + 100000 * 0.075 + 200000 * 0.05 + (profit - 400000) * 0.03;
} else if (profit <= 1000000) {
bonus = 100000 * 0.1 + 100000 * 0.075 + 200000 * 0.05 + 200000 * 0.03 + (profit - 600000) * 0.015;
} else {
bonus = 100000 * 0.1 + 100000 * 0.075 + 200000 * 0.05 + 200000 * 0.03 + 400000 * 0.015 + (profit - 1000000) * 0.01;
}
printf("%.2lf\n", bonus);
return 0;
}
程序首先使用scanf函数读取用户输入的浮点数,并将其存储在变量profit中。接下来,程序使用if-else语句根据利润计算奖金,根据不同的利润范围采用不同的计算方式。最后,程序使用printf函数输出计算结果,保留两位小数。
5
编写程序,要求程序运行时,从键盘输入x的值,根据分段函数计算并输出y的值(结果保留两位小数)。分段函数如下。(提 示:可使用求平方根函数:sqrt())
#include<stdio.h>
#include<math.h>
int main()
{
int x;
double y;
scanf("%d",&x);
if(x<1)
{
y=x*x+2*x+sin(x);
}else if(x>=1&&x<=10)
{
y=2*x-1;
}else{
y=sqrt(2*x*x*x-11);
}
printf("%.2f",y);
return 0;
}
#include<stdio.h>
#include<math.h>
int main()
{
double x;
scanf("%lf",&x);
if(x<1)
printf("%.2lf",x*x+2.0*x+sin(x));
if(x>=1&&x<=10)
printf("%.2lf",2.0*x-1);
if(x>10)
printf("%.2lf",sqrt(2.0*x*x*x-1));
return 0;
}
6
编写程序判断字符类型,要求程序运行时,从键盘输入一个字符,输出该字符的类型。若输入的字符是字母则输出:It is an alphabetic character.,若输入的字符是数字则输出:It is a digit.,若输入的字符是其他字符则输出:It is other character.。
方法一:
#include <stdio.h>
int main() {
char c;
scanf("%c", &c);
if (c >= 'a' && c <= 'z') {
printf("It is an alphabetic character.\n");
} else if (c >= 'A' && c <= 'Z') {
printf("It is an alphabetic character.\n");
} else if (c >= '0' && c <= '9') {
printf("It is a digit.\n");
} else {
printf("It is other character.\n");
}
return 0;
}
程序首先声明了一个char类型的变量c,用于存储输入的字符。然后使用printf函数输出提示信息,让用户输入一个字符。接着使用scanf函数读取用户输入的字符,并将其存储在变量c中。
接下来,程序使用if-else语句对输入的字符进行判断。如果字符是小写字母或大写字母,则输出相应的信息;如果字符是数字,则输出相应的信息;否则,输出其他字符的信息。最后使用return语句结束程序。
方法二:
引入 ctype.h头文件:
ctype.h中的函数原型:
- isalnum():判断字符是否为字母或数字。
- isalpha():判断字符是否为字母。
- isdigit():判断字符是否为数字。
- isgraph():判断字符是否为可打印的字符(非空格、非字母、非数字)。
- islower():判断字符是否为小写字母。
- isprint():判断字符是否为可打印的字符(包括空格)。
- isspace():判断字符是否为空格(包括空格符、制表符、换行符等)。
- isupper():判断字符是否为大写字母。
- isxdigit():判断字符是否为十六进制数字。
#include <stdio.h>
#include <ctype.h>
int main()
{
char x;
scanf("%c",&x);
if(isalpha(x))
{
printf("It is an alphabetic character");
}else if(isdigit(x))
{
printf("It is a digit.");
}else{
printf("It is other character.");
}
return 0;
}
7
编写程序,要求程序运行时,从键盘输入三角形的三条边长(整型),输出三角形的类型代码。若三角形为等边三角形,输 出:1;若三角形为等腰三角形,输出:2;若三角形为直角三角形,输出:3;若三角形为一般三角形,输出:0;若输入的 三条边不能构成三角形,输出:error!。
#include <stdio.h>
int main() {
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
if (a + b <= c || a + c <= b || b + c <= a) {
printf("error!\n"); // 边长不合法,无法构成三角形
} else if (a == b && b == c) {
printf("1\n"); // 等边三角形
} else if (a == b || a == c || b == c) {
printf("2\n"); // 等腰三角形
} else if (a * a + b * b == c * c || a * a + c * c == b * b || b * b + c * c == a * a) {
printf("3\n"); // 直角三角形
} else {
printf("0\n"); // 一般三角形
}
return 0;
}
程序首先提示用户输入三角形的三条边长,然后使用scanf
函数读取用户输入的三个整数。接下来,程序使用条件语句判断三角形的类型,并输出相应的类型代码。如果输入的边长不合法,无法构成三角形,则输出错误信息。
8
编写程序求整数的平方。要求程序运行时,从键盘输入一个整数,计算并输出该数的平方。要求:若输入的整数在1到100 之间(包括1和100),输出该数的平方,否则输出-1。
#include <stdio.h>
int main() {
int num;
printf("请输入一个整数:");
scanf("%d", &num);
if (num >= 1 && num <= 100) {
printf("%d 的平方是 %d\n", num, num * num);
} else {
printf("-1\n");
}
return 0;
}
在此程序中,首先用户输入一个整数。然后使用 scanf
函数读取用户输入的整数,并将其存储在 num
变量中。接下来,我们使用条件语句检查 num
是否在1到100之间。如果是,我们使用 printf
函数输出该数的平方;否则,我们输出 -1
。
9
编写程序求整数的立方。要求程序运行时,从键盘输入一个整数,计算并输出该数的立方。要求:若输入的整数在1到20之 间(包括1和20),输出该数的立方,否则输出-1。
#include <stdio.h>
int main() {
int num;
scanf("%d", &num);
if (num >= 1 && num <= 20) {
printf("%d 的立方是 %d\n", num, num * num * num);
} else {
printf("-1\n");
}
return 0;
}
程序首先使用scanf
函数读取用户输入的整数,并将其存储在num
变量中。接下来,程序使用条件语句检查num
是否在1到20之间。如果是,程序使用printf
函数输出该数的立方;否则,程序输出-1
。
10
编写程序,要求程序运行时,从键盘输入一个年份(整数),判断并输出该年份是否为闰年。如果是闰年,输出1,否则输 出0。闰年的判断条件是:能被4整除且不能被100整除,或者能被400整除。
#include <stdio.h>
int main() {
int year;
printf("请输入一个年份:");
scanf("%d", &year);
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
printf("1\n"); // 闰年,输出1
} else {
printf("0\n"); // 非闰年,输出0
}
return 0;
}
程序首先使用scanf
函数读取用户输入的整数,并将其存储在year
变量中。接下来,程序使用条件语句判断year
是否为闰年。如果满足闰年的条件(能被4整除且不能被100整除,或者能被400整除),则输出1;否则输出0。
11
编写程序,要求程序运行时,从键盘输入一个月份,输出2017年该月有多少天。若输入的月份不是1到12,输出error!。
#include <stdio.h>
int main() {
int month;
scanf("%d", &month);
if (month < 1 || month > 12) {
printf("error!\n");
} else {
int days;
switch(month) {
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
days = 31;
break;
case 4: case 6: case 9: case 11:
days = 30;
break;
case 2:
days = 28; // 2017年不是闰年,所以2月有28天
break;
default:
printf("error!\n"); // 如果输入的月份不在1到12之间,输出错误信息
return 1; // 返回错误代码
}
printf("%d月有%d天\n", month, days);
}
return 0; // 正常退出程序
}
这个程序首先提示用户输入一个月份,然后使用scanf
函数读取用户输入的整数,并将其存储在month
变量中。接下来,程序使用条件语句检查month
是否在1到12之间。如果不在,程序将输出"error!"并返回错误代码;否则,程序将使用switch
语句计算该月有多少天,并将结果存储在days
变量中。最后,程序输出结果,并使用return
语句结束程序。
#include<stdio.h>
int main()
{
int month,day;
scanf("%d",&month);
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
printf("31");
else if(month==2)
printf("28");
else if(month==4||month==6||month==9||month==11)
printf("30");
else
printf("error!");
return 0;
}
进阶题目:
根据输入的年/月/日,计算并输出这一天是这一年的第几天。
【输入形式】 一个格式为 y/m/d 的日期值。
【输出形式】一个整数,表示输入的日期是当年的第几天。
【样例输入】2000/12/31
【样例输出】366
#include<stdio.h>
#include<stdbool.h>
bool isrun(int year);
int main()
{
int monthday[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
int monthdayrun[12] = { 31,29,31,30,31,30,31,31,30,31,30,31 };
int year = 0, month = 0, day = 0,sumday = 0;
int n = 0;//记月
int i = 0;
printf("输入年月日:");
scanf("%d/%d/%d", &year, &month, &day);
n = month;
int sum = 0;//记总天数
if (isrun(year)) {
for (i = 1; i < n; i++)
{
sum += monthdayrun[i];
}
sum += day;
}
else {
for (i = 1; i < n; i++)
{
sum += monthday[i];
}
sum += day;
}
printf("这是%d年的第%d天", year, sum);
return 0;
}
bool isrun(int year)
{
bool isrun;
if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
isrun=true;
}
else {
isrun=false;
}
return isrun;
}
12
编写程序,要求程序运行时,从键盘求一元二次方程ax 2 +bx+c=0的系数a、b和c,计算并输出该方程实根的个数。要求:若a =0,输出error!。
#include <stdio.h>
#include <math.h>
int main() {
double a, b, c;
printf("请输入一元二次方程的系数a、b、c,以空格分隔:");
scanf("%lf %lf %lf", &a, &b, &c);
if (a == 0) {
printf("error!\n");
return 0;
}
double discriminant = b * b - 4 * a * c;
int num_roots = 0;
if (discriminant > 0) {
num_roots = 2;
} else if (discriminant == 0) {
num_roots = 1;
}
printf("该方程实根的个数为:%d\n", num_roots);
return 0;
}
在这个程序中,我们首先使用scanf
函数从键盘读取三个实数作为方程的系数a、b、c。然后,我们检查a是否为0,如果是,则输出错误信息并结束程序。否则,我们计算判别式的值,并根据判别式的值判断方程实根的个数。最后,我们使用printf
函数输出方程实根的个数。注意,输出结果中不能包含任何非数字和非控制字符。
13
编写程序计算运费。要求程序运行时,从键盘输入运输距离,计算并输出运费(结果保留两位小数)。没有折扣情况下,每 运输一个单位的距离,运费为10。标准如下:距离用s表示,当s<0时,输出error!;当0<=s<250时,没有折扣;当250<=s<500 时,%2折扣;当500<=s<1000时,%5折扣;当1000<=s<2000时,%8折扣;当2000<=s<3000时,%10折扣;当3000<=s时,%15 折扣。
#include <stdio.h>
int main() {
double s, freight;
printf("请输入运输距离:");
scanf("%lf", &s);
if (s < 0) {
printf("error!\n");
} else if (s < 250) {
freight = s * 10;
} else if (s < 500) {
freight = s * 10 * 0.98;
} else if (s < 1000) {
freight = s * 10 * 0.95;
} else if (s < 2000) {
freight = s * 10 * 0.92;
} else if (s < 3000) {
freight = s * 10 * 0.90;
} else {
freight = s * 10 * 0.85;
}
printf("运费为:%.2lf\n", freight);
return 0;
}
程序首先提示用户输入运输距离,然后使用scanf
函数读取用户输入的距离。接着,程序根据距离的不同范围,使用不同的折扣率计算运费,并将结果存储在freight
变量中。最后,程序使用printf
函数输出运费,保留两位小数。
14
编写程序,要求程序运行时,从键盘输入A、B、C、D四个等级,输出考试成绩所在的分数段。输入A,输出:85-100;输入B, 输出:70-84;输入C,输出:60-69;输入D,输出:0-60,输入等级不正确时,输出:error!。
#include <stdio.h>
int main() {
char grade;
printf("请输入考试成绩等级(A/B/C/D):");
scanf("%c", &grade);
switch(grade) {
case 'A':
printf("考试成绩在85-100分之间\n");
break;
case 'B':
printf("考试成绩在70-84分之间\n");
break;
case 'C':
printf("考试成绩在60-69分之间\n");
break;
case 'D':
printf("考试成绩在0-60分之间\n");
break;
default:
printf("输入错误,请输入A/B/C/D中的一个\n");
break;
}
return 0;
}
这个程序首先提示用户输入一个字符,然后使用scanf
函数读取用户的输入。然后,程序使用switch
语句根据用户输入的字符输出相应的分数段。如果用户输入的字符不是’A’、‘B’、‘C’或’D’,程序将输出一个错误信息。
#include"stdio.h"
int main()
{
char c;
scanf("%c",&c);
if(c=='A')
printf("85-100");
else if(c=='B')
printf("70-84");
else if(c=='C')
printf("60-69");
else if(c=='D')
printf("0-60");
else
printf("error!");
return 0;
}
15
编写程序判断两个数是否为自然数对。要求程序运行时,从键盘输入两个自然数,输出是否为自然数对。自然数对:若两个 自然数分别为A和B,其中A>B,如果A+B和A-B都是平方数,那么A、B就是自然数对。要求若A和B是自然数对,输出:1;若A 和B不是自然数对,输出:0;若A和B不是自然数对,输出:0;若A<B,则输出:error!。
方法一:
#include <stdio.h>
#include <math.h>
int is_square(int n) {
int root = sqrt(n);
return root * root == n;
}
int main() {
int a, b;
printf("请输入两个自然数,以空格分隔:");
scanf("%d %d", &a, &b);
if (a < b) {
printf("error!\n");
} else if (a == b) {
printf("1\n"); // 如果是相等的情况,也认为是自然数对
} else {
int sum = a + b;
int diff = a - b;
if (is_square(sum) && is_square(diff)) {
printf("1\n"); // 如果是自然数对的情况,输出1
} else {
printf("0\n"); // 如果不是自然数对的情况,输出0
}
}
return 0;
}
该程序首先定义了一个名为is_square
的函数,用于判断一个整数是否为平方数。然后,程序从键盘读取两个自然数,并根据它们的大小关系进行不同的处理。如果a
小于b
,则输出error!
;如果a
等于b
,则输出1
(因为相等的情况也算是自然数对);否则,计算它们的和与差,并分别判断是否为平方数。如果是自然数对的情况,则输出1
;否则,输出0
。
方法二:
#include <stdio.h>
#include<math.h>
#include<stdbool.h>
bool issquare(int n);
int main()
{
int A,B;
scanf("%d %d",&A,&B);
if(A>B)
{
if(issquare(A+B)&&issquare(A-B))
{
printf("1");
}else{
printf("0");
}
}else if(A==B)
{
if(issquare(A+B)&&issquare(A-B))
{
printf("1");
}else{
printf("0");
}
}else{
printf("error!");
}
return 0;
}
bool issquare(int n)
{
bool is;
int temp;
temp=sqrt(n);
if(temp*temp==n)
{
is=true;
}else{
is=false;
}
return is;
}
#include<stdio.h>
#include<math.h>
int main()
{
double a,b;
int t1,t2;
scanf("%lf%lf",&a,&b);
if(a<=b)
{
printf("error!");
return 0;
}
t1=sqrt(a+b)*10;
t2=sqrt(a-b)*10;
if(t1%10==0 && t2%10==0)
{
printf("1");return 0;
}
else printf("0");
return 0;
}
此外,还有多种方法可以判断两个数是否为自然数对:
- 判断两个数的平方和是否为合数。
- 判断两个数的平方和是否为平方数。
- 判断两个数的和与差是否同时为质数。
- 判断两个数的和与差是否同时为偶数。
16
编写程序,要求程序运行时,从键盘输入x的值,根据如下分段函数计算并输出y的值(结果为整数)。要求:若输入的x值 不在分段函数所列的范围内,则输出:error!。
#include<stdio.h>
int main()
{
int x,y;
scanf("%d",&x);
if(x>-5&&x<0)
{
y=x;
printf("%d\n",y);
}else if(x==0)
{
y=x-1;
printf("%d\n",y);
}else if(x>0&&x<10)
{
y=x+1;
printf("%d\n",y);
}else{
printf("error!\n");
}
return 0;
}
17
编写程序设计一个投票表决器,要求程序运行时,从键盘一个字符,按如下规则输出提示信息。规则:输入Y或y时,输出agree, 输入N或n时,输出disagree,否则,输出lose。
#include <stdio.h>
int main()
{
char x;
scanf("%c",&x);
if(x=='Y'||x=='y')
{
printf("agree");
}else if(x==
'N'||x=='n')
{
printf("disagree");
}else{
printf("lose");
}
return 0;
}
注:也可使用ASCLL码值进行判断
18
编写程序,要求程序运行时,从键盘输入一个年份(整数),判断并输出该年份是否为平年。如果是平年,输出1,否则输 出0。闰年的判断条件是:能被4整除且不能被100整除,或者能被400整除。
#include<stdio.h>
int main()
{
int a;
scanf("%d",&a);
if(a%4==0&&a%100!=0||a%400==0)
printf("0");
else
printf("1");
return 0;
}
19
编写程序求三角形面积。要求程序运行时,从键盘输入一个三角形三边长,输出其面积(结果保留两位小数)。要求:若输 入的三边长可以构成三角形,则输出该三角形的面积,否则输出-1。(提示:设三边长为a,b,c,p=(a+b+c)/2,则三角形面 积平方=p*(p-a)(p-b)(p-c);开平方可用数学函数sqrt()。)
#include <stdio.h>
#include <math.h>
int main() {
double a, b, c, p, area;
printf("请输入三角形的三边长:\n");
scanf("%lf %lf %lf", &a, &b, &c);
// 检查三边长是否能构成三角形
if (a + b > c && a + c > b && b + c > a) {
p = (a + b + c) / 2.0;
area = sqrt(p * (p - a) * (p - b) * (p - c));
printf("三角形的面积为:%.2lf\n", area);
} else {
printf("输入的三边长无法构成三角形,请重新输入。\n");
return -1;
}
return 0;
}
程序首先获取三角形的三边长,然后检查这三边长是否可以构成一个三角形(即每一边都小于其它两边之和)。如果可以,程序会计算并输出三角形的面积;如果不可以,程序会输出一个错误信息并返回-1。注意,在计算面积时,我们使用了数学函数sqrt()来计算平方根。最后,我们将结果保留两位小数并输出。
20
编写程序,要求程序运行时,从键盘输入圆的半径,计算并输出该圆的周长和面积(结果保留两位小数)。要求若半径<=0, 输出:error!。
#define M_PI 3.1415926
#include <stdio.h>
#include <math.h>
int main() {
double radius, circumference, area;
printf("请输入圆的半径:");
scanf("%lf", &radius);
// 使用选择结构进行条件判断
if (radius <= 0) {
printf("error!\n");
return 1;
}else
// 计算周长和面积
circumference = 2 * M_PI * radius;
area = M_PI * radius * radius;
// 输出结果,保留两位小数
printf("%.2lf,%.2lf。\n", circumference, area);
return 0;
}
在上面的代码中,我们首先通过scanf
函数从键盘获取用户输入的半径值。然后,我们使用选择结构(if
语句)检查半径是否小于等于0。如果是,我们输出错误消息并结束程序。否则,我们计算圆的周长和面积,并使用printf
函数输出结果,保留两位小数。在计算过程中,我们使用了数学常数M_PI
来表示圆周率π。
部分来源网络,侵删