Q257.(10分)输入一行字符,用函数编程统计其中有多少单词。假设单词之间以空格分开。
**输入格式要求:提示信息:"Input a string:"
请写出至少5个字符串函数**输出格式要求:"Numbers of words = %d\n"
参考答案
#include <stdio.h>
int CountWords(char str[]);
int main()
{
    char  str[20];
    printf("Input a string:");
    gets(str);
    printf("Numbers of words = %d\n", CountWords(str));
    return 0;
}
int CountWords(char str[])
{
    int    i, num;
    num = (str[0] != ' ') ? 1 : 0;
    for (i = 1; str[i] != '\0'; i++)
    {
        if (str[i] != ' ' && str[i - 1] == ' ')
        {
            num++;
        }
    }
    return num;
}
Q1683.(10分)用二维数组作为函数参数,实现矩阵转置。按如下函数原型编程计算并输出m×n阶矩阵的转置矩阵。其中,m和n的值由用户从键盘输入。已知m和n的值都不超过10。
void Transpose(int a[][N], int at[][M], int m, int n);
void InputMatrix(int a[][N], int m, int n);
void PrintMatrix(int at[][M], int n, int m);
输入提示信息:"Input m, n:"
输入格式:"%d,%d"
输出提示信息和格式:"The transposed matrix is:\n
参考答案
#include <stdio.h>
#define M 10
#define N 10
void Transpose(int a[][N], int at[][M], int m, int n);
void InputMatrix(int a[][N], int m, int n);
void PrintMatrix(int at[][M], int n, int m);
int main()
{
    int s[M][N], st[N][M], m, n;
    printf("Input m, n:");
    scanf("%d,%d", &m, &n);
    InputMatrix(s, m, n);
    Transpose(s, st, m, n);
    printf("The transposed matrix is:\n");
    PrintMatrix(st, n,  m);
    return 0;
}
/* 函数功能:计算m*n矩阵a的转置矩阵at */
void Transpose(int a[][N], int at[][M], int m, int n)
{
    int i, j;
    for (i = 0; i < m; i++)
    {
        for (j = 0; j < n; j++)
        {
            at[j][i] = a[i][j];
        }
    }
}
/* 函数功能:输入m*n矩阵a的值 */
void InputMatrix(int a[][N], int m, int n)
{
    int i, j;
    printf("Input %d*%d matrix:\n", m, n);
    for (i = 0; i < m; i++)
    {
        for (j = 0; j < n; j++)
        {
            scanf("%d", &a[i][j]);
        }
    }
}
/* 函数功能:输出n*m矩阵at的值 */
void PrintMatrix(int at[][M], int n, int m)
{
    int i, j;
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
        {
            printf("%d\t", at[i][j]);
        }
        printf("\n");
    }
}
Q552.(10分)如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包括1,不包括B本身)之和等于A,则A和B称为亲密数。求10000以内的亲密数。
**输出格式要求:"(%4d,%4d)\n"
程序运行示例如下:
( 220, 284)
(1184,1210)
(2620,2924)
(5020,5564)
(6232,6368)
参考答案
#include <stdio.h>
int main()
{
    int a, b, i, n;
    for (a = 1; a < 10000; a++)
    {
        b = 0;
        for (i = 1; i <= a / 2; i++)
        {
            if (a % i == 0)
                b += i;
        }
        n = 0;
        for (i = 1; i <= b / 2; i++)
        {
            if (b % i == 0)
                n += i;
        }
        if (n == a && a < b)
            printf("(%4d,%4d)\n", a, b);
    }
    return 0;
}
Q381.(10分)*验证卡布列克运算。即:任意一个四位数,只要它们各个位上的数字是不全相同的,就有这样的规律:
(1)将组成该四位数的四个数字由大到小排列,形成由这四个数字构成的最大的四位数;
(2)将组成该四位数的四个数字由小到大排列,形成由这四个数字构成的最小的四位数(如果四个数字中含有0,则得到的数不足四位);
(3)求两个数的差,得到一个新的四位数(高位零保留)。
重复以上过程,最后得到的结果总是6174。这个数被称为卡布列克常数。请编写一个递归函
数,完成以上的卡布列克运算。
**输入格式要求:"%d" 提示信息:"Enter number:"
**输出格式要求:" [%d]:%d-%d=%d\n"
程序运行示例如下:
Enter number: 1234
[1]:4321-1234=3087
[2]:8730-378=8352
[3]:8532-2358=6174
参考答案
#include <stdio.h>
int count=0;
main()
{
    int n;
    printf("Enter number:");
    scanf("%d",&n);
    vr6174(n);
}
vr6174(int num)
{
    int each[4],max,min;
    if(num!=6174&&num)
    {
        parse_sort(num,each);
        max_min(each,&max,&min);
        num=max-min;
        printf(" [%d]:%d-%d=%d\n",++count,max,min,num);
        vr6174(num);
    }
}
parse_sort(int num,int *each)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。