【描述】
求三个整数的最大值。要求定义和调用函数:int max(intnum1, int num2, int num3),它返回num1、num2和num3中的最大值。
【输入】
输入三个整数,整数之间以空格间隔。
【输出】
输出三个整数的最大值。
【输入示例】
3 4 5
【输出示例】
5
【来源】
《程序设计基础——以C为例》第4章上机实验题2。
#include
int max(int num1, int num2, int num3);
int main(void) {
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
printf("%d\n", max(a, b, c));
return 0;
}
/* 请在下面编写max函数 */
int max(int num1, int num2, int num3)
{
int s;
//num1>num2?s=num1:s=num2;
//num3>s?s=num3:s=s;//缺少头文件
if(num1>num2)
{
s=num1;
}
else
{
s=num2;
}
if(num3>s)
{
s=num3;
}
return s;
}
【描述】
如果四边形四条边的长度分别为a、b、c、d,一对对角之和为2α,则求其面积的公式如下:
其中
要求定义和调用函数:double computeArea(doublea, double b, double c, double d, double alpha),该函数返回任意四边形的面积。
π值为3.14159。
【输入】
输入四边形的四条边a、b、c、d和一对对角之和2α(单位为度数)
【输出】
输出对应的任意四边形面积。
【输入示例】
3 4 5 5 145
【输出示例】
16.615057
【提示】
可以使用数学库中的cos函数,单位为弧度。包含头文件
【来源】
《程序设计基础——以C为例》第4章上机实验题1。
#include
#include
#define PI 3.14159
double computeArea(double a, double b, double c, double d, double alpha);
int main(void) {
double a, b, c, d, alpha;
scanf("%lf%lf%lf%lf%lf", &a, &b, &c, &d, &alpha);
alpha = alpha * PI / 360;
printf("%f\n", computeArea(a, b, c, d, alpha));
return 0;
}
/* 请在下面编写computeArea函数 */
double computeArea(double a, double b, double c, double d, double alpha)
{
double area,p;
p=(1.0/2)*(a+b+c+d);//1.0/2转double
area=sqrt((p-a)*(p-b)*(p-c)*(p-d)-a*b*c*d*pow(cos(alpha),2));
return area;
}
【描述】
求一个整数的逆序数。要求定义和调用函数:int reverse(int n),该函数返回一个整数的逆序数。
【输入】
输入一个整数。
【输出】
输出整数的逆序数。
【输入示例】
-123
【输出示例】
-321
【来源】
《程序设计基础——以C为例》第4章上机实验题3。
#include
int reverse(int n);
int main() {
int n;
scanf("%d", &n);
printf("%d\n", reverse(n));
return 0;
}
/* 请在下面编写reverse */
int reverse(int n)//
{
int c=0;
int a,d;
if(n>=0)
{
d=n;
}
else
{
d=-n;
}
while(d>0)
{
a=d%10;
c=c*10+a;
d/=10;//算逆序
}
if(n<0)
{
c=-c;//负数情况
}
return c;
}
【描述】
求一个正整数各位数字之和。要求定义和调用函数:int sumDigits(int n),该函数返回一个正整数各位数字之和。
【输入】
输入一个正整数。
【输出】
输出该正整数各位数字之和。
【输入示例】
3456
【输出示例】
18
#include
int sumDigits(int n);
int main() {
int n;
scanf("%d", &n);
printf("%d\n", sumDigits(n));
return 0;
}
/* 请在下面编写sumDigits函数 */
int sumDigits(int n)
{
int a=0;
int t;
t=n;
while(t>0)
{
a+=t%10;//取余求和
t/=10;//除去已加的
}
return a;
}
【描述】
输入一个正整数,判断它是否是回文数。要求定义和调用函数:int isPalindrome(int n),如果n是回文数,该函数返回1,否则返回0。回文数是指正读和反读都相同的数。
【输入】
输入一个正整数。
【输出】
如果该正整数是回文数,输出true,否则输出false。
【输入示例】
616
【输出示例】
true
【来源】
《程序设计基础——以C为例》第4章实例学习。
#include
int isPalindrome(int n);
int main() {
int n;
scanf("%d", &n);
printf(isPalindrome(n) ? "true" : "false");
return 0;
}
/* 请在下面编写isPalindrome函数 */
int isPalindrome(int n)
{
int c=0;
int a,d;
d=n;
while(d>0)//逆序操作
{
a=d%10;
c=c*10+a;
d/=10;
}
int m;
if(c==n)//回文数的正序逆序都相等
{
m=1;
}
else
{
m=0;
}
return m;
}
【描述】
如果一个素数可以写成
的形式,其中p是一个正整数,那么该素数就称为梅森素数。
例如,p为2时,
为3,3就是梅森素数。
注意:1不是素数。
要求定义和调用函数:int isPrime(int n),如果n是素数,该函数返回1,否则返回0。
【输入】
输入一个正整数n(0≤n≤31)。
【输出】
输出p≤n的梅森素数的个数。
【输入示例】
3
【输出示例】
2
#include
#include
int isPrime(int n);
int main() {
int p, n, count = 0;
scanf("%d", &n);
for(p = 1; p <= n; ++p) {
if(isPrime(pow(2, p) - 1))
++count;
}
printf("%d\n", count);
return 0;
}
/* 请在下面编写isPrime函数 */
int isPrime(int n)
{
int c;
int b=0;
c=n;
int i;
for(i=2;i<n;i++)
{
if(c%i==0)//若被整除
{
break;
}
}
if(i==n)//是素数的话,i++最后会加到n
{
b=1;
}
return b;
}
【描述】
无暇素数emirp(英文素数prime的逆序)是这样一种素数:本身为素数,且其逆序数也是素数。例如,17是素数,其逆序数71也是,因此17和71是emirp。定义和调用函数:intisPrime(int n),判断n是否是素数,如果是素数,函数返回1,否则返回0;定义和调用函数:int reverse(int n),求n的逆序数,函数返回n的逆序数,如n为17,函数reverse(n)返回71。
输出前n个emirp,每行显示5个,并适当对齐。
【输入】
输入一个正整数n。
【输出】
输出前n个emirp,每行显示5个,每个宽度为5。
【输入示例】
10
【输出示例】
【提示】
对于整数i,如果isPrime(i)与isPrime(reverse(i))的返回值都是1,i即为无暇素数。
【来源】
《程序设计基础——以C为例》第4章上机实验题5。
#include
#include
int isPrime(int n);
int reverse(int n);
int main(void) {
int i, n, count = 0;
scanf("%d", &n);
for(i = 2; count < n; ++i) {
if (isPrime(i) && isPrime(reverse(i))) {
printf("%5d", i);//固定5位宽输出
++count;
if(count % 5 == 0)
printf("\n");
}
}
return 0;
}
/* 请在下面分别编写isPrime函数和reverse函数 */
int isPrime(int n)
{
int i;
int b=1;
for(i=2;i<n;i++)//判断素数
{
if(n%i==0)
{
b=0;
break;
}
}
return b;
}
int reverse(int n)
{
int m;
int sum=0;
while(n>0)
{
sum=sum*10+n%10;//求逆序
n/=10;
}
return sum;
}
【描述】
按如下公式:
求出数列的前n项(n≤20)并输出,要求每行输出5项。定义和调用函数:long sequence(int n),计算数列第n项的值。
【输入】
输入一个正整数n。
【输出】
输出数列的前n项。每行输出5项。每项宽度为6。
【输入示例】
20
【输出示例】
【来源】
《程序设计基础——以C为例》第4章上机实验题8。
#include
long sequence(int n);
int main(void) {
int i, n, count = 0;
scanf("%d", &n);
for(i = 0; i < n; ++i) {
printf("%6ld", sequence(i));
++count;
if(count % 5 == 0)
printf("\n");
}
return 0;
}
/* 请在下面编写sequence函数 */
long sequence(int n)
{
if(n<=2)
{
return n;
}
return sequence(n-1)+sequence(n-2)+sequence(n-3);//递归函数
}
【描述】
对于任意一个正整数,如果是奇数,则乘3加1,如果是偶数,则除以2,得到的结果再按照上述规则重复处理,最终总能够得到1。例如,假定初始正整数为5,计算过程分别为16、8、4、2、1。要求定义和调用递归函数:guess(n),输出计算过程。
【输入】
输入一个正整数。
【输出】
从输入整数到1的步骤,每一步为一行,每一步中描述计算过程,最后一行输出“End”。如果输入为1,直接输出“End”。
【输入示例】
5
【输出示例】
5*3+1=16
16/2=8
8/2=4
4/2=2
2/2=1
End
#include
void guess(long long int n);
int main() {
long long int n;
scanf("%lld", &n);
guess(n);
return 0;
}
/* 请在下面编写guess函数 */
void guess(long long int n)
{
if(n==1)//最后到1的时候输出end
{
printf("End");
}
else if(n%2==0)
{
printf("%lld/2=%lld\n",n,n/2);//按格式输出
guess(n/2);//递归函数
}
else
{
printf("%lld*3+1=%lld\n",n,n*3+1);//经hxd提醒,已更正,long long输出要用%lld
guess(n*3+1);
}
/*while(n>1)
{
if(n%2==0)
{
printf("%lld/2=%lld\n",n,n/2);//经hxd提醒已更正,long long要用%lld
n/=2;
}
else
{
printf("%lld*3+1=%lld\n",n,n*3+1);
n=n*3+1;
}
}
printf("End\n");*/
}
奇怪了这题, istudy就是不给通过,感觉没错啊, 好气哦, 谷角猜想就是这样的吧
经hxd指正,已通过,芜湖~~
【描述】
分数可以表示为“分子/分母”的形式。编写一个程序,要求用户输入一个分数,然后将其约分为最简分式。最简分式是指分子和分母不具有可以约分的成分了。如6/12可以被约分为1/2。当分子大于分母时,不需要表达为整数又分数的形式,即11/8还是11/8;而当分子分母相等时,仍然表达为1/1的分数形式。
定义和调用函数:int gcd(int m, int n),求最大公约数。
【输入】
在一行中给出一个分数,分子和分母中间以斜杠“/”分隔,如:12/34表示34分之12。分子和分母都是正整数(不包含0)。
【输出】
在一行中输出这个分数对应的最简分式,格式与输入的相同,即采用“分子/分母”的形式表示分数。如 5/6表示6分之5。
【输入示例】
60/120
【输出示例】
1/2
#include
int gcd(int m, int n);
int main(void) {
int n, d, g;
scanf("%d/%d", &n, &d);
g = gcd(n, d);
n /= g;
d /= g;
printf("%d/%d\n", n, d);
return 0;
}
/* 请在下面编写gcd函数 */
int gcd(int m, int n)
{
int min;
int i;
if(m<n)//找出最小值
{
min=m;
}
else
{
min=n;
}
for(i=min;i>=1;i--)//从后往前找
{
if(m%i==0 && n%i==0)//当两个都能整除
{
break;
}
}
return i;
}