文章目录
C语言练习题
读懂每个练习题才是学好一门代码的重要经历
目录(先不要看答案,首先自己做才能更好的领悟,做不来没关系)
题目一:有 1、2、3、4 四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
程序分析:可填在百位、十位、个位的数字都是 1、2、3、4,组成所有的排列后再去掉不满足条件的排列。
int main(void)
{
int i,j,k;
for( i=1;i<5;i++){
for( j=1;j<5;j++){
for( k=1;k<5;k++){
///关键:只要证明i j k 互不等于即可
if(i!=j && i != k && j != k && k !=j){
printf("%d,%d,%d,\n",i,j,k);
}
}
}
}
return 0;
}
题目二://题目:企业发放的奖金根据利润提成。
//利润(I)低于或等于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,求应发放奖金总数?
//程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成双精度浮点(double)型。
///输入的金额
double i;
double bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
printf("你的净利润是:\n");
///这个主要的分界
bonus1 = 100000 * 0.10;
bonus2 = bonus1 + (i-100000)*0.075;
bonus4 = bonus2 + (i-200000)*0.05;
bonus6 = bonus4 + (i-200000)*0.03;
bonus10 = bonus6 + (i-400000)*0.01;
printf("输入您的奖金\n");
scanf("%lf",&i);
if(i <= 100000){
bonus = i * 0.1;
}else if(i <= 200000){
bonus = bonus1 + (i-100000) * 0.75;
}else if(i<=400000){
bonus = bonus2 + (i - 200000)* 0.05;
}else if(i<=600000){
bonus = bonus4 + (i-400000) * 0.03;
}else if (i<=1000000){
bonus = bonus6 + (i - 600000) * 0.015;
}else if(i>1000000){
bonus =bonus10 + (i-1000000) * 0.01;
}
printf("你的提成是%lf\n",bonus);
题目三:输入某年某月某日,判断这一天是这一年的第几天?
程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。
难点:主要是如何判断闰年的方式、可以百度查询一下
int main(void)
{
int year,month,day,leap,sum;
printf("请输入年月日,格式(2015,12,10)\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("数据错误");
break;
}
//主要功能、判断是否闰年
if(year % 400 == 0 ||(year % 4==0&&year % 100 !=0)){
leap=1;
}else{
leap=0;
}
if(leap == 1 && month > 2){
sum++;
}
printf("这是一年中的%d天\n",sum);
return 0;
}
题目5: 输入三个整数x,y,z,请把这三个数由小到大输出
技巧:将输入的整数整合到一个数组,进行冒泡排序即可。既简单又实用
void bubbleSort(int nums[],int size){
for(int i=0;i<size-1;i++){
for(int j=0;j<size-1;j++){
if(nums[j] > nums[j+1]){
int temp = nums[j];
nums[j] = nums[j+1];
nums[j+1]= temp;
}
}
}
}
int main(void)
{
int one,two,three;
printf("请随机输入三整数,以逗号隔开\n");
scanf("%d,%d,%d",&one,&two,&three);
int nums[] = {one,two,three};
int size = sizeof(nums) / sizeof(nums[0]);
bubbleSort(nums, size);
printf("排序结果:\n");
for (int i = 0; i < size; i++) {
printf("%d ", nums[i]);
}
printf("\n");
return 0;
}
题目6: 输出99乘法表
int main(void)
{
int i,p,result;
for(i=1;i<10;i++){
for(p=1;p<10;p++){
result = i * p;
printf("%d * %d 得 %d\n",p,i,result);
}
}
return 0;
}