常見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);
程式將輸出結果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 );
}