一、学习总结
本周主要进行了递归函数的学习和简要训练、字符数组的相关知识。
递归函数:
- 定义:函数直接或间接调用自己的函数
基本格式为:
......
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++;
}
}