程序【1】.
题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
分析:123 124 134 234,不能重复、三位数
#include<stdio.h>
int main()
{
int i,j,k;
int num=0;
for(i=1;i<=4;i++)
{
for(j=1;j<=4;j++)
{
for(k=1;k<=4;k++)
{
if(i!=j&&j!=k&&i!=k)
{
printf("%d %d %d\n",i,j,k);
num++;
}
}
}
}
printf("一共%d个\n",num);
}
运行结果:
扩展:
当123 132 321 算作三种不同的顺序时,三个数进行排序的个数
#include<stdio.h> int main() { int i,j,k; int num=0; for(i=1;i<=4;i++) { for(j=1;j<=4;j++) { for(k=1;k<=4;k++) { if(i!=j&&j!=k&&i!=k) { printf("%d %d %d\n",i,j,k); num++; } } } } printf("一共%d个\n",num); }
运行结果:
程序【2】.
题目:企业发放的奖金根据利润提成。利润低于或等于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%提成,输入当月利润,求应发放奖金总数?
分析:多个if做判断,根据每种情况输出不同的奖金
#include<stdio.h>
int main()
{
long int LiRun;
double Bonus;
printf("请输入当月利润:\n");
scanf("%d",&LiRun);
if(LiRun<=100000)
Bonus=LiRun*0.1;
if(LiRun<=200000&&LiRun>100000)
Bonus=(LiRun-100000)*0.075+100000*0.1;
if(LiRun<=400000&&LiRun>200000)
Bonus=(LiRun-200000)*0.05+100000*0.1+100000*0.075;
if(LiRun<=600000&&LiRun>400000)
Bonus=(LiRun-400000)*0.03+100000*0.1+100000*0.075+200000*0.05;
if(LiRun<=1000000&&LiRun>600000)
Bonus=(LiRun-600000)*0.015+100000*0.1+100000*0.075+200000*0.05+200000*0.03;
if(LiRun>1000000)
Bonus=(LiRun-1000000)*0.001+100000*0.1+100000*0.075+200000*0.05+200000*0.03+400000*0.015;
printf("应发放奖金为%f",Bonus);
}
运行结果:
程序【3】.
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
分析:分别翻译两句,两个条件同时满足,则为要的数。(平方用sqrt(),需要加入match库)
#include<stdio.h>
#include<math.h>
int main()
{
long int i,x,y,z;
printf("该整数为:\n") ;
for(i=1;i<100000;i++)
{
x=sqrt(i+100);
y=sqrt(i+268);
if(x*x==i+100&&y*y==i+268)
printf("%d\n",i);
}
}
运行结果:
程序【4】.
题目:输入某年某月某日,判断这一天是这一年的第几天?
分析:①因为2月特殊,闰年29,过需要判断是否是闰年(能被400整除一定是闰年,或者可以被4整除但不能被100整除)。②用switch判断不同的月。③输入年月日(int),输出某天(int)
#include<stdio.h>
int main()
{
int year,month,day,sum;
while(1)
{
printf("\n请输入某年某月某日\n");
scanf("%d %d %d",&year,&month,&day);
// 1 3 5 7 8 10 12 均为31天
// 4 6 9 11 均为30天
switch(month)
{
case 1:
sum = 0;
break;
case 2:
sum = 31;
break;
case 3:
sum = 31+28;
break;
case 4:
sum = 31+28+31;
break;
case 5:
sum = 31+28+31+30;
break;
case 6:
sum = 31+28+31+30+31;
break;
case 7:
sum = 31+28+31+30+31+30;
break;
case 8:
sum = 31+28+31+30+31+30+31;
break;
case 9:
sum = 31+28+31+30+31+30+31+31;
break;
case 10:
sum = 31+28+31+30+31+30+31+31+30;
break;
case 11:
sum = 31+28+31+30+31+30+31+31+30+30;
break;
case 12:
sum = 31+28+31+30+31+30+31+31+30+30+30;
break;
}
sum = sum+day;
if( ((year%100!=0)&&(year%4==0) || (year%400==0)) &&month>2 )//判断是否是闰年|| &&同优先级
sum++;
printf("该天为%d年第%d天\n",year,sum);
}
}
运行结果:
程序【5】.
题目:输入三个整数,并排序,由小到大输出。
分析:进行替换数是需要引入一个中间变量
#include<stdio.h>
int main()
{
int max, med,min;
int temp;
printf("请输入三个整数:\n");
scanf("%d %d %d",&max,&med,&min);
if(max<med)//第一个数先固定为最大的
{
temp = max;
max = med;
med = temp;
}
if(max<min)
{
temp = max;
max = min;
min = temp;
}
if(med<min)//后两个数再做比较
{
temp = med;
med = min;
min = temp;
}
printf("由大到小依次排列为:%d %d %d",max,med,min) ;
}
运行结果: