c语言中求a1到a10的最大值,2014年计算机二级《C语言》上机例题精讲(5)

给定程序中,函数fun的功能是将参数给定的字符串、整数、浮点数写到文本

文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数atoi和atof将

字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。

请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。

注意:源程序存放在考生文件夹下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构!

给定源程序:

#include

#include

void fun(char *s, int a, double f)

{

__1__ fp;

char str[100], str1[100], str2[100];

int a1; double f1;

fp = fopen("file1.txt", "w");

fprintf(fp, "%s %d %f\n", s, a, f);

__2__ ;

fp = fopen("file1.txt", "r");

fscanf(__3__,"%s%s%s", str, str1, str2);

fclose(fp);

a1 = atoi(str1);

f1 = atof(str2);

printf("\nThe result :\n\n%s %d %f\n", str, a1, f1);

}

main()

{ char a[10]="Hello!"; int b=12345;

double c= 98.76;

fun(a,b,c);

}

解题思路:

本题是考察先把给定的数据写入到文本文件中,再从该文件读出并转换成相应的整数、浮点数显示在屏幕上。

第一处:定义文本文件类型变量,所以应填:FILE *。

第二处:关闭刚写入的文件,所以应填:fclose(fp)。

第三处:从文件中读出数据,所以应填:fp。

***************************************************

给定程序MODI1.C中函数fun的功能是: 对N名学生的学习成绩,按从高到低的顺序找出前m(m≤10)名学生来, 并将这些学生数据存放在一个动态分配的连续存储区中, 此存储区的首地址作为函数值返回。

请改正函数fun中指定部位的错误, 使它能得出正确的结果。

注意: 不要改动main函数, 不得增行或删行, 也不得更改程序的结构!

给定源程序:

#include

#include

#include

#define N 10

typedef struct ss

{ char num[10];

int s;

} STU;

STU *fun(STU a[], int m)

{ STU b[N], *t;

int i,j,k;

t=(STU *)calloc(sizeof(STU),m)

for(i=0; ifor(k=0; k{ for(i=j=0; iif(b[i].s > b[j].s) j=i;

t(k)=b(j);

b[j].s=0;

}

return t;

}

outresult(STU a[], FILE *pf)

{ int i;

for(i=0; ifprintf(pf,"No = %s Mark = %d\n", a[i].num,a[i].s);

fprintf(pf,"\n\n");

}

main()

{ STU a[N]={ {"A01",81},{"A02",89},{"A03",66},{"A04",87},{"A05",77},

{"A06",90},{"A07",79},{"A08",61},{"A09",80},{"A10",71} };

STU *pOrder;

int i, m;

printf("***** The Original data *****\n");

outresult(a, stdout);

printf("\nGive the number of the students who have better score: ");

scanf("%d",&m);

while( m>10 )

{ printf("\nGive the number of the students who have better score: ");

scanf("%d",&m);

}

pOrder=fun(a,m);

printf("***** THE RESULT *****\n");

printf("The top :\n");

for(i=0; iprintf(" %s %d\n",pOrder[i].num , pOrder[i].s);

free(pOrder);

}

解题思路:

第一处: 语句最后缺少分号。

第二处: 应该使用方括号,而不是圆括号。

像此类,使用编译,即可发现。

***************************************************

请编写函数fun, 函数的功能是: 删去一维数组中所有相同的数, 使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。

例如, 一维数组中的数据是: 2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10。

删除后,数组中的内容应该是: 2 3 4 5 6 7 8 9 10。

注意:部分源程序在文件PROG1.C中。

请勿改动主函数main和其它函数中的任何内容, 仅在函数fun的花括号中填入你编写的若干语句。

给定源程序:

#include

#define N 80

int fun(int a[], int n)

{

}

main()

{ int a[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10},i,n=20;

printf("The original data :\n");

for(i=0; in=fun(a,n);

printf("\n\nThe data after deleted :\n");

for(i=0;iNONO();

}

解题思路:

本题是删除已排序过数组中的相同数。

1. 取出数组中的第1个数存放在临时变量k中,再利用for循环来依次判断所有的数。

2. 如果取出的数和k相比,如果不相同,则仍存放在原数组中,其中存放的位置由j来控制, 接着把这个数重新存入k。如果相同,则取下一数。

参考答案:

int fun(int a[], int n)

{

int i, j = 1, k = a[0] ;

for(i = 1 ; i < n ; i++)

if(k != a[i]) {

a[j++]=a[i] ;

k = a[i] ;

}

a[j] = 0 ;

return j ;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值