📄 二级c机试题.txt
字号:
第00 套:
给定程序中,函数fun 的功能是:求ss 所指字符串数组中长度最长的字符串所
在的行下标,作为函数值返回,并把其串长放在形参n 所指变量中。ss 所指字符串
数组中共有M 个字符串,且串长<N 。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结
果。
注意:源程序存放在考生文件夹下的BLANK1.C 中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include <stdio.h>
#define M 5
#define N 20
/**********found**********/
int fun(char (*ss)___1___,int *n)
{int i,k=0,len=0;
for(i=0;i<M;i++)
{len=strlen(ss [i ]);
/**********found**********/
if(i==0)*n=___2___;
if(len>*n){
/**********found**********/
___3___;
k=i;
}
}
return(k);
}
main()
{char
ss [M ][N ]={"shanghai","guangzhou","beijing","tianjing","cchongqing"};
int n,k,i;
printf("\nThe original strings are :\n");
for(i=0;i<M;i++)puts(ss [i ]);
k=fun(ss,&n);
printf("\nThe length of longest string is :%d \n",n);
printf("\nThe longest string is :%s \n",ss [k ]);
}
解题思路:
第一处:形参ss 的定义,它是一个字符串数组的定义,其宽度为N,所以应填:N 。
第二处:取第一个字符串的长度赋值给变量*n,所以应填:len 。
第三处:每循环一次,判断当前字符串的长度是否大于*n,如果大于,则*n=len 。
给定程序MODI1.C 中 fun 函数的功能是:根据形参m,计算如下公式的值。
1 1 1 1
t =1 +-----+-----+-----+……+-----
2 3 4 m
例如,若输入 5,则应输出 2.283333 。
请改正程序中的错误或在下划线处填上适当的内容并把下划线删除,使它
能计算出正确的结果。
注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!
给定源程序:
#include <stdio.h>
double fun(int m )
{
double t =1.0;
int i;
for(i =2;i <=m;i++)
/**********found**********/
t +=1.0/k;
/**********found**********/
________
}
main()
{
int m;
printf("\nPlease enter 1 integer number:");
scanf("%d",&m );
printf("\nThe result is %lf \n",fun(m ));
}
解题思路:
第一处:在此变量k 没有定义过,再根据公式和for 循环语句中所用的变量可知,这
里的k 实际上是i 。
第二处:应是返回公式的值,函数中公式的值是存放在临时变量t 中,所以应填return
t;。
**********************************************************************
编写一个函数,该函数可以统计一个长度为2 的字符串在另一个字符串中出现
的次数。例如,假定输入的字符串为:asd asasdfg asd as zx67 asd mklo,子字
符串为:as,则应输出6 。
注意:部分源程序在文件PROG1.C 中。
请勿改动主函数main 和其它函数中的任何内容,仅在函数fun 的花括号中填入
你编写的若干语句。
给定源程序:
#include <stdio.h>
#include <string.h>
int fun(char *str,char *substr)
{
}
main()
{
char str [81 ],substr [3 ];
int n;
printf("输入主字符串:");
gets(str);
printf("输入子字符串:");
gets(substr);
puts(str);
puts(substr);
n=fun(str,substr);
printf("n=%d \n",n);
NONO();
}
NONO()
{
/*请在此函数内打开文件,输入测试数据,调用 fun 函数,
输出数据,关闭文件。 */
char str [81 ],substr [3 ],ch;
int n,len,i =0;
FILE *rf,*wf ;
rf =fopen("c:\\test \\in.dat","r");
wf =fopen("c:\\test \\out.dat","w");
while(i <5){
fgets(str,80,rf);
fgets(substr,10,rf);
len =strlen(substr)-1 ;
ch =substr [len ] ;
if(ch =='\n'||ch ==0x1a)substr [len ] =0 ;
n=fun(str,substr);
fprintf(wf,"%d \n",n);
i++;
}
fclose(rf);
fclose(wf);
}
解题思路:
本题是统计一个字符串在另一个字符串中出现的次数。
程序流程如下:
1.利用strstr 函数,首先找到第一个出现的位置。
2.利用while 循环和strstr 依次查找所有出现的位置,并进行统计,并把统计结果
作为函数值返回。
strstr(const char *s1,const char *s2)是字符串s2 在s1 中出现的位置,如果找
到则返回位置指针。
参考答案:
#include <stdio.h>
#include <string.h>
int fun(char *str,char *substr)
{
int cnt =0 ;
char *p =str,*q ;
while(*p){
q =strstr(p,substr);
if(q ==NULL)break;
p =q +strlen(substr);
cnt++;
}
return cnt ;
}
main()
{
char str [81 ],substr [3 ];
int n;
printf("输入主字符串:");
gets(str);
printf("输入子字符串:");
gets(substr);
puts(str);
puts(substr);
n=fun(str,substr);
printf("n=%d \n",n);
NONO();
}
NONO()
{
/*请在此函数内打开文件,输入测试数据,调用 fun 函数,
输出数据,关闭文件。 */
char str [81 ],substr [3 ],ch;
int n,len,i =0;
FILE *rf,*wf ;
rf =fopen("c:\\test \\in.dat","r");
wf =fopen("c:\\test \\out.dat","w");
while(i <5){
fgets(str,80,rf);
fgets(substr,10,rf);
len =strlen(substr)-1 ;
ch =substr [len ] ;
if(ch =='\n'||ch ==0x1a)substr [len ] =0 ;
n=fun(str,substr);
fprintf(wf,"%d \n",n);
i++;
}
fclose(rf);
fclose(wf);
}
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
第01 套:
函数fun 的功能是:逆置数组元素中的值。例如:若a 所指数组中的数据依次
为:1 、2 、3 、4 、5 、6 、7 、8 、9,则逆置后依次为:9 、8 、7 、6 、5 、4 、3 、2 、
1 。形参n 给出数组中数据的个数。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结
果。
注意:源程序存放在考生文件夹下的BLANK1.C 中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include <stdio.h>
void fun(int a [],int n)
{int i,t;
/**********found**********/
for (i=0;i<___1___;i++)
{
t=a [i ];
/**********found**********/
a [i ] =a [n-1-___2___];
/**********found**********/
___3___=t;
}
}
main()
{int b [9 ]={1,2,3,4,5,6,7,8,9},i;
printf("\nThe original data :\n");
for (i=0;i<9;i++)
printf("%4d ",b [i ]);
printf("\n");
fun(b,9);
printf("\nThe data after invert :\n");
for (i=0;i<9;i++)
printf("%4d ",b [i ]);
printf("\n");
}
解题思路:
第一处:利用for 循环语句,对数组中的各元素进行逆置,所以终止值为n/2 。
第二处:进行交换数组中元素的值,由于是依次是首和尾交换,所以应填:i 。
第三处:使用中间变量t 来交换的,所以应填:a [n-i-1 ]。
**********************************************************************
给定程序MODI1.C 中函数fun 的功能是:将一个由八进制数字字符组成的字符
串转换为与其面值相等的十进制整数。规定输入的字符串最多只能包含5 位八进制
数字字符。
例如,若输入:77777,则输出将是:32767 。
请改正程序中的错误,使它能得出正确结果。
注意:不要改动main 函数,不得增行或删行,也不得更改程序的结构。
给定源程序:
#include <stdio.h>
int fun(char *p )
{int n;
/**********found**********/
n=*P-'o';
p++;
while(*p!=0 ){
/**********found**********/
\TAB n=n*8+*P-'o';
\TAB p++;
}return
n;
}
main()
{char s [6 ];int i;int n;
printf("Enter a string (Ocatal digits):");gets(s);
if(strlen(s)>5){printf("Error:String too longer !\n \n");exit(0);}
for(i=0;s [i ];i++)
if(s [i ]<'0'||s [i ]>'7')
{printf("Error:%c not is ocatal digits!\n \n",s [i ]);exit(0);}
printf("The original string:");puts(s);
n=fun(s);
printf("\n%s is convered to integer number:%d \n \n",s,n);
}
解题思路:
第一和第二处:*p 错写成*P,'0'错写成'o'。
**********************************************************************
学生的记录由学号和成绩组成,N 名学生的数据已在主函数中放入结构体数组
s 中,请编写函数fun,它的功能是:函数返回指定学号的学生数据,指定的学号在主
函数中输入。若没找到指定学号,在结构体变量中给学号置空串,给成绩置-1,作
为函数值返回。(用于字符串比较的函数是strcmp)。
注意:部分源程序在文件PROG1.C 中。
请勿改动主函数main 和其它函数中的任何内容,仅在函数fun 的花括号中填入
你编写的若干语句。
给定源程序:
#include <stdio.h>
#include <string.h>
#define N 16
typedef struct
{char num [10 ];
int s;
}STREC;
STREC fun(STREC *a,char *b )
{}
main()
{STREC s [N ]={{"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},
\TAB \TAB {"GA001",91},{"GA007",72},{"GA008",64},{"GA006",87},
\TAB \TAB {"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},
\TAB \TAB {"GA011",77},{"GA017",64},{"GA018",64},{"GA016",72}};
STREC h;
char m [10 ];
int i;FILE *out ;
printf("The original data:\n");
for(i=0;i<N;i++)
{if(i%4==0)printf("\n");
printf("%s %3d ",s [i ].num,s [i ].s);
}
printf("\n \nEnter the number:");gets(m);
h=fun(s,m );
printf("The data :");
printf("\n%s %4d \n",h.num,h.s);
printf("\n");
out =fopen("c:\\test \\out.dat","w");
h=fun(s,"GA013");
fprintf(out,"%s %4d \n",h.num,h.s);
fclose(out);
}
解题思路:
本题是从学生记录体中找出给定的学号。具体操作请看答案程序中的说明。
参考答案:
#include <stdio.h>
#include <string.h>
#define N 16
typedef struct
{char num [10 ];
int s;
}STREC;
STREC fun(STREC *a,char *b )
{
STREC c ;
int i ;
c.num [0 ] ='\0';/*置初始空串 */
c.s =-1 ;/*置成绩为-1 */
for(i =0 ;i <N ;i++)
if(strcmp(a [i ].num,b)==0){/*判断学号是否相等 */
strcpy(c.num,a [i ].num);/*相等,则对学号进行赋值 */
c.s=a [i ].s;/*相等,则对成绩进行赋值 */
break ;/*退出循环体 */
}
return c ;/*返回结构体变量 */
}
main()
{STREC s [N ]={{"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},
\TAB \TAB {"GA001",91},{"GA007",72},{"GA008",64},{"GA006",87},
\TAB \TAB {"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},
\TAB \TAB {"GA011",77},{"GA017",64},{"GA018",64},{"GA016",72}};
STREC h;
char m [10 ];
int i;FILE *out ;
printf("The original data:\n");
for(i=0;i<N;i++)
{if(i%4==0)printf("\n");
printf("%s %3d ",s [i ].num,s [i ].s);
}
printf("\n \nEnter the number:");gets(m);
h=fun(s,m );
printf("The data :");
printf("\n%s %4d \n",h.num,h.s);
printf("\n");
out =fopen("c:\\test \\out.dat","w");
h=fun(s,"GA013");
fprintf(out,"%s %4d \n",h.num,h.s);
fclose(out);
}
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
第02 套:
人员的记录由编号和出生年、月、日组成,N 名人员的数据已在主函数中存入
结构体数组std 中,且编号唯一。函数fun 的功能是:找出指定编号人员的数据,
作为函数值返回,由主函数输出,若指定编号不存在,返回数据中的编号为空串。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结
果。
注意:源程序存放在考生文件夹下的BLANK1.C 中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include <stdio.h>
#include <string.h>
#define N 8
typedef struct
{char num [10 ];
int year,month,day ;
}STU;
/**********found**********/
___1___fun(STU *std,char *num)
{int i;STU a={"",9999,99,99};
for (i=0;i<N;i++)
/**********found**********/
if(strcmp(___2___,num)==0 )
/**********found**********/
return (___3___);
return a;
}
main()
{STU
std [N ]={{"111111",1984,2,15},{"222222",1983,9,21},{"333333",1984,9,1},
{"444444",1983,7,15},{"555555",1984,9,28},{"666666",1983,11,15},
{"777777",1983,6,22},{"888888",1984,8,19}};
STU p;char n [10 ]="666666";
p=fun(std,n);
if(p.num [0 ]==0)
printf("\nNot found !\n");
else {
printf("\nSucceed !\n ");
printf("%s %d-%d-%d \n",p.num,p.year,p.month,p.day);
}
}
解题思路:
本题是要求从给定的人员数据中找出编号相同的记录数据。
第一处:从返回值来看,是返回一个结构型的值,所以应填:STU 。
第二处:判断结构变量中的编号num 是否相等,所以应填:stu [i ].num 。
第三处:返回编号相等的记录值,所以应填:std [i ]。
**********************************************************************
给定程序MODI1.C 中函数fun 的功能是:从s 所指字符串中,找出与t 所指字符
串相同的子串的个数作为函数值返回。
例如,当s 所指字符串中的内容为:"abcdabfab",t 所指字符串的内容为:
"ab",则函数返回整数3 。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main 函数,不得增行或删行,也不得更改程序的结构!
给定源程序:
#include <stdio.h>
#include <string.h>
int fun (char *s,char *t)
{
int n;char *p ,*r;
n =0;
while (*s )
{p =s;r =t;
while (*r )
if (*r ==*p ){
/************found************/
r++;p++
}else
break;
/************found************/
if (r =='\0')
n++;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -