/*
1. 输入一个三位数,求其反转后形成的数并输出。输入输出示例如下(运行二次):
Enter n:127 ↙
Output: 721
Enter n:520 ↙
Output: 025
提示:( 1、分离n的个位、十位和百位;2、若m=25,printf(“%03d”,m))
*/
#include <stdio.h>
void cs(int n);
int main()
{
int n;
printf("请您输入一个三位数n=");
do
{
scanf("%d",&n);
}while(n<100||n>999);
cs(n);
return 0;
}
void cs(n)
{
int s=0;
while(n)
{
s=s*10+n%10;
n=n/10;
}
printf("%03d",s);
}
/*
2. 编写程序,输入x,计算并输出下列分段函数f(x)的值(保留两位小数),
请调用sqrt()函数求平方根,调用pow()函数求幂。
结果示例如下:
Enter x:10 ↙
f(10.00) = 3.16
*/
#include <stdio.h>
#include <math.h>
double cs(int n);
int main()
{
int n;
printf("请输入一个数n=");
scanf("%d",&n);
printf("输出结果为%.2lf",cs(n));
return 0;
}
double cs(int n)
{
if(n>=0)
return sqrt(n);
else
return pow(n+1,2)+2*n+(double)1/n;
}
/*
3. 输入一个正整数n,计算1-2/3+3/5-4/7+5/9-6/11+…的前n项之和,输出时保留3位小数。
结果示例如下:
Enter n:2 ↙
sum = 0.333
*/
#include <stdio.h>
double output(int n);
int main()
{
int n;
printf("Enter n:");
scanf("%d",&n);
printf("sum=%.3lf",output(n));
return 0;
}
double output(int n)
{
double sum=1.0;
int flag=-1,fz=2,fm=3;
n--;
while(n)
{
sum+=(double)((fz*1.0)/fm)*flag;
fm=fm+fz;
fz=fm-fz;
flag=-flag;
n--;
}
return sum;
}
/*
1.鸡兔同笼问题,已知鸡和兔总数量为n,总腿数为m。依次输出鸡的数目和兔的数目。如果无解,则输出“No answer”。
Input:14 32 ↙
Output:12 2
Input:10 16 ↙
Output: No answer
*/
#include <stdio.h>
void output(int n,int m);
int main()
{
int flag=1,m,n;
do
{
printf("Input :");
scanf("%d%d",&n,&m);
output(n,m);
printf("是否继续?请输入 是(非0),否(0):");
scanf("%d",&flag);
}while(flag);
return 0;
}
void output(int n,int m)
{
float ckxs,ckzs,ra;
ckxs=(float)((4*n-m)*1.0/2);
ckzs=(int)((4*n-m)/2);
ra=(m-2*n)/2;
if((ckxs-ckzs)||ckxs>n||ra>n)
printf("\nNO answer!\n");
else
printf("\noutput : %d %d\n",(4*n-m)/2,(m-2*n)/2);
}
/*
2. 某服装店经营套服,也单件出售,若买的不少于50套,每套80元,不足50套,每套90元,若只买上衣每件60元,只买裤子每条45元,从键盘读入所买上衣coat和裤子trousers件数,计算应付款money?
提示: (1)先计算成套的衣服多少钱?
(2)再计算剩下的单件的上衣、单件的裤子多少钱;
(3)计算总付款
Input coat & trousers:55 70 ↙
Money = 5075
Input coat & trousers:55 40 ↙
Money = 4500
Input coat & trousers:-5 3 ↙
Error:coat number less than 0
*/
#include <stdio.h>
int t_money(int t);
int main()
{
int s,coat,trousers,flag=1;
do
{
printf("Input coat & trousers:");
s=0;
do
{
scanf("%d%d",&coat,&trousers);
}while(coat<0||trousers<0);
s+=t_money(coat>trousers?trousers:coat);
if(coat>trousers&&coat!=trousers)
s+=(coat-trousers)*60;
else
s+=(trousers-coat)*45;
printf("\nMONEY=%d\n",s);
printf("是否继续?请输入 是(非0),否(0):");
scanf("%d",&flag);
}while(flag);
return 0;
}
int t_money(int t)
{
if(t<50)
return t*50;
else
return t*80;
}
/*
3. 3n+1问题。猜想:对于任意一个大于1的自然数n,若n为奇数,则将n变为3n+1,否则变为n的一半。经过若干次这样的变换,一定会使n变为1。例如3 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1。输入n,输出变换的次数。
Enter n: 3 ↙
Output:7
*/
#include <stdio.h>
int output(int n);
int main()
{
int n;
printf("Enter n: ");
scanf("%d",&n);
printf("%d",output(n));
return 0;
}
int output(int n)
{
int t=0;
do
{
if(n%2)
n=3*n+1;
else
n=n/2;
t++;
}while(n!=1);
return t;
}
/*
4. 求a+aa+aaa+aa?a。输入2 个正整数a 和n, 求a+aa+aaa+aa?a(n 个a)之和。注:求取每一项时可以利用前后项之间的关系。
例:下面括号内是说明
Enter m and n:8 5 ↙(a=8, n=5)
Output:98760 (8+88+888+8888+88888)
*/
#include <stdio.h>
long output(int a,int n);
int main()
{
int a,n;
printf("Enter a and n:");
scanf("%d%d",&a,&n);
printf("\noutput :%ld",output(a,n));
return 0;
}
long output(int a,int n)
{
long s=0,mx=a;
while(n)
{
s=s+mx;
mx=mx*10+a;
n--;
}
return s;
}
/*
5. 求最大最小值。输入一个正整数n, 再输入n 个整数,输出最大及最小值,求最大及最小值。下面括号内是说明
Enter n and the corresponding integers: 4 2 123 -100 0 ↙(n=4,后面是4个整数)
max=123,min=-100。
*/
#include <stdio.h>
void output(int n);
int main()
{
int n;
printf("Enter n and the corresponding integers :");
do
{
scanf("%d",&n);
}while(!n);
output(n);
return 0;
}
void output(int n)
{
int max,min,t;
scanf("%d",&max);
min=max;
n--;
while(n)
{
scanf("%d",&t);
if(t>max)
max=t;
if(t<min)
min=t;
n--;
}
printf("max=%d min=%d",max,min);
}
/*
1.利用下面的级数求cos(x)的值,直到级数的第n项的绝对值小于等于10-6为止。
n=0,1,2,…
提示:设前一项t = 可以分离成 ,后一项t = 可以分离成 ,依次分离下去,即后一项总能分离出其前一项,后一项与前一项的关系(结合n) t = -t * x *x / ((2 * n) * (2 * n - 1))。
要求:将求cos(x)功能设计成自定义函数double myCos(double x);
例:下面括号内是说明
Enter x:1.0471↙ (弧度为 3.1415/3 = 1.0471,对应角度为60度)
cos(60) = 0.500
*/
#include <stdio.h>
#include <math.h>
#define over 1e-6
double mycos(double x);
int main()
{
double x ;
printf("Enter x :");
scanf("%lf",&x);
printf("\ncos(%d)=%.3lf\n",180/(int)(3.1415/x),mycos(x));
return 0;
}
double mycos(double x)
{
double s=1.0,t=-x*x/2;
int n=1;
do
{
s+=t;
n++;
t=-t*x*x/((2*n)*(2*n-1));
}while(fabs(t)>over);
return s;
}
/*
2、由键盘输入一行字符(总字符个数从1个至80 个均有可能,以回车符表示结束),将其中每个数字字符所代表的数值累加起来,输出结果。
Enter: abc123 ↙
Output: 6
Enter: A6H7T+65 ↙
Output: 24
提示:
(1)可以使用下面程序段逐个读入键盘输入的一行字符
char ch;
while((ch=getchar())!='\n')
{ ……}
(2)数字字符转为对应的数值可用a = ch -‘0’;
*/
#include <stdio.h>
int main()
{
char ch;
int s=0;
printf("Enter :");
while((ch=getchar())!='\n')
if(isdigit(ch))
s=s+ch-'0';
printf("\noutput:%d",s);
return 0;
}
/*
3.输入一个两位数,个位大于5,十位大于4小于8,利用该数生成回纹数,回纹数:(两端数字对称的数,例如5335,27472等),生成过程见下列:
Enter:79 ↙
Output:44044
生成过程:
79+97=176
176+671=847
847+748=1595
1595+5951=7546
7546+6457=14003
14003+30041=44044
*/
#include <stdio.h>
long out_hw(n);
long handle(long n);
int main()
{
long n;
int flag=0;
printf("Enter :");
do
{
scanf("%d",&n);
if(n/10<=4||n/10>=8||n%10<=5)
flag=1;
}while(flag);
printf("\noutput:%ld",handle(n));
return 0;
}
long out_hw(long n)
{
long s=0;
while(n)
{
s=s*10+n%10;
n=n/10;
}
return s;
}
long handle(long n)
{
while(n!=out_hw(n))
n+=out_hw(n);
return n;
}
/*
1. 输入一个正整数n (1<n<=100),再输入n个整数,将最小值与第一个数交换,最大值与最后一个数交换,然后输出交换后的n 个数。示例如下:
Input n: 5 ↙
Input 5 integers: 8 2 5 1 4 ↙
After swapped:1 2 5 4 8
*/
#include <stdio.h>
long handle(int sj[],int n);
int main()
{
int sj[100],n,i;
printf("Input n:");
scanf("%d",&n);
printf("Input %d integers :",n);
for(i=0;i<n;i++)
scanf("%d",&sj[i]);
handle(sj,n);
printf("After swapped:");
for(i=0;i<n;i++)
printf("%2d",sj[i]);
return 0;
}
long handle(int sj[],int n)
{
int max,min,i,t;
max=min=0;
for(i=1;i<n;i++)
{
if(sj[i]>sj[max])
max=i;
if(sj[i]<sj[min])
min=i;
}
t=sj[0];