题目一:企业发放的奖金根据利润提成。利润低于或等于 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%提成,从键盘输入当月利润I,求应发放奖金总数?
分析:先不管任务只看需要的材料,可知道变量有利润profit和奖金bonus两个,细节之处见注释。
看任务可知变量之间的关联,需要分段,为了简化分段我们在分段前用一下宏定义来分段。
#include<stdio.h>
#define Bonus10 (100000*0.1F) //UL无符号长整型放在括号中,会报错的,利润满10万
#define Bonus20 (Bonus10+100000*0.075F) //利润满20万
#define Bonus40 (Bonus20+200000*0.05F) //利润满40万
#define Bonus60 (Bonus40+200000*0.03F) //利润满60万
#define Bonus100 (Bonus60+400000*0.015F) //利润满100万
void main(void)
{
double profit; //注意此变量的数据类型
float bonus;
scanf("%f",&profit);
if(profit<=100000) bonus=profit*0.1;
else if(profit<=200000) bonus=Bonus10+(profit-100000)*0.075;
else if(profit<=400000) bonus=Bonus20+(profit-200000)*0.05;
else if(profit<=600000) bonus=Bonus40+(profit-400000)*0.03;
else if(profit<=1000000) bonus=Bonus60+(profit-600000)*0.015;
else bonus=Bonus100+(profit-1000000)*0.01;
printf("bonus=%d",bonus);
}
注:#define SECONDS_PER_YEAR (60 * 60 * 24 * 365UL)//此处(60 * 60 * 24 * 365)UL会报错,注意括号中写的数据类型不同,UL和F是不同的数据类型。
题目二:输入某年某月某日,判断这一天是这一年的第几天?
1.程序分析:以3月5日为例,应该先把前两个月的加起来, 然后再加上 5天即本年的第几天,特殊 情况, 闰年且输入月份大于 3时需考虑多加一天。
#include<stdio.h>
void main(viod)
{
int day,month,year,sum=0,leap;
printf("\nplease input year,month,day\n");
scanf("%d,%d,%d",&year,&month,&day);
switch(month) /*先计算某月以前月份的总天数*/
{
case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=59;break;
case 4:sum=90;break;
case 5:sum=120;break;
case 6:sum=151;break;
case 7:sum=181;break;
case 8:sum=212;break;
case 9:sum=243;break;
case 10:sum=273;break;
case 11:sum=304;break;
case 12:sum=334;break;
default:printf("data error");break;
}
sum=sum+day; /*再加上某天的天数*/
if(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/
leap=1;
else
leap=0;
if(leap==1&&month>2)/*如果是闰年且月份大于 2,总天数应该加一天*/
sum++;
printf("It is the %dth day.",sum);
}
题目三:输出9*9 口诀。
1.程序分析:分行与列考虑,共9行 9 列,i控制行,j控制列。这里我们不想输出重复的数,比如第一行输出了1*2,那么第二行我们就直接从2*2开始输出。
#include <stdio.h>
void main(void)
{
int i,j,result;
printf("\n");
for (i=1;i<10;i++)
{ for(j=i;j<10;j++)
{
result=i*j;
printf("%d*%d=%-3d",i,j,result);/*-3d表示左对齐,占 3位*/
}
printf("\n\r");/*每一行后换行*/
}
}
题目三:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月 后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
1. 程序分 析: 兔子 的 规律 为 数列
1,1,2,3,5,8,13,21....
#include <stdio.h>
void main(void)
{
long f1,f2;
int i;
f1=f2=1;
for(i=1;i<=20;i++)
{ printf("%12ld %12ld",f1,f2);
if(i%2==0) printf("\n");/*控制输出,每行四个*/
f1=f1+f2; /*前两个月加起来赋值给第三个月*/
f2=f1+f2; /*前两个月加起来赋值给第三个月*/
}
}
题目四:利用条件运算符的嵌套来完成此题:学习成绩>=90 分的同学用 A 表示,60-89分之间的用B表示, 60分以下的用C表示。
#include <stdio.h>
void main(void)
{int score;
char grade;
printf("please input a score\n");
scanf("%d",&score);
grade=score>=90?'A':(score>=60?'B':'C');
printf("%d belongs to %c",score,grade);
}
题目五: 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
1.程序分析:利用 while 语句,条件为输入的字符不为'\n'.
2.这里是实时处理数据,没有存储。如果是实时处理,就必须有个标识告诉程序,数据已经结束了。
#include"stdio.h"
main()
{char c;
int letters=0,space=0,digit=0,others=0;
printf("please input some characters\n");
while((c=getchar())!='\n')
{
if(c>='a'&&c<='z'||c>='A'&&c<='Z') letters++;
else if(c==' ') space++;
else if(c>='0'&&c<='9') digit++;
else others++;
}
printf("all in all:char=%d space=%d digit=%d others=%d\n",letters, space,digit,others);
}
题目六: 请输入星期几的第一个字母来判断一下是星期几, 如果第一个字母一样, 则继续判断第二个字母。
1.程序分析:首先我们知道这里肯定要用到判断,问题是判断和谁结合着用。我们以往写的程序,if语句往往和循环结合着用,而这里用的是switch分支语句在加判断。
#include <stdio.h>
void main()
{
char letter;
printf("please input the first letter of someday\n");
while ((letter=getchar())!='Y' )/* 当所按字母为Y 时才结束*/
{
switch (letter)
{case 'S': printf("please input second letter\n");
if((letter=getch())=='a' ) printf("saturday\n");
else if ((letter=getch())=='u') printf("sunday\n");
else printf("data error\n");
break;
case 'F': printf("friday\n"); break;
case 'M': printf("monday\n"); break;
case 'T': printf("please input second letter\n");
if((letter=getch())=='u') printf("tuesday\n");
else if ((letter=getch())=='h') printf("thursday\n");
else printf("data error\n");
break;
case 'W': printf("wednesday\n");break;
default: printf("data error\n");
}
}
}