常见C语言编程题

1.编写函数fun,它的功能是计算:
在这里插入图片描述s作为函数值返回。C语言中可调用log( n )函数求ln (n)。log函数的引用说明是: double log(double x)。例如,若m的值为: 20,fun函数值为: 6.506583。

#include <conio.h>
	#include <math.h>
	#include <stdio.h>
	double   fun(  int  m )
{
	double s=0;
	int i;
	for(i=1;i<=20;i++)
		s+=log(i);
	return sqrt(s);
}
main()
{  
	printf("%f\n", fun(20));   
}

2.请编一个函数float fun(double h),函数的功能是对变量h中的值保留2位小数,并对第三位进行四舍五入 (规定h中的值为正数)。
例如:
h 值为 1234.567, 则函数返回 1234.570000;
h 值为 1234.564, 则函数返回 1234.560000。

#include <stdio.h>
	float fun ( float  h )
{
	long t=(h*1000+5)/10;
	return(float)t/100;
}

int main( )
{   float  h;
 while(1){
	 printf("请输入一个小数:");
		 scanf("%f",&h);
	 printf("结果为:%7.2f\n",fun(h)); 
 }
 return 0;
}

3.编写函数fun,它的功能是:利用以下所示的简单迭代方法求方程:cos(x)-x=0 的一个实根。
在这里插入图片描述

迭代步骤如下:
(1)取 x1 初值为0.0;
(2)x0 = x1,把x1的值赋给 x0;
(3)x1 = cos(x0),求出一个新的x1;
(4)若x0 - x1的绝对值小于 0.000001,执行步骤(5),否则执行步骤(2);
(5)所求x1就是方程 cos(x)-x=0 的一个实根,作为函数值返回。
程序将输出结果Root=0.739085。

#include <conio.h>
	#include <math.h>
	#include <stdio.h>

	float  fun()
{
	float x1,x0;
	x0=1;
	x1=cos(x0);
	while(fabs(x0-x1)>=0.00001) {
		x0=x1;
		x1=cos(x0);
	}
	return x1;
}

main()
{ 
	printf("Root =%f\n", fun());   
}

4.请编写函数fun, 函数的功能是: 删去一维数组中所有相同的数, 使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。
例如:
一维数组中的数据是:2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10。
删除后,数组中的内容应该是: 2 3 4 5 6 7 8 9 10。

#include <stdio.h>
	#define    N    80

	int  fun(int  a[], int  n)
{
	int i,c=1;
	for(i=1;i<n;i++){
		if(a[i]!=a[i-1])
			a[c++]=a[i];
	}
	return c;
} 

main()
{  int  a[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10},i,n=20;
 printf("The original data :\n");
 for(i=0; i<n; i++)printf("%3d",a[i]);
 n=fun(a,n);
 printf("\n\nThe data after deleted :\n");
 for(i=0;i<n;i++)printf("%3d",a[i]); printf("\n\n");   
}

5.函数fun的功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的千位和十位上, b数的十位和个位数依次放在c数的百位和个位上。
例如,当a=45,b=12。调用该函数后,c=4152。

#include <conio.h>
	#include <stdio.h>

	void fun(int a, int b, long *c)
{
	*c=10*(a%10)+1000*(a/10)+100*(b/10)+b%10;
}

main()
{  int a,b; long c;
 printf("Input a, b:");  scanf("%d%d", &a, &b);
 fun(a, b, &c);
 printf("The result is: %d\n", c);   
}

6.请编写函数fun, 它的功能是:计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和。
例如,在主函数中从键盘给n输入20后, 输出为: s=0.583333。
注意:要求n的值不大于100。

#include <stdio.h>
	double fun(int  n)
{
	double s;
	double z;
	for( int i=1;i<=n;i++){
		if(i%5==0||i%9==0){
			z=(double)i;
			s+=1/z;
		}
	}
	return s;
}
main()
{ int  n;    double  s;
 printf("\nInput n:  ");  
 scanf("%d",&n);
 s=fun(n);
 printf("\n\ns=%f\n",s);  
}

