2024级计算机与信息工程学院《程序设计基础》期中考试题解

期末将至,我们一起为复习备考的uu们加油叭~

本题解配合视频讲解食用更佳哦~!

 -> 视频详解: 还不去打cf的个人空间-还不去打cf个人主页-哔哩哔哩视频

本题目来自河南师范大学2024级计算机与信息工程学院C语言程序设计基础期中考试


1.求距离

#include<stdio.h>
#include<math.h>

int main()
{
	double x1, y1, x2, y2;
	scanf("%lf %lf %lf %lf", &x1, &y1, &x2, &y2);
	double d;
	d = sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
	printf("%.2lf", d);
	
	return 0;
}

// 代码来源:马若航

2.较小锐角的正弦值

#include<stdio.h>
int main()
{
    int a, b, c;
    int max = 0, min = 1e9;
    scanf("%d%d%d", &a, &b, &c);
    if (a > max) max = a;
    if (a < min) min = a;
    if (b > max) max = b;
    if (b < min) min = b;
    if (c > max) max = c;
    if (c < min) min = c;
    printf("%d/%d", min, max);
    return 0;    
}

// 代码来源:宋宇凡

3.月份天数

#include <stdio.h>

int main()
{
	int y, m;
	scanf("%d %d", &y, &m);
	
	switch (m){
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:
			printf("31\n");
			break;
		case 4:
		case 6:
		case 9:
		case 11:
			printf("30\n");
			break;
		case 2:
			if((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0)){
				printf("29\n");
			}else printf("28\n");
			break;
		default:
			printf("Wrong");
			break;
			
	}
	
	return 0;
}

// 代码来源:刘正阳

4.求分数序列之和

#include <stdio.h>
int main()
{
    int s1 = 2, s2 = 3, s;
    int f1 = 1, f2 = 2, f;

    int n; 
    double sum = 0.0;
    scanf("%d", &n);

    if(n == 1){
        sum = 2.00;
    }else if(n >= 2){
        sum = 3.50;
        for(int i = 3; i <= n; ++ i){
            s = s1 + s1;
            f = f1 + f2;
            sum += (double)s / f;
            s1 = s2, 
            s2 = s;
            f1 = f2, 
            f2 = f;
        }
    }

    printf("%.2lf", sum);
    return 0;
}

// 代码来源:刘正阳

5.逆序输出

#include<stdio.h>
void fun(int n)
{
    if(n == 0) return ;
    else
    {
        printf("%d", n % 10);
        fun(n / 10);
    } 
}
int count(int n)
{
    int cnt = 0;
    while(n)
    {
        cnt ++;
        n /= 10;
    }
    return cnt;
}
int main()
{
    int n;
    scanf("%d", &n);
    fun(n);
    printf("\n");
    int ans = count(n);
    printf("%d", ans);
    return 0;
}

// 代码来源:马若航

6.百钱买百鸡

#include<stdio.h>
int main()
{
    int n;
    scanf("%d", &n);
    for (int i = 0; i <= n / 5; i ++)
        for (int j = 0; j <= n / 3; j ++)
            for (int k = 0; k <= n * 3; k ++)
                if (i + j + k == n && i * 5 + j * 3 + k / 3 == n && k % 3 == 0)
                    printf("%d %d %d\n", i, j, k);
    return 0;
}

// 代码来源:宋宇凡

7.最大奖金额

#include<stdio.h>
int main()
{
    int n;
    scanf("%d", &n);
    int a[110];
    int sum = 0, max = 0, maxpos1, maxpos2;
    for(int i = 1; i <= n; ++ i) scanf("%d", &a[i]);
    for(int i = 1; i <= n - 1; ++ i)
    {
        for(int j = i + 1; j <= n; ++ j)
        {
            sum = a[i] + a[j];
            if(sum % 2== 0 && sum % 10 != 0) sum *= 2;
            else if(sum % 10 == 0) sum *= 5;

            if(sum > max) 
            {
                max = sum;
                maxpos1 = i;
                maxpos2 = j;
            }
        }
    }
    printf("%d %d %d", a[maxpos1], a[maxpos2], max);
    return 0;
}

// 代码来源:马若航

8.回文素数

#include<stdio.h>
long long hw(long long n)//求回文数
{
    long long hws = n / 10; 
    while(n > 0)
    {
        int a = n % 10;
        hws = hws * 10 + a;
        n = n / 10;
    }
    //printf("%lld", hws);
    return hws;
}

int ss(long long n)//判断素数 
{
	int flag = 1;
	for(long long i = 2; i * i <= n; i ++)
	{
		if(n % i == 0)
		flag = 0;
	}
	return flag;
}

int main()
{
	long long t; 
	scanf("%lld", &t);
	long long hws = hw(t);
	if(ss(hws))
	{
		printf("prime");
	}
	else printf("noprime");
	return 0; 
}

// 代码来源:刘雨欣

9.最大凸值

#include<stdio.h>
int a[10010];
int main()
{
	int n;
	scanf("%d", &n);
	for(int i = 1; i <= n; i++)
	{
		scanf("%d", &a[i]);
	}
	
	int ans = 0; 
	for(int i = 1; i <= n-2; i++)
	{
		for(int j = i + 2; j <= n; j++)
		{
			if(a[i] == a[j])
			{
                int sum=0,cnt=0;
				for(int k = i+1; k <= j-1; k++)
				{
                    if(a[k]>=a[i]) sum += (a[k] - a[i]);
                    else
                    {
                        cnt=1;
                        break;
                    }
				}
				if(sum>ans && cnt!=1) ans=sum;
			}
		}
	}
	printf("%d",ans);
	return 0;
} 

// 代码来源:白汝凯

10.数列的计算个数

 // 解法一:在讲题时,临时改出来的代码:
#include <stdio.h>

void dfs(int last,  int *sum) {
	
    if (last == 1) {
	return;}//结束调用 
    
    else{// 尝试添加所有可能的新元素(正整数且不超过last的一半)
    for (int i = 1; i <= last / 2; i++) {
    	(*sum)++; 
        dfs(i, sum);}
    }
    
}


int main() 
{
    int n;
    scanf("%d", &n);
    int sum = 0;//总数 
    
    dfs(n, &sum);
     sum ++;
    printf("%d\n", sum);
    return 0;
}

// 代码来源:郭嘉一
// 解法二:指针版
#include <stdio.h>

void dfs(int last,  int *sum) {
	
    (*sum)++;//无论如何先加1 
    
    if (last == 1) {return;}//结束调用 
    
    else{// 尝试添加所有可能的新元素(正整数且不超过last的一半)
    for (int i = 1; i <= last / 2; i++) {
    	//sum ++; 
        dfs(i, sum);}
    }
    
}


int main() 
{
    int n;
    scanf("%d", &n);
    int sum = 0;//总数 
    
    dfs(n, &sum);
     
    printf("%d\n", sum);
    return 0;
}

// 代码来源:郭嘉一
// 解法三:无指针版
#include <stdio.h>

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

int main()
{
	int n;
	scanf ("%d",&n);
	
	int k = dfs(n);
	printf ("%d",k);
	return 0;
 }

// 代码来源:郭嘉一

emmm 写个结语叭~  祝大伙er期末高绩点~!

3w3~

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值