5-1 设计函数fun 分段函数
已知分段函数,当x<1时,y=x;当1<=x<=10时,y=2x-1;当10< x <=100时,y=3x-11;当x>100时,y=x*x-24。 设计函数int fun(int x),根据分段函数计算y值。 函数返回值范围不会超过int型变量。 输入为一个整数x,即自变量x。输出为函数值y的结果
函数接口定义:
函数原型 如下:
int fun ( int x );
其中 x
是用户传入的参数。 x
的值不超过int
的范围。函数须返函数值 y 的结果。
裁判测试程序样例:
函数被调用代码如下:
#include<stdio.h>
int fun(int) ;
int main()
{
int x ;
scanf("%d",&x);
printf("The result is:y=%d\n",fun(x)) ;
return 0 ;
}
/* 请在这里填写答案 */
输入样例:
-99
输出样例:
The result is:y=-99
答案:
#include<stdio.h>
int fun(int) ;//要先做声明
int main()
{
int x ;
scanf("%d",&x);
printf("The result is:y=%d\n",fun(x)) ;
return 0 ;
}
//以下为答案的填写。(上面的主函数系统已经有了,不用再输进去)
int fun(int x)
{
int y=0;
if (x<1)
y=x;
else if((x>=1)&&(x<=10))
y=2*x-1;
else if((x>10)&&(x<=100))
y=3*x-11;
else if(x>100)
y=x*x-24;
return y;//意思是把函数值y还给调用这个fun函数的主函数中,返回类型是int
}
5-2 设计函数getDays 计算某月天数
设计函数int getDays(int year,int month),根据给定的年year和月份month,计算该月的天数并返回。 提示:注意闰年的判断。
输入与输出要求: 输入两个整数y,m,即年份与月份。输出该年内该月的天数,占一行。 测试用例保证输入合法。
函数接口定义:
函数原型如下:
int getDays(int year,int month);
其中 year
和 month
都是用户传入的参数,分别代表年份和月份。函数须返回该月的天数。
裁判测试程序样例:
函数被调用的例子如下:
#include<stdio.h>
int getDays(int,int) ;
int main()
{
int year, month ;
scanf("%d%d",&year,&month);
printf("There are %d days in month %d year %d.",getDays(year,month), month, year) ;
return 0 ;
}
/* 请在这里填写答案 */
输入样例:
1995 7
输出样例:
There are 31 days in month 7 year 1995.
答案:
#include<stdio.h>
int getDays(int,int) ;//声明
int main()
{
int year, month ;
scanf("%d%d",&year,&month);
printf("There are %d days in month %d year %d.",getDays(year,month), month, year) ;
//调用getDays(年,月)
return 0 ;
}
int getDays(int year,int month)//得到的参数就是年,月
{
int days=0;
if (((year%4==0)&&(year%100!=0))||(year%400==0)){
if ((month>=1)&&(month<=7)&&(month%2!=0)&&(month!=2))
days=31;
else if ((month>=8)&&(month<=12)&&(month%2==0))
days=31;
else if ((month>2)&&(month<=6)&&(month%2==0))
days=30;
else if ((month>=9)&&(month<=11)&&(month%2!=0))
days=30;
else if (month==2)
days=29;
}
else{
if ((month>=1)&&(month<=7)&&(month%2!=0)&&(month!=2))
days=31;
else if ((month>=8)&&(month<=12)&&(month%2==0))
days=31;
else if ((month>2)&&(month<=6)&&(month%2==0))
days=30;
else if ((month>=9)&&(month<=11)&&(month%2!=0))
days=30;
else if (month==2)
days=28;
}
return days;
}
5-3 设计函数getDigit 计算正整数长度
设计函数int getDigit(long long n),计算并返回正整数n的长度。
输入与输出要求: 输入一个正整数n,n的取值范围不会超过long long类型变量。输出该正整数的位数,如“The integer 20 has 2 digits.”,占一行。注意单词digits的单复数形式。
函数接口定义:
函数原型如下:
int getDigit(long long n);
其中 n
是用户传入的参数。 n
的值不超过long long
的范围。函数须返回 n
的长度。
裁判测试程序样例:
函数被调用 的例子如下:
#include<stdio.h>
int getDigit(long long n);
int main()
{
long long n ;
int len ;
scanf("%lld",&n);
len = getDigit(n) ;
if (len > 1)
printf("The integer %lld has %d digits.\n",n, len) ;
else
printf("The integer %lld has %d digit.\n",n, 1) ;
return 0 ;
}
/* 请在这里填写答案 */
输入样例:
1234567890
输出样例:
The integer 1234567890 has 10 digits.
答案:
#include<stdio.h>
int getDigit(long long n); //声明
int main()
{
long long n ;
int len ;
scanf("%lld",&n);
len = getDigit(n) ;//调用计算正整数长度的子函数
if (len > 1)
printf("The integer %lld has %d digits.\n",n, len) ;
else
printf("The integer %lld has %d digit.\n",n, 1) ;
return 0 ;
}
int getDigit(long long n)
{
int i=0;
long long x;
x=n;
while(x>0){
x=x/10;
i++;
}
return i;
}
5-4 设计函数reverseNum 逆序输出正整数
设计函数int reverseNum(int n),返回正整数n反转后的形式,如reverseNum(12345)的值为54321。
输入与输出要求: 输入一个正整数n,n的取值范围不会超过int类型变量,n不会有前导0,n的结尾也不会有0。输出该正整数的反转形式,输出如“The reverse form of number 12345 is 54321.”,占一行。
函数接口定义:
函数原型如下:
int reverseNum(int n);
其中 n
是用户传入的参数。 n
的值不超过int
的范围。函数须返回 n
反转后的数字。
裁判测试程序样例:
函数被调用例子如下:
#include<stdio.h>
int reverseNum(int) ;
int main()
{
int num ;
scanf("%d",&num);
printf("The reverse form of number %d is %d.\n",num,reverseNum(num)) ;
return 0;
}
/* 请在这里填写答案 */
输入样例:
12345
输出样例:
The reverse form of number 12345 is 54321.
答案:
#include<stdio.h>
int reverseNum(int) ; //声明
int main()
{
int num ;
scanf("%d",&num);
printf("The reverse form of number %d is %d.\n",num,reverseNum(num)) ;
//调用使正整数逆序的函数
return 0;
}
int reverseNum(int num)
{
int d,t=0;
int x=num;
do{
d=x%10;//得到尾巴的值
t=t*10+d;//把尾巴的值放在开头,一开始t=0,所以得到尾巴自己
x/=10;//砍掉尾巴
//然后再返回上面第一部循环,得到去掉尾巴后的值的新尾巴
}while(x>0);
return t;
//将逆序的结果返回去
}
(记得复习含0的正整数怎么 逆序/分解 输出,回到迭代算法中看)
5-5 设计函数mypow 计算x的n次幂
设计函数int mypow(int x,int n),返回正整数x的n次幂,如mypow(2,10)值为1024。
输入与输出要求: 输入两个非负整数x、和n,x的n次幂不会超过int型范围。输出计算结果,占一行。
函数接口定义:
函数原型如下:
int mypow(int x,int n);
其中 x
和 n
都是用户传入的参数。 x
、n
以及x
的n次幂都不超过int的范围。函数须返回 x
的 n
次幂。
裁判测试程序样例:
函数被调用的例子如下:
#include<stdio.h>
int mypow(int , int ) ;
int main()
{
int x, n ;
scanf("%d%d",&x,&n) ;
printf("%d\n",mypow(x,n)) ;
return 0;
}
/* 请在这里填写答案 */
输入样例:
2 10
输出样例:
1024
答案:
#include<stdio.h>
int mypow(int , int ) ;
int main()
{
int x, n ;
scanf("%d%d",&x,&n) ;
printf("%d\n",mypow(x,n)) ;
return 0;
}
int mypow(int x, int n)
{
int y=0;
y=pow(x,n);
return y;
}
5-6 设计函数judgeTriangle 判断三角形
设计函数int judgeTriangle(int a,int b,int c),判断a、b、c三边是否能构成三角形,如果能,那么进一步判断是属于哪种三角形(等边、等腰、直角、不规则三角形)。这里的a、b、c没有顺序之分。 当a、b、c三边不能构成三角形时,返回-1;当a、b、c三边构成不规则三角形时,返回0;当a、b、c三边构成直角三角形时,返回1;当a、b、c三边构成等腰三角形时,返回2;当a、b、c三边构成等边三角形时,返回3。
输入与输出要求: 输入三个正整数a、b、c,分别代表三角形的三边,输出判断结果。当无法构成三角形时输出“It is not a triangle.”;当构成不规则三角形时输出“It is a scalenous triangle.”;当构成直角三角形时输出“It is a right-angled triangle.”;当构成等腰三角形时输出“It is an isosceles triangle.”;当构成等边三角形时输出“It is a equilateral triangle.”。
函数接口定义:
函数原型如下:
int judgeTriangle(int a,int b,int c);
其中 a
、b
和 c
都是用户传入的参数。运算中所有整数均不超过int
范围。函数须按题目要求返回相应的值。
裁判测试程序样例:
函数被调用的例子如下:
#include<stdio.h>
int judgeTriangle(int,int,int) ;
int main()
{
int a, b, c ;
scanf("%d%d%d",&a,&b,&c);
switch(judgeTriangle(a,b,c))
{
case -1 : printf("It is not a triangle.\n") ; break ;
case 0 : printf("It is a scalenous triangle.\n") ; break ;
case 1 : printf("It is a right-angled triangle.\n") ; break ;
case 2 : printf("It is an isosceles triangle.\n") ; break ;
case 3 : printf("It is a equilateral triangle.\n") ; break ;
}
return 0;
}
/* 请在这里填写答案 */
输入样例:
13 5 12
输出样例:
It is a right-angled triangle.
答案:
#include<stdio.h>
int judgeTriangle(int,int,int) ;
int main()
{
int a, b, c ;
scanf("%d%d%d",&a,&b,&c);
switch(judgeTriangle(a,b,c))
{
case -1 : printf("It is not a triangle.\n") ; break ;
case 0 : printf("It is a scalenous triangle.\n") ; break ;
case 1 : printf("It is a right-angled triangle.\n") ; break ;
case 2 : printf("It is an isosceles triangle.\n") ; break ;
case 3 : printf("It is a equilateral triangle.\n") ; break ;
}
return 0;
}
int judgeTriangle(int a,int b,int c)
{
int x=0;
if((a+b>c)&&(b+c>a)&&(c+a>b)){
if((a*a+b*b==c*c)||(a*a==b*b+c*c)||(b*b==a*a+c*c))
x=1;
else if(((a==b)&&(a!=c))||((a==c)&&(a!=b))||((b==c)&&(b!=a)))
x=2;
else if((a==b)&&(a==c))
x=3;
else
x=0;
}
else
x=-1;
return x;
}
5-7 设计函数isPerfect与printPerfect 判断并打印完全数
问题描述: 如果一个整数的各因子(包括1但不包括该整数本身)值之和等于该整数,则该整数称为“完全数”(perfect number)。例如,6是一个完全数,因为6=1+2+3。你的任务是设计函数isPerfect和printPerfect,判断并打印出区间[a,b](1<=a<b<=20000)内的所有完全数,并统计完全数的总个数。 isPerfect函数原型:int isPerfect(int n);用于判断正整数n是否为完全数,若是,则返回值为1,否则为0。 printPerfect函数原型:void printPerfect(int n);用于打印出一个完全数n的所有因子,当执行printPerfect(6)时,打印效果为:6=1+2+3。
输入与输出要求: 输入两个正整数a和b,输出区间[a,b]内的所有完全数及完全数的总个数。
函数接口定义:
本题只设计isPerfect,函数原型如下:
int isPerfect(int n);
其中 n
是用户传入的参数。如果 n
是完全数,则函数须返回 1
,否则返回0
。
裁判测试程序样例:
函数被调用的例子如下:
#include <stdio.h>
//判断一个数是否为完全数的函数
int isPerfect(int);
//打印完全数的函数
void printPerfact(int);
int main()
{
int i,a,b,count;
scanf("%d%d",&a,&b);
count = 0 ;//a,b两数间完全数的数量,初始化为0
for(i=a;i<=b;i++)
{
if (isPerfect(i)) //如果是完全数
{
printPerfact(i) ;//打印该完全数
count ++ ; //计数器加1
}
}
printf("The total number is %d.\n",count);//输出a,b两数间完全数的数量
return 0 ;
}
/* 请在这里填写答案 */
输入样例:
1 10000
输出样例:
6=1+2+3
28=1+2+4+7+14
496=1+2+4+8+16+31+62+124+248
8128=1+2+4+8+16+32+64+127+254+508+1016+2032+4064
The total number is 4.
答案:
#include <stdio.h>
//判断一个数是否为完全数的函数
int isPerfect(int);
//打印完全数的函数
void printPerfact(int);
int main()
{
int i,a,b,count;
scanf("%d%d",&a,&b);
count = 0 ;//a,b两数间完全数的数量,初始化为0
for(i=a;i<=b;i++)
{
if (isPerfect(i)) //如果是完全数
{
printPerfact(i) ;//打印该完全数
count ++ ; //计数器加1
}
}
printf("The total number is %d.\n",count);//输出a,b两数间完全数的数量
return 0 ;
}
//判断一个数是否为完全数的函数
int isPerfect(int n)
{
int x,y,sum=0;
for(x=1;x<=n/2;x++){
if(n%x==0)
sum+=x;
}
if(n==sum)
y=1;
else
y=0;
return y;
}
//打印完全数的函数
void printPerfact(int n)
{
int i=0;
if (isPerfect(n))
printf("%d=",n);
for(i=1; i<n; i++) {
if((n%i==0)&&(i!=n/2))
printf("%d+",i);
else if(i==n/2)
printf("%d\n",i);
}
}