7.请编写函数fun,它的功能是: 求出 1 到 1000 之内能被 7 或11整除、但不能同时被 7 和 11 整除的所有整数并将它们放在 a所指的数组中,通过 n 返回这些数的个数。

#include <conio.h>
	#include <stdio.h>
	void wwjt();
void  fun (int *a, int *n)
{
	int i,j=0;
	for (i=1; i<=1000; i++)
		if (!(i%7==0&&i%11==0)&&(i%7==0||i%11==0))
		a[j++]=i;
	*n=j;
} 

main( )
{  int aa[1000], n, k ;
 fun ( aa, &n ) ;
 for ( k = 0 ; k < n ; k++ )
	 if((k + 1) % 10 == 0) printf("\n") ;
 else printf("%5d", aa[k]) ;
 wwjt( );
}
void wwjt ( ){ 
	FILE *out ;
	int aa[1000], n, k ;

	out = fopen("out.dat","w") ;
	fun ( aa, &n ) ;
	for ( k = 0 ; k < n ; k++ )
		if((k + 1) % 10 == 0) 
		fprintf(out, "\n") ;
	else 
		fprintf(out, "%5d", aa[k]) ;
	fclose(out) ;
}

8.请编写函数fun,函数的功能是:统计各年龄段的人数。N个年龄通过调用随机函数获得,并放在主函数的age数组中;要求函数把0至9岁年龄段的人数放在d[0]中,把10至19岁年龄段的人数放在d[1],把20至29岁年龄段的人数放在d[2],其余以此类推,把100岁(含100)以上年龄的人数放在d[10]中。结果在主函数中输出。

#include<stdio.h>
#define N 50
#define M 11
void fun(int *a, int *b)
{
	int i = 0;
	for (i = 0;i < N;i++)
		if (a[i] / 10 >= 10)
			b[10] += 1;
		else
			b[a[i]/ 10] += 1;
}
double rnd()
{
	static int t = 29, c = 217, m = 1024, r = 0;
	r = (r*t + c) % m;
	return((double)r / m);
}
int main()
{
	int age[N], i, d[M] = {0};
	for (i = 0;i < N;i++)
		age[i] = (int)(115 * rnd());
	printf("The orignal data:\n");
	for (i = 0;i < N;i++)
		printf((i + 1) % 10 == 0 ? "%4d\n" : "%4d", age[i]);
	printf("\n\n");
	fun(age, d);
	for (i = 0;i < 10;i++)
		printf("%4d--%4d:%4d\n", i * 10, i * 10 + 9, d[i]);
	printf("Over  100: %4d\n", d[10]);
}

9.程序定义了N×N的二维数组,并在主函数中赋值。请编写函数fun,函数的功能是:求出数组周边元素的平均值并作为函数值返回给主函数中的s。
例如:a 数组中的值为
a = 在这里插入图片描述
则返回主程序后s的值应为: 3.375。

#include <stdio.h>
	#include <conio.h>
	#include <stdlib.h>
	#define  N  5

	double fun ( int w[][N] )
{

	int i,j;
	double S=0.0;
	for(i=0;i<N;i++)	
		for(j=0;j<N;j++)
		if(i==0 || j==0 || i==N-1 || j==N-1)
		S=S+w[i][j];
	return S/(4*N-4);
}

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 ;
 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 );
}

10.请编写函数fun, 函数的功能是: 将M行N列的二维数组中的字符数据, 按列的顺序依次放到一个字符串中。
例如, 二维数组中的数据为:
W W W W
S S S S
H H H H
则字符串中的内容应是: WSHWSHWSH。

#include <stdio.h>
	#define     M   3
	#define     N   4

	void  fun(char  (*s)[N], char *b)
{
	int i,j,k=0;
	for(j=0;j<N;j++)
		for(i=0;i<M;i++)
	{
		b[k]=*(*(s+i)+j);
		k++;
	}
	b[k]= '\0';
}

