📄 二级c机试题.txt
字号:
double fun(int n )
{int i;double s=0.0,y;
for (i=-n;i<=n;i++)
{y=f(1.0*i);s +=y;}
/************found************/
return s
}
main ()
{
printf("%f \n",fun(5));
}
解题思路:
第一处:由于返回值是实数型值,所以在函数名前加上double 。
第二处:语句后缺少分号。
**********************************************************************
编写函数fun,它的功能是计算:
s 作为函数值返回。
在C 语言中可调用log (n )函数求ln (n)。log 函数的引用说明是:
double log(double x)。
例如,若m 的值为:20,fun 函数值为:6.506583 。
注意:部分源程序在文件PROG1.C 中。
请勿改动主函数main 和其它函数中的任何内容,仅在函数fun 的花括号中填入
你编写的若干语句。
给定源程序:
#include <math.h>
#include <stdio.h>
double fun(int m )
{}
main()
{
printf("%f \n",fun(20));
NONO();
}
NONO ()
{/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
FILE *fp,*wf ;
int i,n ;
double s ;
fp =fopen("c:\\test \\in.dat","r");
wf =fopen("c:\\test \\out.dat","w");
for(i =0 ;i <10 ;i++){
fscanf(fp,"%d",&n);
s =fun(n);
fprintf(wf,"%f \n",s);
}
fclose(fp);
fclose(wf);
}
解题思路:
本题是根据给定的公式计算结果。使用for 循环语句依次求出每一项的值,分别进行
累加并把结果存入变量s 中,循环结束后再对s 求平方根,结果仍存入s 中,最后返回s 。
参考答案:
#include <math.h>
#include <stdio.h>
double fun(int m )
{
double s =0.0 ;
int i ;
for(i =1 ;i <=m ;i++)s +=log(1.0 *i);
s =sqrt(s);
return s ;
}
main()
{
printf("%f \n",fun(20));
NONO();
}
NONO ()
{/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
FILE *fp,*wf ;
int i,n ;
double s ;
fp =fopen("c:\\test \\in.dat","r");
wf =fopen("c:\\test \\out.dat","w");
for(i =0 ;i <10 ;i++){
fscanf(fp,"%d",&n);
s =fun(n);
fprintf(wf,"%f \n",s);
}
fclose(fp);
fclose(wf);
}
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
第08 套:
给定程序中,函数fun 的功能是将参数给定的字符串、整数、浮点数写到文本
文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数atoi 和atof 将
字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结
果。
注意:源程序存放在考生文件夹下的BLANK1.C 中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include <stdio.h>
#include <stdlib.h>
void fun(char *s,int a,double f)
{
/**********found**********/
__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);
/**********found**********/
__2__;
fp =fopen("file1.txt","r");
/**********found**********/
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 <stdio.h>
#include <alloc.h>
#include <string.h>
#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;
/**********found**********/
t=(STU *)calloc(sizeof(STU),m)
for(i=0;i<N;i++)b [i ]=a [i ];
for(k=0;k<m;k++)
{for(i=j=0;i<N;i++)
if(b [i ].s >b [j ].s)j=i;
/**********found**********/
t(k)=b(j);
b [j ].s=0;
}return
t;
}
outresult(STU a [],FILE *pf)
{int i;
for(i=0;i<N;i++)
fprintf(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;i<m;i++)
printf("%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 <stdio.h>
#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;i<n;i++)printf("%3d",a [i ]);
n=fun(a,n);
printf("\n \nThe data after deleted :\n");
for(i=0;i<n;i++)printf("%3d",a [i ]);printf("\n \n");
NONO();
}
NONO()
{/*请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */
FILE *rf,*wf;int a [N ],n,i,j ;
rf =fopen("c:\\test \\in.dat","r");
wf =fopen("c:\\test \\out.dat","w");
for(i =0 ;i <5 ;i++){
fscanf(rf,"%d",&n);
for(j =0 ;j <n ;j++)fscanf(rf,"%d",&a [j ]);
n =fun(a,n);
for(j =0 ;j <n ;j++)fprintf(wf,"%4d",a [j ]);
fprintf(wf,"\n");
}
fclose(rf);fclose(wf);
}
解题思路:
本题是删除已排序过数组中的相同数。
1.取出数组中的第1 个数存放在临时变量k 中,再利用for 循环来依次判断所有的数。
2.如果取出的数和k 相比,如果不相同,则仍存放在原数组中,其中存放的位置由j
来控制,接着把这个数重新存入k 。如果相同,则取下一数。
参考答案:
#include <stdio.h>
#define N 80
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 ;
}
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;i<n;i++)printf("%3d",a [i ]);
n=fun(a,n);
printf("\n \nThe data after deleted :\n");
for(i=0;i<n;i++)printf("%3d",a [i ]);printf("\n \n");
NONO();
}
NONO()
{/*请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */
FILE *rf,*wf;int a [N ],n,i,j ;
rf =fopen("c:\\test \\in.dat","r");
wf =fopen("c:\\test \\out.dat","w");
for(i =0 ;i <5 ;i++){
fscanf(rf,"%d",&n);
for(j =0 ;j <n ;j++)fscanf(rf,"%d",&a [j ]);
n =fun(a,n);
for(j =0 ;j <n ;j++)fprintf(wf,"%4d",a [j ]);
fprintf(wf,"\n");
}
fclose(rf);fclose(wf);
}
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
第09 套:
给定程序中,函数fun 的功能是:在带有头结点的单向链表中,查找数据域中
值为ch 的结点。找到后通过函数值返回该结点在链表中所处的顺序号;若不存在
值为ch 的结点,函数返回0 值。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结
果。
注意:源程序存放在考生文件夹下的BLANK1.C 中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include <stdio.h>
#include <stdlib.h>
#define N 8
typedef struct list
{int data;
struct list *next;
}SLIST;
SLIST *creatlist(char *);
void outlist(SLIST *);
int fun(SLIST *h,char ch)
{SLIST *p;int n=0;
p=h->next;
/**********found**********/
while(p!=___1___)
{n++;
/**********found**********/
if (p->data==ch)return ___2___;
else p=p->next;
}
return 0;
}
main()
{SLIST *head;int k;char ch;
char a [N ]={'m','p','g','a','w','x','r','d'};
head=creatlist(a);
outlist(head);
printf("Enter a letter:");
scanf("%c",&ch);
/**********found**********/
k=fun(___3___);
if (k==0)printf("\nNot found!\n");
else printf("The sequence number is :%d \n",k);
}
SLIST *creatlist(char *a)
{SLIST *h,*p,*q;int i;
h=p=(SLIST *)malloc(sizeof(SLIST));
for(i=0;i<N;i++)
{q=(SLIST *)malloc(sizeof(SLIST));
q->data=a [i ];p->next=q;p=q;
}
p->next=0;
return h;
}
void outlist(SLIST *h)
{SLIST *p;
p=h->next;
if (p==NULL)printf("\nThe list is NULL!\n");
else {
printf("\nHead");
do {
printf("->%c",p->data);p=p->next;}
while(p!=NULL);
printf("->End \n");
}
}
解题思路:
本题是在给定的链表中要求找出指定的值。
第一处:判断p 是否结束,所以应填:NULL 。
第二处:在函数fun 中,使用n 来计算结点的位置,当找到ch 值,则返回结点的位置n,
所以应填:return n 。
第三处:函数调用,在主函数中已经给出了head 和ch,所以应填:head,ch 。
**********************************************************************
给定程序MODI1.C 中函数fun 的功能是:删除p 所指字符串中的所有空白字符(包
括制表符、回车符及换行符)。
输入字符串时用'#'结束输入。
请改正程序中的错误,使它能输出正确的结果。
注意:不要改动main 函数,不得增行或删行,也不得更改程序的结构!
给定源程序:
#include <string.h>
#include <stdio.h>
#include <ctype.h>
fun (char *p)
{int i,t;char c [80 ];
/************found************/
For (i =0,t =0;p [i ] ;i++)
if(!isspace(*(p+i)))c [t++]=p [i ];
/************found************/
c [t ]="\0";
strcpy(p,c);
}main(
)
{char c,s [80 ];
int i=0;
printf("Input a string:");
c=getchar();
while(c!='#')
{s [i ]=c;i++;c=getchar();}
s [i ]='\0';
fun(s);
puts(s);
}
解题思路:
第一处:保留字for 错写成For 。
第二处:置字符串结束符错误,应该是:'\0'。
**********************************************************************
请编写一个函数fun,它的功能是:将ss 所指字符串中所有下标为奇数位置上
的字母转换为大写(若该位置上不是字母,则不转换)。
例如,若输入"abc4EFg",则应输出"aBc4EFg"。
注意:部分源程序存在文件PROG1.C 中。
请勿改动主函数main 和其它函数中的任何内容,仅在函数fun 的花括号中填入
你编写的若干语句。
给定源程序:
#include <stdio.h>
#include <string.h>
void fun (char *ss )
{}main(
)
{char tt [81 ] ;
printf("\nPlease enter an string within 80 characters:\n");gets(tt );
printf("\n \nAfter changing,the string \n \"%s \"",tt );
fun(tt );
printf("\nbecomes \n \"%s \"\n",tt );
NONO ();
}
NONO ()
{/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
FILE *fp,*wf ;
char tt [81 ] ;
int i ;
fp =fopen("c:\\test \\in.dat","r");
wf =fopen("c:\\test \\out.dat","w");
for(i =0 ;i <10 ;i++){
fscanf(fp,"%s",tt);
fun(tt );
fprintf(wf,"%s \n",tt);
}
fclose(fp);
fclose(wf);
}
解题思路:
本题是考察考生对字母按要求进行转换。其中大小字母的ASCII 值相差32 。
参考答案:
#include <stdio.h>
#include <string.h>
void fun (char *ss )
{
int i ;
for(i =1 ;i <strlen(*ss);i+=2){
if(ss [i ] >='a'&&ss [i ] <='z')ss [i ] -=32 ;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -