SCAUoj教材习题第七章

教材习题怎么这么多道

文章目录

  • 一、第七章
    • 18065 所有数字之和
    • 18066 元音字母
    • 18067 字符统计
    • 18068 选择排序
    • 18069 x的n次方
    • 18070 矩阵行交换或列交换
    • 18071 学生信息统计


一、第七章

18065 所有数字之和

Description
编写一个函数,计算一个整数的所有数字之和

#include "stdio.h"

int sum(int n)
{
    _______________________
}

main()
{
    int n;
    scanf("%d", &n);
    printf("%d", sum(n));
}

输入格式
由键盘输入一个整数

输出格式
输出该数各位数字之和

输入样例
123

输出样例
6

代码如下:

#include 
#include 
int sum(int n)
{
    int num = 0,a=0;
    do
    {
        a=n%10;
        n=n/10;
        num = num+a;
    }while(n%10!=0);
    return num;
}
main()
{
    int n;
    scanf("%d", &n);
    printf("%d", sum(n));
}

18066 元音字母

Description
编写一个函数,挑选一个字符串中的所有元音字母构成并返回一个新的字符串

#include "stdio.h"

void yuan(char *s,char *s2)
{
_______________________
}

main()
{
    char str[81], str2[81];
    gets(str);
    yuan(str,str2);
    printf("%s", str2);
}

输入格式
由键盘输入一行字符,以’\n’结束

输出格式
输出新构成的字符串

输入样例
I am good

输出样例
Iaoo

提示
元音字母有a、e、i、o、u,这5个元音字母,大写或小写

代码如下:

#include "stdio.h"
void yuan(char *s,char *s2)
{
     while(*s!='\0')
     {
         if(*s=='a'||*s=='e'||*s=='i'||*s=='o'||*s=='u'
         ||*s=='A'||*s=='E'||*s=='I'||*s=='O'||*s=='U')
         {
            *s2 = *s;
            s2++;
         }
         s++;
     }
     *s2='\0';//字符串的末尾一定要有斜杠零
}
main()
{
    char str[81], str2[81];
    gets(str);
    yuan(str,str2);
    printf("%s", str2);
}

18067 字符统计

Description
编写一个函数,统计一个字符串中字母、数字和空格的个数。使用全局变量存放字母和数字个数,函数返回值是空格个数

#include 
#include 
#include 

int nL=0, nN=0;

int statistics(char *s)
{
    _______________________
}

int main()
{
    char s[81];
    int nS;
    gets(s);
    nS = statistics(s);

    printf("%d %d %d\n", nL, nN, nS);
    return 0;
}

输入格式
输入一行字符,以’\n’符结束

输出格式
统计结果

输入样例
Ab 45

输出样例
2 2 1

代码如下:

#include 
#include 
#include 
int nL=0, nN=0;
int statistics(char *s)
{
    int nS = 0;
    while(*s!='\0')
    {
        if(*s==' ')
        {
            nS++;
        }
        else if(*s>='0'&&*s<='9')
        {
            nN++;
        }
        else if(*s>='a'&&*s<='z'||*s>='A'&&*s<='Z')
        {
            nL++;
        }
        s++;//记得++
    }
    return nS;
}
int main()
{
    char s[81];
    int nS;
    gets(s);
    nS = statistics(s);
    printf("%d %d %d\n", nL, nN, nS);
    return 0;
}

18068 选择排序

Description
输入10个整数,编写一个实现对数组进行选择排序的函数

#include 

int sort(int a[], int n)
{
    int i,j,k,tmp;
    for(i=0;i<n-1; i++)
    {
        k=i;
        for(_______________________)
            if(_______________________) k=j;
        tmp=a[k];a[k]=a[i];a[i]=tmp;
    }
}

int main()
{
    int a[10];
    int i;
    for(i=0; i<10; i++) scanf("%d", &a[i]);
    sort(a,10);
    for(i=0; i<10; i++) printf("%d\n", a[i]);
    return 0;
}

输入格式
10个整数,以空格分隔

输出格式
排序后的10个整数,一行一个数字

输入样例
3 2 1 6 5 4 9 8 7 0

输出样例
0
1
2
3
4
5
6
7
8
9

代码如下:

#include 
int sort(int a[], int n)
{
    int i,j,k,tmp;
    for(i=0;i<n-1; i++)
    {
        k=i;
        for(j=i+1;j<n;j++)
            if(a[j]<a[k]) k=j;//可以把最小值赋给a[k]
        tmp=a[k];a[k]=a[i];a[i]=tmp;//小的放在左边
    }
}
int main()
{
    int a[10];
    int i;
    for(i=0; i<10; i++) scanf("%d", &a[i]);
    sort(a,10);
    for(i=0; i<10; i++) printf("%d\n", a[i]);
    return 0;
}

18069 x的n次方

Description
输入正整数x和n,编写递归函数求x的n次方。

#include 

int F(int x, int n)
{
    if(_______________________) return _______________________;
    else return _______________________;
}

int main()
{
    int x, n;
    scanf("%d%d", &x, &n);
    printf("%d", F(x, n));
    return 0;
}

输入格式
两个正整数,x和n

输出格式
x的n次方,假定结果不会超过10的次方。