main()
{ char w[M][N]={{'W','W','W','W'},{'S','S','S','S'},{'H','H','H','H'}};
 char a[100];
 int  i,j;
 printf("The matrix:\n");
 for(i=0; i<M; i++)
 {  for(j=0;j<N; j++)
	 printf("%3c",w[i][j]);
  printf("\n");
 }
 fun(w,a);
 printf("The A string:\n");puts(a);
 printf("\n\n");   
}

11.程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun(int a[][N], int n),函数的功能是:使数组左下三角元素中的值乘以n 。
例如:若n的值为3,a 数组中的值为
a =在这里插入图片描述则返回主程序后a数组中的值应为 在这里插入图片描述

#include <stdio.h>
	#include <conio.h>
	#include <stdlib.h>
	#define  N  5
	int  fun ( int a[][N], int n )
{
	int i,j;
	if(a == NULL) 
		return a[i][j];
	for(i=0;i<N;i++)
		for(j=0;j<=i;j++)
		a[i][j]=a[i][j]*n;
}
main ( )
{  int  a[N][N], n, i, j;
 printf("***** The array *****\n");
 for ( i =0;  i<N; i++ )
 {  for ( j =0; j<N; j++ )
 {  a[i][j] = rand()%10; printf( "%4d", a[i][j] ); }
  printf("\n");
 }
 do n = rand()%10 ; while ( n >=3 );
 printf("n = %4d\n",n);
 fun ( a, n );
 printf ("***** THE  RESULT *****\n");
 for ( i =0;  i<N; i++ )
 {  for ( j =0; j<N; j++ ) printf( "%4d", a[i][j] );
  printf("\n");
 }
}

12.假定输入的字符串中只含有字母和号。请编写函数fun,它的功能是:将字符串尾部的号全部删除,前面和中间的号不删除。
例如。字符串的内容为
ABCDEFG*******,删除后,字符串中的内容应当是:*ABCDEFG。编写程序时不得使用C语言提供的字符串函数。

#include <stdio.h>
	#include <string.h>
	void  fun( char *a){
	char *pch = NULL;
	pch = a;
	while(*pch == '*' && *pch != '\0')
		pch++;
	while(*pch != '\0' && pch != a){
		*a = *pch;
		a++;
		pch++;
	}
	*a = '\0';
}
main(){  
	char  s[81];
	printf("Enter a string:\n");gets(s);
	fun( s );
	printf("The string after deleted:\n");puts(s);
}

13.请编写函数fun, 函数的功能是:统计一行字符串中单词的个数,作为函数值返回。一行字符串在主函数中输入, 规定所有单词由小写字母组成, 单词之间由若干个空格隔开, 一行的开始没有空格。

#include<string.h>
	#include<stdio.h>
	#define N 80
	int fun(char *s){
	int n=1;
	int len=strlen(s);
	for(int i=0;i<len-1;i++){
		if(s[i]==' '&&s[i+1]!=' '){
			n++;
		}
	}
	return n;
}

main()
{  char  line[N];   
 int  num=0;
 printf("Enter a string :\n");
 gets(line);
 num=fun( line );
 printf("The number of word is  :  %d\n\n",num);   
}

14.请编写一个函数fun,它的功能时:将ss所指字符串中所有下标为奇数位置上的字母转换为大些(该位置上不是字母,则不转换)。
例如,若输入"abc4EFg",则应输出"aBc4EFg"。

#include <stdio.h>
	#include <string.h>
	void fun(char *ss){
	int len=strlen(ss);
	int z;
	for(int i=1;ss[i]!='\0';i+=2){
		z=ss[i];
		if(z>97&&z<122){
			z-=32;
			ss[i]=z;
		}
	}
}
int main() {
	char tt[81] ;
	printf( "\nPlease enter an string within 80 characters:\n" ); 
	gets( tt );
	printf( "\n\nAfter changing, the string\n  \"%s\"", tt );
	fun( tt );
	printf( "\nbecomes\n  \"%s\"\n",  tt  );
}
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值