第50题 (20.0分) 难度:中 第95章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:编程序,输入两个字符串a,b(<40个字符),将两者连接后输出c(不能用strcat库函数)。
-------------------------------------------------------*/
#include <stdio.h>
#include <string.h>
void main( )
{
/**********Program**********/
/********** End **********/
}
答案: char a[40], b[40], c[80];
int i, j;
printf("分二行输入两个字符串: \n");
gets(a); gets(b);
for( i=0; a[i]!='\0'; i++) c[i]=a[i];
for( j=0; b[j]!='\0'; j++) c[i+j]=b[j];
c[i+j]='\0';
puts(c);
第51题 (20.0分) 难度:难 第2章
/*------------------------------------------------
【程序设计】
--------------------------------------------------
功能:编写函数用冒泡排序法对数组中的数据进行从小到
大的排序。
------------------------------------------------*/
#include <stdlib.h>
#include<stdio.h>
void wwjt();
void sort(int a[],int n)
{
/**********Program**********/
/********** End **********/
}
main()
{
int a[16],i;
for(i=0;i<16;i++)
a[i]=random(30)+15;
for(i=0;i<16;i++)
printf("%3d",a[i]);
printf("\n-------------------\n");
sort(a,16);
for(i=0;i<16;i++)
printf("%3d",a[i]);
wwjt();
}
void wwjt()
{
FILE *IN,*OUT;
int n;
int i[10];
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]);
}
sort(i,10);
for(n=0;n<10;n++)
fprintf(OUT,"%d\n",i[n]);
fclose(IN);
fclose(OUT);
}
答案:----------------------
int i,j,t;
for(i=0;i<n-1;i++)
for(j=0;j<n-1-i;j++)
if(a[j]>a[j+1])
{t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
----------------------
第52题 (20.0分) 难度:中 第1章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:从键盘输入实数x,按照如图片所示的公式计算并输出y值:
-------------------------------------------------------*/
#include <stdio.h>
#include<math.h>
main()
{
double x,y;
/**********Program**********/
/********** End **********/
printf("y=%f\n",y);
}
答案: scanf("%f",&x);
if(x>7)
y=2+sqrt(x);
else if(x>=-7)
y=5+3*x;
else
y=3*x*x;
第53题 (20.0分) 难度:中 第1章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平均分
的人数作为函数值返回,将低于平均分的分数放在below所指的数组中。
例如:当score数组中的数据为10、20、30、40、50、60、70、80、90时,函数返回的
人数应该是4,below中的数据应为10、20、30、40。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入
你编写的若干语句。
-------------------------------------------------------*/
#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void wwjt();
int fun(int score[],int m, int below[])
{
/**********Program**********/
/********** End **********/
}
void main()
{
int i, n, below[9];
int score[9]={10,20,30,40,50,60,70,80,90};
system("CLS");
n=fun(score, 9, below);
printf("\nBelow the average score are: ");
for(i=0;i<n;i++)
printf("% d",below[i]);
wwjt();
}
void wwjt()
{
FILE *in, *out;
int i, n, below[9], score[9];
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<9; i++)
{
fscanf(in,"%d",&score[i]);
}
n=fun(score, 9, below);
for(i=0;i<n;i++)
fprintf(out,"% d",below[i]);
fclose(in);
fclose(out);
}
答案: int i,j=0;
float av=0.0;
for(i=0;i<m;i++)
av=av+score[i]/m;
for(i=0;i<m;i++)
if(score[i]<av)
below[j++]=score[i];
return j;
第54题 (20.0分) 难度:中 第2章
/*------------------------------------------------
【程序设计】
--------------------------------------------------
功能:找出一批正整数中的最大的偶数。
------------------------------------------------*/
#include <stdio.h>
void wwjt();
int fun(int a[],int n)
{
/**********Program**********/
/********** End **********/
}
main()
{
int a[]={1,2,9,24,35,18},k;
k=fun(a,6);
printf("max=%d\n",k);
wwjt();
}
void wwjt()
{
FILE *IN,*OUT;
int iIN[10],iOUT,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(j=0;j<10;j++)
{
for(i=0;i<10;i++)
fscanf(IN,"%d",&iIN[i]);
iOUT=fun(iIN,10);
}
fprintf(OUT,"%d\n",iOUT);
fclose(IN);
fclose(OUT);
}
答案:----------------------
int i,amax=-1;
for(i=0;i<n;i++)
if(a[i]%2==0)
if (a[i]>amax) amax=a[i];
return amax;
----------------------
第55题 (20.0分) 难度:中 第2章
/*------------------------------------------------
【程序设计】
--------------------------------------------------
功能:请编一个函数void fun(int tt[M][N],int pp[N]),
tt指向一个M行N列的二维数组,求出二维数组每列
中最大元素,并依次放入pp所指一维数组中。二维
数组中的数已在主函数中赋予。
------------------------------------------------*/
#include<conio.h>
#include<stdio.h>
#define M 3
#define N 4
void wwjt();
void fun(int tt[M][N],int pp[N])
{
/**********Program**********/
/********** End **********/
}
main()
{
int t[M][N]={{22,45,56,30},
{19,33,45,38},
{20,22,66,40}};
int p[N],i,j,k;
printf("The original data is:\n");
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
printf("%6d",t[i][j]);
printf("\n");
}
fun(t,p);
printf("\nThe result is:\n");
for(k=0;k<N;k++) printf("%4d",p[k]);
printf("\n");
wwjt();
}
void wwjt()
{
int i,j, array[3][4],p[4];
FILE *rf, *wf ;
rf = fopen("in.dat", "r") ;
wf = fopen("out.dat", "w") ;
for (i=0; i < 3; i++)
for (j=0; j < 4; j++)
fscanf(rf, "%d", &array[i][j]);
fun(array,p);
for (j=0; j < 4; j++)
{
fprintf(wf, "%7d", p[j]);
fprintf(wf, "\n");
}
fclose(rf) ;
fclose(wf) ;
}
答案:----------------------
int i,j;
for(j=0;j<N;j++)
{
pp[j]=tt[0][j];
for(i=1;i<M;i++)
if(tt[i][j]>pp[j])
pp[j]=tt[i][j];
}
----------------------
第56题 (20.0分) 难度:中 第1章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
请编写一个函数int fun(int *s,int t,int *k),用来求出
数组的最小元素在数组中的下标并存放在k所指的存储单元中。
例如,输入如下整数:
234 345 753 134 436 458 100 321 135 760则输出结果为6,100。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数
fun的花括号中填入所编写的若干语句。
试题程序:
-------------------------------------------------------*/
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
int fun(int *s, int t, int *k)
{
int i;
*k=0;
/**********Program**********/
/********** End **********/
}
void main()
{
FILE *wf;
int a[10] = {234, 345, 753, 134, 436, 458, 100, 321, 135, 760}, k;
system("CLS");
fun(a, 10, &k);
printf("%d, %d\n ", k, a[k]);
wf=fopen("out.txt", "w");
fprintf(wf, "%d, %d", k, a[k]);
fclose(wf);
}
答案: for(i = 0; i < t; i++)
if(s[*k] > s[i])
*k = i;
return s[*k];
第57题 (20.0分) 题号:275 难度:中 第1章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:C语言编程题实现以下功能:
1) 从键盘输入10个学生的成绩,计算平均成绩ave
2) 统计及格人数pass,计算高于平均分的学生的人数better
3) 将10个学生成绩排名。
-------------------------------------------------------*/
#include "stdio.h"
#define N 10
void main()
{
int i,j,a[N],ave,sum=0,pass=0,better=0,t;
/**********Program**********/
/********** End **********/
printf("平均分:%d\n及格人数%d\n高于平均分人数%d\n",ave,pass,better);
}
答案: for(i=0;i<N;i++)
{
scanf("%d",&a[i]);
sum+=a[i];
}
ave=sum/N;
for(i=0;i<N;i++)
{
if(a[i]>=60)
pass++;
if(a[i]>ave)
better++;
}
for(i=0;i<N;i++)
for(j=i+1;j<N;j++)
{
if (a[i]<a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
for(i=0;i<N;i++)
{
printf("%d",a[i]);
}
第58题 (20.0分) 难度:中 第1章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:编写函数fun,其功能是:求ss所指字符串中指定字符的个数,并返回此值。
例如:若输入字符串123412132,输入字符为1,则输出3。
注意:请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入
你编写的若干语句。
-------------------------------------------------------*/
#include <stdio.h>
#include <string.h>
#define M 81
void wwjt ( );
int fun(char *ss, char c)
{
/**********Program**********/
/********** End **********/
}
main()
{
char a[M], ch;
printf("\nPlease enter a string:");
gets(a);
printf("\nPlease enter a char:");
ch = getchar();
printf("\nThe number of the char is: %d\n", fun(a, ch));
wwjt ( );
}
void wwjt ( )
{/* 本函数用于打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/
int i ;
FILE *in, *out ;
char a[M], b[M], ch ;
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", a) ;
fscanf(in, "%s", b) ;
ch = *b ;
fprintf(out, "%c=%d\n", ch, fun(a, ch)) ;
}
fclose(in) ;
fclose(out) ;
}
答案: int i=0;
for(;*ss!='\0';ss++)
if(*ss==c)
i++;
return i;
第59题 (20.0分) 难度:中 第1章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:对从键盘输入的10个整数进行降序排序;
排序后输出第2大的数,请编fun函数。
-------------------------------------------------------*/
#include "stdio.h"
void wwjt();
int fun(int a[])
{
/**********Program**********/
/********** End **********/
}
void main()
{
int a[10],i,m;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
m=fun(a);
printf("%d ",m);
wwjt();
}
void wwjt()
{
FILE *IN,*OUT;
int iIN[10],i;
int iOUT,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(i=0;i<5;i++)
{
for(iCOUNT=0;iCOUNT<10;iCOUNT++)
fscanf(IN,"%d",&iIN[iCOUNT]);
iOUT=fun(iIN);
fprintf(OUT,"%d\n",iOUT);
}
fclose(IN);
fclose(OUT);
}
答案: int i,j,t;
for(i=0;i<9;i++)
for(j=0;j<9-i;j++)
if (a[j]<a[j+1] )
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
return a[1];
第60题 (20.0分) 难度:中 第1章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:请编写一个函数fun,它的功能是:计算并输出给定整数n的所有因子
(不包括1与自身)之和。规定n的值不大于1000。
例如:若主函数从键盘给n输入的值为856,则输出为sum=763。
注意:请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入
所编写的若干语句。
-------------------------------------------------------*/
#include <stdio.h>
void wwjt();
int fun(int n)
{
/**********Program**********/
/********** End **********/
}
void main()
{
int n,sum;
printf("Input n:");
scanf("%d", &n);
sum=fun(n);
printf("sum=%d\n", sum);
wwjt();
}
void wwjt()
{
FILE *in, *out;
int i, n, sum;
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",&n);
sum=fun(n);
fprintf(out,"%d\n",sum);
}
fclose(in);
fclose(out);
}
答案: int s=0,i;
for(i=2;i<=n-1;i++) /*将n减1累加*/
if(n%i==0)
s+=i;
return s;