第二十五题
题目
请编写函数fun,其功能是:在一个含有11个四位数的数组中,统计出这些数的奇数、偶数个数,然后计算出个数多的那些数的算数平均值并由函数返回,个数通过yy传回。
例如,若11个数据为:1101, 1202, 1303, 1404, 1505, 2611, 2712, 2813, 2914, 3202, 4222
则输出: yy=6, pjz=2609. 33
#include <stdio.h>
#pragma warning (disable:4996)
#define N 11
double fun( int xx[], int *yy )
{
}
main()
{
int yy, xx[N]={1101,1202,1303,1404,1505,2611,2712,2813,2914,3202,4222};
double pjz ;
void NONO();
pjz = fun( xx, &yy );
printf("yy=%d, pjz=%.2lf\n", yy, pjz);
NONO();
}
void NONO()
{
/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,
输出数据,关闭文件。 */
int i, j, xx[N], yy;
double pjz;
FILE *rf, *wf ;
rf = fopen("in.dat","r") ;
wf = fopen("out.dat","w") ;
for(i=0; i<10; i++) {
for(j=0; j<N; j++) fscanf(rf, "%d ", &xx[j]);
pjz = fun( xx, &yy );
fprintf(wf, "%d, %.2lf\n", yy, pjz);
}
fclose(rf) ;
fclose(wf) ;
}
解析
double fun( int xx[], int *yy )
{
int i,j=0,k=0;
double xx1=0.0,xx2=0.0;
for(i=0;i<N;i++){
if(xx[i]%2==0){
xx1+=xx[i];
j++;
}
else{
xx2+=xx[i];
k++;
}
}
if(j>k){
*yy=j;
return xx1/j;
}
else{
*yy=k;
return xx2/k;
}
}
分析
第二十六题
题目
请编写函数fun,其功能是:统计出x所指数组中偶数的个数,通过函数值返回主函数;
并计算出偶数的平均值放到形参ave所指的存储单元中。
例如:当数组内容为: 12,5,9,8, 23, 4, 7, 21时,
输出结果应该是: n=3, ave=8. 000000
#include <stdio.h>
#pragma warning (disable:4996)
#define N 8
int fun(int x[],double *ave)
{
}
main()
{ int x[N]={ 12,5,9,8,23,4,7,21 }, n;
double ave;
void NONO();
n=fun(x,&ave);
printf("n=%d,ave=%lf\n",n,ave);
NONO();
}
void NONO ()
{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */
FILE *in, *out ;
int i,j, x[N], n ;
double ave;
in = fopen("in.dat","r") ;
out = fopen("out.dat","w") ;
for(i = 0 ; i < 10 ; i++) {
for(j=0 ; j < N; j++) fscanf(in, "%d,", &x[j]) ;
n=fun(x,&ave);
fprintf(out, "n=%d,ave=%lf\n",n,ave);
}
fclose(in) ;
fclose(out) ;
}
解析
int fun(int x[],double *ave)
{
int i,j=0;
double sum=0.0;
for(i=0;i<N;i++){
if(x[i]%2==0){
sum+=x[i];
j++;
}
}
*ave=sum/j;
return j;
}
分析
第二十七题
题目
请编写函数fun,函数的功能是:将M行N列的二维数组中的字符数据按列的顺序依次放到一个字符串中。
例如,二维数组中的数据为:
w w w w
s s s s
H H H H
则字符串中的内容应是:WSHWSHWSHWSH。
#include <stdio.h>
#define M 3
#define N 4
void fun(char s[][N], char *b)
{
int i,j,n=0;
for(i=0; i < N;i++) /* 请填写相应语句完成其功能 */
{
}
b[n]='\0';
}
main()
{ char a[100],w[M][N]={{'W','W','W','W'},{'S','S','S','S'},{'H','H','H','H'}};
int i,j;void NONO ();
printf("The matrix:\n");
for(i=0; i<M; i++)
{ for(j=0;j<N; j++)printf("%3c",w[i][j]);
printf("\n");
}
fun(w,a);
printf("The A string:\n");puts(a);
printf("\n\n");
NONO();
getchar();
}
void NONO ()
{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */
FILE *rf, *wf ; int i,j,k ;
char a[100],w[M][N], b ;
rf = fopen("in.dat","r") ;
wf = fopen("out.dat","w") ;
for(k = 0 ; k < 10 ; k++) {
for(i = 0 ; i < M ; i++) {
for(j = 0 ; j < N ; j++) fscanf(rf, "%c", &w[i][j]) ;
fscanf(rf, "%c", &b) ;
}
fun(w, a) ;
fprintf(wf, "%s\n", a) ;
}
fclose(rf) ; fclose(wf) ;
}
解析
void fun(char s[][N], char *b)
{
int i,j,n=0;
for(i=0; i < N;i++) /* 请填写相应语句完成其功能 */
for(j=0;j < M;j++)
b[n++]=s[j][i];
b[n]='\0';
}
分析
第二十八题
题目
请编写函数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。
#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;void NONO ();
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();
getchar();
}
void NONO ()
{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */
FILE *rf, *wf; int a[N], n, i, j ;
rf = fopen("in.dat","r") ;
wf = fopen("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) ;
}
解析
int fun(int a[], int n)
{
int i=0,j=1;
for(i=0;i<N;i++)
if(a[i]!=a[i+1])
a[j++]=a[i+1];
return j;
}
分析
数组中的删除,就是指数据覆盖,让后一个覆盖前一个,不要想着让元素消失
第二十九题
题目
函数fun的功能是:将s所指字符串中除了下标为奇数、同时ASCII值也为奇数的字符之外,其余的所有字符都删除,串中剩余字符所形成的一个新串放在t所指的数组中。
例如,若s所指字符串中的内容为: "ABCDEFG12345",其中字符A的ASCII码值虽为奇数,但所在元素的下标为偶数,因此必需删除;而字符1的ASCII码值为奇数,所在数组中的下标也为奇数,因此不应当删除,其它依此类推。最后t所指的数组中的内容应是:"135"。
#include <stdio.h>
#include <string.h>
void fun(char *s, char t[])
{
}
main()
{
char s[100], t[100];void NONO ();
printf("\nPlease enter string S:"); scanf("%s", s);
fun(s, t);
printf("\nThe result is: %s\n", t);
NONO();
getchar();
}
void NONO ()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
char s[100], t[100] ;
FILE *rf, *wf ;
int i ;
rf = fopen("in.dat","r") ;
wf = fopen("out.dat","w") ;
for(i = 0 ; i < 10 ; i++) {
fscanf(rf, "%s", s) ;
fun(s, t) ;
fprintf(wf, "%s\n", t) ;
}
fclose(rf) ;
fclose(wf) ;
}
解析
void fun(char *s, char t[])
{
int i,j=0;
for(i=0;i<strlen(s);i++)
if(i%2==1&&s[i]%2==1)
t[j++]=s[i];
}
分析
第三十题
题目
请编写函数fun,函数的功能是:将放在字符串数组中的M个字符串(每串的长度不超过N),按顺序合并组成一个新的字符串。
例如,字符串数组中的M个字符串为:
AAAA
BBBBBBB
CC
则合并后的字符串的内容应是: AAAABBBBBBBCC。
提示: strcat (a, b)的功能是将字符串b复制到字符串a的串尾上,成为一个新串。
#include <stdio.h>
#include <string.h>
#define M 3
#define N 20
void fun(char a[M][N], char *b)
{
/* 以下代码仅供参考 */
int i; *b=0;
}
main()
{ char w[M][N]={"AAAA","BBBBBBB","CC"}, a[100];
int i ;void NONO ();
printf("The string:\n");
for(i=0; i<M; i++)puts(w[i]);
printf("\n");
fun(w,a);
printf("The A string:\n");
printf("%s",a);printf("\n\n");
NONO();
getchar();
}
void NONO ()
{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */
FILE *rf, *wf ;
char w[M][N], a[100] ; int i ;
rf = fopen("in.dat","r") ;
wf = fopen("out.dat","w") ;
for(i = 0 ; i < 10 ; i++) {
fscanf(rf, "%s %s %s", w[0], w[1], w[2]) ;
fun(w, a) ;
fprintf(wf, "%s\n", a) ;
}
fclose(rf) ; fclose(wf) ;
}
解析
void fun(char a[M][N], char *b)
{
/* 以下代码仅供参考 */
int i; *b=0;
for (int i = 0; i < M; i++)
strcat(b, a[i]);
}
分析
我只能说一句厉害
第三十一题
题目
N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun,它的功能是:找出学生的最高分,由函数值返回。
#include <stdio.h>
#include <stdlib.h>
#define N 8
struct slist
{ double s;
struct slist *next;
};
typedef struct slist STREC;
double fun( STREC *h )
{
}
STREC * creat( double *s)
{ STREC *h,*p,*q; int i=0;
h=p=(STREC*)malloc(sizeof(STREC));p->s=0;
while(i<N)
{ q=(STREC*)malloc(sizeof(STREC));
q->s=s[i]; i++; p->next=q; p=q;
}
p->next=0;
return h;
}
outlist( STREC *h)
{ STREC *p;
p=h->next; printf("head");
do
{ printf("->%2.0f",p->s);p=p->next;}
while(p!=0);
printf("\n\n");
}
main()
{ double s[N]={85,76,69,85,91,72,64,87}, max;void NONO ();
STREC *h;
h=creat( s ); outlist(h);
max=fun( h );
printf("max=%6.1f\n",max);
NONO();
getchar();
}
void NONO ()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
FILE *in, *out ;
int i,j ; double s[N],max;
STREC *h ;
in = fopen("in.dat","r") ;
out = fopen("out.dat","w") ;
for(i = 0 ; i < 10 ; i++) {
for(j=0 ; j < N; j++) fscanf(in, "%lf,", &s[j]) ;
h=creat( s );
max=fun( h );
fprintf(out, "%6.1lf\n", max) ;
}
fclose(in) ;
fclose(out) ;
}
解析
double fun( STREC *h )
{
double temp=0.0;
STREC *p;
p=h;
while(p){
if(p->s>temp)
temp=p->s;
p=p->next;
}
return temp;
}
分析
第三十二题
题目
#include <stdio.h>
#pragma warning (disable:4996)
double fun(int n)
{
}
main()
{ int n; double s;
void NONO( );
printf("\nInput n: "); scanf("%d",&n);
s=fun(n);
printf("\n\ns=%f\n\n",s);
NONO();
}
void NONO()
{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */
FILE *rf, *wf ; int n, i ; double s ;
rf = fopen("in.dat","r") ;
wf = fopen("out.dat","w") ;
for(i = 0 ; i < 10 ; i++) {
fscanf(rf, "%d", &n) ;
s = fun(n) ;
fprintf(wf, "%lf\n", s) ;
}
fclose(rf) ; fclose(wf) ;
}
解析
double fun(int n)
{
int i;
double sum=0.0,t=1.0;
for(i=1;i<=n;i++){
t*=i;
sum+=1/t;
}
return sum;
}
分析