/*001.求5个数中的最小值*/
#include <stdio.h> //预处理命令
int main() //主函数
{
int a[5] = {0}; //初始化数组
int i,min;
printf("输入数据:\n");
for(i = 0; i < 5; i++) //输入数据
scanf("%d",&a[i]);
min = a[0];
for(i = 1; i < 5; i++) //循环比较
if(a[i] < min)
{
min = a[i]; //将最小数的存储的位置赋给min
}
printf("这5个数字中的最小值是:\n");
printf("%d",min);
scanf("%d",&i); //输入一个整数。。。起到暂停的作用
return 0; //结束程序
}
/*
002.[计算邮寄包裹的运费]假设包裹的运费计算方式为:
?包裹的重量在2千克内(含2千克),运费为18元
?包裹的重量超过2千克但在10千克内(含10千克),超出部分每千克加收运费为3元
?包裹的重量超过10千克,超出部分每千克加收运费为5元
*/
#include <stdio.h>
void jsyf(float w,float carrage);
int main()
{
float w = 0;
float carrage = 0;
printf("请输入包裹的重量:\n");
scanf("%f",&w);
jsyf(w,carrage);
return 0;
}
void jsyf(float x,float y)
{
if(x <= 0)
{
printf("error!\n");
return;
}
else if(x <= 2)
{
y = 18;
printf("该包裹相应的运费为%.2f元\n",y);
}
else if(x <= 10)
{
y = 18 + (x - 2) * 3;
printf("该包裹相应的运费为%.2f元\n",y);
}
else
{
y = 18 + (10 - 2) * 3 + (x - 10) * 5;
printf("该包裹相应的运费为%.2f元\n",y);
}
return;
}
/*
003.[计算月总收入]
假设某地区个人所得税的缴纳方式如下: ?月总收入在1600元以下(含1600元)不需要缴纳个人所得税
?月总收入在1600元以上,那么需要缴税的部分为:月总收入 - 1600,简称“应税收入”,且分级逐级计算: ?应税收入在500元内(含500元)的部分,税率为5%
?应税收入在500元~~2000元内(含2000元)的部分,税率为10%
?应税收入2000元~~5000元内(含5000元)的部分,税率为15%
?应税收入5000元~~10000元内(含10000元)的部分,税率为20%
?应税收入在10000元以上的部分,税率为30%
?若已知某职工的当月的个人应缴所得税,请编写C语言程序求该职工的月总收入。
?例如,若给定应缴所得税为705元,那么程序将输出其月总收入为7000元。
*/
#include <stdio.h>
int main()
{
float total_salary = 0; /* 月总收入*/
float tax_salary = 0; /* 应税收入*/
float tax = 0; /* 所得税 */
printf("某职工的应缴所得税为:\n");
scanf("%f",&tax);
if(tax < 0)
{
printf("error!\n");
scanf("%f",&tax);
return 0;
}
else if(tax == 0)
{
printf("该职工的月总收入小于1600元\n");
scanf("%f",&tax);
return 0;
}
else if(tax <= 25)
{
tax_salary = tax/0.05;
total_salary = 1600 + tax_salary;
printf("该职员的月总收入为%.2f元",total_salary);
scanf("%f",&tax);
return 0;
}
else if(tax <= 175)
{
tax = tax - 25;
total_salary = 1600 + 500 + tax / 0.10;
printf("该职员的月总收入为%.2f元",total_salary);
scanf("%f",&tax);
return 0;
}
else if(tax <= 625)
{
tax = tax - 25 - 150;
total_salary = 1600 + 2000 + tax / 0.15;
printf("该职员的月总收入为%.2f元",total_salary);
scanf("%f",&tax);
return 0;
}
else if(tax <= 1625)
{
tax = tax - 25 - 150 - 450;
total_salary = 1600 + 5000 + tax / 0.20;
printf("该职员的月总收入为%.2f",total_salary);
scanf("%f",&tax);
return 0;
}
else
{
tax = tax - 25 - 150 - 450 - 1000;
total_salary = 1600 + 10000 + tax / 0.30;
printf("该职员的月总收入为%.2f",total_salary);
scanf("%f",&tax);
return 0;
}
return 0;
}
/*
004.某学校对学生的评价标准如下(假设只有语文、数学、英语三门课,分数是100分制的整数): ?三门课的平均分大于等于70分,且至少有一门课大于等于85分,则为“优秀”
?每一门课都大于等于75分,则为“良好”
?三门课的平均分大于等于60分,且至多只有一门课小于60分,则为“及格”
?如果不是“优秀”、“良好”、“及格”之一,则为“不及格”
请编写程序,对于给定的三门课成绩,输出相应的评价等级。
*/
#include <stdio.h> //包含文件
#define QS 70
#define BSW 85
#define QSW 75
#define LS 60
int main()
{
int i,i_ = 0,j = 0;
int a[3] = {0};
float average = 0,sum = 0;
printf("请分别输入某学生三门课的成绩:\n");
while(1)
{
if(i_ < 2)
{
for(i = 0; i < 3; i++)
{
scanf("%d",&a[i]);
}
for(i = 0;i < 3;i++)
{
if(a[i] > 0 && a[i] <= 100)
{
i_ = i_ + 1;
}
else
{
printf("error!!!\n请重新输入:\n");
break;
}
}
}
else
{
break;
}
}
printf("该学生三门课的成绩总评为:\n");
for(i = 0; i < 3; i++)
sum = sum + a[i];
average = sum/3;
if(average >= QS)
{
for(i = 0; i < 3;i++)
{
if(a[i] >= BSW)
{
printf("优秀\n");
return 0;
}
}
}
for(i = 0; i < 3; i++)
{
if(a[i] >= QSW && a[i] < BSW)
{
if(i == 2)
{
printf("良好\n");
return 0;
}
else
{
break;
}
}
}
if(average >= LS)
{
for(i = 0; i < 3; i++)
{
if(a[i] < LS)
{
j = j + 1;
}
}
if(j < 2)
{
printf("及格\n");
return 0;
}
else
{
printf("不及格\n");
}
}
else
{
printf("不及格\n");
}
return 0;
}
/*005.使用while语句编程输出前十个偶数。*/
#include <stdio.h>
void print_even(int x,int y);
int main()
{
int even = 2;
int i = 0;
printf("2");
print_even(even,i);
printf("\n");
return 0;
}
void print_even(int x,int y)
{
while(y < 9)
{
y = y + 1;
x = x + 2;
printf(" , %d", x);
}
return;
}
/*006.使用while语句编程求前十个偶数之和。*/
#include <stdio.h>
void print_sum(int x,int y );
int main()
{
int i = 0,j = 2;
print_sum(i,j);
return 0;
}
void print_sum(int x,int y)
{
int sum = 0;
while(x < 10)
{
x = x + 1;
sum = sum + y;
y = y + 2;
}
printf("2 + 4 + 6 + ... + 20 = %d\n", sum);
return;
}
/*007.输出Fibonacci数列中数值介于100与10000之间(不含100与10000)的项。项与项之间用空格分隔。*/
#include <stdio.h>
void fib(int x,int y,int z);
int main()
{
int a = 0;
int b = 1;
int c = 0;
fib(a,b,c);
printf("\n");
return 0;
}
void fib(int x,int y,int z)
{
while(1)
{
z = x + y;
x = y;
y = z;
if(z > 100)
{
if(z < 10000)
printf("%d ",z);
else
break;
}
}
return;
}
/*008.对于任意给定的正整数n,求和:1! + 2! + ... + n!*/
#include <stdio.h>
int fac(int n);
int pd(int a);
int print_sum(int n,int sum);
int main()
{
int n = 1; //定义变量并初始化,随便给n赋上一个值,目的是从内容里获取一块空间,不初始化就编译出错
int sum = 0;
printf("请输入正整数n的值:\n");
n = pd(n);
printf("1! + 2! + ... + %d! = ",n);
printf("%d", print_sum(n, sum));
printf("\n");
return 0;
}
int pd(int n)
{
while(1)
{
scanf("%d", &n);
if(n <= 0)
{
printf("error!!!\n");
printf("请重新输入正整数n的值\n");
}
else if(n == 1)
{
printf("1! = 1\n");
return 0;
}
else
{
break;
}
}
return n;
}
int fac(int n)
{
int j = n;
int f;
if(j > 1)
{
f = fac(j-1) * j;
}
else
{
return(1);
}
return f;
}
int print_sum(int n,int sum)
{
while(n>0)
{
sum = sum + fac(n);
n -= 1;
}
return sum;
}
/*009.对于任意给定的正整数n, 输出其反序。*/
#include <stdio.h>
int main()
{
unsigned long long n,m;
printf("请输入正整数n:\n");
while(1)
{
scanf("%llu",&n);
if(n <= 0)
{
printf("error!!!\n");
printf("请重新输入正整数n的值\n");
}
else
{
break;
}
}
m = n;
printf("该正整数的反序是:\n");
while(1)
{
m = m % 10;
printf("%llu\n",m);
n = n / 10;
m = n;
if(n == 0)
{
break;
}
else
{
continue;
}
}
return 0;
}
/*
010.求所有的四位水仙花数。每个水仙花数输出一行,输出格式参考如下: 1634 = 1^4 + 6^4 + 3^4 + 4^4
?提示:四位水仙花数共有3个,即应该输出3行。
*/
#include <stdio.h>
int main()
{
int i1,i2,i3,i4;
int narcissus;
printf("所有的四位水仙花数如下:\n");
for(i1 = 1; i1 < 10; i1++)
{
for(i2 = 0;i2 < 10; i2++)
{
for(i3 = 0; i3 < 10; i3++)
{
for(i4 = 0; i4 < 10; i4++)
{
narcissus = i1 * 1000 + i2 * 100 + i3 * 10 + i4;
if(i1*i1*i1*i1 + i2*i2*i2*i2 + i3*i3*i3*i3 + i4*i4*i4*i4 == narcissus)
{
printf("%d = %d^4 + %d^4 + %d^4 + %d^4\n", narcissus,i1,i2,i3,i4);
}
}
}
}
}
return 0;
}
/*
011.大数学家欧拉在集市上遇到了本村的两个农妇,每人跨着个空篮子。她们和欧拉打招呼说两人刚刚卖完了所有的鸡蛋。
欧拉随便问:"卖了多少鸡蛋呢?"
不料一个说:"我们两人自己卖自己的,一共卖了150个鸡蛋,虽然我们卖的鸡蛋有多有少,但刚好得了同样的钱数。
你猜猜看!"
欧拉猜不出。
另一个补充道:"如果我按她那样的价格卖,可以得到32元;如果她按我的价格卖,可以得到24.5元"。
欧拉想了想,说出了正确答案。请问你知道答案是多少吗?请用计算机编程计算输出。
*/
#include <stdio.h>
#include <stdlib.h>
int main() {
double x; //甲卖了x个
double y; //乙卖了y个
for(x = 1.0;x<150;x++)
{
y = 150 - x;
if(32/x*y == 24.5/y*x)
{
printf("x = %f, y = %f",x,y);
}
}
return 0;
}
/*文件名为PrintDiamond.c
012.输入整数n,打印一个菱形.
当n = 1时,打印:
*
当n = 2时,打印:
*
***
*
依此类推......
本程序输入n为-1时,结束程序。
*/
#include <stdio.h>
int main()
{
int i; //控制行
int j; //控制打印空格
int k; //控制打印"*"
int n; //表示菱形由内到外的层数
while (1)
{
do
{
printf("输入n的值(整数):\n");
scanf("%d", &n);
} while (n<-1);
if(n == -1)
break;
for (i=1;i<=2*n-1;i++) //控制行,共2n-1行
{
if (i<=n) //打印上部分
{
for(j=1;j<=n-i;j++) //打印空格
printf(" ");
for(k=1;k<=2*i-1;k++) //打印“*”
printf("*");
}
else
{
for(j=1;j<=i-n;j++) //打印空格
printf(" ");
for(k=4*n-2*i-1;k>0;k--) //打印“*”, 其中4n-2i-1 = (2n-1)-2(i-n)
printf("*");
}
printf("\n"); //每打印完一行就进行换行
}
}
return 0;
}
/*文件名为PrintSpiral.c
013.要求:
在屏幕打印一个N*N的数字方阵,数值1到N^2按照顺时针方向螺旋排列。
这里假定 1 <= N <= 9。
同一行的数值使用字符'\t'分隔。
不准使用后退字符'\b'。
例如:
若N=2,则输出:
1 2
4 3
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,N,p=1,q=1,x=1,y=1,a[10][10]={0};
//让用户输入一个合法的数字(0~9)
do
{
printf("请输入N(1<=N<=9)的值:");
scanf("%d",&N);
}
while(N<1 || N>9);
printf("数阵分布如下:\n");
//往方阵里螺旋填放数字
for(i=1;i<=(N*N);i++) //i从1自增到N^2
{
a[x][y]=i; //往方阵里填放数字i
//x正方向填放数字
if(x==p&&y!=N-p+1)
{
y++; //焦点往x正方向步进
if(a[x][y]==0)
continue; //跳出本次循环,继续下一次循环
}
//y负方向填放数字
if(y==N-p+1&&x!=N-p+1)
{
x++; //焦点往y负方向步进
if(a[x][y]==0)
continue; //跳出本次循环,继续下一次循环
}
//x负方向填放数字
if(x==(N-p+1)&&y!=p)
{
y--; //焦点往x负方向步进
if(a[x][y]==0)
continue; //跳出本次循环,继续下一次循环
}
//y正方向填放数字
if(y==p&&x!=p+1)
{
x--; //焦点往y正方向步进
if(a[x][y]==0)
continue; //跳出本次循环,继续下一次循环
}
y++;
p++;
}
//打印方阵里的所有元素
for(x=1;x<=N;x++)
{
//一行行地打印出来
for(y=1;y<=N;y++)
{
printf("%d\t",a[x][y]);
}
//为了美观,恰当地空行
printf("\n");
printf("\n");
printf("\n");
}
return 0;
}
/*
014.文件名为IsNarcissus.c
要求:寻找指定区间的水仙花数。如407 = 4^3 + 0^3 +7^3.407就是一个水仙花数。
*/
#include <stdio.h>
void Narcissus();
int IsNarcissus(int a);
int main()
{
printf("100~999之间的水仙花数有:\n");
Narcissus();
printf("\n");
return 0;
}
void Narcissus()
{
//寻找100~999之间的水仙花数
int i;
for (i=100;i<=999;i++)
if (IsNarcissus(i))
printf("%d ", i);
}
int IsNarcissus(int a)
{
int tmp;
int sum = 0;
tmp = a;
while (tmp>0)
{
sum = sum + (tmp%10) * (tmp%10) * (tmp%10);
tmp = tmp/10;
}
if (sum == a)
return 1;
else
return 0;
}
/*文件名为PrimeFactor.c
015.任何一个合数都可以写成几个质数相乘的形式。如24 = 2 * 2 *2 *3.
对于一个质数,它的质因数可定义为它本身。
要求:编写一个程序实现分解质因数。
*/
#include <stdio.h>
void PrimeFactor(int n);
int isPrime(int a);
int main()
{
int n;
printf("Please input a integer for getting prime factor:\n");
scanf("%d", &n);
PrimeFactor(n); //对n分解质因数
printf("\n");
return 0;
}
//对参数n分解质因数
void PrimeFactor(int n)
{
int i;
if(isPrime(n))
printf("%d", n);
else
{
for (i=2;i<=n-1;i++)
{
if (n%i == 0)
{
printf("%d ", i); //第一个因数一定是质因数
if (isPrime(n/i)) //判断第二个因数是否是素数
{
printf("%d ", n/i);
break; //找到全部质因子
}
else
{
PrimeFactor(n/i); //递归
break;
}
}
}
}
return;
}
//判断a是否是质数, 是质数返回1, 不是质数返回0
int isPrime(int a)
{
int i;
for (i=2;i<=a-1;i++)
if(a%i == 0)
return 0;
return 1;
}
/*
016.判断闰年。
需求:输入一个年份,判断该年是否是闰年。
*/
#include <stdio.h>
int isLeapYear(int y);
int main()
{
int year;
printf("Please input a year:\n");
scanf("%d", &year);
if(isLeapYear(year))
printf("%d is leap year!\n", year);
else
printf("%d is not leap year!\n", year);
return 0;
}
//判断是否是闰年
int isLeapYear(int y)
{
if((y%4 == 0 && y%100 != 0) || (y%400 == 0))
return 1;
else
return 0;
}
/*
017.输入两个数,求这两个数的最大公约数。
*/
#include <stdio.h>
int rgcd(int v1, int v2);
int main()
{
printf("请输入两个整数:\n");
int n, m;
scanf("%d %d", &n, &m);
//vs2013下不支持scanf(), 而提供了scanf_s()函数的支持。
//scanf_s("%d %d", &n, &m);
printf("%d和%d的最大公约数为%d!\n", n, m, rgcd(n, m));
return 0;
}
int rgcd(int v1, int v2)
{
if (v2 != 0)
return rgcd(v2, v1%v2);
return v1;
}
/*
018.输入一个整数n,打印各个三角的层数为n的正反三角的图形。 如:
输入n的值(整数):
5
*********
*******
*****
***
*
***
*****
*******
*********
*/
#include <stdio.h>
int main()
{
int n; //n可理解为从图形最上方到图形中间的层数
int i; //控制行
int j; //控制打印空格
int k; //控制打印"*"
while(1)
{
do
{
printf("输入n的值(整数):\n");
scanf("%d", &n);
} while (n<-1);
if(n == -1) //输入"-1"退出程序
break;
for(i=0;i<2*n-1;i++) //共2n-1行
{
//打印一行
if(i<n)
{
for(j=0;j<i;j++) //打印空格
printf(" ");
for(k=0;k<2*n-2*i-1;k++) //打印"*"
printf("*");
}
else //打印一行
{
for(j=2*n-i-2;j>0;j--) //打印空格
printf(" ");
for(k=0;k<2*(i-n+1)+1;k++) //打印"*"
printf("*");
}
printf("\n"); //每打印完一行就进行换行
}
}
return 0;
}