⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 二级c机试题.txt

📁 最基础的c语言教学
💻 TXT
📖 第 1 页 / 共 5 页
字号:
果。
注意:源程序存放在考生文件夹下的BLANK1.C 中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include <stdio.h>
#define N 5
typedef struct student {
long sno;
char name [10 ];
float score [3 ];
}STU;
void fun(char *filename)
{FILE *fp;int i,j;
STU s [N ],t;
/**********found**********/
fp =fopen(filename,__1__);
fread(s,sizeof(STU),N,fp);
fclose(fp);
for (i=0;i<N-1;i++)
for (j=i+1;j<N;j++)
/**********found**********/
if (s [i ].sno __2__s [j ].sno)
{t =s [i ];s [i ] =s [j ];s [j ] =t;}
fp =fopen(filename,"wb");
/**********found**********/
__3__(s,sizeof(STU),N,fp);/*二进制输出 */
fclose(fp);
}
main()
{STU t [N ]={{10005,"ZhangSan",95,80,88},{10003,"LiSi",85,70,78},
{10002,"CaoKai",75,60,88},{10004,"FangFang",90,82,87},
{10001,"MaChao",91,92,77}},ss [N ];
int i,j;FILE *fp;
fp =fopen("student.dat","wb");
fwrite(t,sizeof(STU),5,fp);
fclose(fp);
printf("\n \nThe original data :\n \n");
for (j=0;j<N;j++)
{printf("\nNo:%ld Name:%-8s Scores:",t [j ].sno,t [j ].name);
for (i=0;i<3;i++)printf("%6.2f ",t [j ].score [i ]);
printf("\n");
}
fun("student.dat");
printf("\n \nThe data after sorting :\n \n");
fp =fopen("student.dat","rb");
fread(ss,sizeof(STU),5,fp);
fclose(fp);
for (j=0;j<N;j++)
{printf("\nNo:%ld Name:%-8s Scores:",ss [j ].sno,ss [j ].name);
for (i=0;i<3;i++)printf("%6.2f ",ss [j ].score [i ]);
printf("\n");
}
}
解题思路:
本题是考察把结构中的数据写入文件。
第一处:建立文件的类型,考虑到是把结构中的数据(结构中的数据包含不打印的
字符)从文件中读出,所以应填:"rb"。
第二处:判断当前学号是否大于刚读出的学号进行相比,如果大于,则进行交换,
所以应填:>。
第三处:把已排序的结构数据,重新写入文件,所以应填:fwrite 。
**********************************************************************
给定程序MODI1.C 中函数fun 的功能是:在字符串的最前端加入n 个*号,形成
新串,并且覆盖原串。
注意:字符串的长度最长允许为79 。
请改正函数fun 中指定部位的错误,使它能得出正确的结果。
注意:不要改动main 函数,不得增行或删行,也不得更改程序的结构!
给定源程序:
#include <stdio.h>
#include <string.h>
void fun (char s [],int n )
{
char a [80 ] ,*p;
int i;
/**********found***********/
s=p;
for(i=0;i<n;i++)a [i ]='*';
do {
a [i ]=*p;
i++;
}
/**********found***********/
while(*p++)
a [i ]=0;
strcpy(s,a);
}
main()
{int n;char s [80 ];
printf("\nEnter a string :");gets(s);
printf("\nThe string \"%s \"\n",s);
printf("\nEnter n (number of *):");scanf("%d",&n);
fun(s,n);
printf("\nThe string after insert :\"%s \"\n",s);
}
解题思路:
第一处:指针p 应指向s,所以应改为:p=s;。
第二处:死循环,当do while 循环执行一次,临时变量p 应该指向字符串的下一位置,
所以应改为:while(*p++);。
**********************************************************************
请编写函数fun,函数的功能是:统计各年龄段的人数。N 个年龄通过调用随机
函数获得,并放在主函数的age 数组中;要求函数把0 至9 岁年龄段的人数放在d [0 ]
中,把10 至19 岁年龄段的人数放在d [1 ]中,把20 至29 岁年龄段的人数放在d [2 ]中,
其余依此类推,把100 岁 (含100)以上年龄的人数都放在d [10 ]中。结果在主函数
中输出。
注意:部分源程序在文件PROG1.C 中。
请勿改动主函数main 和其它函数中的任何内容,仅在函数fun 的花括号中填入
你编写的若干语句。
给定源程序:
#include <stdio.h>
#define N 50
#define M 11
void fun(int *a,int *b)
{}double
rnd()
{static t=29,c=217,m=1024,r=0;
r=(r*t+c)%m;return((double)r/m);
}
main()
{int age [N ],i,d [M ];
for(i=0;i<N;i++)age [i ]=(int)(115*rnd());
printf("The original data :\n");
for(i=0;i<N;i++)printf((i+1)%10==0?"%4d \n":"%4d",age [i ]);
printf("\n \n");
fun(age,d);
for(i=0;i<10;i++)printf("%4d---%4d :%4d \n",i*10,i*10+9,d [i ]);
printf("Over 100 :%4d \n",d [10 ]);
NONO(d);
}
NONO(int d [M ])
{/*请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */
FILE *wf ;int i ;
wf =fopen("c:\\test \\out.dat","w");
for(i =0 ;i <10 ;i++)fprintf(wf,"%4d---%4d :%4d \n",i*10,i*10+9,
d [i ]);
fprintf(wf,"Over 100 :%4d \n",d [10 ]);
fclose(wf);
}
解题思路:
本题是统计各年龄段的人数。
1.初始化各年龄段人数为0 。
2.使用for 循环以及求出各年龄的十位数字作为存放人数的地址,如果大于值大于
10,则存入d [10 ]中(大于110 岁的人)。
参考答案:
#include <stdio.h>
#define N 50
#define M 11
void fun(int *a,int *b)
{
int i,j ;
for(i =0 ;i <M ;i++)b [i ] =0 ;
for(i =0 ;i <N ;i++){
j =a [i ] /10 ;
if(j >10)b [M -1 ]++;else b [j ]++;
}
}double
rnd()
{static t=29,c=217,m=1024,r=0;
r=(r*t+c)%m;return((double)r/m);
}
main()
{int age [N ],i,d [M ];
for(i=0;i<N;i++)age [i ]=(int)(115*rnd());
printf("The original data :\n");
for(i=0;i<N;i++)printf((i+1)%10==0?"%4d \n":"%4d",age [i ]);
printf("\n \n");
fun(age,d);
for(i=0;i<10;i++)printf("%4d---%4d :%4d \n",i*10,i*10+9,d [i ]);
printf("Over 100 :%4d \n",d [10 ]);
NONO(d);
}
NONO(int d [M ])
{/*请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */
FILE *wf ;int i ;
wf =fopen("c:\\test \\out.dat","w");
for(i =0 ;i <10 ;i++)fprintf(wf,"%4d---%4d :%4d \n",i*10,i*10+9,
d [i ]);
fprintf(wf,"Over 100 :%4d \n",d [10 ]);
fclose(wf);
}
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
第06 套:
给定程序中,函数fun 的功能是:找出N ×N 矩阵中每列元素中的最大值,并按
顺序依次存放于形参b 所指的一维数组中。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结
果。
注意:源程序存放在考生文件夹下的BLANK1.C 中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include <stdio.h>
#define N 4
void fun(int (*a)[N ],int *b)
{int i,j;
for(i=0;i<N;i++){
/**********found**********/
b [i ]=__1__;
for(j=1;j<N;j++)
/**********found**********/
if(b [i ] __2__a [j ][i ])b [i ]=a [j ][i ];
}
}
main()
{int x [N ][N ]={{12,5,8,7},{6,1,9,3},{1,2,3,4},{2,8,4,3}},y [N ],i,j;
printf("\nThe matrix :\n");
for(i=0;i<N;i++)
{for(j=0;j<N;j++)printf("%4d",x [i ][j ]);
printf("\n");
}
/**********found**********/
fun(__3__);
printf("\nThe result is:");
for(i=0;i<N;i++)printf("%3d",y [i ]);
printf("\n");
}
解题思路:
第一处:把每列的第1 值赋值给b [i ],所以应填:a [0 ][i ]。
第二处:如果b [i ]值小于a [j ][i ]的值,则把a [j ][i ]重新赋值给b [i ]中,保存最大
的值,所以应填:<。
第三处:在主函数中,x 是存放矩阵数据,y 是存放每列的最大值,所以应填:x,y 。
**********************************************************************
给定程序MODI1.C 中函数fun 的功能是:交换主函数中两个变量的值。例如:
若变量a 中的值原为8,b 中的值为3 。程序运行后a 中的值为3,b 中的值为8 。
请改正程序中的错误,使它能计算出正确的结果。
注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!
给定源程序:
#include <stdio.h>
/*********found**********/
int fun(int x,int y)
{
int t;
/*********found**********/
t=x;x=y;y=t;
}
main()
{
int a,b;
a=8;b=3;
fun(&a,&b);
printf("%d,%d \n",a,b);
}
解题思路:
第一处:函数形参定义不正确,在定义第2 个形参时,也应加上int 。由于通过该函
数实现两数交换,在C 语言中,必须交换地址中的值,所以应定义为int *x,int *y 。
第二处:要交换地址中的值,不能交换地址,必须指定地址中的值,因此应改为
t=*x;*x=*y;*y=t;。
**********************************************************************
编写函数fun,函数的功能是求出小于或等于lim 的所有素数并放在aa 数组中,
函数返回所求出的素数的个数。函数fun 中给出的语句仅供参考。
注意:部分源程序在文件PROG1.C 中。
请勿改动主函数main 和其它函数中的任何内容,仅在函数fun 的花括号中填入
你编写的若干语句。
给定源程序:
#include <stdio.h>
#define MAX 100
int fun(int lim,int aa [MAX ])
{
/*以下代码仅供参考 */
int i,j,k=0;
/*其中变量k 用于统计素数个数 */
for(i=2;i<=lim;i++)
{
/*以下完成判断aa 数组中小于或等于lim 的素数并统计个数 */
}
return k;
}
main()
{
int limit,i,sum;
int aa [MAX ] ;
printf("输入一个整数");
scanf("%d",&limit);
sum=fun(limit,aa);
for(i=0 ;i <sum ;i++){
if(i %10 ==0 &&i !=0)printf("\n");
printf("%5d",aa [i ]);
}
NONO();
}
NONO()
{
/*请在此函数内打开文件,输入测试数据,调用 fun 函数,
输出数据,关闭文件。 */
FILE *rf,*wf ;
int limit,i,sum,aa [MAX ] ;
rf =fopen("c:\\test \\in.dat","r");
wf =fopen("c:\\test \\out.dat","w");
fscanf(rf,"%d",&limit);
sum=fun(limit,aa);
for(i=0 ;i <sum ;i++)fprintf(wf,"%d \n",aa [i ]);
fclose(rf);
fclose(wf);
}
解题思路:
本题是考察考生如何判断一个数是素数,再求出所有小于lim 数的素数并存入数组aa
中保存,最后由形参aa 返回。
给出的程序中函数isP 是判断一个数是否是素数,若是素数,则返回1,否则返回0 。
参考答案:
#include <stdio.h>
#define MAX 100
int fun(int lim,int aa [MAX ])
{
/*以下代码仅供参考 */
int i,j,k=0;
/*其中变量k 用于统计素数个数 */
for(i=2;i<=lim;i++)
{
/*以下完成判断aa 数组中小于或等于lim 的素数并统计个数 */
for(j =2 ;j <=(i/2);j++)
if(i %j ==0)break;
if(j >(i/2))aa [k++] =i;
}
return k;
}
main()
{
int limit,i,sum;
int aa [MAX ] ;
printf("输入一个整数");
scanf("%d",&limit);
sum=fun(limit,aa);
for(i=0 ;i <sum ;i++){
if(i %10 ==0 &&i !=0)printf("\n");
printf("%5d",aa [i ]);
}
NONO();
}
NONO()
{
/*请在此函数内打开文件,输入测试数据,调用 fun 函数,
输出数据,关闭文件。 */
FILE *rf,*wf ;
int limit,i,sum,aa [MAX ] ;
rf =fopen("c:\\test \\in.dat","r");
wf =fopen("c:\\test \\out.dat","w");
fscanf(rf,"%d",&limit);
sum=fun(limit,aa);
for(i=0 ;i <sum ;i++)fprintf(wf,"%d \n",aa [i ]);
fclose(rf);
fclose(wf);
}
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
第07 套:
给定程序中,函数fun 的功能是:有N ×N 矩阵,将矩阵的外围元素顺时针旋转。
操作顺序是:首先将第一行元素的值存入临时数组r,然后使第一列成为第一行,
最后一行成为第一列,最后一列成为最后一行,临时数组中的元素成为最后一列。
例如,若N=3,有下列矩阵:
1 2 3
4 5 6
7 8 9
计算结果为
7 4 1
8 5 2
9 6 3
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结
果。
注意:源程序存放在考生文件夹下的BLANK1.C 中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include <stdio.h>
#define N 4
void fun(int (*t)[N ])
{int j ,r [N ];
for(j=0;j<N;j++)r [j ]=t [0 ][j ];
for(j=0;j<N;j++)
/**********found**********/
t [0 ][N-j-1 ]=t [j ][___1___];
for(j=0;j<N;j++)
t [j ][0 ]=t [N-1 ][j ];
/**********found**********/
for(j=N-1;j>=0;___2___)
t [N-1 ][N-1-j ]=t [j ][N-1 ];
for(j=N-1;j>=0;j--)
/**********found**********/
t [j ][N-1 ]=r [___3___];
}
main()
{int t [][N ]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10},i,j;
printf("\nThe original array:\n");
for(i=0;i<N;i++)
{for(j=0;j<N;j++)printf("%2d ",t [i ][j ]);
printf("\n");
}
fun(t);
printf("\nThe result is:\n");
for(i=0;i<N;i++)
{for(j=0;j<N;j++)printf("%2d ",t [i ][j ]);
printf("\n");
}
}
解题思路:
第一处:把第1 列上的数存放到第1 行上,所以应填:0 。
第二处:for 循环的增量值,由于循环是从大到小递减,所以应填:j--。
第三处:把临时数组中的元素成为最后一列,所以应填:j 。
**********************************************************************
给定程序MODI1.C 中函数 fun 的功能是:计算
S =f(-n)+f(-n+1)+…+f(0)+f(1)+f(2)+…+f(n)
的值。例如,当n 为5 时,函数值应为:10.407143 。f(x)函数定义如下:
┌(x+1)/(x-2)x>0 且 x≠2
f(x)=┤0 x=0 或 x=2
└(x-1)/(x-2)x<0
请改正程序中的错误,使程序能输出正确的结果。
注意:不要改动main 函数,不得增行或删行,也不得更改程序的结构!
给定源程序:
#include <stdio.h>
#include <math.h>
/************found************/
f(double x)
{
if (x ==0.0 ||x ==2.0)
return 0.0;
else if (x <0.0)
return (x -1)/(x-2);
else
return (x +1)/(x-2);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -