1. 程式人生 > 其它 >常見C語言程式設計題

常見C語言程式設計題

技術標籤:常見C語言程式設計c語言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  );
}