08 重忆C之 字符串与数组

题目:统计字符:

在 30 个字符组成的一行输入中包括了大写字母、小写字母、数字和空格(值包含空格,不包含\t一类的字符)。我们通过循环将这 30 个字符读入了循环,并将读入的 30 个字符传入了无需返回值的四个函数。
练习对字符的操作和使用
练习使用 if,结合查询的 ASCII 码学会判断字符类型
练习自定义函数的实现,强化对自定义函数调用的理解
从给出的代码中学习数组做函数参数的传参方式
样例输入

1728SHr29 kselEs 28Jr8S919dKrz

样例输出

6
10
12
2

代码:

#include 
void upper_case_count(char arr[31]) {
    // 请在下面实现统计并输出大写字母个数的功能
    int i = 0;
    int j = 0;
    for (i = 0; i<= 30; i++){
        if ((arr[i]>='A')&&(arr[i]<='Z')){
            j++;
        }
    } 
    if (i==31){
        printf("%d\n",j);
    }
}
void lower_case_count(char arr[31]) {
    // 请在下面实现统计并输出小写字母个数的功能
    int i = 0;
    int j = 0;
    for (i = 0; i<= 30; i++){
        if ((arr[i]>='a')&&(arr[i]<='z')){
            j++;
        }
    } 
    if (i==31){
        printf("%d\n",j);
    }
}
void digit_count(char arr[31]) {
    // 请在下面实现统计并输出数字个数的功能
        int i = 0;
    int j = 0;
    for (i = 0; i<= 30; i++){
        if ((arr[i]>='0')&&(arr[i]<='9')){
            j++;
        }
    } 
    if (i==31){
        printf("%d\n",j);
    }
}
void space_count(char arr[31]) {
    // 请在下面实现统计并输出空格个数的功能
    int i = 0;
    int j = 0;
    for (i = 0; i<= 30; i++){
        if (arr[i]==32){
            j++;
        }
    } 
    if (i==31){
        printf("%d\n",j);
    }
}

int main() {
    char string[31];
    int i;
    for (i = 0;i < 31; i++){
        scanf("%c",&string[i]);
    }
    
    upper_case_count(string);
    lower_case_count(string);
    digit_count(string);
    space_count(string);
    return 0;
    
}

注意这里:
if (arr[i]==32){如果写成if (arr[i]==' '){也可以的,要写成双引号可是不行的哦。

辗转相除法实现求最大公约数和最小公倍数

练习函数定义
练习函数嵌套调用
练习函数递归调用
样例输入1

12 33

样例输出1

3
132

样例输入2

131 7

样例输出2

1
917

代码

#include 
int gcd(int n, int m);
int lcm(int n, int m);
int main() {
    int n, m;
    scanf("%d%d", &n, &m);  
    printf("%d\n", gcd(n, m));
    printf("%d\n", lcm(n, m));
    return 0;
}
int gcd(int n, int m) {
    int t;
    if (m <= n) {
    // 请在这里继续完成 gcd 函数
        t = n - m;
        n = m;
        m = t ;
        if (t == 0){
            return n;
        }else{
            return gcd(m, n);
        }
    } else{
        t = m - n;     
        m = n;
        n = t;
        if (t == 0){
            return m;
        }else{
            return gcd(m, n);
        }
    }
}
int lcm(int n, int m) {
// 请在这里继续完成 lcm 函数
    return (n*m)/gcd(n,m);
}

迭代的关键就在于每次函数如果需要进一步进行迭代,那么其返回值要再次调用函数。

题目

给定一个 m行、n 列的矩阵 A和一个 n行、m列的矩阵B。你需要用矩阵 A与矩阵 B相乘,并且将 m行 m 列的乘积结果输出。

输入格式
测评机会反复运行你写的程序。每次程序运行时,首先在第一行输入 2 个整数,分别对应题目描述中的m 和 n(1≤m,n≤10),两个整数之间用一个空格分隔。接下来 m行,每行包含 n个整数,每两个整数之间用一个空格分隔。对应 m行 n列的矩阵 A。
再接下来n 行,每行包含 m个整数,每两个整数之间用一个空格分隔。对应 n行 m列的矩阵 B。
注:矩阵中的整数均大于等于 -100,小于等于 100

样例输入1

2 2
2 3
3 1
3 2
4 3

样例输出1

18 13
13 9

样例输入2

2 3
1 2 3
3 4 6
1 2
3 4
5 6

样例输出2

22 28
45 58

样例输入3

3 2
1 2
3 4
5 6
1 2 3
3 4 6

样例输出3

7 10 15
15 22 33
23 34 51

代码如下:

#include 

int main() {
    int matrix_a[10][10];
    int matrix_b[10][10];
    int matrix_c[10][10];
    int m;
    int n;
    int i,j,k;
    scanf("%d%d",&m,&n);
    for (i = 0 ; i < m ; i++){
        for ( j = 0 ; j < n ; j++){
            scanf("%d",&matrix_a[i][j]);
        }
    }
    for (i = 0 ; i < n ; i++){
        for ( j = 0 ; j < m ; j++){
            scanf("%d",&matrix_b[i][j]);
        }
    }
    for (i = 0 ; i < m ; i++){
        for ( j = 0 ; j < m ; j++){
            matrix_c[i][j] = 0;
            for (k = 0 ; k < n ; k++){
                    matrix_c[i][j] = matrix_a[i][k]*matrix_b[k][j]+matrix_c[i][j];
            }
            if (j==(m-1)){
                printf("%d\n",matrix_c[i][j]);
            }else{
            printf("%d ",matrix_c[i][j]);
            }        
        }
    }
    return 0;
}

你可能感兴趣的:(08 重忆C之 字符串与数组)