bupt2024大一上计导子程序练习

6-1 实验5_1_设计函数fun

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

已知分段函数,当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

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

answer:

int fun ( int x)
{
    int res;
    if(x < 1){
    res = x;
    }else if(x >= 1&&x <= 10 ){
        res = 2*x - 1;
    }
    else if(x > 10&&x <= 100){
        res = 3*x - 11;
    }else{
        res = x*x-24;
    }
    return res;
}

6-2 实验5_3_设计函数getDays

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

设计函数int getDays(int year,int month),根据给定的年year和月份month,计算该月的天数并返回。
提示:注意闰年的判断。

输入与输出要求:
输入两个整数y,m,即年份与月份。输出该年内该月的天数,占一行。
测试用例保证输入合法。

函数接口定义:

 

函数原型如下: int getDays(int year,int month);

其中 yearmonth 都是用户传入的参数,分别代表年份和月份。函数须返回该月的天数。

裁判测试程序样例:

 

函数被调用的例子如下: #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.

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

answer:

int getDays(int year, int month)
{
    int day;
    if( month == 2){
        if((year%4==0&&year%100!=0)||(year%400==0)) day = 29;
        else day = 28;
    }else{
        if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) day = 31;
        else day = 30;
        }
    return day;
    
}

6-3 实验5_4_设计函数getDigit

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

设计函数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.

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

answer:

int getDigit(long long n)
{
    int len = 0;
    while(n != 0){
        len++;
        n=n/10;
    }
    return len;
}

6-4 实验5_5_设计函数reverseNum

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

设计函数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.

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

answer:

数位拆分;

int reverseNum(int n)
{
    int m = 0;
    while(n != 0)
    {
        m = m*10 + n%10;
        n = n/10;
    }
    return m;
}

6-5 实验5_6_设计函数mypow

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

设计函数int mypow(int x,int n),返回正整数x的n次幂,如mypow(2,10)值为1024。

输入与输出要求:
输入两个非负整数x、和n,x的n次幂不会超过int型范围。输出计算结果,占一行。

函数接口定义:

 

函数原型如下: int mypow(int x,int n);

其中 xn 都是用户传入的参数。 xn 以及xn次幂都不超过int的范围。函数须返回 xn 次幂。

裁判测试程序样例:

 

函数被调用的例子如下: #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

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

answer:

之后可使用迭代来写

int mypow(int x, int n)
{
    int res = 1;
    for(int i = n;i > 0; i--)
    {
        res = res * x;
    }
    return res;
}

6-6 实验5_10_设计函数judgeTriangle

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

设计函数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);

其中 abc 都是用户传入的参数。运算中所有整数均不超过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.

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

answer:
 

int judgeTriangle(int a, int b, int c)
{
    int res = -1;
    if((a+b)>c&&(a+c)>b&&(b+c)>a)
    {
        if((a*a+b*b)==(c*c)||(a*a+c*c)==(b*b)||(c*c+b*b)==(a*a))
            res = 1;
        else if(a==b&&b==c)
            res = 3;
        else if(a==b||b==c||a==c)
            res = 2;
            else
                res = 0;
    }
    return res;
}

6-7 实验5_11_设计函数isPerfect与printPerfect

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

如果一个整数的各因子(包括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 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 ; } /* 请在这里填写答案 */

输入样例:

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.

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

answer:

int isPerfect(int n)
{
    int res = 0;
    for(int i = 1;i <= n/2;i++)
    {
        if(n%i == 0)
            res += i;
    }
    if(res == n)
        return 1;
    else return 0;
}

void printPerfect(int n)
{
    printf("%d=1", n);
    for(int i = 2; i <= n/2; i++)
    {
        if(n%i == 0)
            printf("+%d", i);
    }
    printf("\n");
}

7-1 实验4_6_不定方程求解

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

给定正整数a,b,c。求不定方程 ax+by=c 关于未知数x和y的所有非负整数解组数。

注:题目来自信息学奥赛一本通

