[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模拟] 参考答案的主要内容,如果未能解决你的问题,请参考以下文章