目录
1、数9的个数
2、分数求和
3、求最大值
4、乘法口诀表
4.1、题目内容:在屏幕上输出9*9乘法口诀表
4.2、题目内容:实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定如:输入9,输出9*9口诀表,输出12,输出12*12的乖法口诀表。
5、几个实参
6、字符串逆序(递归实现)
6.1函数做题
6.2递归做题
7、计算一个数的每位之和(递归实现)
8、递归实现n的k次方
1、数9的个数
题目内容:编写程序数一下1到100的所有整数中出现多少个数字9
#include<stdio.h>
int main()
{//90 91 92 93 94 95 96 97 98 99 9 19 29 39 49 59 69 79 89 99
int count = 0;
for (int i = 0; i < 100; i++) {
if (i / 10 == 9) {
count++;
}
if (i % 10 == 9) {
count++;
}
}
printf("%d", count);
return 0;
}
2、分数求和
题目内容:计算1/1-1/2+1/3-1/4+1/5...... + 1/99 - 1/100的值,打印出结果
#include<stdio.h>
int main()
{//第一种解法
double sum = 0.0;//设置为double 这样下面好操作
for (int i = 1; i <= 100; i++) {
if (i % 2 == 0) {
sum -= 1.0 / i;
}
else
{
sum += 1.0 / i;
}
}
printf("%lf\n", sum);
return 0;
}
#include<stdio.h>
int main()
{//第二种解法
double sum = 0.0;//设置为double 这样下
int flag = 1;
for (int i = 1; i <= 100; i++) {
sum += flag * 1.0 / i;
flag = -flag;
}
printf("%lf\n", sum);
return 0;
}
3、求最大值
题目内容:求10个整数中最大值长
#include<stdio.h>
int main()
{//这种方法只适用于全是正整数来求最大值,如果出现负数就不对
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int max = 0;
for (int i = 0; i < 10; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
printf("%d", max);
return 0;
}
所以应该是在已知的数中选择一个数,然后进行比较,即让max等于数组中的某个值!
#include<stdio.h>
int main()
{
int arr[10] = { -1,2,3,-4,5,6,7,8,9,-10 };
int max = arr[0];
for (int i = 0; i < 10; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
printf("%d", max);
return 0;
}
4、乘法口诀表
4.1、题目内容:在屏幕上输出9*9乘法口诀表
#include<stdio.h>
int main()
{
for (int i = 1; i <= 9; i++) {//行数
for (int j = 1; j <= i; j++) {//列数
printf("%d*%d=%2d ", i, j, i * j);//%2d有空格填充
}
printf("\n");
}
return 0;
}
4.2、题目内容:实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定如:输入9,输出9*9口诀表,输出12,输出12*12的乖法口诀表。
#include<stdio.h>
int printf_table(int n) {
int i = 0;
int j = 0;
for (i = 1; i <= n; i++) {
for (j = 1; j <= i; j++) {
printf("%d*%d=%-2d ", i, j, i * j);
}
printf("\n");
}
}
int main()
{
int n;
scanf("%d", &n);
printf_table(n);
return 0;
}
5、几个实参
exec( (v1, v2), (v3, v4), v5,v6 );
(v1, v2), (v3, v4),其实就是逗号表达式,最后的结果就是最右边的结果。所以有4个实参
6、字符串逆序(递归实现)
题目内容:编写一个函数reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列,不是逆序打印。
要求:不能使用C函数库中的字符串操作函数。
比如:char arr[] = "abcdef” ;逆序之后数组的内容变成: fedcba
6.1函数做题
#include<stdio.h>
//#include<string.h>//题目不让引用函数的做法
int my_strlen(char* s) {
int count = 0;
while(*s != '\0') {
count++;
s++;
}
return count;
}
void reverse_string(char* str) {
int left = 0;
int right = my_strlen(str) - 1; //题目不让引用函数的做法,int right = strlen(str) - 1;
while (left < right) {
char temp = str[left];//等价于char temp = *(str+left),因为数组传参实际上传的就是地址,str默认是首地址0,这里的left,right实际上就是下标
str[left] = str[right];
str[right] = temp;
left++;
right--;
}
}
int main(){
char arr[] = { "abcdef" };
reverse_string(arr);
printf("%s", &arr);
return 0;
}
数组传的地址。在函数里直接修改的就是原数组,所以不用返回,直接void!
等价于
6.2递归做题
#include<stdio.h>
//#include<string.h>//题目不让引用函数的做法
int my_strlen(char* s) {
int count = 0;
while(*s != '\0') {
count++;
s++;
}
return count;
}
void reverse_string(char* str) {//递归
char tmp = *str;//1
int len = my_strlen(str);
*str = *(str + len - 1);//2
*(str + len - 1) = '\0';//3
if (my_strlen(str) >= 2) {
reverse_string(str + 1);//4
}
*(str + len - 1) = tmp;//5
}
int main(){
char arr[] = { "abcdef" };
reverse_string(arr);
printf("%s", &arr);
return 0;
}
可看教程1时06分左右53. 函数作业讲解_哔哩哔哩_bilibili
7、计算一个数的每位之和(递归实现)
题目内容:写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和
例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19
输入:1729,输出:19
#include<stdio.h>
int DigitSum(int a) {
if (a > 9) {
return DigitSum(a / 10) + a % 10;
}
else
{
return a;
}
}
int main(){
int num = 1729;
int sum = DigitSum(num);
printf("%d\n", sum);
return 0;
}
8、递归实现n的k次方
题目内容:编写一个函数实现n的k次方,使用递归实现
#include<stdio.h>
double Pow(int n, int k) {//因为指数为负答案会是分数
if (k == 0) {
return 1;
}
else if (k > 0) {
return n * Pow(n, k - 1);
}
else
return 1.0 / (Pow(n, -k));
}
int main(){
int n, k;
scanf("%d %d", &n, &k);
double ret = Pow(n, k);
printf("%lf\n", ret);
return 0;
}
暂停到********63三子棋