C语言(11)例题解答

1、BoBo教KiKi字符常量或字符变量表示的字符在内存中以ASCII码形式存储。BoBo出了一个问题给KiKi,转换以下ASCII码为对应字符并输出他们。

73, 32, 99, 97, 110, 32, 100, 111, 32, 105, 116 , 33

输入描述:

输出描述:

一行输出转换题目中给出的所有ASCII码对应的字符,无需以空格隔开。

#include<stdio.h>
int main()
{
	char arr[] = { 73, 32, 99, 97, 110, 32, 100, 111, 32, 105, 116 , 33 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%c ", arr[i]);
	}
	return 0;
}

运行结果

 2、描述

小乐乐学校教学楼的电梯前排了很多人,他的前面有n个人在等电梯。电梯每次可以乘坐12人,每次上下需要的时间为4分钟(上需要2分钟,下需要2分钟)。请帮助小乐乐计算还需要多少分钟才能乘电梯到达楼上。(假设最初电梯在1层)

输入描述:

输入包含一个整数n (0 ≤ n ≤ 109)

输出描述:

输出一个整数,即小乐乐到达楼上需要的时间。

#include<stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	printf("%d ", (n / 12) * 4 + 2);
	return 0;
}

3、描述

实现字母的大小写转换。多组输入输出。

输入描述:

多组输入,每一行输入大写字母。

输出描述:

针对每组输入输出对应的小写字母。

#include<stdio.h>
int main()
{
	int ch = 0;
	while ((ch = getchar()) != EOF)
	{
		getchar();
		if (ch >= 'A' && ch <= 'Z')
		{
			ch += 32;
		}
		printf("%c\n", ch);
	}
	return 0;
}

4、实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定

如:输入9,输出9 * 9口诀表,输出12,输出12 * 12的乘法口诀表。

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

5、实现一个函数来交换两个整数的内容。

#include<stdio.h>
void change(int *a, int *b)
{
	int temp = 0;
	temp = *a;
	*a = *b;
	*b = temp;
}

int main()
{
	int x, y = 0;
	scanf("%d %d", &x, &y);
	printf("交换前:%d %d", x, y);
	change(&x,&y);
	printf("交换后:%d %d", x, y);
	return 0;
}

6、将字符串逆序(递归和非递归实现)“abcdef" 变成"fedcba"输出

非递归指针方式实现如下:
思路:
逆置字符串,循环的方式实现非常简单
  1. 给两个指针,left放在字符串左侧,right放在最后一个有效字符位置
  2. 交换两个指针位置上的字符
  3. left指针往后走,right指针往前走,只要两个指针没有相遇,继续2,两个指针相遇后,逆置结束

void reverse_string(char* arr)
{
	char* left = arr;
	char* right = arr + strlen(arr) - 1;


	while (left < right)
	{
		char tmp = *left;
		*left = *right;
		*right = tmp;


		left++;
		right--;
	}
}

非递归数组方式实现如下:

思路:以数组下标的移动来访问数据并将字符进行交换

1、数组下标从0开始,坐标初始化为0,右边下标初始化为数组长度-1,以防止下标溢出

2、在左边下标小于右边下标的条件下,创建一个同为字符的中间变量,将用[ ] 数组下标访问符访问数组中存放的字符数据,并进行交换。当左边下标大于右边下标时,逆置结束。

void reverse_string1(char arr[])
{
	int len = strlen(arr);
	int left = 0;
	int right = len - 1;

	while (left<right)
	{
		char tmp = arr[left];
		arr[left] = arr[right];
		arr[right] = tmp;
		left++;
		right--;
	}
}

 递归法实现:
思路:
对于字符串“abcdefg”,递归实现的大概原理:
  1. 交换a和g,
  2. 以递归的方式逆置源字符串的剩余部分,剩余部分可以看成一个有效的字符串,再以类似的方式逆置

void reverse_string(char* arr)
{
	int len = strlen(arr);
	char tmp = *arr;
	*arr = *(arr + len - 1);

	*(arr + len - 1) = '\0';
	if (strlen(arr + 1) >= 2)
		reverse_string(arr + 1);

	*(arr + len - 1) = tmp;
}

7、

计算一个数的每位之和(递归实现)

写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和

例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19

输入:1729,输出:19
思路:
DigiSum(n) = DibiSum(n/10)+n%10   // 前n-1位之和+第N位

int DigitSum(int n)//1729
{
	if(n>9)
		return DigitSum(n/10)+n%10;
	else
		return n;
}

8、编写一个函数实现n的k次方,使用递归实现。
思路:
Pow(n,K) =  Pow(n, K-1)*n

int Pow(int n, int k)
{
	if(k==0)
		return 1;
	else if(k>=1)
	{
		return n*Pow(n, k-1);
	}
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值