第11题 (20.0分) 难度:中 第20章
#include <stdio.h>
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:用while语句求1~100的累计和。
-------------------------------------------------------*/
void wwjt();
int fun(int n)
{
/**********Program**********/
/********** End **********/
}
void main()
{
int sum = 0;
sum=fun(100);
printf ("sum = %d\n", sum);
wwjt();
}
void wwjt()
{
FILE *IN,*OUT;
int i;
int iIN,iOUT;
IN=fopen("in.dat","r");
if(IN==NULL)
{
printf("Please Verify The Currernt Dir..it May Be Changed");
}
OUT=fopen("out.dat","w");
if(OUT==NULL)
{
printf("Please Verify The Current Dir.. it May Be Changed");
}
for(i=0;i<5;i++)
{
fscanf(IN,"%d",&iIN);
iOUT=fun(iIN);
fprintf(OUT,"%d\n",iOUT);
}
fclose(IN);
fclose(OUT);
}
答案: int i=1,sum=0;
while(i<=n)
{
sum=sum+i;
i++;
}
return sum;
第12题 (20.0分) 难度:中 第1章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:函数fun的功能是:将a、b中的两个正整数合并形成一个新的整数放在c中。
合并的方式是:将a中的十位和个位数依次放在变量c的十位和千位上,b中
的十位和个位数依次放在变量c的个位和百位上。
例如:当a=45,b=12。调用该函数后,c=5241。
注意:请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入
你编写的若干语句。
-------------------------------------------------------*/
#include <stdio.h>
void wwjt ( );
void fun(int a, int b, long *c)
{
/**********Program**********/
/********** End **********/
}
void main()
{
int a,b; long c;
printf("Input a, b:");
scanf("%d%d", &a, &b);
fun(a, b, &c);
printf("The result is: %ld\n", c);
wwjt( );
}
void wwjt ( )
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
FILE *in, *out ;
int i, a,b ; long c ;
in=fopen("in.dat","r");
if(in==NULL)
{
printf("Please Verify The Currernt Dir..It May Be Changed");
}
out=fopen("out.dat","w");
if(out==NULL)
{
printf("Please Verify The Current Dir.. It May Be Changed");
}
for(i = 0 ; i < 10 ; i++)
{
fscanf(in, "%d,%d", &a, &b) ;
fun(a, b, &c) ;
fprintf(out, "a=%d,b=%d,c=%ld\n", a, b, c) ;
}
fclose(in) ;
fclose(out) ;
}
答案: *c=(a%10)*1000+(b%10)*100+(a/10)*10+(b/10);
第13题 (20.0分) 难度:易 第2章
/*------------------------------------------------
【程序设计】
--------------------------------------------------
功能:统计出若干个学生的平均成绩,最高分以及得最高
分的人数。
例如:输入10名学生的成绩分别为92,87,68,56,92,
84,67,75,92,66,则输出平均成绩为77.9,
最高分为92,得最高分的人数为3人。
------------------------------------------------*/
#include <stdio.h>
void wwjt();
float Max=0;
int J=0;
float fun(float array[],int n)
{
/**********Program**********/
/********** End **********/
}
main( )
{
float a[10],ave;
int i=0;
for(i=0;i<10;i++)
scanf("%f",&a[i]);
ave=fun(a,10);
printf("ave=%f\n",ave);
printf("max=%f\n",Max);
printf("Total:%d\n",J);
wwjt();
}
void wwjt()
{
FILE *IN,*OUT;
float iIN[10],iOUT;
int iCOUNT;
IN=fopen("in.dat","r");
if(IN==NULL)
{
printf("Please Verify The Currernt Dir..it May Be Changed");
}
OUT=fopen("out.dat","w");
if(OUT==NULL)
{
printf("Please Verify The Current Dir.. it May Be Changed");
}
for(iCOUNT=0;iCOUNT<10;iCOUNT++)
fscanf(IN,"%f",&iIN[iCOUNT]);
iOUT=fun(iIN,10);
fprintf(OUT,"%f %f\n",iOUT,Max);
fclose(IN);
fclose(OUT);
}
答案:----------------------
int i;float sum=0,ave;
Max=array[0];
for(i=0;i<n;i++)
{ if(Max<array [i]) Max=array [i];
sum=sum+array [i]; }
ave=sum/n;
for(i=0;i<n;i++)
if(array [i]==Max) J++;
return(ave);
----------------------
第14题 (20.0分) 难度:易 第2章
/*------------------------------------------------
【程序设计】
--------------------------------------------------
功能:产生20个[30,120]上的随机整数放入二维数组
a[5][4]中, 求其中的最小值。
------------------------------------------------*/
#include "stdlib.h"
#include <stdio.h>
void wwjt();
int amin(int a[5][4])
{
/**********Program**********/
/********** End **********/
}
main()
{
int a[5][4],i,j;
for(i=0;i<5;i++)
for(j=0;j<4;j++)
a[i][j]=random(120-30+1)+30;
for(i=0;i<5;i++)
{
for(j=0;j<4;j++)
printf("%5d",a[i][j]);
printf("\n");
}
printf("min=%d\n",amin(a));
wwjt();
}
void wwjt()
{
FILE *IN,*OUT;
int m,n;
int i[5][4];
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(m=0;m<5;m++)
for(n=0;n<4;n++)
{
fscanf(IN,"%d",&i[m][n]);
}
o=amin(i);
fprintf(OUT,"%d\n",o);
fclose(IN);
fclose(OUT);
}
答案:----------------------
int i,j,s;
s=a[0][0];
for(i=0;i<5;i++)
for(j=0;j<4;j++)
if(s>a[i][j])s=a[i][j];
return(s);
----------------------
第15题 (20.0分) 难度:中 第1章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:编写程序,实现矩阵(3行、3列)的转置(即行列互换)。
例如:若输入下面的矩阵:
100 200 300
400 500 600
700 800 900
则程序输出:
100 400 700
200 500 800
300 600 900
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入
你编写的若干语句。
-------------------------------------------------------*/
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void wwjt();
void fun (int array[3][3])
{
/**********Program**********/
/********** End **********/
}
void main()
{
int i,j;
int array [3][3]={{100,200,300},{400,500,600},{700,800,900}};
system("CLS");
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
printf("%7d ",array[i][j]);
printf("\n");
}
fun(array);
printf("Converted array:\n ");
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
printf("%7d ",array[i][j]);
printf("\n ");
}
wwjt();
}
void wwjt()
{
FILE *in, *out;
int array [3][3],i,j;
in=fopen("in.dat","r");
if(in==NULL)
{
printf("Please Verify The Currernt Dir..It May Be Changed");
}
out=fopen("out.dat","w");
if(out==NULL)
{
printf("Please Verify The Current Dir.. It May Be Changed");
}
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
fscanf(in,"%d",&array[i][j]);
}
fun(array);
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
fprintf(out,"%7d ",array[i][j]);
fprintf(out,"\n");
}
fclose(in);
fclose(out);
}
答案: int i,j,t;
for(i=0;i<3;i++) /*将右上三角和左下三角对换,实现行列互换*/
for(j=i+1;j<3;j++)
{
t=array[i][j];
array[i][j]=array[j][i];
array[j][i]=t;
}
第16题 (20.0分) 难度:中 第2章
/*------------------------------------------------
【程序设计】
--------------------------------------------------
功能:编写函数判断一个整数能否同时被3和5整除,若能
则返回值为1,否则为0。调用该函数求出15~300之
间能同时被3和5整除的数的个数。
------------------------------------------------*/
#include <stdio.h>
void wwjt();
int sum(int n)
{
/**********Program**********/
/********** End **********/
}
main()
{
int i,s=0;
for(i=15;i<=300;i++)
if(sum(i)==1) s=s+1;
printf("s=%d\n",s);
wwjt();
}
void wwjt()
{
FILE *IN,*OUT;
int n;
int i[12];
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<5;n++)
{
fscanf(IN,"%d",&i[n]);
}
for(n=0;n<5;n++)
{
o = sum(i[n]);
fprintf(OUT,"%d\n",o);
}
fclose(IN);
fclose(OUT);
}
答案:----------------------
if(n%3==0&&n%5==0) return(1);
return(0);
----------------------
第17题 (20.0分) 难度:中 第2章
/*------------------------------------------------
【程序设计】
--------------------------------------------------
功能:计算并输出给定整数n的所有因子之和(不包括1与
自身)。
注意:n的值不大于1000。
例如:n的值为855时,应输出704。
------------------------------------------------*/
#include <stdio.h>
void wwjt();
int fun(int n)
{
/**********Program**********/
/********** End **********/
}
main()
{
printf("s=%d\n",fun(855));
wwjt();
}
void wwjt()
{
FILE *IN,*OUT;
int iIN,iOUT,i;
IN=fopen("in.dat","r");
if(IN==NULL)
{
printf("Please Verify The Currernt Dir..it May Be Changed");
}
OUT=fopen("out.dat","w");
if(OUT==NULL)
{
printf("Please Verify The Current Dir.. it May Be Changed");
}
for(i=0;i<5;i++)
{
fscanf(IN,"%d",&iIN);
iOUT=fun(iIN);
fprintf(OUT,"%d\n",iOUT);
}
fclose(IN);
fclose(OUT);
}
答案:----------------------
int s=0,i;
for(i=2;i<n;i++)
if(n%i==0)s=s+i;
return s;
----------------------
第18题 (20.0分) 难度:中 第2章
/*------------------------------------------------
【程序设计】
--------------------------------------------------
功能:根据整型参数n,计算如图公式的值。
------------------------------------------------*/
#include <stdio.h>
#include"conio.h"
void wwjt();
double fun(int n)
{
/**********Program**********/
/********** End **********/
}
main()
{
int m;
printf("Enter m: ");
scanf("%d", &m);
printf("\nThe result is %f\n", fun(m));
wwjt();
}
void wwjt()
{
FILE *IN,*OUT;
int s ;
int t;
double 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(s=1;s<=5;s++)
{
fscanf(IN,"%d",&t);
o=fun(t);
fprintf(OUT,"%f\n",o);
}
fclose(IN);
fclose(OUT);
}
答案:----------------------
double a=1;int i;
for(i=1;i<n;i++)
a=1.0/(1+a);
return a;
----------------------
第19题 (20.0分) 难度:中 第1章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。
请编写函数fun,其功能是:求出平均分,并由函数值返回。
例如:若学生的成绩是:85 76 69 85 91 72 64 87,则平均分应当是:78.625。
注意:请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你
编写的若干语句。
-------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#define N 8
void wwjt ( );
struct slist
{
double s;
struct slist *next;
};
typedef struct slist STREC;
double fun( STREC *h )
{
/**********Program**********/
/********** End **********/
}
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("->%4.1f",p->s);p=p->next;
}
while(p!=0);
printf("\n\n");
}
main()
{
double s[N]={85,76,69,85,91,72,64,87},ave;
STREC *h;
h=creat( s );
outlist(h);
ave=fun( h );
printf("ave= %6.3f\n",ave);
wwjt();
}
void wwjt()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
FILE *in, *out ;
int i,j ; double s[N],ave;
STREC *h ;
in=fopen("in.dat","r");
if(in==NULL)
{
printf("Please Verify The Currernt Dir..It May Be Changed");
}
out=fopen("out.dat","w");
if(out==NULL)
{
printf("Please Verify The Current Dir.. It May Be Changed");
}
for(i = 0 ; i < 10 ; i++)
{
for(j=0 ; j < N; j++)
fscanf(in, "%lf,", &s[j]) ;
h=creat( s );
ave=fun( h );
fprintf(out, "%6.3lf\n", ave) ;
}
fclose(in) ;
fclose(out) ;
}
答案: double ave=0.0;
STREC *p=h->next;
while(p!=NULL)
{
ave=ave+p->s;
p=p->next;
}
return ave/N;
第20题 (20.0分) 难度:中 第20章
/*------------------------------------------------
【程序设计】
--------------------------------------------------
功能:编写程序打印如图1所示图形。
*
***
*****
*******
*****
***
*
要求:要求使用abs()。
------------------------------------------------*/
#include <stdio.h>
#include "math.h"
void wwjt();
void fun(int i)
{
int m,n;
/**********Program**********/
/********** End **********/
}
main( )
{
fun(3);
}
答案: for(m=-i;m<=i;m++)
{
for(n=0;n<abs(m);n++) printf(" ");
for(n=0;n<7-2*abs(m);n++) printf("*");
printf("\n");
}