C期末题库9
发布时间
阅读量:
阅读量
1
/*------------------------------------------------
【程序设计】
--------------------------------------------------
题目: 给定n个数据, 求最大值出现的位置
(如果最大值出现多次,求出第一次出
现的位置即可)。
--------------------------------------------------
注意:部分源程序给出如下。请勿改动主函数
main和其它函数中的任何内容,仅在函数
station的花括号中填入所编写的若干语句。
*********Begin**********和********** End **********不可删除
------------------------------------------------*/
#include<stdio.h>
int station(int s[],int n)
{
/*********Begin**********/
/********** End **********/
}
main()
{
int a[100],n,i,t;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
t=station(a,n);
printf("the max_value position is:%d\n",t);
TestFunc();
}
TestFunc()
{
FILE *IN,*OUT;
int n;
int i[10];
int o;
IN=fopen("in.dat","r");
if(IN==NULL)
{printf("Read File Error");
}
OUT=fopen("out.dat","w");
if(OUT==NULL)
{printf("Write File Error");
}
for(n=0;n<10;n++)
{
fscanf(IN,"%d",&i[n]);
}
o=station(i,10);
fprintf(OUT,"%d\n",o);
fclose(IN);
fclose(OUT);
}
代码解释
答案
【参考代码】
int i,k;
k=0;
for(i=1;i<n;i++)
if(s[i]>s[k]) k=i;
return(k);
===============
【考生代码】
int i,m=s[0],p=1;
for(i=0;i<n;i++)
if(s[i]>m)
p=++i;
return p;
2
/*------------------------------------------------
【程序设计】
--------------------------------------------------
功能:求n阶方阵主、副对角线上的元素之积。程序中如果
用到循环,必须使用for循环。
*********Begin**********和********** End **********不可删除
------------------------------------------------*/
#define N 4
#include "stdlib.h"
#include "stdio.h"
void TestFunc();
float mul(int arr[][N])
{
/**********Begin**********/
/********** End **********/
}
void main()
{
int a[N][N],i,j;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
a[i][j]=rand()%10;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%4d",a[i][j]);
printf("\n");
}
printf("The sum is %d\n",mul(a));
TestFunc();
}
void TestFunc()
{
FILE *IN,*OUT;
int m,n;
int i[4][4];
float o;
IN=fopen("in.dat","r");
if(IN==NULL)
{
printf("Read File Error");
}
OUT=fopen("out.dat","w");
if(OUT==NULL)
{
printf("Write File Error");
}
for(m=0;m<100;m++)
for(n=0;n<100;n++)
{
fscanf(IN,"%d",&i[m][n]);
}
o=mul(i);
fprintf(OUT,"%f\n",o);
fclose(IN);
fclose(OUT);
}
代码解释
答案
【参考代码】
int i,j;
float t=1;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
if(i= =j||i+j==N-1)
t=t*arr[i][j];
return(t);
3
/* 给定程序中函数fun的功能是:
统计一个无符号整数中各位数字值为零的个数,通过形参传回主函数;
并把该整数中各位上最大的数字值作为函数值返回。
例如,若输入无符号整数30800,则数字值为零的个数为3,各位上数字值最大的是8。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! */
#include <stdio.h>
int fun(unsigned n, int *zero)
{int count=0,max=0,t;
do
{t=n%10;
/**********ERROR**********/
if(t=0)
count++;
if(max<t) max=t;
n=n/10;
}while(n);
/**********ERROR**********/
zero=count;
return max;
}
main()
{unsigned n; int zero,max;
printf("\nInput n(unsigned): "); scanf("%d",&n);
max = fun(n,&zero);
printf("\nThe result: max=%d zero=%d\n",max, zero);
}
代码解释
答案
【改错1】 正确
【学生答案】
if(t= =0)
【参考答案】
if(t==0)
==============================
【改错2】 错误
【学生答案】
zero=++count;
【参考答案】
*zero=count;
4
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
题目:fun函数的功能是:先从键盘上输入一个3行3列矩阵的各
个元素的值,然后输出主对角线上的元素之和sum。
请改正程序中的错误,使它能得出正确的结果。
--------------------------------------------------------
注意:不可以增加或删除程序行,也不可以更改程序的结构。
------------------------------------------------------*/
#include "stdio.h"
int fun()
{
int a[3][3],sum;
int i,j;
/**********ERROR**********/
a=0;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
/**********ERROR**********/
scanf("%d",a[i][j]);
for(i=0;i<3;i++)
/**********ERROR**********/
sum=sum+a[i][j];
/**********ERROR**********/
printf("sum=%f\n",sum);
}
main()
{
fun();
}
代码解释
答案
【改错1】 正确
【学生答案】
sum=0;
【参考答案】
sum=0;
==============================
【改错2】 正确
【学生答案】
scanf("%d",&a[i][j]);
【参考答案】
scanf("%d",&a[i][j]);
==============================
【改错3】 错误
【学生答案】
sum=sum+a[i][j];
【参考答案】
sum=sum+a[i][i];
sum+=a[i][i];
==============================
【改错4】 正确
【学生答案】
printf(“sum=%d\n”,sum);
【参考答案】
printf(“sum=%d\n”,sum);
全部评论 (0)
还没有任何评论哟~
