C语言设计精髓第九章测试题

1重复数字检查(4分)

题目内容:

从键盘输入一个数,检查这个数中是否有重复出现的数字。如果这个数中有重复出现的数字,则显示“Repeated digit!”;否则显示“No repeated digit!”。

已知函数原型:

int CountRepeatNum(int count[], int n);

若有重复数字,则该函数返回重复出现的数字;否则返回-1.

程序运行结果示例1:

Input n:

28212↙

Repeated digit!

程序运行结果示例2:

Input n:

12345↙

No repeated digit!

输入提示:“Input n:\n”

输入格式: “%ld”

输出格式:

有重复数字,输出信息: “Repeated digit!\n”

没有重复数字,输出信息: “No repeated digit!\n”

#include

#define max 15
int main()
{
    int i,flag=0;
    long int n;
    int hash[max]={0};
    printf("Input n:\n");
    scanf("%ld",&n);

    while(n){
        hash[n%10]++;
        n/=10;
    }

    for(i=0;i<10;i++){
        if(hash[i]>1) flag=1;
    }

    if(flag)    printf("Repeated digit!\n");
    else printf( "No repeated digit!\n");

    return 0;
}

2教授的课(4分)

题目内容:

教授正在为一个有N个学生的班级讲授离散数学课。他对某些学生缺乏纪律性很不满意,于是决定:如果课程开始后上课的人数小于K,就取消这门课程。从键盘输入每个学生的到达时间,请编程确定该课程是否被取消。如果该门课程被取消,则输出“Yes”,否则输出“No”。假设教授在时刻0开始上课。如果一个学生的到达时间是非正整数,则表示该学生在上课前进入教室。如果一个学生的到达时间是正整数,则表示该学生在上课后进入教室。如果一个学生在时刻0进入教室,也被认为是在上课前进入教室。假设到达时间的绝对值不超过100,学生数N不超过1000。要求在输入学生的到达时间之前,先输入N和K。

已知函数原型:

//函数功能:根据数组a中记录的学生到达时间确定课程是否被取消,取消则返回1,否则返回0

int IsCancel(int a[], int n, int k);

程序运行结果示例1:

Input n,k:

4,3↙

-1 -3 4 2↙

YES

程序运行结果示例2:

Input n,k:

5,3↙

-1 -2 -3 0 4↙

NO

#include

#define max 1010

int IsCancel(int a[], int n, int k);
int main()
{
    int n,k,i;
    int a[max];
    printf("Input n,k:\n");
    scanf("%d,%d",&n,&k);
    for(i=0;i<n;i++){
        scanf("%d",&a[i]);
    }

    if(IsCancel(a,n,k)) printf("YES");
    else printf("NO");

    return 0;
}

int IsCancel(int a[], int n, int k)
{
    int i,flag=0;
    for(i=0;i<n;i++){
        if(a[i]<=0) k--;
    }
    if(k>0) flag=1;

    return flag;
}

3寻找鞍点(4分)

题目内容:

请编程找出一个M*N矩阵中的鞍点,即该位置上的元素是该行上的最大值,是该列上的最小值。如果矩阵中没有鞍点,则输出“No saddle point!”

已知函数原型:

void FindSaddlePoint(int a[][N], int m, int n);

在该函数中输出有无鞍点的信息。

程序运行结果示例1:

Input m,n:

3,3↙

Input matrix:

1 2 3↙

4 5 6↙

7 8 9↙

a[0][2] is 3

程序运行结果示例2:

Input m,n:

3,4↙

Input matrix:

3 4 7 5↙

0 1 8 2↙

9 3 2 6↙

No saddle point!

输入提示: “Input m,n:\n”

    “Input matrix:\n" 

输入格式:

输入矩阵大小: “%d,%d”

输入矩阵元素: “%d”

输出格式:

找到鞍点的输出格式:“a[%d][%d] is %d\n”

没找到鞍点的输出格式:“No saddle point!\n”

#include

#define max 1000
void FindSaddlePoint(int a[][max], int m, int n);
int main()
{
    int m,n,i,j;
    int a[max][max];
    printf("Input m,n:\n");
    scanf("%d,%d",&m,&n);
    printf("Input matrix:\n");
    for(i=0;i<m;i++)
        for(j=0;j<n;j++)
            scanf("%d",&a[i][j]);

    FindSaddlePoint(a,m,n);

    return 0;
}

void FindSaddlePoint(int a[][max], int m, int n)
{
    int i,j,tmp;
    int minn[max],maxm[max];
    for(i=0;i<m;i++){
        tmp=a[i][0];
        for(j=1;j<n;j++){
            if(tmp<a[i][j]) tmp=a[i][j];
        }
        maxm[i]=tmp;
    }
    for(j=0;j<n;j++){
        tmp=a[0][j];
        for(i=1;i<m;i++){
            if(tmp>a[i][j]) tmp=a[i][j];
        }
        minn[j]=tmp;
    }

    int flag=0;
    for(i=0;i<m;i++){
        for(j=0;j<n;j++){
            if(maxm[i]==minn[j]){
                flag=1;
                printf("a[%d][%d] is %d\n",i,j,maxm[i]);
            }
        }
    }
    if(!flag)   printf("No saddle point!\n");

}

4计算三位阶乘和数(4分)

题目内容:

试求出所有三位阶乘和数:m=a!+b!+c!(其中a为百位数字,b为十位数字,c为个位数字。约定0!=1,并输出所有的m)

输入格式: 无

输出格式:"%ld\n"

#include

int func(int );
int main()
{
    int tmp;
    long int m;

    for(m=100;m<1000;m++){
        tmp=func(m/100)+func(m%100/10)+func(m%10);
        if(m==tmp)  printf("%ld\n",m);
    }

    return 0;
}

int func(int n)
{
    if(n==0 || n==1)    return 1;
    return n*func(n-1);
}


你可能感兴趣的:(C语言设计精髓第九章测试题)