输入格式:

只有一行,为三个用空格分隔的正整数,依次代表a,b,c。每个数均不大于1000。测试用例保证合法。

输出格式:

只有一个整数,即不定方程的非负整数解组数。

输入样例:

2 3 18

输出样例:

4

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

answer:

#include <stdio.h>

int main()
{
    int count = 0;
    int a, b, c;
    scanf("%d %d %d", &a, &b, &c);

    for(int x = 0; x <= c; x++)
    {
        for(int y = 0; y <= c; y++){
            if(a*x+b*y==c)
                count++;
        }
    }

    printf("%d", count);
    return 0;
}

7-2 实验4_8_斐波那契数列

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”。它指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368……..这个数列从第3项开始,每一项都等于前两项之和。
现请你写一个程序计算这个数列的第n项值除以101的余数。

输入格式:

只有一行,为一个正整数n(3<=n<=100000000)。

输出格式:

也只有一行,为一个正整数,代表斐波那契数列第n项的值除以101的余数。

输入样例:

38

输出样例:

58

代码长度限制

16 KB

时间限制

1000 ms

内存限制

64 MB

栈限制

8192 KB

answer:

#include <stdio.h>

int fibonacciMod101(int n)
{
    if (n <= 2)
    {
        return 1;
    }
    
    int a = 1, b = 1, c;
    for (int i = 3; i <= n; i++)
    {
        c = (a + b) % 101;
        a = b;
        b = c;
    }
    return c;
}
 
int main()
{
    int n;
    scanf("%d", &n);
    int result = fibonacciMod101(n);
    printf("%d\n", result);
    return 0;
}

7-3 实验4_12_遍历搜寻

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

已知整数a、b、c。你的任务是求出区间[a,b]内的整数,满足该数与“该数的所有因数(不包括本身但包括1,1的因数和按0处理)相加之和”的差的绝对值小于等于c的数字。例如27的因数是1、3、9。那么27与27的所有因数和的差为:27-(1+3+9)=14。

输入格式:

只有一行,为三个用空格分隔的整数,依次代表a、b、c。a、b代表所求区间范围,满足1<=a<=b<=10000,c代表限制条件,c>=0且小于10。

输出格式:

若干个整数,即满足条件的全部整数,每五个数为一行,整数之间用tab分隔,最后一个数后为换行符。当该区间没有符合条件的整数时,输出“There is no proper number in the interval.”。

输入样例一:

1 10000 0

输出样例一:

6    28    496    8128

输入样例二:

900 1000 0

输出样例二:

There is no proper number in the interval.

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

answer:

现在看起来完全没必要把这个输出复杂化

#include <stdio.h>

int Primesum(int n)
{
    int sum = 0;

    if(n == 1)
    {
        sum = 0;
    }
    else 
    {
        for(int i = 1; i <= n/2; i++)
        {
            if((n%i) == 0){
                sum += i;
            }
        }
    }
    return sum;
}

int main()
{
    int a, b, c;
    scanf("%d %d %d", &a, &b, &c);

    int num[10000];
    int sum = 0;
    int count = 0;

    for(int i = a; i <= b; i++)
    {
        sum = Primesum(i);
        if((sum - i) <= c&&(sum -i) >= -c){
            num[count] = i;
            count++;
        }
    }
    if(count == 0)
    {
        printf("There is no proper number in the interval.\n");  
    }
    else if(count%5 == 0)
    {
        for(int j = 0; j < count; j++)
        {
            if((j+1)%5 == 0)
            {
            printf("%d\n", num[j]);
            }else 
            {
            printf("%d\t", num[j]);
            }
        }
    }
    else if(count%5 != 0)
    {
        for( int j = 0; j < count ; j++)
        {
            if(j < count - 1)
            {
            if((j+1)%5 == 0)
            {
                printf("%d\n", num[j]);
            }
                else
                printf("%d\t", num[j]);
            }
            else if(j == count - 1)
                printf("%d\n", num[j]);
        }
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值