第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;
第61题 (20.0分) 难度:易 第2章
/*------------------------------------------------
【程序设计】
--------------------------------------------------
功能:求一个给定字符串中的字母的个数。
------------------------------------------------*/
#include <stdio.h>
void wwjt();
int fun(char s[])
{
/**********Program**********/
/********** End **********/
}
main()
{
char str[]="Best wishes for you!";
int k;
k=fun(str);
printf("k=%d\n",k);
wwjt();
}
void wwjt()
{
FILE *IN,*OUT;
char sin[80];
int 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<10;i++)
{
fscanf(IN,"%s",sin);
iOUT=fun(sin);
}
fprintf(OUT,"%d\n",iOUT);
fclose(IN);
fclose(OUT);
}
答案:----------------------
int i,k=0;
for(i=0;s[i]!='\0';i++)
if(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z')
k++;
return k;
----------------------
第62题 (20.0分) 难度:中 第2章
/*------------------------------------------------
【程序设计】
--------------------------------------------------
功能:判断一个整数w的各位数字平方之和能否被5整除,
可以被5整除则返回1,否则返回0。
------------------------------------------------*/
#include <stdio.h>
#include"conio.h"
void wwjt();
int fun(int w)
{
/**********Program**********/
/********** End **********/
}
main()
{
int m;
printf("Enter m: ");
scanf("%d", &m);
printf("\nThe result is %d\n", fun(m));
wwjt();
}
void wwjt()
{
FILE *IN,*OUT;
int c ;
int t;
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(c=1;c<=5;c++)
{
fscanf(IN,"%d",&t);
o=fun(t);
fprintf(OUT,"%d\n",o);
}
fclose(IN);
fclose(OUT);
}
答案:----------------------
int k,s=0;
do
{s=s+(w%10)*(w%10);
w=w/10;
}while(w!=0);
if(s%5==0)k=1;
else k=0;
return(k);
----------------------
第63题 (20.0分) 难度:中 第1章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:编写函数fun,其功能是:求Fibonacci数列中大于t的最小的数,结果由函数返回。
Fibonacci数列F(n)的定义为:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)
例如:当t=1000时,函数值为1597。
注意:请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入
你编写的若干语句。
-------------------------------------------------------*/
#include <math.h>
#include <stdio.h>
void wwjt ( );
int fun( int t)
{
/**********Program**********/
/********** End **********/
}
void main() /* 主函数 */
{
int n;
n=1000;
printf("n = %d, f = %d\n",n, fun(n));
wwjt( );
}
void wwjt ( )
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
FILE *in, *out ;
int i, n, s ;
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) ;
s = fun(n) ;
fprintf(out, "%d\n", s) ;
}
fclose(in) ;
fclose(out) ;
}
答案: int f0 = 0, f1 = 1, f ;
do
{
f = f0 + f1 ;
f0 = f1 ;
f1 = f ;
}
while(f < t) ;
return f ;
第64题 (20.0分) 难度:中 第2章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:输入正整数m和n(设100≤m≤n≤999),输出m到n之间满足下列条件的三位数:它的
个位数的立方加十位数的平方再加上百位数等于该数的本身
(例如135=1+3*3+5*5*5)。
如输入:135 600
则输出:135 175 518 598
-------------------------------------------------------*/
#include <stdio.h>
main()
{
int m,n;
/**********Program**********/
/********** End **********/
}
答案: int i,a,b,c;
scanf( "%d%d", &m, &n );
for ( i=m; i<=n; i++ )
{
a = i%10;
b = i/10%10;
c = i/100%10;
if ( i==c+b*b+a*a*a )
printf( "%d ", i );
}
第65题 (20.0分) 题号:527 难度:中 第1章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:从键盘上输入一个字符串,放在数组中,要求将字符串中
的大写字母转换成小写字母,小写字母转换成大写字母,
非字母字符不变,并输出
-------------------------------------------------------*/
#include <stdio.h>
#include <string.h>
#include <conio.h>
#define N 80
void wwjt();
char fun(char a[])
{
/**********Program**********/
/********** End **********/
}
void main()
{
char a[80];
char s;
gets(a);
s=fun(a);
puts(a);
wwjt();
}
void wwjt()
{
FILE *IN,*OUT;
char sin[N];
char 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");
}
fscanf(IN,"%s",sin);
iOUT=fun(sin);
fprintf(OUT,"%s\n",sin);
fclose(IN);
fclose(OUT);
}
答案: int i;
for(i = 0; i < (strlen(a)); i ++)
if(a[i] >= 'A' && a[i] <= 'Z')
a[i] = a[i] + 32;
else if(a[i] >= 'a' && a[i] <= 'z')
a[i] = a[i] - 32;
return a[i];
第66题 (20.0分) 难度:中 第1章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:学生的记录由学号和成绩组成,N名学生的数据已放入主函数中的结构体数组s中,
请编写函数fun,其功能是:按分数降序排列学生的记录,高分在前,低分在后。
注意:请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入
你编写的若干语句。
-------------------------------------------------------*/
#include <stdio.h>
#define N 16
void wwjt ( );
typedef struct
{
char num[10];
int s;
} STREC;
void fun( STREC a[] )
{
/**********Program**********/
/********** End **********/
}
void main()
{
STREC s[N]={{"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},
{"GA001",91},{"GA007",72},{"GA008",64},{"GA006",87},
{"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},
{"GA011",66},{"GA017",64},{"GA018",64},{"GA016",72}};
int i;
fun( s );
printf("The data after sorted :\n");
for(i=0;i<N; i++)
{
if( (i)%4==0 )printf("\n");
printf("%s %4d ",s[i].num,s[i].s);
}
printf("\n");
wwjt( );
}
void wwjt( )
{
FILE *in, *out ;
STREC s[N];
int 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<N; j++)
{
fscanf(in,"%s %d",&s[j].num,&s[j].s);
}
fun(s);
for(i=0;i<N; i++)
{
if( (i)%4==0 && i)
fprintf(out, "\n");
fprintf(out, "%4d ",s[i].s);
}
fprintf(out,"\n");
fclose(out) ;
}
答案: int i,j;
STREC t;
for(i=1;i<N;i++)
for(j=0;j<N-1;j++)
if(a[j].s<a[j+1].s)
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
第67题 (20.0分) 难度:中 第95章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:找出1000以内的所有完数。(一个数若恰好等于它的真因子(即除了本身以外的约数)之和,
这个数就称为完数,如6=1+2+3)。
-------------------------------------------------------*/
#include <stdio.h>
void main( )
{
int i,j,s=1;
/**********Program**********/
/********** End **********/
}
答案: for(i=2;i<=1000;i++)
{
s=1;
for(j=2;j<=i/2;j++)
if(i%j==0)
s+=j;
if(s==i)
printf("%d\n",i);
}
第68题 (20.0分) 题号:670 难度:难 第1章
/*------------------------------------------------------------------------
【程序设计】
--------------------------------------------------------------------------
函数fun的功能:对一个任意位数的正整数n,,从十位起计算隔位数字之和,即十位、
千位、……等数字之和。例如输入1234567,6+4+2的结果为12。
------------------------------------------------------------------------
注意:部分源程序给出如下。请勿改动主函数main或其它函数中给出的内容,仅在
Program-End之间删除【?】填入若干语句。不要删除标志否则不得分。
----------------------------------------------------------------------*/
int fun(int n)
{
int sum=0;
/**********Program**********/
n=【?】;
【?】(n>0)
{
【?】+=【?】;
n=【?】;
}
/********** End **********/
return sum;
}
#include <stdio.h>
int main()
{
int n;
printf("输入一个正整数: ");
scanf("%d",&n);
printf("从十位起,隔位数字之和是%d\n",fun(n));
return 0;
}
答案: n=n/10;
while(n>0)
{ sum=sum+n%10;
n=n/100;
}
第69题 (20.0分) 难度:中 第1章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:规定输入的字符串中只包含字母和*号。请编写函数fun,其功能是:使字符串的
前导*号不得多于n个,若多于n个,则删除多余的*号;若少于或等n个,则不做处
理,字符串中间和尾部的*号不删除。
例如:字符串中的内容为:*******A*BC*DEF*G****,若n的值为4,删除后,字符串中的
内容应当是:****A*BC*DEF*G****;若n的值为8,则字符串中的内容仍
为:*******A*BC*DEF*G****。n的值在主函数中输入。在编写函数时,
不得使用C语言提供的字符串函数。
注意:请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入
你编写的若干语句。
-------------------------------------------------------*/
#include <stdio.h>
void wwjt ( );
void fun( char *a, int n )
{
/**********Program**********/
/********** End **********/
}
void main()
{
char s[81]; int n;
printf("Enter a string:\n");
gets(s);
printf("Enter n : ");
scanf("%d",&n);
fun( s,n );
printf("The string after deleted:\n");
puts(s);
wwjt( );
}
void wwjt ( )
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
FILE *in, *out ;
int i, n ; 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) ;
fscanf(in, "%d", &n) ;
fun(s,n) ;
fprintf(out, "%s\n", s) ;
}
fclose(in) ;
fclose(out) ;
}
答案: int i=0;
int k=0;
char *p,*t;
p=t=a;
while(*t=='*')
{
k++;
t++;
}
if(k>n)
{
while(*p)
{
a[i]=*(p+k-n);
i++;
p++;
}
a[i]='\0';
}
第70题 (20.0分) 难度:中 第1章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:下列程序定义了N×N的二维数组,并在主函数中赋值。请编写函数fun,函数的
功能是:求出数组周边元素的平均值并作为函数值返回给主函数中的s。
例如:若a 数组中的值为: 0 1 2 7 9
1 9 7 4 5
2 3 8 3 1
4 5 6 8 2
5 9 1 4 1
则返回主程序后s的值应为3.375。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入
所编写的若干语句。
-------------------------------------------------------*/
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define N 5
void wwjt();
double fun (int w[][N])
{
/**********Program**********/
/********** End **********/
}
void main()
{
int a[N][N]={0,1,2,7,9,1,9,7,4,5,2,3,8,3,1,4,5,6,8,2,5,9,1,4,1};
int i, j;
double s;
system("CLS");
printf("*****The array*****\n ");
for (i=0; i<N; i++)
{
for (j=0;j<N;j++)
{
printf("%4d ",a[i][j]);
}
printf("\n ");
}
s=fun(a);
printf("*****THE RESULT*****\n ");
printf("The sum is : %lf\n ",s);
wwjt();
}
void wwjt()
{
FILE *in, *out;
int a[N][N];
int i, j;
double s;
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<N; i++)
{
for (j=0;j<N;j++)
{
fscanf(in,"%d",&a[i][j]);
}
}
s=fun(a);
fprintf (out,"%lf\n",s);
fclose(in);
fclose(out);
}
答案: int i,j,k=0;
double av=0.0;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
if(i==0||i==N-1||j==0||j==N-1)
{
av=av+w[i][j];
k++;
}
return av/k;