C语言基础编程题目

1 从传入的num个字符中找出最长一个字符串,并通过形参指针max传回该串地址(用**作为结束标识符)

#include 
#include 
#define MAX 100
void fun(char(*a)[81], int num, char **max)
{
    int i = 0;
    *max = a[0];
    for (i = 0; i < num; i++)
        if (strlen(*max) < strlen(a[i]))
            *max = a[i];
}

int main()
{
    char ss[10][81], *ps;
    int n, i = 0;
    printf("输入若干各字符串:\n");
    gets(ss[i]);
    puts(ss[i]);
    while (!strcmp(ss[i], "****") == 0)
    {
        i++;
        gets(ss[i]);
        puts(ss[i]);
    }
    n = i;
    fun(ss, n, &ps);
    printf("\nmax=%s\n", ps);
    printf("\n");
}

2 请编写一个函数,用来删除字符串中的所有空格

#include 

void fun(char *str)
{
    int i = 0;
    char *p = str;
    while (*p)
    {
        if (*p !=' ') //删除空格
            str[i++] = *p;
        p++;
    }
    str[i] = '\0'; //加上结束符
}

int main()
{
    char str[81] = "welcome to Beijing";
    fun(str);
    printf("%s\n", str);
}

3 判断字符串是否为回文,若是,则返回1,否则返回0。例如字符串LEVEL是回文,而字符串123312就不是回文

#include 

int fun(char *str)
{
    int i, n = 0, fg = 1;
    char *p = str;
    while (*p)
    {
        n++;
        p++;
    }

    for (i = 0; i < n / 2; i++)
    {
        if (str[i] != str[n - 1 - i])
        {
            fg = 0;
            break;
        }
    }
    return fg;
}

int main(){

    char str1[256] = "LEVEL";
    char str2[256] = "123312";

    if (fun(str1))printf("YES\n");
    else printf("NO\n");

    if (fun(str2))printf("YES\n");
    else printf("NO\n");
}

4 编写函数fun,其功能是:根据以下公式计算s并计算结果作为函数返回值返回,n通过形参传入。s=1+1/(1+2)+1/(1+2+3)+1/1+2+3+…n

float fun(int n)
{
    int i, s1 = 0;
    float s = 0.0;
    for (i = 1; i <= n;i++)
    {
        s1 = s1 + i; //求每一项的分母
        s = s + 1.0 / s1; //求多项式的值
    }
    return s;
}

5 编写函数fun,其功能是:将s所指字符串中ASCII值为奇数的字符删除,剩余字符形成新串放在t所指数组中。

void fun(char *s, char t[])
{
    int i, j = 0, n;
    n = strlen(s);
    for (i = 0; i < n; i++)
    {
        if (s[i] % 2 == 0)
        {
            t[j] = s[i];
            j++;
        }
    }
    t[j] = '\0';
}

6 删除一维数组中所有相同的数,使之只剩一个,数组中的数已按由小到大的顺序排列,函数返回删除后数组中的数据个数。

#include 

int fun(int a[],int n)
{
    int i,j=1;
    for(i=1;iif(a[j-1]!=a[i]) //若该数与前一个数不相同,则要保留
            a[j++]=a[i];
    }
    return j; //返回不同数的个数
}

void main(){

    int arr[19]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10};
    int res = 0;
    res = fun(arr,19);
    printf("%d\n",res);

}

7 规定输入的字符串中只包含字母和号。编写函数fun,其功能是:除了字符串前导和尾部的号外,将串中其它的*号全部删除。形参h已指向字符串中的第一个字母,形参p指向字符串中的最后一个字母。在编写函数时不得使用C语言提供的字符串函数。

#include 

void fun(char *a,char *h,char *p)
{
    int i=0;
    char *q=a;
    while(qwhile(qif(*q!='*') {
            a[i]=*q;
            i++;
        }
        q++;
    }

    while(*q)
    {
        a[i]=*q;i++;q++;
    }

    a[i]='\0';

    printf("%s\n",a);
}

void main(){

    char str[256]="****A*BC*DEF*G*******";
    fun(str,str+4,str+14);
}

8 编写函数fun,其功能是:计算并输出3-n之间所有素数的平方根之和
当输入100后 输出为sum=148.874270

#include 
#include 

double fun(int n)
{
    int m,k,i;
    double s=0.0;
    for(m=3;m<=n;m++)
    {
        k=sqrt(m);
        for(i=2;i<=k;i++)
            if(m%i==0)break;
        if(i>=k+1)
            s+=sqrt(m);
    }

    return s;
}

void main(){

    int n=100;
    printf("%f\n",fun(n));
}

9 请编写函数fun,该函数的功能是:计算并输出
S=1+(1+2^0.5)+(1+2^0.5+3^0.5)+…+(1+2^0.5+3^0.5+…n^0.5)
当输入20后,则输出结果为S=534.188884
答案一:

#include 
#include 

double fun(int n)
{
    int i;
    double s=0.0,s1=0.0;
    for(i=1;i<=n;i++)
    {
        s1=s1+pow(i,0.5);
        s=s+s1;
    }
    return s;
}
void main(){

    int n=20;
    printf("%f\n",fun(n));
}

答案二:

#include 
#include 

double fun(int n)
{
    double sum=1.0;
    double temp=1.0;
    for(int i=2;i<=n;i++)
    {
        temp=1.0;
        for(int j=2;j<=i;j++)
         temp+=pow(j,0.5);
        sum+=temp;
    }
    return sum;
}
void main(){

    int n=20;
    printf("%f\n",fun(n));
}

10 请编写函数fun(),它的功能是计算:s=(ln(1)+ln(2)+ln(3)+…+ln(m))0.5。在C语言中可调用log(n)函数求ln(n)。例如,若m的值为20,则fun()函数值为6.506583。

#include 
#include 

double fun(int m)
{
    int i;
    double s=0.0;
    for(i=1; i<=m; i++)
    s=s+ log(i); //计算s=ln(1)+ln(2)+ln(3)+…+in(m)
    s=sqrt(s); //对s求平方根
    return s; 
}

void main(){

    int n=20;
    printf("%f\n",fun(n));
}

你可能感兴趣的:(数据结构与算法笔面试)