题目内容:
企业发放的奖金根据利润提成。利润低于或等于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,求应发放奖金总数?
#include <stdio.h>
int main()
{
long int n,bonus;
scanf("%ld",&n);
//printf("%ld\n",n);
if(n>=0&&n<=100000)
{
bonus = 0.1*n;
printf("bonus=%ld\n",bonus);
}
else if(n>100000&&n<=200000)
{
bonus = 10000 + (n-100000)*0.075;
printf("bonus=%ld\n",bonus);
}
else if(n>200000&&n<=400000)
{
bonus = 10000 + 100000*0.075 + (n-200000)*0.05;
printf("bonus=%ld\n",bonus);
}
else if(n>400000&&n<=600000)
{
bonus = 10000 + 100000*0.75 + 200000*0.05 + (n-400000)*0.03;
printf("bonus=%ld\n",bonus);
}
else if(n>600000&&n<=1000000)
{
bonus = 10000 + 100000*0.75 + 200000*0.05 + 200000*0.03 + (n-600000)*0.015;
printf("bonus=%ld\n",bonus);
}
else if(n>1000000)
{
bonus = 10000 + 100000*0.75 + 200000*0.05 + 200000*0.03 + (n-1000000)*0.01;
printf("bonus=%ld\n",bonus);
}
else
{
printf("Error!");
}
return 0;
}
修改下面这个程序使其快速计算1+2+3……+n的值,n从键盘输入。并按照下面给出的运行示例检查程序。
#include <stdio.h>
int main()
{
int i, j, sum = 0, n;
scanf("%d",&n);
for (i=1,j=n; i<=j; i++,j--)
{
sum = sum + i + j;
}
if(n%2==1)
{
sum = sum -(n+1)/2;
}
printf("sum = %d", sum);
return 0;
}
修改下面这个用do-while语句实现的程序,改用while语句实现,并对比其优缺点。
#include <stdio.h> int main() { int sum = 0, m; do{ printf("Input m:\n"); scanf("%d", &m); sum = sum + m; printf("sum = %d\n", sum); }while (m != 0); return 0; }
#include <stdio.h>
int main()
{
int sum = 0, m;
printf("Input m:\n");
scanf("%d", &m);
while (m != 0){
sum = sum + m;
printf("sum = %d\n", sum);
printf("Input m:\n");
scanf("%d", &m);
}
return 0;
}
我国古代的《张丘建算经》中有这样一道著名的百鸡问题:“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、母、雏各几何?”其意为:公鸡每只5元,母鸡每只3元,小鸡3只1元。用100元买100只鸡,问公鸡、母鸡和小鸡各能买多少只?目前程序运行结果有误,请问为什么会比正确答案多出三个解?不仅要找出错误和修正错误,还要求利用以前学过的知识分析错误的原因。
#include <stdio.h>
int main()
{
int x, y, z;
for (x=0; x<=20; x++)
{
for (y=0; y<=33; y++)
{
z = 100 - x - y;
if (5*x + 3*y + (float)z/3 == 100)//重点在于z/3是整型变量,会自动舍弃小数点后的数字。
{
printf("x=%d, y=%d, z=%d\n", x, y, z);
}
}
}
return 0;
}
从键盘任意输入一个正整数,编程判断它是否是素数,若是素数,输出“Yes!”,否则输出“No!”。已知负数、0和1都不是素数。请找出下面程序的错误并改正之,同时按照给出的运行示例检查修改后的程序。
#include <stdio.h>
#include <math.h>
int main()
{
int n, i;
printf("Input n:\n");
scanf("%d", &n);
for (i=2; i<sqrt(n); i++)
{
if (n % i == 0)
{
printf("No!\n");
}
else
{
printf("Yes!\n");
}
}
return 0;
}
从键盘任意输入一个正整数,编程判断它是否是素数,若是素数,输出“Yes!”,否则输出“No!”。已知负数、0和1都不是素数。请找出下面程序的错误并改正之,同时按照给出的运行示例检查修改后的程序。
#include <stdio.h>
#include <math.h>
int main()
{
int n, i,find = 0;
printf("Input n:\n");
scanf("%d", &n);
for (i=2; i<abs(n); i++)
{
if (n % i == 0)
{
find = 1;
}
}
if (find==1&&abs(n)>1)
printf("NO!\n");
else
printf("Yes!\n");
return 0;
}
从键盘任意输入两个符号各异的整数,直到输入的两个整数满足要求为止,然后打印这两个数。请通过测试找出下面这个程序存在的问题(不止一个问题哦),并改正。同时用下面给出的运行结果示例检查修改后的程序。
#include <stdio.h>
int main()
{
int x1, x2,ret;
do{
printf("Input x1, x2:");
ret =scanf("%d,%d", &x1, &x2);
while(ret!=2)
{
while(getchar()!='\n');
printf("Input x1, x2:");
ret = scanf("%d,%d", &x1, &x2);
}
}while (x1 * x2 >= 0);
printf("x1=%d,x2=%d\n", x1, x2);
return 0;
}
题目内容:
猴子第一天摘了若干个桃子,吃了一半,不过瘾,又多吃了1个。第二天早上将剩余的桃子又吃掉一半,并且又多吃了1个。此后每天都是吃掉前一天剩下的一半零一个。到第n天再想吃时,发现只剩下1个桃子,问第一天它摘了多少桃子?为了加强交互性,由用户输入不同的天数n进行递推,即假设第n天的桃子数为1。同时还要增加对用户输入数据的合法性验证(如:不允许输入的天数是0和负数)
#include <stdio.h>
int main()
{
int m, n,x,ret;
printf("Input days:\n");
ret = scanf("%d",&n);
while (ret!=1||n<=0)
{
while(getchar()!='\n');
printf("Input days:\n");
ret = scanf("%d",&n);
}//去除负数及不合理项
x=1;
for(m=1;m<n;m++)
{
x=2*(x+1);
}
printf("x=%d\n",x);
return 0;
}