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);
}
}