2023.4.17-4.24周总结


一、学习总结

本周主要进行了递归函数的学习和简要训练、字符数组的相关知识。

递归函数:

  • 定义:函数直接或间接调用自己的函数

基本格式为:

......
if (基本条件)  // 基本条件
    return  递归公式的初值;
else          // 一般条件
    return  递归函数调用的返回值;

如:

unsigned long Fact(unsigned int n)
{
    if (n == 0 || n == 1)  // 基本条件
        return 1;
    else                  // 一般条件
        return n * Fact(n - 1);
}
  • 基本条件:控制递归调用结束
  • 一般条件:控制递归调用向基本条件转化

字符数组:

  • 定义: char 数组名[常量表达式]

一般有三种输入输出方式

  • 采用循环语句逐个输入、输出字符数组元素
	char data[6];  // 定义字符数组, 数组名为 “data”
	// 循环语句逐个输入字符数组
	for (int i = 0; i <= 5; i++)  
	{
		scanf("%c", &data[i]);
	} 
	// 循环语句逐个输出字符数组 
	for (int i = 0; i <= 5; i++)  
	{
		printf("%c", data[i]);
	}

  • 采用"%s"方法整体输入和输出数组
    相当于把字符数组当作字符串来处理(C语言中,没有字符串类型,因此用字符数组处理字符串)
char data[6];
// 采用 %s对字符数组整体输入与输出
scanf("%s", data);
printf("%s", data); 
  • 采用gets( )、puts( )语句整体输入和输出数组
char data[6]; 
// 采用 gets()、puts() 语句整体输出字符数组 
gets(data);
puts(data);

二、题目练习

1.打印九九口诀表

要求:
本题要求对任意给定的一位正整数N,输出从1 * 1到N * N的部分口诀表。

分析:
使用循环嵌套,大循环进行行的循环,小循环内是每一行的内容。

知识点:

  • 循环嵌套
  • 每一个小循环打印时用%-md的格式使结果左对齐(m为所占的字符数)
  • 打印时要注意变量的位置是否正确
  • 每一个大循环执行完毕时要换行

代码如下:

#include <stdio.h>
int main ()
{
    int n;
    scanf("%d", &n);
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= i; j++) {
            printf("%d*%d=%-4d", j, i, j*i);
        }
        printf("\n");
    }
}

2.两个数的简单计算器

要求:
对2个整数进行加、减、乘、除或求余运算

输入样例1:
-2 / 2
输出样例1:
-1
输入样例2:
3 …… 6
输出样例2:
ERROR

分析:
利用多分支的选择结构实现

知识点:

  • 注意取模运算及除法运算时要考虑分母为0的情况
  • 字符串的判断要使用单引号 ‘ ’ 而不是双引号 “ ”

代码如下:

#include <stdio.h>
int main()
{
    int a, b;
    char c;
    scanf("%d %c %d", &a, &c, &b);
    if (c == '+') {
        printf("%d", a + b);
    }
    else if (c == '-') {
        printf("%d", a - b);
    }
    else if (c == '*') {
        printf("%d", a * b);
    }
    else if (c == '/') {
        if (b != 0) {
            printf("%d", a / b);
    }
        else {
            printf("ERROR");
        }
    }
    else if (c == '%') {
         if (b != 0) {
            printf("%d", a / b);
    }
        else {
            printf("ERROR");
        }
    }
    else {
        printf("ERROR");
    }
}

3.求整数段和

要求:
给定两个整数A和B,输出从A到B的所有整数以及这些数的和。
输出格式:
首先顺序输出从A到B的所有整数,每5个数字占一行。
最后在一行中按Sum = X的格式输出全部数字的和X。

分析:
本题难点为每五个数字换行,此处可设置一个变量来计数,每输出一个数字该变量就加1,当该变量对5取模为0十即换行

知识点:

  • 循环
  • 注意该用于计数的变量的初始值(0 or 1?)以及位置(执行完哪一步后应当加1?)

代码如下:

#include <stdio.h>
int main()
{
    int a, b, sum = 0;
    scanf("%d %d", &a, &b);
    int j = 0;
    for (int i = a; i <= b; i++) {
        printf("%-4d ", i);
        j++;
        if (j % 5 == 0) {
            printf("\n");
        }
        sum += i;
    }
    printf("\n");
    printf("%d", sum);
}

4.个位数统计

要求:
输入一个N(100000>N>10000),统计每个数出现的次数
用数组

输入样例:
100311
输出样例:
0:2
1:3
3:1

分析:
为方便处理,直接将该数以字符串的形式输入,因c语言中无字符串,因此以字符数组的形式输入,相应地,与字符数组中进行对比的数字0-9也应采用字符的形式

知识点:

  • 字符数组的输入与输出
  • c语言中字符的存储
  • strlen( )函数的使用
  • while循环
  • for循环

代码如下:

#include <stdio.h>
#include <string.h>  // 使用strlen函数应添加头文件
int main()
{
int n;
char data[10], b = '0'; // 输入字符数组
scanf("%s", data); // 将字符数组当作字符串来处理,以整体法%s来进行输入
int i = strlen(data); // strlen 函数求该字符串长度
while(b <= '9') {
    n = 0;   // n = 0必须定义在while里面,
             // 才能保证每一轮的数字与数组中的每一个字符比较后都重新开始
    for (int j = 0; j < i; j++) {
        if (data[j] == b) {
            n++;
        }
    }
    if (n != 0) {
        printf("%c:%d\n", b, n);
    }
    b++;
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值