SCAUoj教材习题第七章

文章详细介绍了C++编程中的几个基础题目,包括计算整数的数字之和、提取字符串中的元音字母、统计字符数量、选择排序算法、幂运算、矩阵行列交换以及学生信息的平均分、课程平均分和最高分计算。

教材习题怎么这么多道😵


一、第七章

18065 所有数字之和

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

#include "stdio.h"

int sum(int n)
{
    _______________________
}

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

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

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

输入样例
123

输出样例
6

代码如下:

#include <stdio.h>
#include <stdlib.h>
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 <stdio.h>
#include <string.h>
#include <math.h>

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 <stdio.h>
#include <string.h>
#include <math.h>
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 <stdio.h>

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 <stdio.h>
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 <stdio.h>

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 <stdio.h>
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 <stdio.h>

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 <stdio.h>
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 <stdio.h>

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 <stdio.h>
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;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值