C语音经典题型
- 1. 在屏幕上输出9*9乘法口诀表
- 2. 求10 个整数中最大值
- 3. 计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值,打印出结果
- 4. 编写程序数一下 1到 100 的所有整数中出现多少个数字9
- 5. 能把函数处理结果的二个数据返回给主调函数
- 6. 实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定
- 7. 编写一个函数实现n的k次方,使用递归实现
- 8. 计算一个数的每位之和(递归实现)
- 9. 字符串逆序(递归实现)
- 10. 将数组A中的内容和数组B中的内容进行交换。(数组一样大)
- 11. 创建一个整形数组,完成对数组的操作
1. 在屏幕上输出9*9乘法口诀表
//在屏幕上输出9*9乘法口诀表
//1*1=1
//2*1=2 2*2=4
//3*1=3 3*2=6 3*3=9
//...
//
#include <stdio.h>
int main()
{
int i = 0;
for (i = 1; i <= 9; i++)
{
//打印一行的数据
int j = 0;
for (j = 1; j <= i; j++)
{
printf("%d*%d=%-3d ", i, j, i * j); //-3d向左对齐
}
printf("\n");
}
return 0;
}
2. 求10 个整数中最大值
#include <stdio.h>
//求10 个整数中最大值
int main()
{
int arr[] = { -1,-2,-3,-4,-5,-6,-7,-8,-9,-10 };
// 0 1 ...
int m = arr[0];
int i = 0;
for (i = 1; i < 10; i++)
{
if (arr[i] > m)
m = arr[i];
}
printf("%d\n", m);
return 0;
}
注意:
不能将m定义为0,如果定义为零,只能满足正数形式,并不能满足负数。
3. 计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值,打印出结果
#include <stdio.h>
//计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值,打印出结果
int main()
{
int i = 0;
float sum = 0.0;
int flag = 1;
for (i = 1; i <= 100; i++)
{
sum += flag*1.0f/i;
flag = -flag;
}
printf("%f\n", sum);
return 0;
}
4. 编写程序数一下 1到 100 的所有整数中出现多少个数字9
#include <stdio.h>
//编写程序数一下 1到 100 的所有整数中出现多少个数字9
int main()
{
int i = 0;
int count = 0;
for (i = 1; i <= 100; i++)
{
if (i % 10 == 9)
count++;
if (i / 10 == 9)//注意不是else if,否则结果会为19
count++;
}
printf("%d\n", count);
return 0;
}
注意: 个位和十位都要判断有没有数字9。
5. 能把函数处理结果的二个数据返回给主调函数
#include <stdio.h>
被调用的函数
void test(int arr[]) //形参用数组的形式
{
arr[0] = 3;
arr[1] = 5;
}
//主调函数
int main()
{
int arr[2];
test(arr);
printf("%d %d\n", arr[0], arr[1]);
return 0;
}
void test(int*p1, int*p2) //形参用二个指针
{
*p1 = 3;
*p2 = 5;
}
//主调函数
int main()
{
int x = 0;
int y = 0;
test(&x, &y);
printf("%d %d\n", x,y);
return 0;
}
int x;
int y;
void test() //用俩个全局变量
{
x = 3;
y = 5;
}
//主调函数
int main()
{
test();
printf("%d %d\n", x, y);
return 0;
}
注意: return 这二个数是不可取的。
6. 实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定
#include <stdio.h>
//实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定
//如:输入9,输出9 * 9口诀表,输出12,输出12 * 12的乘法口诀表。
//
//1*1=1
//2*1=2 2*2=4
//3*1=3 3*2=6 3*3=9
//
void print_table(int m)
{
int i = 0;
for (i = 1; i <= m; i++)
{
//打印一行
int j = 0;
for (j = 1; j <= i; j++)
{
printf("%-2d*%-2d=%-3d ", i, j, i * j);
}
printf("\n");
}
}
int main()
{
int n = 0;
scanf("%d", &n);//9 12 5
//打印对应的乘法口诀表
print_table(n);
return 0;
}
7. 编写一个函数实现n的k次方,使用递归实现
图解演示
代码如下
#include <stdio.h>
double Pow(int n, int k)
{
if (k > 0)
return n * Pow(n, k - 1);
else if (k == 0)
return 1.0;
else
return 1.0 / Pow(n, -k);
}
int main()
{
int n = 0;
int k = 0;
scanf("%d %d", &n, &k);
printf("%lf\n", Pow(n, k));
return 0;
}
8. 计算一个数的每位之和(递归实现)
题目内容:
写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和。
例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19
输入:1729,输出:19
思路
DigitSum(1729)
DigitSum(172) + 9
DigitSum(17) + 2 +9
DigitSum(1) + 7 + 2 + 9
#include <stdio.h>
int DigitSum(int n)
{
if (n > 9)
return DigitSum(n / 10) + n % 10;
else
return n;
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = DigitSum(n);
printf("%d\n", ret);
return 0;
}
9. 字符串逆序(递归实现)
题目内容:
编写一个函数 reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列,不是逆序打印。
要求:不能使用C函数库中的字符串操作函数。
比如:
char arr[] = "abcdef"
逆序之后数组的内容变成:fedcba
#include <stdio.h>
#include <string.h>
int my_strlen(char* str) //模拟strlen的实现
{
int count = 0;
while (*str != '\0')
{
count++;
str++;
}
return count;
}
void reverse_string(char* str) //非递归的方法
{
int left = 0;
int right = my_strlen(str)-1;
while (left<right)
{
char tmp = *(str + left);
*(str + left) = *(str + right);
*(str + right) = tmp;
left++;
right--;
}
}
void reverse_string(char* str) //递归的方法
{
int len = my_strlen(str);
char tmp = *str;//1
*str = *(str + len - 1);//2
*(str + len - 1) = '\0';//3
if(my_strlen(str+1)>=2)
reverse_string(str+1);//4
*(str + len - 1) = tmp;//5
}
int main()
{
//char arr[] = "abcdef";
char arr[] = "abcdef";
reverse_string(arr);
printf("%s\n", arr);
return 0;
}
10. 将数组A中的内容和数组B中的内容进行交换。(数组一样大)
#include<stdio.h>
int main()
{
int arr1[5] = { 1,3,5,7,9 };
int arr2[5] = { 2,4,6,8,0 };
int i = 0;
int sz = sizeof(arr1) / sizeof(arr1[0]);
int tmp = 0;
for (i = 0; i < sz; i++)
{
tmp = arr1[i];
arr1[i] = arr2[i];
arr2[i] = tmp;
}
for (i = 0; i < sz; i++)
{
printf("%d ", arr1[i]);
}
printf("\n");
for (i = 0; i < sz; i++)
{
printf("%d ", arr2[i]);
}
printf("\n");
return 0;
}
11. 创建一个整形数组,完成对数组的操作
要求:
实现函数init() 初始化数组为全0
实现print() 打印数组的每个元素
实现reverse() 函数完成数组元素的逆置。
自己设计以上函数的参数,返回值。
#include <stdio.h>
void init(int arr[], int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
arr[i] = 0;
}
}
void print(int arr[], int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
void reverse(int arr[], int sz)
{
int left = 0;
int right = sz - 1;
while (left<right)
{
int tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
left++;
right--;
}
}
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,0 };
int sz = sizeof(arr) / sizeof(arr[0]);
print(arr, sz);
reverse(arr, sz);
print(arr, sz);
init(arr, sz);
print(arr, sz);
return 0;
}
如果这份博客对大家有帮助,希望各位给恒川一个免费的点赞作为鼓励,并评论收藏一下,谢谢大家!!!
制作不易,如果大家有什么疑问或给恒川的意见,欢迎评论区留言。