SCAU程序设计在线实训平台_实验_高级语言程序设计_教材习题_第七章

写在前面:

本系列博客所有代码均为个人学习记录。并非标准例程,也不是最优解。遇到问题多点思考、少点借鉴,才能向前冲冲冲!

1、所有数字之和(题目编号:18065):

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

#include "stdio.h"

int sum(int n)
{
    _______________________
}

main()
{
    int n;
    scanf("%d", &n);
    printf("%d", sum(n));
}
输入格式:

由键盘输入一个整数

输出格式:

输出该数各位数字之和

输入样例:

123

输出样例:

6

提示:

1+2+3=6

代码实现(参考):
#include "stdio.h"
int sum(int n){
    int sum=0;
    while(n>0){
        all+=n%10;
        n/=10;
    }
    return all;
}
main()
{
    int n;
    scanf("%d", &n);
    printf("%d", sum(n));
}

系统标程(参考):

标程

$block1$
    int ret=0;
    while(n>0)
    {
        ret+=n%10;
        n/=10;
    }
    return ret;
$end1$

2、元音字母(题目编号:18066):

描述:

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

#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

代码实现(参考):
#include "stdio.h"

void yuan(char *s,char *s2)
{
    char yuanyin[11]="aeiouAEIOU";
    int s2loc=0;
    for(int i=0; i<81; i++){
        s2[i]='\0';
        if(s[i]=='\0')break;
        for(int j=0; j<10; j++){

            if(s[i] == yuanyin[j]){

                s2[s2loc]=s[i];
                s2loc++;
            }
        }
    }
}

main()
{
    char str[81], str2[81];
    gets(str);
    yuan(str,str2);
    printf("%s", str2);
}
系统标程:
$block1$
    while(*s!='\0')
    {
        if(*s=='a' ||*s=='o' ||*s=='e' ||*s=='i' ||*s=='u' ||
           *s=='A' ||*s=='O' ||*s=='E' ||*s=='I' ||*s=='U')
           {*s2=*s; s2++;}
        s++;
    }
    *s2='\0';
$end1$

3、字符统计(题目编号:18067):

描述:

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

#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>

int nL=0, nN=0;

int statistics(char *s)
{
    int spaceNum=0;
    for(int i=0; s[i]!='\0'; i++){
        if(s[i]>='A'&&s[i]<='z')nL++;
        if('0'<=s[i]&&s[i]<='9')nN++;
        if(s[i]==' ')spaceNum++;
    }
    return spaceNum;
}

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

    printf("%d %d %d\n", nL, nN, nS);
    return 0;
}
系统标程:
$block1$
    int ret=0;
    while(*s!='\0')
    {
        if(*s>='a'&&*s<='z'||
           *s>='A'&&*s<='Z')
           nL++;
        else if (*s>='0'&&*s<='9')
            nN++;
        else if (*s==' ')
            ret++;
        s++;
    }
    return ret;
$end1$

4、选择排序(题目编号:18068):

描述:

输入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=k+1; j<n; j++)
            if(a[k]>a[j]) k=j;
        tmp=a[k];   //关键在此语句是在for外
        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;
}

标程

5、x的n次方(题目编号:18069):

描述:

输入正整数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(n==1) return x;
    else return x*F(x,n-1);
}

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

6、矩阵行交换或列交换(题目编号:18070):

描述:

输入一个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 tmp[4];
    for(int k=0; k<4; k++){
        tmp[k]=a[k][j];
    }
    for(int k=0; k<4; k++){
        a[k][j]=a[k][i];
    }
    for(int k=0; k<4; k++){
        a[k][i]=tmp[k];
    }
}

void row(int a[][4], int i, int j)
{
    int tmp[4];
    for(int k=0; k<4; k++){
        tmp[k]=a[j][k];
    }
    for(int k=0; k<4; k++){
        a[j][k]=a[i][k];
    }
    for(int k=0; k<4; k++){
        a[i][k]=tmp[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;
}
系统标程:
$block1$
    int k;
    for(k=0; k<4; k++)
        swap(&a[k][i], &a[k][j]);
$end1$
$block2$
    int k;
    for(k=0; k<4; k++)
        swap(&a[i][k], &a[j][k]);
$end2$

代码记得读全…

7、学生信息统计(题目编号:18071):

描述:

输入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)
{

    for(int i=0; i<10; i++){
        double sum=0;
        for(int j=0; j<5; j++){
            sum+=a[i][j];
        }
        printf("%.2lf ",sum/5);
    }
    printf("\n");
}

void average2(double a[][5], int n)
{
    for(int i=0; i<5; i++){
        double sum=0;
        for(int j=0; j<10; j++){
            sum+=a[j][i];
        }
        printf("%.2lf ",sum/10);
    }
    printf("\n");
}

void top(double a[][5], int n)
{
    for(int i=0; i<5; i++){
        double max=0;
        for(int j=0; j<10; j++){
            if(a[j][i]>max)max=a[j][i];
        }
        printf("%.2lf ",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;
}

  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值