山东理工大学:2022级-程序设计基础I-期末测试题:参考答案

 ****************************0-0目录************************************

 ****************************0-0目录************************************

6-1 求m到n之和

1.题目

2.参考代码

6-2 字符串的连接

1.题目

2.参考代码

7-1 sdut-C语言实验——逆置正整数

1.题目

2.参考代码

7-2 查找指定字符

1.题目

2.参考代码

7-3 sdut-C语言实验- 分段函数求值

1.题目

2.参考代码

7-4 求阶乘序列前N项和

1.题目

2.参考代码

7-5 判断上三角矩阵

1.题目

2.参考代码

7-6 字符串排序

1.题目

2.参考代码



6-1 求m到n之和

1.题目

本题要求实现一个计算m~n(m<n)之间所有整数的和的简单函数。

函数接口定义:

int sum( int m, int n );

其中mn是用户传入的参数,保证有m<n。函数返回的是m~n之间所有整数的和。

裁判测试程序样例:

#include <stdio.h>

int sum(int m, int n);

int main()
{    
    int m, n;

    scanf("%d %d", &m, &n);
    printf("sum = %d\n", sum(m, n));
    
    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

-5 8

输出样例:

sum = 21

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

2.参考代码

/*@Date:2023/12/25
                  */

int sum(int m,int n){
    int sum = 0;
    
    for(int i=m;i<=n;i++){
        sum+=i;
    }

    return sum;
}

6-2 字符串的连接

1.题目

本题要求实现一个函数,将两个字符串连接起来。

函数接口定义:

char *str_cat( char *s, char *t );

函数str_cat应将字符串t复制到字符串s的末端,并且返回字符串s的首地址。

裁判测试程序样例:

#include <stdio.h>
#include <string.h>

#define MAXS 10

char *str_cat( char *s, char *t );

int main()
{
    char *p;
    char str1[MAXS+MAXS] = {'\0'}, str2[MAXS] = {'\0'};
    
    scanf("%s%s", str1, str2);
    p = str_cat(str1, str2);
    printf("%s\n%s\n", p, str1);
    
    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

abc
def

输出样例:

abcdef
abcdef

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

2.参考代码

/*@Date:2023/12/25
                  */

char *str_cat(char *s,char *t){
    int length = strlen(s);
    

    for(int i=0;*(t+i)!='\0';i++){
        *(s+length+i) = *(t+i);     //s+length:s字符串后面、s+length+i:s字符串后面往后走
    }                               //t+i:t字符串从首地址遍历   
    

    return s;
}

7-1 sdut-C语言实验——逆置正整数

1.题目

输入一个三位正整数,将它反向输出。注意130逆置后是31。

输入格式:

3位正整数。

输出格式:

逆置后的正整数。

输入样例:

在这里给出一组输入。例如:

123

输出样例:

在这里给出相应的输出。例如:

321

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

2.参考代码

/*@Date:2023/12/25
                  */
#include<stdio.h>
int Reversenum(int num);

int main(){
    int num;
    scanf("%d",&num);


    
    printf("%d",Reversenum(num));

}

int Reversenum(int num){
    int save = num;
    int result = 0;
    int x;
    
    while(save>0){
        x = save%10;
        save/=10;
        result = x+result*10;
    }

    return result;
}

7-2 查找指定字符

1.题目

本题要求编写程序,从给定字符串中查找某指定的字符。

输入格式:

输入的第一行是一个待查找的字符。第二行是一个以回车结束的非空字符串(不超过80个字符)。

输出格式:

如果找到,在一行内按照格式“index = 下标”输出该字符在字符串中所对应的最大下标(下标从0开始);否则输出"Not Found"。

输入样例1:

m
programming

输出样例1:

index = 7

输入样例2:

a
1234

输出样例2:

Not Found

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

2.参考代码

/*@Date:2023/12/26
                   */

#include<stdio.h>
#include<string.h>

int main(){
    int index = -1;
    
    char ch;
    char str[81];
    ch = getchar();                        
    getchar();                                //getchar()用于吞掉输入第一个字符时产生的回车键,防止进入了gets使gets直接跳过
    gets(str);                                //这里不能写scanf来输入字符串,会扣分                            



    int length = strlen(str);
    for(int i=0;i<length;i++){
        if(str[i]==ch){                       //这里如果满足条件就赋值,所以是可以输出最大下标的
            index = i;
        }
    }


    
    if(index == -1){
        printf("Not Found");
    }
    else{
        printf("index = %d",index);
    }
    
} 

7-3 sdut-C语言实验- 分段函数求值

1.题目

有如下分段函数
F(x) = x^2 + 1 当x> 0时;
F(x) = -x 当x<0时;
F(x) = 100.0 当x=0时;
编程根据输入的不同x(x为实数),输出其对应的函数值。

输入格式:

多组输入,每组一个实数x。处理到文件结束。

输出格式:

对于每组输入x,输出其对应的F(x),每组一行,结果保留1位小数。

输入样例:

8.00
-5.0

输出样例:

在这里给出相应的输出。例如:

65.0
5.0

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

2.参考代码

/*@Date:2023/12/25
                 */


#include<stdio.h>

int main(){
    double x;
    while(scanf("%lf",&x)!=EOF){
        double result;
        if(x>0){
            result = x*x+1;
        }
        else if(x<0){
            result = -x;
        }
        else if(x==0){
            result = 100.0;
        }


        printf("%.1lf\n",result);
    }
    
    return 0;
}

7-4 求阶乘序列前N项和

1.题目

本题要求编写程序,计算序列 1!+2!+3!+⋯ 的前N项之和。

输入格式:

输入在一行中给出一个不超过12的正整数N。

输出格式:

在一行中输出整数结果。

输入样例:

5

输出样例:

153

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

2.参考代码

/*@Date:2023/12/25
                 */



#include<stdio.h>
int Factorial(int n);

int main(){
    int N;
    int result = 0;
    scanf("%d",&N);



    for(int i=1;i<=N;i++){
        result+=Factorial(i);
    }



    printf("%d",result);
    
}

int Factorial(int n){          //函数作用:计算阶乘(Factorial)
    int out = 1;

    for(int i=1;i<=n;i++){
        out*=i;
    }

    return out;
}

7-5 判断上三角矩阵

1.题目

上三角矩阵指主对角线以下的元素都为0的矩阵;主对角线为从矩阵的左上角至右下角的连线。

本题要求编写程序,判断一个给定的方阵是否上三角矩阵。

输入格式:

输入第一行给出一个正整数T,为待测矩阵的个数。接下来给出T个矩阵的信息:每个矩阵信息的第一行给出一个不超过10的正整数n。随后n行,每行给出n个整数,其间以空格分隔。

输出格式:

每个矩阵的判断结果占一行。如果输入的矩阵是上三角矩阵,输出“YES”,否则输出“NO”。

输入样例:

3
3
1 2 3
0 4 5
0 0 6
2
1 0
-8 2
3
1 2 3
1 4 5
0 -1 6

输出样例:

YES
NO
NO

鸣谢中水七局机电安装分局喻春桥补充数据!

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

2.参考代码

/*@Date:2023/12/26
                 */

#include<stdio.h>

int main(){
    int T;
    scanf("%d",&T);

    while(T--){
        int n;
        int arr[1000][1000];
        scanf("%d",&n);
        for(int i=0;i<n;i++){
            for(int k=0;k<n;k++){
                scanf("%d",&arr[i][k]);
                 }
             }


        int flag=1;
        for(int i=0;i<n;i++){
            for(int k=0;k<i;k++){
                if(arr[i][k]!=0){
                    flag=0;
                }
            }
        }

        if(flag==1){
            printf("YES\n");
        }
        else if(flag==0){
            printf("NO\n");
        }  
    }
    
    
    return 0;
}

7-6 字符串排序

1.题目

本题要求编写程序,读入5个字符串,按由小到大的顺序输出。

输入格式:

输入为由空格分隔的5个非空字符串,每个字符串不包括空格、制表符、换行符等空白字符,长度小于80。

输出格式:

按照以下格式输出排序后的结果:

After sorted:
每行一个字符串

输入样例:

red yellow blue black white

输出样例:

After sorted:
black
blue
red
white
yellow

鸣谢贵州民族大学张玉全老师修正数据!

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

2.参考代码

/*@Date:2023/12/26
                 */

#include<stdio.h>
#include<string.h>                           //strcpy、strcmp函数要用

int main(){ 
    char arr[5][80];                         //二维数组的"行"表示字符串个数,"列"表示每个字符 串的字符数

    for(int i=0;i<5;i++){
        scanf("%s",&arr[i]);                 //输入5个字符串
    }


  
    for(int i=0;i<5-1;i++){                  //冒泡排序
        for(int k=0;k<5-1-i;k++){
            if(strcmp(arr[k],arr[k+1])>0){
                char temp[80] = "\0";
                strcpy(temp,arr[k+1]);
                strcpy(arr[k+1],arr[k]);
                strcpy(arr[k],temp);
            }
        }
    }



    printf("After sorted:\n");
    for(int i=0;i<5;i++){ 
        printf("%s\n",arr[i]);
    }
    return 0;
}

  • 40
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值