第1题 (20.0分) 难度:中 第2章
/*------------------------------------------------
【程序设计】
--------------------------------------------------
功能:编写程序, 求矩阵(3行3列)与2的乘积
例如:输入下面的矩阵:
100 200 300
400 500 600
700 800 900
程序输出:
200 400 600
800 1000 1200
1400 1600 1800
------------------------------------------------*/
#include <stdio.h>
void wwjt();
void fun(int array[3][3])
{
/**********Program**********/
/********** End **********/
}
main()
{
int i,j;
int array[3][3]={{100,200,300},
{400,500,600},
{700,800,900}};
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()
{
int i,j, array[3][3];
FILE *rf, *wf ;
rf = fopen("in.dat", "r") ;
wf = fopen("out.dat", "w") ;
for (i=0; i < 3; i++)
for (j=0; j < 3; j++)
fscanf(rf, "%d", &array[i][j]);
fun(array);
for (i=0; i < 3; i++)
{
for (j=0; j < 3; j++)
fprintf(wf, "%7d", array[i][j]);
fprintf(wf, "\n");
}
fclose(rf) ;
fclose(wf) ;
}
答案:----------------------
int i,j;
for(i=0; i < 3; i++)
for(j=0; j < 3; j++)
array[i][j]=array[i][j]*2;
----------------------
第2题 (20.0分) 难度:中 第1章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:某学生的记录由学号、8门课程成绩和平均分组成,学号和8门课程的成绩已在
主函数中给出,请编写函数fun,其功能是:求出该学生的平均分,并放入记
录的ave成员中。
例如:学生的成绩是:85.5,76,69.5,85,91,72,64.5,87.5,则他的平均分应为78.875。
注意:请勿改动主函数main和其它函数中的任何内容,仅在函数fun部位中填入你编写
的若干语句。
-------------------------------------------------------*/
#include <stdio.h>
#define N 8
void wwjt ( );
typedef struct
{
char num[10];
double s[N];
double ave;
} STREC;
void fun(STREC *a)
{
/**********Program**********/
/********** End **********/
}
main()
{
STREC s={"GA005",85.5,76,69.5,85,91,72,64.5,87.5};
int i;
fun( &s );
printf("The %s's student data:\n", s.num);
for(i=0;i<N; i++)
printf("%4.1f\n",s.s[i]);
printf("\nave=%7.3f\n",s.ave);
wwjt();
}
void wwjt()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
FILE *out ;
int i ; STREC s[10] = {
{"GA005",85.5,76,69.5,85,91,72,64.5,87.5},
{"GA001",82.5,66,76.5,76,89,76,46.5,78.5},
{"GA002",72.5,56,66.5,66,79,68,46.5,58.5},
{"GA003",92.5,76,86.5,86,99,86,56.5,88.5},
{"GA004",82,66.5,46.5,56,76,75,76.5,63.5},
{"GA006",75.5,74,71.5,85,81,79,64.5,71.5},
{"GA007",92.5,61,72.5,84,79,75,66.5,72.5},
{"GA008",72.5,86,73.5,80,69,63,76.5,53.5},
{"GA009",66.5,71,74.5,70,61,82,86.5,58.5},
{"GA010",76,66.5,75.5,60,76,71,96.5,93.5},
};
out = fopen("out.dat","w") ;
for(i = 0 ; i < 10 ; i++)
{
fun(&s[i]) ;
fprintf(out, "%7.3f\n", s[i].ave) ;
}
fclose(out) ;
}
答案: double ave=0.0;
int i;
for(i=0;i<N;i++)
a->ave=a->ave+a->s[i];
a->ave/=N;
第3题 (20.0分) 难度:中 第1章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:输入5个整数x,输出其中正整数的累加和sum与正整数的平均值ave,输入输出格式
如以下示例。
如输入:10 0 20 -5 31
则输出:Sum=61, Average=20.3
-------------------------------------------------------*/
#include <stdio.h>
main()
{
int i, x, n, sum;
/**********Program**********/
/********** End **********/
}
答案: float ave;
sum = 0;
n = 0;
for ( i=0; i<5; i++ )
{
scanf( "%d", &x );
if ( x>0 )
{
sum += x;
n++;
}
}
ave = (float)sum / n;
printf( "Sum=%d, Average=%4.1f\n", sum, ave );
第4题 (20.0分) 难度:中 第2章
/*------------------------------------------------
【程序设计】
--------------------------------------------------
功能:编写函数判断一个整数m的各位数字之和能否被7整除,
可以被7整除则返回1,否则返回0。调用该函数找出
100~200之间满足条件的所有数。
------------------------------------------------*/
#include <stdio.h>
void wwjt();
int sub(int m)
{
/**********Program**********/
/********** End **********/
}
main()
{
int i;
for(i=100;i<=200;i++)
if(sub(i)==1)
printf("%4d",i);
wwjt();
}
void wwjt()
{
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]);
}
for(n=0;n<10;n++)
{
o=sub(i[n]);
fprintf(OUT,"%d\n",o);
}
fclose(IN);
fclose(OUT);
}
答案:----------------------
int k,s=0;
do
{s=s+m%10;
m=m/10;
}while(m!=0);
if(s%7==0)k=1;
else k=0;
return(k);
----------------------
第5题 (20.0分) 难度:难 第1章
/*----------------------------------------------------------------------
【程序设计】
------------------------------------------------------------------------
题目: 编写程序,要求读入一个英文文本行,将其中每个单词的第一个字母改
成大写,然后输出此文本行(这里"单词"是指由空格隔开的字符串)。
例如,若输入:I am a student to take the examination.,
则应输出:I Am A Student To Take The Examination.。
------------------------------------------------------------------------
注意:部分源程序给出如下。请勿改动主函数main或其它函数中给出的内容,仅在
Program-End之间删除【?】填入若干语句。不要删除标志否则不得分。
----------------------------------------------------------------------*/
#include <stdlib.h>
#include<ctype.h>
#include<string.h>
#include<stdio.h>
void upfst(char *p)
{
/**********Program**********/
【?】 k=0;
for(【?】)
if(k)
{
if(【?】)
k=0;
}
else if(【?】)
{ k=1;【?】;}
/********** End **********/
}
int main()
{
char chrstr[81];
printf("\nPlease enter an English text line:\n");
gets(chrstr);
printf("\nBefore changing:\n %s",chrstr);
upfst(chrstr);
printf("\nAfter changing:\n %s\n ",chrstr);
system("pause");
}
答案:int k=0;
for(;*p;p++)
if(k)
{
if(*p==' ')
k=0;
}
else if(*p!= ' ')
{ k=1;*p=toupper(*p);}
第6题 (20.0分) 难度:中 第1章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:规定输入的字符串中只包含字母和*号。编写函数fun,其功能是:将字符串中的
前导*号全部删除,中间和尾部的*号不删除。
例如:字符串中的内容为:"*******A*BC*DEF*G****",删除后字符串中的内容应当是:
"A*BC*DEF*G****"。编写函数时,不得使用C语言提供的字符串函数。
注意:请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入
你编写的若干语句。
-------------------------------------------------------*/
#include <stdio.h>
void wwjt ( );
void fun( char *a )
{
/**********Program**********/
/********** End **********/
}
void main()
{
char s[81];
printf("Enter a string:\n");
gets(s);
fun( s );
printf("The string after deleted:\n");
puts(s);
wwjt( );
}
void wwjt( )
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
FILE *in, *out ;
int i ; char s[81] ;
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, "%s", s) ;
fun(s) ;
fprintf(out, "%s\n", s) ;
}
fclose(in) ;
fclose(out) ;
}
答案: char *p=a;
while(*p=='*')
p++;
for(;*p!='\0';p++,a++)
*a=*p;
*a='\0';
第7题 (20.0分) 难度:中 第20章
/*------------------------------------------------
【程序设计】
--------------------------------------------------
功能:对任意输入的 x,用下式计算并输出 y 的值。
-1 x<0
y= 0 x=0
1 x>0
------------------------------------------------*/
#include<stdio.h>
void wwjt();
int fun(int n)
{
/**********Program**********/
/********** End **********/
}
void main ()
{
int x,y;
printf("enter x:");
scanf("%d",&x);
y=fun(x);
printf("x=%d,y=%d\n",x,y);
wwjt();
}
void wwjt()
{
FILE *IN,*OUT;
int i;
int iIN;
long int 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,"%ld\n",iOUT);
}
fclose(IN);
fclose(OUT);
}
答案: int m;
if(n<0)
m=-1;
else
if(n==0) m=0;
else m=1;
return m;
或
int m;
if(n>=0)
if(n>0)
m=1;
else m=0;
else m=-1;
return m;
第8题 (20.0分) 难度:易 第20章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:输入华氏温度求摄氏温度。转换公式为 c=5/9(f-32),
输出结果取两位小数。
-------------------------------------------------------*/
#include <stdio.h>
void wwjt();
double fun(double m)
{
/**********Program**********/
/********** End **********/
}
void main()
{
double c,f;
printf("请输入一个华氏温度:");
scanf("%f",&f);
c=fun(f);
printf("摄氏温度为:%5.2f\n",c);
wwjt();
}
void wwjt()
{
FILE *IN,*OUT;
int i;
double 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,"%f",&iIN);
iOUT=fun(iIN);
fprintf(OUT,"%f\n",iOUT);
}
fclose(IN);
fclose(OUT);
}
答案: float n;
n=(5.0/9.0)*(m-32);
return n;
第9题 (20.0分) 难度:中 第2章
/*------------------------------------------------
【程序设计】
--------------------------------------------------
功能:求给定正整数n以内的素数之积。(n<28)
------------------------------------------------*/
#include <stdio.h>
#include"conio.h"
void wwjt();
long fun(int n)
{
/**********Program**********/
/********** End **********/
}
main()
{
int m;
printf("Enter m: ");
scanf("%d", &m);
printf("\nThe result is %ld\n", fun(m));
wwjt();
}
void wwjt()
{
FILE *IN,*OUT;
int c ;
int t;
long 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(c=1;c<=5;c++)
{
fscanf(IN,"%d",&t);
o=fun(t);
fprintf(OUT,"%ld\n",o);
}
fclose(IN);
fclose(OUT);
}
答案:----------------------
long i,k;
long s=1;
for(i=2;i<=n;i++)
{for(k=2;k<i;k++)
if(i%k==0)break;
if(k==i)s=s*i;
}
return s;
----------------------
第10题 (20.0分) 难度:中 第1章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:学生的记录由学号和成绩组成。N名学生的数据已放入主函数中的结构体数组s中,
请编写函数fun,其功能是:把高于等于平均分的学生数据放在b所指的数组中,
高于等于平均分的学生人数通过形参n传回,平均分通过函数值返回。
注意:请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入
你编写的若干语句。
-------------------------------------------------------*/
#include <stdio.h>
#define N 12
void wwjt ( );
typedef struct
{
char num[10];
int s;
} STREC;
double fun( STREC *a, STREC *b, int *n )
{
/**********Program**********/
/********** End **********/
}
void main()
{
STREC s[N]={{"GA05",85},{"GA03",76},{"GA02",69},{"GA04",85},
{"GA01",91},{"GA07",72},{"GA08",64},{"GA06",87},
{"GA09",60},{"GA11",79},{"GA12",73},{"GA10",90}};
STREC h[N];
int i, n;
double ave;
ave=fun( s,h,&n );
printf("The %d student data which is higher than %7.3f:\n",n,ave);
for(i=0;i<n; i++)
printf("%s %d\n",h[i].num,h[i].s);
printf("\n");
wwjt ( );
}
void wwjt( )
{
FILE *in, *out ;
STREC h[N];
int i,j, n;
double ave;
STREC s[N];
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(j=0;j<10;j++)
{
for(i=0; i<N; i++)
{
fscanf(in,"%s %d", &s[i].num, &s[i].s);
}
ave=fun( s,h,&n );
fprintf(out, "%d\n%7.3f\n", n, ave);
}
fclose(in);
fclose(out);
}
答案: int i;
double av=0.0;
*n=0;
for(i=0;i<N;i++)
av=av+a[i].s;
av=av/N;
for(i=0;i<N;i++)
if(av<=a[i].s)
{
b[*n]=a[i];
*n=*n+1;
}
return av;