资源描述
(word完整版)C语言程序设计练习题(含程序及参考答案)
2010—2011 C语言程序试题及答案
1、定义一个函数int fun(int a,int b,int c),它的功能是:若a,b,c能构成等边三角形函数返回3,若能构成等腰三角形函数返回2,若能构成一般三角形函数返回1,若不能构成三角形函数返回0。
#include 〈stdio。h>
int fun(int a,int b,int c)
{
if(a+b>c && b+c>a && a+c〉b)
{
if(a==b && b==c )
return 3;
else if(a==b||b==c||a==c)
return 2;
else return 1;
}
else return 0;
}
void main()
{
int a,b,c,shape;
printf(”\nInput a,b,c: ");
scanf(”%d%d%d",&a,&b,&c);
printf(”\na=%d, b=%d, c=%d\n”,a,b,c);
shape =fun(a,b,c);
printf("\n\nThe shape : %d\n”,shape);
}
2、编写一个程序,将两个变量的值交换, 例如变量a中的值原为 3,b中的值原为8,程序运行后 a 中的值为8,b中的值为3.
#include 〈stdio。h〉
void fun(int *x,int *y)
{
int t;
t=*x;*x=*y;*y=t
}
void main()
{
int a=3,b=8;
printf(”%d %d\n",a,b);
fun(&a,b);
printf(”%d %d\n”,a,b);
}
3、从键盘输入3个数,将最大值放在变量a中,最小值放在变量c中。
例如,输入的数为:55 12 34,
输出结果应当是:a=55.0,b=34。0,c=12。0。
#include <stdio。h〉
void fun(float *p,float *q,float *s)
{
float k;
if (*p<*q)
{ k=*p;*p=*q;*q=k;}
if (*q<*s)
{ k=*s;*s=*p;*p=k;}
if (*p〈*q)
{ k=*p;*p=*q;*q=k;}
}
void main()
{ float a,b,c;
printf("Input a b c: ”); scanf(”%f%f%f”,&a,&b,&c);
printf(”a=%4.1f,b=%4.1f,c=%4。1f\n\n”,a,b,c);
fun(&a,&b,&c);
printf("a=%4。1f,b=%4.1f,c=%4.1f\n\n",a,b,c);
}
4、编写函数fun(int n),它的功能是:计算正整数n的所有因子(1和n除外)之和作为函数值返回。例如:n=120时,函数值为239.
#include <stdio。h〉
#include 〈stdlib。h〉
int fun(int n)
{
int i,s=0;
for (i=2;i〈n;i++)
if (n%i==0) s=s+i;
return s;
}
void main() /*主函数*/
{
void NONO();
printf("%d\n",fun(120));
NONO();
}
void NONO( )
{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,
输出数据,关闭文件。 */
FILE *wf;
wf = fopen(”a30.out”, ”w”) ;
fprintf(wf,"%d\n",fun(120));
fclose(wf) ;
}
5、计算s,并输出
1 1 1
S = 1 + ── + ─── + …… + ──────
1+2 1+2+3 1+2+3+…+n
n通过键盘输入,例如:若n的值为11时,则函数值为:1.
#include 〈stdio.h〉
#include 〈stdlib。h〉
float fun(int n)
{
int i;
float s=1。0,h=1;
for (i=2;i〈=n;i++)
{
h=h+i; s=s+1.0/h;
}
return s;
}
void main()
{
int n;float s;
printf("\nPlease enter N:");scanf("%d”,&n);
s=fun(n);
printf("the result is:%f",s);
}
6、将一个整数中的每一位上为奇数的数依次取出,构成一个新数放在t中.高位仍在高位,低位仍在低位。例如,当s中的数为:时,t中的数为:7531.
#include <stdio.h〉
void fun(long s,long *t)
{
int d;
long s1=1;
*t=0;
while (s>0)
{
d=s%10;
if(d%2!=0)
{
*t=d*s1+*t;
s1=s1*10;
}
s/=10;
}
}
main()
{
long s,t;
printf(”\nPlease enter s:”);
scanf(”%ld",&s);
fun(s,&t);
printf("The result is:%ld\n”,t);
}
7、计算并输出k以内最大的10个能被13或17整除的自然数之和.k的值从键盘传入,若k的值为500,则输出4622。
#include 〈stdio。h>
int fun(int k)
{
int m=0,mc=0,j;
while((k>=1)&&(mc〈10))
{
if ((k%13 == 0)||(k%17 == 0))
{
m=m+k;mc++;
}
k-—;
}
return m;
}
void main()
{
printf("%d\n",fun(500));
}
8、已知一个数列的前三项分别为0,0,1, 以后的各项都是其相邻的前三项之和,计算并输出该数列前n项的平方根之和sum.例如,当n=10时,程序的输出结果应为:23。。
#include 〈stdio。h>
#include <math。h>
double fun(n)
{
double sum,s0,s1,s2,s;
int k;
sum = 1。0;
if(n 〈= 2) sum = 0。0;
s0 = 0。0; s1 = 0。0; s2 = 1.0;
for (k = 4; k 〈= n; k++)
{ s = s0 + s1 + s2;
sum += sqrt(s);
s0 = s1; s1 = s2; s2 = s;
}
return sum;
}
void main ( )
{
int n;
printf(”Input N=");
scanf("%d", &n);
printf(”%f\n", fun(n) );
}
9、编写一个程序,从键盘输入m,输出大于m且紧随m的素数。
#include 〈stdio.h>
int fun(int m)
{
int i,k;
for (i=m+1;;i++) {
for (k=2;k<i;k++)
if(i%k==0)
break;
if (k>=i)
return(i);
}
}
void main()
{
int n;
printf("\nPlease enter n:”);
scanf("%d",&n);
printf(”%d\n”,fun(n));
}
10、判断两个整数m和n是否互质(即是否有公共的因子)(m≠1,n≠1).方法是: 用2到t(t取m和n中较小的那个数)之间的数分别去除m和n,若m和n能同时被某个数除尽,则m和n不互质;否则它们互质。
例如,若输入187和85,则应输出No(表示它们不互质,它们有公因子17).若输入89和187,则应输出Yes(表示它们互质)。
#include 〈stdio。h〉
int IsThat( int m, int n )
{
int k, t, mk=1;
t=m;
if (m〉n) t=n;
for(k=2;k<=t;k++)
if( m%k==0 && n%k==0 )
{ mk=0; break; }
return mk;
}
void main( )
{
int m, n;
printf( ”\nPlease enter 2 numbers:\n” );
scanf("%d %d”, &m, &n);
if( IsThat( m, n ) )
printf( ”Yes\n" );
else
printf( "No\n” );
}
11、将十进制正整数m转换成k进制数(2≤k≤9)并输出(m,k从键盘输入)。
例如,若输入8和2,则应输出1000(即十进制数8转换成二进制表示是1000).
#include 〈stdio.h〉
void Trans( int m, int k )
{
int aa[20], i,j;
for( i = 0; m; i++ )
{
aa[i] = m%k;
m /= k;
}
for( j=i-1; j>=0; j-- )
printf("%d", aa[j]);
}
void main()
{
int b, n;
printf( ”\nPlease enter a number and a base:\n" );
scanf(”%d %d", &n, &b );
Trans( n, b );
}
12、统计从键盘输入的50个实数中有多少个正数、多少个负数、多少个零
#include 〈stdio.h〉
void fun(int *zs,int *fs,int *l,float aa[])
{
int i;
for(i=0;i〈50;i++)
{
if(aa[i]>0)
(*zs)++;
if(aa[i]<0)
(*fs)++;
if(aa[i]==0)
(*l)++;
}
}
void main()
{
float num[50];
int i,czs,cfs,cl;
czs=cfs=cl=0;
printf( "\nPlease enter 50 float numbers :\n” );
for(i=0;i<50;i++)
scanf(“%f”,&num[i]);
fun(&czs,&cfs,&cl,num);
printf(”\n正数:%d ,负数:%d ,零:%d \n",czs,cfs,cl);
}
13、计算并输出方程X2+Y2=1989的所有整数解
#include <stdio。h>
void fun()
{
int x,y;
for(x=1;x〈=44;x++)
for(y=1;y<=44;y++)
if(x*x+y*y==1989)
printf(“x=%d ,y=%d \n”,x,y);
}
void main()
{
printf(“方程x^2+y^2=1989的整数解为:\n”);
fun();
}
14、从键盘输入10个整数,求出其中的最大值。
#include 〈stdio.h〉
int fun(int aa[])
{
int m,i;
m=aa[0];
for(i=1;i〈10;i++)
if(aa[i]〉m)
m=aa[i];
return m;
}
void main()
{
int num[10],i;
printf(“请从键盘输入10个整数:\n”);
for(i=0;i<10;i++)
scanf(“%d”,&num[i]);
printf(“\n最大的数是:%d\n”,fun(num));
}
1 2 3 4 5
1 1 2 3 4
1 1 1 2 3
1 1 1 1 2
1 1 1 1 1
15、从键盘输入n值,输出如右图形。(例如n=5时)
#include <stdio.h〉
void fun(int n)
{
int i,j;
for(i=1;i<=n;i++)
{
for(j=1;j〈=i;j++)
printf(“%3d”,1);
for(j=2;j〈=n+1-i;j++)
printf(“%3d”,j);
printf(“\n”);
}
}
void main()
{
int n;
printf(“\n请输入图形的行数:”);
scanf(“%d",&n);
fun(n);
}
16、使用函数的方式,计算如下公式的值。
1 1 1
A1=1,A2=──,A3=──,……An=────
1+A1 1+A2 1+A(n—1)
例如:若n=10,则应输出: 0.。
#include 〈stdio.h>
float fun ( int n )
{
float A=1; int i;
for (i=1; i〈=n; i++)
A = 1.0/(1+A);
return A ;
}
void main( )
{
int n ;
printf(”\nPlease enter n: ”) ;
scanf("%d”, &n ) ;
printf(”A%d=%f\n", n, fun(n) ) ;
}
* 17、使用函数的方式,,按下面的公式计算并输出数列的第m项。
┌ 2, m = 1;
│ 3, m = 2;
FFF( m ) = ┤ 5, m = 3;
└ FFF(m — 3) + FFF(m — 1), m 〉 3;
例如,若输入整数 9,则应输出:47.
(不用做)
* 18、使用函数的方式,按以下递归公式求函数值
┌10 (n=1)
fun(n)=│
└fun(n—1)+2 (n>1)
例如,当给n输入5时,函数值为18;当给n输入3时,函数值为14。
(不用做)
19、计算并输出当0<x〈0。97时下列多项式的值, 直到|S(n)—S(n-1)|〈0。为止.
例如,在主函数中从键盘给x输入0。21后,输出为:s=1。。
#include 〈stdio.h>
#include <math.h>
double fun(double x)
{
int n=1; /* 循环计数*/
double sn=1; /* 累计数*/
double xn=1,xn1=0; /*x的n值,以及x的n-1值;*/
while(fabs(xn—xn1)>=0.)/*绝对值是否合格*/
{
xn=xn*x*(0。5-n+1)/n; /*表达式分解以后xn=(xn—1)*x*(0.5-n+1)/n*/
n+=1;
sn+=xn; /*sn累加上xn*/
}
return sn;
}
void main()
{
double x,s;
printf("Input x: "); scanf(”%lf”,&x);
s=fun(x);
printf("s=%f\n”,s);
}
20、计算并输出s。
x^2 x^3 x^n
s = 1 + x + ── + ── + …… + ──
2! 3! n!
n,x从键盘输入,例如,当n=10,x=0。3时,函数值为1。。
#include <stdio。h>
double fun(double x,int n)
{
int i;
double f=1.0,h=x;
double s=1;
s=s+h/f;
for (i=2;i〈=n;i++)
{
f=f*i;h=h*x;
s=s+h/f;
}
return s;
}
void main()
{
printf("%f\n”,fun(0。3,10));
}
21、从键盘输入high,计算并输出high以内最大的10个素数之和.例如,输入high的值为100,则输出732.
#include 〈stdio.h>
int fun( int high )
{
int sum = 0, n=0, j, yes;
while ((high 〉= 2) && (n 〈 10))
{
yes = 1;
for (j=2; j<=high/2; j++ )
if (high % j ==0 )
{
yes=0; break;
}
if (yes==1)
{
sum +=high; n++;
}
high--;
}
return sum ;
}
void main ( )
{
printf("%d\n", fun (100));
}
22、请编写函数float fun(int n),它的功能是:返回n(包括n)以内能被5或9整除的所有自然数的倒数之和.例如,n=20,返回0。。注意:要求n的值不大于100。
#include 〈stdio。h〉
double fun(int n)
{
int i;
double sum=0。0;
if(n>0&&n<=100)
{
for (i=1;i<=n;i++)
if(i%5==0||i%9==0)
sum+=1.0/i;
}
return sum;
}
void main()
{
int n; double s;
printf("\nInput n: ”);
scanf(”%d”,&n);
s=fun(n);
printf("\n\ns=%f\n”,s);
}
23、请编一个函数fun(int *a, int n, int *odd, int *even),函数的功能是分别求出数组中所有奇数之和以及所有偶数之和。形参n给出数组a中数据的个数;利用指针odd返回奇数之和,利用指针even返回偶数之和。
例如:数组中的值依次为: 1,9,2,3,11,6;则利用指针odd返回奇数之和24;利用指针even 返回偶数之和8.
#include 〈stdio。h>
#define N 20
fun ( int *a, int n, int *odd, int *even )
{
int i,sum_odd=0,sum_even=0;
for(i=0;i<n;i++)
if(a[i]%2==0)
sum_even+=a[i];
else
sum_odd+=a[i];
*odd=sum_odd;
*even=sum_even;
}
void main( )
{
int a[N]={1,9,2,3,11,6}, i, n=6, odd, even;
printf ( "The original data is : \n" );
for ( i = 0; i 〈 n; i ++ ) printf ( ”%5d”, *(a+i) );
printf("\n\n");
fun ( a, n, &odd, &even );
printf ( ”The sum of odd numbers: %d\n", odd );
printf ( "The sum of even numbers: %d\n”, even );
}
24、编写计算三角形面积的程序,注意:将计算面积定义成函数float fun(int a,int b,int c)(a,b,c为三角形的三条边,返回三角形的面积),在主函数中调用fun
#include <stdio。h>
#include 〈math.h〉
float fun(int a,int b,int c)
{
float p;
p=(a+b+c)/2;
return sqrt(p*(p-a)*(p—b)*(p—c));
}
void main()
{
int a,b,c;
printf(“请输入三角形三条边:\n”);
scanf(“%d%d%d”,&a,&b,&d);
if(a+b>c && b+c>a && a+c>b)
printf(“三角形面积为:%.2f”,fun(a,b,c));
else
printf(“无法构成三角形”);
}
25、编写程序,求E=1+1/1!+1/2!+……+1/n!,要求最后一项的值小于10—4
#include 〈stdio。h>
double fun(int n)
{
double m=1。0;
int i=1;
double p=1.0;
do{
m=m+1。0/p;
i++;
p=p*i;
} while(1.0/p>=1E-4);
return m;
}
void main()
{
int n; double s;
printf(”Input n: ”); scanf("%d",&n);
s=fun(n);
printf("s=%f\n”,s);
}
26、计算并输出给定数组(长度为9)中每相邻两个元素之平均值的平方根之和。
例如,给定数组中的9个元素依次为12。0、34。0、4.0、23.0、34。0、45.0、18。0、3.0、11.0,输出应为:s=35。。
#include <stdio。h〉
#include <math.h>
double fun(double x[9])
{
int i ;
double avg=0.0,sum=0.0;
for (i=0;i〈8;i++)
{
avg=(x[i]+x[i+1])/2;
sum+=sqrt(avg);
}
return sum;
}
void main()
{
double s,a[9]={12.0,34。0,4。0,23.0,34.0,45。0,18。0,3.0,11。0};
int i;
printf("\nThe original data is :\n”);
for(i=0;i<9;i++)printf("%6.1f",a[i]); printf("\n\n”);
s=fun(a);
printf("s=%f\n\n”,s);
}
27、将1到m之内(含m)能被7或11整除的所有整数放在数组a中。
例如,若输入m的值为50,则在数组a中的值为:
7 11 14 21 22 28 33 35 42 44 49
#include <stdio。h〉
#define M 100
void fun ( int m, int *a , int *n )
{
int i,count=0;
for(i=1;i<=m;i++){
if(i%7==0 || i%11==0) {
a[count++]=i;
}
}
*n=count;
}
void main( )
{
int aa[M], n, k;
fun ( 50, aa, &n );
for ( k = 0; k < n; k++ )
if((k+1)%20==0) printf("\n”);
else printf( ”%4d”, aa[k] );
printf(”\n") ;
}
28、请编写函数int fun(int m,int score[],int below[]),它的功能是:将低于平均分的人数作为函数值返回,并将低于平均分的成绩放在below数组中(m表示score的长度,score表示成绩).例如,当score数组中的数据为:10、20、30、40、50、60、70、80、90时,函数返回4,below中的数据应为:10、20、30、40。
#include 〈stdio。h>
#include 〈stdlib。h>
int fun(int score[], int m, int below[])
{
int total=0;
int average=0;
int *p_below=below;
int i=0;
int j=0;
for(i=0;i〈m;i++){
total=total+score[i];
}
average=total/m;
for(i=0;i〈m;i++){
if(score[i]〈average){
*p_below=score[i];
p_below++;
j++;
}
}
*p_below=NULL;
return(j);
}
main( )
{ int i, n, below[9] ;
int score[9] = {10, 20, 30, 40, 50, 60, 70, 80, 90} ;
n = fun(score, 9, below) ;
printf( "\nBelow the average score are: " ) ;
for (i = 0 ; i < n ; i++) printf("%d ”, below[i]) ;
}
29、用插入排序法将n个字符进行排序(降序).(提示:插入法排序的思路是:先对数组的头两个元素进行排序,然后根据前两个元素的情况插入第三个元素,再插入第四个元素…)。
#define N 80
#include ”stdio.h”
#include ”string。h"
void insert(char *aa)
{
int i,j,n; char ch;
n=strlen(aa);
for(i=1;i<n;i++)
{
ch=aa[i];
j=i—1;
while ((j>=0)&&(ch〈aa[j]))
{
aa[j+1]=aa[j];
j--;
}
aa[j+1]=ch;
}
}
void main()
{ char a[N]=”QWERTYUIOPASDFGHJKLMNBVCXZ”;
int i;
printf("The original string : %s\n",a);
insert(a);
printf("The string after sorting:%s\n\n”,a);
}
30、假定整数数组a中元素的值不重复。删除a中值为x的元素(x从键盘输入)。
#include 〈stdio。h〉
#define N 20
fun(int *a,int n,int x)
{ int p=0,i;
a[n]=x;
while(x!=a[p])
p=p+1;
if(p==n)
return -1;
else
{
for(i=p;i〈n;i++)
a[i]=a[i+1];
return n—1;
}
}
void main()
{ int w[N]={-3,0,1,5,7,99,10,15,30,90},x,n,i;
n=10;
printf("The original data :\n");
for(i=0;i<n;i++) printf(”%5d",w[i]);
printf("\nInput x (to delete):");scanf("%d",&x);
printf(”Delete : %d\n",x);
n=fun(w,n,x);
if (n==—1) printf(”***Not be found!***\n\n");
else
{ printf("The data after deleted:\n");
for(i=0;i〈n;i++) printf(”%5d",w[i]);printf("\n\n");
}
}
31、一个已按从小到大的顺序排好的数组a,编写程序,从键盘输入一个数x按原来排序的规律将它插入数组a中.
#include 〈stdio。h〉
#define M 20
void InSort( int *n, int vv[], int k )
{
int i=0 , j;
while ( k 〉 vv[i] && i 〈 *n ) i++;
if ( i<*n )
for ( j=*n; j>i; j—- ) vv[j] = vv[j-1];
vv[i] = k;
++*n;
}
void main()
{
int aa[M], i, k, m;
system(”cls”);
printf( ”\nPlease enter a number:\n” );
scanf( ”%d”, &m );
printf( "\nPlease enter %d numbers:\n”, m );
for( i = 0; i 〈 m; i++ )
scanf( "%d”, &aa[i] );
printf( "\nPlease enter another number:\n” );
scanf( ”%d", &k );
InSort( &m, aa, k );
for(k=0; k < m;k++)
printf( " %d”, aa[k] );
}
32、使用数组的方法筛选出1—100中的素数
#include <stdio.h>
void fun ( int *pt )
{
int i,j,flag;
*pt=2;*pt++;
for(i=3;i<100;i++)
{
flag = 1;
for(j=2;j〈i;j++)
if(i % j == 0)
flag = 0;
if( flag )
{
*pt = i;*pt++;
}
}
*pt=0;
}
void main( )
{
int *pointer,a[30];
pointer=a;
fun(pointer);
printf(”The result is :\n”);
while(*pointer)
printf ( "%d ”,*pointer++ );
}
33、已知一个数组a中包括10个整数元素,从a中第二个元素起,分别将后项减前项之差存入数组b,并按每行3个元素输出数组b.
#include 〈stdio。h>
void fun(int a[],int b[])
{
int i;
for(i=1;i<10;i++)
b[i-1]=a[i]-a[i-1];
for(i=0;i〈9;i++)
{
printf(“%3d",b[i]);
if((i+1)%3==0)
printf(“\n");
}
}
void main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
int b[9];
fun(a,b);
}
34、请编写函
展开阅读全文