BUPT2021秋季计算导论
设计函数(一)
实验5_1_设计函数fun (100 分)
已知分段函数,当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 x );
int main()
{
int x ;
scanf("%d",&x);
printf("The result is:y=%d\n",fun(x)) ;
return 0 ;
}
int fun(int num)
{
if (num < 1)
{
return num ;
}
else if ( (num >= 1) && ( num <= 10))
{
return 2*num - 1 ;
}
else if ( (num > 10)&& ( num <= 100))
{
return 3*num -11 ;
}
else if (num > 100)
{
return num * num - 24;
}
}
设计函数(二)
实验5_3_设计函数getDays (100 分)
设计函数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) ;
return 0 ;
}
int getDays(int year , int month)
{
switch(month){
case 1: case 3: case 5: case 7: case 8: case 10: case 12 :
return 31;
break;
case 4: case 6: case 9 :case 11 :
return 31;
break;
case 2:
{
if (( year % 4 == 0&& year % 100 != 0) || (year % 400 == 0))
{
return 29;
}
else {
return 28;
}
}
}
}
设计函数(三)
实验5_4_设计函数getDigit (100 分)
设计函数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 ;
while (n != 0)
{
i++;
n= n/10;
}
return i;
}
设计函数(四)
实验5_5_设计函数reverseNum (100 分)
设计函数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 n)
{
int reverse = 0;
int temp ;
while ( n !=0 )
{
temp = n % 10;
reverse = reverse * 10 + temp ;
n = n /10;
}
return reverse ;
}
设计函数(五)
实验5_6_设计函数mypow (100 分)
设计函数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 i ;
int mult = 1;
for ( i= 0; i< n ;i++)
{
mult = mult * x;
}
return mult ;
}
设计函数(六)
实验5_10_设计函数judgeTriangle (100 分)
设计函数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)
{
if(((a+b)> c)&&((b+c)>a)&&((c+a)>b))
{
if ((a==b)&&(a==c))
{
return 3;
}
else if(( a==b&&a!=c)||(a==c &&a!= b)||(b ==c &&b!= a))
{
return 2;
}
else if ((a*a + b*b== c*c)||(a*a +c*c == b*b)||(b*b+c*c == a*a))
{
return 1;
}
else {
return 0;
}
}
else {
return -1 ;
}
}
设计函数(七)
实验5_11_设计函数isPerfect与printPerfect (100 分)
如果一个整数的各因子(包括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]内的所有完全数及完全数的总个数。
函数接口定义:
void printPerfect(int n);
其中 n 是用户传入的参数。 函数没有返回值。
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 printPerfect(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)) //如果是完全数
{
printPerfect(i) ;//打印该完全数
count ++ ; //计数器加1
}
}
printf("The total number is %d.\n",count);//输出a,b两数间完全数的数量
return 0 ;
}
int isPerfect(int n)
{
int sum = 0;
int i ;
if(n>8128)
{
return 0;
}
else {
for ( i = 1; i < n ;i++)
{
if ( n % i == 0)
{
sum =sum + i;
}
}
if( sum == n)
{
return 1;
}
else {
return 0;
}
}
}
void printPerfect(int n)
{
int i ;
for ( i =1; i < n ; i++)
{
if (n % i == 0)
{
if(i ==1)
{
printf("%d=%d",n,i);
}
else{
printf("+%d",i);
}
}
}
printf("\n");
}