1.编写一个程序,确定一个数的位数:
Enter a number : 374
The number 374 has 3 digits
假设输入的数最多不超过4位。提示:利用 if 语句进行数的判定。例如,如果数在0和9之间,那么位数为1;如果数在 10 和 99 之间,那么位数为2。
#include<stdio.h>
int main()
{
int number;
printf("Enter a number;");
scanf("%d",&number);
if(number>=0&&number<=9)
printf("The number %d has 1 digits\n",number) ;
else if(number>=10&&number<=99)
printf("The number %d has 2 digits\n",number) ;
else if(number>=100&&number<=999)
printf("The number %d has 3 digits\n",number) ;
else
printf("The number %d has 4 digits\n",number) ;
return 0;
}
2.编写一个程序,要求用户输入24小时制的时间,然后显示12小时制的格式:
Enter a 24-hour time: 21:11
Equivalent 12-hour time: 9:11 PM
#include<stdio.h>
int main()
{
int hour=0,min=0;
printf("Enter a 24-hour time: ");
scanf("%d:%d",&hour,&min);
if(hour>=13)
printf("Equivalent 12-hour time: %d:%d PM",hour-12,min);
else
printf("Equivalent 12-hour time: %d:%d AM",hour,min);
return 0;
}
3.修改5.2节的 broker.c 程序,同时进行下面两种改变。
a)不再直接输入交易额,而是要求用户输入股票的数量和每股的价格。
b)增加语句用来计算经纪人竞争对手的佣金(少于2000股时佣金为每股33美元+3美分,2000股或更多股时为佣金为每股33美元+2美分)。在显示原有经纪人佣金的同时,也显示竞争对手的佣金。
#include<stdio.h>
int main(void)
{
float commission, value, price, ccommission;
int amount;
printf("Enter amount and the price of stock: ");
scanf("%d %f",&amount,&price);
value = amount * price;
if (value < 2500.00f)
commission = 30.00f + .017f * value;
else if (value < 6250.00f)
commission = 56.00f + .0066f * value;
else if (value < 20000.00f)
commission = 76.00f + .0034f * value;
else if (value < 50000.00f)
commission = 100.00f + .0022f * value;
else if (value < 500000.00f)
commission = 155.00f + .0011f * value;
else
commission = 255.00f + .0009f * value;
if (commission < 39.00f)
commission = 39.00f;
printf("Commission: $%.2f\n",commission);
if (amount<2000)
ccommission = 33 + 0.03 * amount;
else
ccommission = 33 + 0.02 * amount;
printf("Commission of Others: $%.2f\n",ccommission);
return 0;
}
4.下面是用于测量风力的蒲福风力等级的简化版本:
编写一个程序,要求用户输入风速(海里/小时),然后显示相应的描述。
#include<stdio.h>
int main()
{
float rate;
printf("Enter the wind speed (n mile/hour): ");
scanf("%f",&rate);
if(rate<1)
printf("Calm");
else if(rate<3)
printf("Light air");
else if(rate<27)
printf("Breeze");
else if(rate<47)
printf("Gale");
else if(rate<63)
printf("Storm");
else
printf("Hurricane");
return 0;
}
5.在美国的某个州,单身居民需要担负下面表格列出的所得税。
编写一个程序,要求用户输入需纳税的收入,然后显示税金。
#include<stdio.h>
int main()
{
float sum=0;
printf("Enter taxable income: ");
scanf("%f",&sum);
if(sum<750)
printf("%.2f",sum*0.01);
else if(sum<2250)
printf("%.2f",7.50+(sum-750)*0.02);
else if(sum<3750)
printf("%.2f",37.50+(sum-2250)*0.03);
else if(sum<5250)
printf("%.2f",82.50+(sum-3750)*0.04);
else if(sum<7000)
printf("%.2f",142.50+(sum-5250)*0.05);
else
printf("%.2f",230.00+(sum-7000)*0.06);
return 0;
}
6.修改4.1节的 upc.c 程序,使其可以检测 UPC 的有效性。在用户输入 UPC 后,程序将显示 VALID 或 NOT VALID 。
#include<stdio.h>
int main()
{
int a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p;
printf("Enter the first 12 digits of a UPC: ");
scanf("%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d",&a,&b,&c,&d,&e,&f,&g,&h,&i,&j,&k,&l);
m=a+c+e+g+i+k,n=b+d+f+h+j,o=m*3+n,p=9-(o-1)%10;
if(p==l)
printf("VALID");
else
printf("NOT VALID");
return 0;
}
7.编写一个程序,从用户输入的4个整数中找出最大值和最小值:
Enter four integers: 21 43 10 35
Largest: 43
Smallest: 10
要求尽可能少用 if 语句。提示:4条 if 语句就足够了。
#include<stdio.h>
int main()
{
int num1,num2,num3,num4;
int max1,max2,min1,min2;
printf("Enter four integers: ");
scanf(" %d %d %d %d",&num1,&num2,&num3,&num4);
if(num1>num2)
max1=num1,min1=num2;
else
max1=num2,min1=num1;
if(num3>num4)
max2=num3,min2=num4;
else
max2=num4,min2=num3;
printf("Largest: %d\n",max1>max2?max1:max2);
printf("Smallest: %d\n",min1<min2?min1:min2);
return 0;
}
8.下面的表格给出了一个城市到另一个城市的航班信息。
编写一个程序,要求用户输入一个时间(用24小时制的时分表示)。程序选择起飞时间与用户输入最接近的航班,显示出相应的起飞时间与用户输入最接近的航班,显示出相应的起飞时间和抵达时间。
Enter a 24-hour time: 13:15
Closest departure time is 12:17 p.m., arriving at 3:00 p.m.
提示:把输入用午夜开始的分钟数表示。将这个时间与表格里也用午夜开始的分钟数表示的起飞时间相比。例如, 13:15 从午夜开始是 13*60+15=795 分钟,与下午 12:47 (从午夜开始是 767 分钟)最接近。
#include<stdio.h>
int main()
{
int hour=0,min=0,time=0;
printf("Enter a 24-hour time: ");
scanf("%d:%d",&hour,&min);
time=hour*60+min;
if( time < (480+583)/2)
printf("Closest departure time is 8:00 a.m., arriving at 10:06 a.m.");
else if (time < (583+679)/2)
printf("Closest departure time is 9:43 a.m., arriving at 11:52 a.m.");
else if( time < (679+767)/2)
printf("Closest departure time is 11:19 a.m., arriving at 1:31 p.m.");
else if( time < (767+840)/2)
printf("Closest departure time is 12:47 a.m., arriving at 3:00 p.m.");
else if( time < (840+945)/2)
printf("Closest departure time is 2:00 p.m., arriving at 4:08 p.m.");
else if( time < (945+1140)/2)
printf("Closest departure time is 3:45 p.m., arriving at 5:55 p.m.");
else if( time < (1140+1305)/2)
printf("Closest departure time is 7:00 p.m., arriving at 9:20 p.m.");
else if( time < (135+480)/2)
printf("Closest departure time is 9:45 p.m., arriving at 11:58 p.m.");
else
printf("Closest departure time is 9:45 p.m., arriving at 11:58 p.m.");
return 0;
}
9.编写一个程序,提示用户输入两个日期,然后显示哪一个日期更早:
Enter first date (mm/dd/yy) : 3/6/08
Enter second date (mm/dd/yy) :5/17/07
5/17/07 is earlier than 3/6/08
#include<stdio.h>
int main()
{
int m1,d1,y1,m2,d2,y2;
printf("Enter first date (mm/dd/yy): ");
scanf("%d/%d/%d",&m1,&d1,&y1);
printf("Enter second date (mm/dd/yy): ");
scanf("%d/%d/%d",&m2,&d2,&y2);
if(y1<y2||(y1==y2&&m1<m2)||(y1==y2&&m1==m2&&d1<d2))
printf("%d/%d/%02d is earlier than %d/%d/%02d",m1,d1,y1,m2,d2,y2);
else
printf("%d/%d/%02d is earlier than %d/%d/%02d",m2,d2,y2,m1,d1,y1);
return 0;
}
10.利用 switch 语句编写一个程序,把用数字表示的成绩转化为用字母表示的等级。
Enter numerical grade: 84
Letter grade: B
使用下面的等级评定规则:A为 90~100,B为 80~89,C为 70~79,D为 60~69,F为 0~59。
如果成绩高于 100 或低于 0 显示出错消息。提示:把成绩分成 2 个数字,然后使用 switch 语句判定十位上的数字。
#include<stdio.h>
int main()
{
int grade=0,rank=0;
printf("Enter numerical grade:");
scanf("%d",&grade);
if( grade>100 || grade<0 )
{
printf("Error input grade, exit.");
return 0;
}
rank=grade/10;
switch(rank)
{
case 10:
case 9: printf("Letter grate: A");
break;
case 8: printf("Letter grate: B");
break;
case 7: printf("Letter grate: C");
break;
case 6: printf("Letter grate: D");
break;
default: printf("Letter grate: F");
break;
}
return 0;
}
11.编写一个程序,要求用户输入一个两位数,然后显示该数的英文单词:
Enter s two-digit nuumber: 45
You entered the number forty-five.
提示:把数字分为两个数字。用一个 switch 语句显示第一位数字对应的单词(“twenty” “thirty” 等),用第二的 switch 语句显示第二个数字对应的单词。不要忘记 11~19 需要特殊处理。
#include<stdio.h>
int main()
{
int m,d,number;
printf("Enter a two-digit number: ");
scanf("%d",&number);
m=number/10;
d=number%10;
printf("You entered the number: ");
if(number<=20)
{
switch(number)
{
case 10: printf("ten");
break;
case 11: printf("eleven");
break;
case 12: printf("twelve");
break;
case 13: printf("thirteen");
break;
case 14: printf("fourteen");
break;
case 15: printf("fifteen");
break;
case 16: printf("sixteen");
break;
case 17: printf("seventeen");
break;
case 18: printf("eighteen");
break;
case 19: printf("nineteen");
break;
case 20: printf("twenty");
break;
}
}
else
{
switch(m)
{
case 2: printf("twenty");
break;
case 3: printf("thirty");
break;
case 4: printf("forty");
break;
case 5: printf("fifty");
break;
case 6: printf("sixty");
break;
case 7: printf("seventy");
break;
case 8: printf("eighty");
break;
case 9: printf("ninety");
break;
}
switch(d)
{
case 1: printf("-one");
break;
case 2: printf("-two");
break;
case 3: printf("-three");
break;
case 4: printf("-four");
break;
case 5: printf("-five");
break;
case 6: printf("-six");
break;
case 7: printf("-seven");
break;
case 8: printf("-eight");
break;
case 9: printf("-nine");
break;
}
}
return 0;
}