[NEFU C语言大一下期末 OJ模拟] 参考答案

Posted 鱼竿钓鱼干

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[NEFU C语言大一下期末 OJ模拟] 参考答案相关的知识,希望对你有一定的参考价值。

[NEFU C语言大一下期末 OJ模拟] 参考答案

计算极值

指针水题
在这里插入图片描述

#include <stdio.h>
#include <stdlib.h>
int js(int *p,int *x,int *y,int n)
{
   //start
    int *i;
    *x=*p;
    for(i=p;i<p+n;i++)
    	if(*i>*x)*x=*i;
    	
    *y=*p;
    for(i=p;i<p+n;i++)
    	if(*i<*y)*y=*i;
    return 0;
   //end
}
int main()
{ int data[100];
  int n,i,max=-1e9,min=1e9;
  while(scanf("%d",&n)!=-1)
  {
      for(i=0;i<n;i++)
      scanf("%d",&data[i]);
      js(data,&max,&min,n);
      printf("%d %d\\n",max,min);
  }
    return 0;
}

求n个学生的平均成绩并输出

结构体水题
在这里插入图片描述

在这里插入图片描述

#include<stdlib.h>
#include<stdio.h>

typedef struct stu{
	int s_no;
	float s_score;
}stu;
stu a[105];
int main(){
	int n;
	while(~scanf("%d",&n)){
		double ave=0;
		for(int i=1;i<=n;i++){
			scanf("%d %f",&a[i].s_no,&a[i].s_score);
			ave+=a[i].s_score;
		}
		ave/=n;
		for(int i=1;i<=n;i++){
			if(a[i].s_score>ave)
			printf("%8d %.1f\\n",a[i].s_no,a[i].s_score);
		}
	}
	return 0;
}

截取子串

在这里插入图片描述

字符串指针和strcpy的使用

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void subString(char *olds,char *news, int n){
	strcpy(news,olds+n);
}

int main(){
	char *olds,*news;
	olds=(char*)malloc(100*sizeof(char));
	news=(char*)malloc(100*sizeof(char));
	int n;
	while(~scanf(" %s %d",olds,&n)){
		
		subString(olds,news,n);
		printf("%s\\n",news);
	}
}

图像模糊处理

基础二维数组处理操作
唯一可能卡你的点可能是舍入到最接近的整数。​
做一个四舍五入即可

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 105
int g[N][N],ans[N][N];
int n,m;
int main(){
	while(~scanf("%d %d",&n,&m)){
		for(int i=1;i<=n;i++)
			for(int j=1;j<=m;j++)
			{
				scanf("%d",&g[i][j]);
				ans[i][j]=g[i][j];
			}
		for(int i=2;i<n;i++)
			for(int j=2;j<m;j++)
			{
				double ave=0;
				ave=g[i][j]+g[i-1][j]+g[i+1][j]+g[i][j-1]+g[i][j+1];
				ave/=5;
				ans[i][j]=(int)(ave+0.5);
			}
		for(int i=1;i<=n;i++)
		{
			for(int j=1;j<=m;j++){
				printf("%d ",ans[i][j]);
			}
			puts("");
		}
	}
}

链表合并

在这里插入图片描述

emm感觉考试应该不会到这个难度,以后学数据结构貌似可以直接用类似归并排序的玩意。
主要是去重,链表去重比较麻烦,所以拿数组模拟了一下。

给几个测试数据吧(不一定全,也不一定要达到这个要求)
主要测负数和组内重复

2 2
-1 -1
-1 -1
3 4
-1 0 2 
2 4 2
#include <stdio.h>
#include <stdlib.h>
struct e_set
{
   int data;
   struct e_set *next;
};
struct e_set * AB_Union( struct e_set *p,struct e_set * q)
{
  //start 
  	int a[50],c[50];
  	int cnta=0,cntc=0;
	e_set *i,*pre,*ans,*tmp;
	ans=(struct e_set*)calloc(1,sizeof(struct e_set));
    ans->next=NULL;
	i=p->next;
	/*链表输入数组*/
	while(i!=NULL){
		a[++cnta]=i->data;
		i=i->next;
	}
	i=q->next;
	while(i!=NULL){
		a[++cnta]=i->data;
		i=i->next;
	}
	/*数组去重*/
	for(int i=1;i<=cnta;i++){
		int flag=1;
		for(int j=1;j<=cntc;j++){
			if(a[i]==c[j]){
				flag=0;
				break;
			}
		}
		if(flag)c[++cntc]=a[i];
	}
	/*数组输入链表*/
	for(int i=1;i<=cntc;i++)
    {
        tmp=(struct e_set*)calloc(1,sizeof(struct e_set));
        tmp->data=c[i];
        tmp->next=ans->next;
        ans->next=tmp;
    }
  	return ans;
 //end 
}
void L_sort(struct e_set * L)
{
    struct e_set *p,*q,*s;
    int temp;
    for(p=L->next; p->next!=NULL; p=p->next)
    {
        s=p;
        for(q=p->next;q!=NULL; q=q->next)
        {
            if(q->data<s->data)
            {
                s=q;
            }
        }
        if(s!=p)
        {
            temp=p->data;
            p->data=s->data;
            s->data=temp;
        }
    }
}
void output(struct e_set * p)
{
    if(p!=NULL)
        p=p->next;
      while(p!=NULL)
      {
       printf("%3d",p->data);
       p=p->next;
      }
     printf("\\n"); 
}
int main()
{
    int n,m,i;
    struct e_set *p,*A,*B;
    while(scanf("%d%d",&m,&n)!=EOF)
    {
      A=(struct e_set*)calloc(1,sizeof(struct e_set));
      A->next=NULL;
      for(i=0;i<m;i++)
      {
        p=(struct e_set*)calloc(1,sizeof(struct e_set));
        scanf("%d",&p->data);
        p->next=A->next;
        A->next=p;
      }
      B=(struct e_set*)calloc(1,sizeof(struct e_set));
      B->next=NULL;
      for(i=0;i<n;i++)
      {
        p=(struct e_set*)calloc(1,sizeof(struct e_set));
        scanf("%d",&p->data);
        p->next=B->next;
        B->next=p;
      }
      p=AB_Union(A,B);
      L_sort(p);
      output(p);
    }
         return 0;
}

以上是关于[NEFU C语言大一下期末 OJ模拟] 参考答案的主要内容,如果未能解决你的问题,请参考以下文章

NEFU C语言阶段一2021年计算机1班阶段考试复习 参考代码

NEFU大一下C语言阶段一考试参考代码(带注释)

NEFU离散2020年离散数学大作业/历年题目

[NEFU ACM大一暑假集训 解题报告]字典树

[NEFU ACM大一暑假集训 解题报告]尺取法

[NEFU ACM大一暑假集训 解题报告]前缀和与差分