计算机二级程序设计题(二)

勤能补拙,多学多练。

请注意,本文编写于 128 天前,最后修改于 128 天前,其中某些信息可能已经过时。

继上次程序设计题后续。
第11题:在此程序中,函数fun的功能是:将s所指字符串中下标为偶数同时ASCII值为奇数的字符删除,s所指串中剩余的字符形成的新串放在所指的数组中。例如,若s所指字符串中的内容为"ABCDEFG12345",其中字符C的A SCII码值为奇数,在数组中的下标为偶数,因此必须删除;而字符1的ASCII码值为奇数,在数组中的下标为奇数,因此不应当删除,其他依此类推。最后所指的数组中的内容应是"BDF12345"。

#include<stdio.h>
void fun(char *s,char t[])
{
    int i;
    for(i=0;*(s+i)!='\0';i++)
    {
        if(*(s+i)%2!=1||i%2!=0)
        {
            *(t++)=*(s+i);
        }
    }
    *(t++)=0;
}
void main()
{
    char s[100],t[100];
    gets(s);
    printf("\n\n");
    fun(s,t);
    puts(t);
}

第12题:在此程序中,编写一个函数fun, 它的功能是:将ss所指字符串中所有下标为奇数位置的字母转换为大写(若该位置上不是字母,则不转换)。例如,若输入"abc4Efg", 则应输出"aBc4EFg".

#include<stdio.h>
void fun(char *ss)
{
    int i;
    for(i=0;*(ss+i)!='\0';i++)
    {
        if(*(ss+i)<='z'&&*(ss+i)>='a'&&i%2==1)
            *(ss+i)-=32;
    }
}
void main()
{
    char tt[81];
    gets(tt);
    printf("\n\n");
    fun(tt);
    puts(tt);
}

第13题:在此程序中,编写函数fun,其功能是:将a、b两个两位正整数合并成一个新的整数放在c中。合并的方式是:将a中的十位和个位数依次放在变量c的千位和十位上,b中的十位和个位数依次放在变量c的个位和百位上。例如,当a=45,b=12,调用该函数c=4251。

#include<stdio.h>
void fun(int a,int b,long *c)
{
    *c=(a%10)*1000+(a/10%10)*10+(b%10)*100+(b/10%10);
}
void main()
{
    int a,b;
    long c;
    scanf("%d %d",&a,&b);
    fun(a,b,&c);
    printf("%ld",c);
}

第14题:在此程序中,m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平均分的人数作为函数值返回,将低于平
均分的分数放在below所指的数组中。例如,当score数组中的数据为10、20、 30、 40、 50、 60、 70、80、 90时,函数返回的人数应该是4, below中的数据应为10、20、 30、 40。

#include<stdio.h>
int fun(int score[],int m,int below[])
{
    int i,n=0;
    float x;
    for(i=0,x=0;i<m;i++)
    {
        x=score[i]/m+x;
    }
    for(i=0;i<m;i++)
    {
        if(score[i]<x)
        {
            n++;
            *(below++)=score[i];
        }
    }
    return n;
}
void main()
{
    int i,n,below[9];
    int score[9]={10,20,30,40,50,60,70,80,90};
    n=fun(score,9,below);
    printf("低于平均成绩人数为%d\n",n);
    for(i=0;i<n;i++)
        printf("%d ",below[i]);
}

第15题:在此程序中,编写函数void fun (int x, int pp[], int *n),它的功能是:求出能整除x且不是偶数的各整数,并按从小到大的顺序放在pp所指的数组中,这些除数的个数通过形参n返回。例如,若x中的值为30,则有4个数符合要求,它们是1、3、5. 15。

#include<stdio.h>
void fun(int x,int pp[],int *n)
{
    int i;
    for(i=1,*n=0;i<x;i++)
        if(x%i==0&&i%2!=0)
            pp[(*n)++]=i;
}
void main()
{
    int x,aa[1000],n,i;
    scanf("%d",&x);
    fun(x,aa,&n);
    for(i=0;i<n;i++)
        printf("%d ",aa[i]);
}

第16题:在此程序中,编写一个函数void fun(int m,int k,int xx[]),该函数的功能是:将大于整数m且紧靠m的k个素数存入所指的数组。例如,若输入17,5,则应输出19、23、29、31、37。

#include<stdio.h>
void fun(int m,int k,int xx[])
{
    int i;
    while(k)
    {
        m++;
        for(i=2;i<m;i++)
        {
            if(!(m%i))
                break;
        }
        if(i>=m)
        {
            *(xx++)=i;
            k--;
        }
    }
}
void main()
{
    int m,n,zz[100];
    scanf("%d %d",&m,&n);
    fun(m,n,zz);
    for(m=0;m<n;m++)
    printf("%d ",zz[m]);
}

第17题: 在此程序中,编写一个函数int fun(int s, int t, int k),用来求出数组的最大元素在数组中的下标并存放在k所指向的存储单元中。例如,输入如下整数:876 675 896101 301 401 980 431 451 777则输出结果为6,980。

#include<stdio.h>
int fun(int *s,int t,int *k)
{
    for(*k=t;t>=0;t--)
    {
        if(s[*k]<s[t])
            *k=t;
    }
    return s[*k];
}
void main()
{
    int a[10]={876,675,896,101,301,401,980,431,451,777},k;
    fun(a,10,&k);
    printf("%d,%d",k,a[k]);
}

第18题:在此程序中,编写函数fun,期能是:根据以下公式求P的值,结果由函数值带回。m与n为两个正整数且要求m>n。
公式:p=m!/n!(m-n)!
例如: m=12, n= 8时,运行结果为495.000000。

#include<stdio.h>
float fun(int m,int n)
{
    float p,p1=1.0,p2=1.0,p3=1.0;
    int i;
    for(i=1;i<=m;i++)
        p1=i*p1;
    for(i=1;i<=n;i++)
        p2=i*p2;
    for(i=1;i<=m-n;i++)
        p3=i*p3;
    return p1/p2/p3;
}
void main()
{
    printf("p=%f\n",fun(12,8));
}

第19题:在此程序中,编写函数fun,它的功能是:求小于形参n同时能被3与7整除的所有自然数之和的平方根,并作为函数值返回。
例如,若n为1000时,程序输出应为: s = 153.909064。

#include<stdio.h>
#include<math.h>
double fun(int n)
{
    int i;
    double x=0;
    for(i=0;i<1000;i++)
        if(i%3==0&&i%7==0)
        x+=i;
return sqrt(x);
}
void main()
{
    printf("s=%f",fun(1000));
}

第20题:在此程序中,编写函数fun,功能是:计算并输出下列多项式的值。
S=1/(1*2)+1/(2*3)+1/(3*4)+......+1/(n*(n+1))
例如,当n= 10时,函数值为0.909091。

#include<stdio.h>
double fun(int n)
{
    int i;
    double s=0;
    for(i=1;i<=n;i++)
        s=s+1.0/i/(i+1);
    //或者用数学方式s=1-1.0/(n+1);
    return s;
}
void main()
{
    printf("s=%f",fun(10));
}

通过这么多次进行的模拟测验和所做的题目来看,很多题的思路是一样的,所以需要以后找出不同的,具有代表性的题目。

添加新评论

已有 4 条评论

现在看起来都有一定难度了。

半叶子 半叶子 回复 @心灵博客
0 0

之前碰到二维数组和指针把我难哭了,看了一天才总结出来。

勤能补拙。我喜欢

撸代码就得撸多了才懂