输入样例
5 2

输出样例
25

代码如下:

#include 
int F(int x,int n)
{
    if(x==1||n==1)
        return x;
    else
        return F(x,n-1)*x;
}
int main()
{
    int x, n;
    scanf("%d%d",&x,&n);
    printf("%d",F(x,n));
    return 0;
}

18070 矩阵行交换或列交换

Description
输入一个4*4矩阵,编写两个函数分别实现对二维数组元素的行与行进行交换,以及列与列进行交换

#include 

void swap(int *a, int *b)
{
    int temp;
    temp=*a;*a=*b;*b=temp;
}

void col(int a[][4], int i, int j)
{
    _______________________
}

void row(int a[][4], int i, int j)
{
    _______________________
}

int main()
{
    int a[4][4];
    int i,j;
    for(i=0; i<4; i++)
        for(j=0; j<4; j++)
            scanf("%d", &a[i][j]);
    col(a,0,2);
    row(a,0,2);
    col(a,1,3);
    row(a,1,3);
    col(a,0,3);
    row(a,0,3);
    for(i=0; i<4; i++)
    {
        for(j=0; j<4; j++)
            printf("%d ", a[i][j]);
        printf("\n");
    }
    return 0;
}

输入格式
输入一个4*4矩阵

输出格式
输出经过变换的矩阵

输入样例
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

输出样例
6 8 5 7
14 16 13 15
2 4 1 3
10 12 9 11

代码如下:

#include 
void swap(int *a, int *b)
{
    int temp;
    temp=*a;*a=*b;*b=temp;
}
void col(int a[][4], int i, int j)
{
    int k;
    for(k=0; k<4; k++)
        swap(&a[k][i], &a[k][j]);
}
void row(int a[][4], int i, int j)
{
     int k;
     for(k=0; k<4; k++)
        swap(&a[i][k], &a[j][k]);
}
int main()
{
    int a[4][4];
    int i,j;
    for(i=0; i<4; i++)
        for(j=0; j<4; j++)
            scanf("%d", &a[i][j]);
    col(a,0,2);
    row(a,0,2);
    col(a,1,3);
    row(a,1,3);
    col(a,0,3);
    row(a,0,3);
    for(i=0; i<4; i++)
    {
        for(j=0; j<4; j++)
            printf("%d ", a[i][j]);
        printf("\n");
    }
    return 0;
}

18071 学生信息统计

Description
输入10个学生5门课的考试成绩,分别用函数实现以下功能:
(1) 计算一个学生的平均分。
(2) 计算每门课程的平均分。
(3) 找出每门课程的最高分。
显示结果,显示两位小数。

#include 

void average(double a[][5], int n)
{
_______________________
}

void average2(double a[][5], int n)
{
_______________________
}

void top(double a[][5], int n)
{
_______________________
}

int main()
{
    double a[10][5];
    int i, j;
    for(i=0; i<10; i++)
        for(j=0; j<5; j++)
            scanf("%lf", &a[i][j]);
    average(a,10);
    average2(a,10);
    top(a,10);
    return 0;
}

输入格式
输入10个学生5门课成绩

输出格式
输出每个学生的平均分,以空格分隔
输出每门课的平均分,以空格分隔
输出每门课的最高分,以空格分隔

输入样例
79 61 57 70 77
67 73 83 72 70
82 59 85 84 80
80 53 67 72 79
80 59 72 92 84
88 72 79 79 80
76 99 82 73 97
67 96 81 69 63
58 80 98 93 84
66 61 64 57 64

输出样例
68.80 73.00 78.00 70.20 77.40 79.60 85.40 75.20 82.60 62.40
74.30 71.30 76.80 76.10 77.80
88.00 99.00 98.00 93.00 97.00

代码如下:

#include 
void average(double a[][5], int n) //每个学生平均分
{
     int j = 0,i = 0;
     for(i=0;i<10;i++)
     {
         double m = 0.0;//m的值是需要每次更新的
         for(j=0;j<5;j++)
         {
             m = a[i][j] + m;
         }
         m = m / 5.0;
         printf("%.2f ",m);
     }
     printf("\n");
}
void average2(double a[][5], int n) //每门课程的平均分
{
     int j = 0,i = 0;
     for(i=0;i<5;i++)
     {
         double m = 0.0;
         for(j=0;j<10;j++)
         {
             m = a[j][i] + m;
         }
         m = m / 10.0;
         printf("%.2f ",m);
     }
     printf("\n");
}
void top(double a[][5], int n) //每门课程的最高分
{
     int j = 0,i = 0;
     double max = 0;
     for(i=0;i<5;i++)
     {
         max = a[j][i];
         for(j=0;j<10;j++)
         {
             if(a[j][i]>max)
             {
                 max = a[j][i];
             }
         }
         printf("%.2f ",max);
     }
     printf("\n");
}
int main()
{
    double a[10][5];
    int i, j;
    for(i=0; i<10; i++)
        for(j=0; j<5; j++)
            scanf("%lf", &a[i][j]);
    average(a,10);
    average2(a,10);
    top(a,10);
    return 0;
}

你可能感兴趣的:(SCAU_oj_c语言,算法,c语言)