C语言习题

目录

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次方

9、交换数组

10、将浮点数转换为整数类型,要求四舍五入。

1、数9的个数

题目内容:编写程序数一下1到100的所有整数中出现多少个数字9

#include	
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	
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	
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	
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	
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	
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;
}

C语言习题_第1张图片

4.2、题目内容:实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定如:输入9,输出9*9口诀表,输出12,输出12*12的乖法口诀表。
#include	
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
//#include//题目不让引用函数的做法
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!

C语言习题_第2张图片等价于

6.2递归做题
#include
//#include//题目不让引用函数的做法
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;
}

C语言习题_第3张图片

可看教程1时06分左右53. 函数作业讲解_哔哩哔哩_bilibili

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

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

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

输入:1729,输出:19

C语言习题_第4张图片

#include
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次方,使用递归实现C语言习题_第5张图片

#include
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;
}

9、交换数组

题目内容:将数组A中的内容和数组B中的内容进行交换。(数组一样大)

#include
int main(){
	int a[] = { 1,3,5,7,9 };
	int b[] = { 2,4,6,8,10 };
	int sz = sizeof(a) / sizeof(a[0]);
	for (int i = 0; i < sz; i++) {
		int tmp = a[i];
		a[i] = b[i];
		b[i] = tmp;
	}
	for (int i = 0; i < sz; i++) {
		printf("%d ", a[i]);
	}
	printf("\n");
	for (int i = 0; i < sz; i++) 
	printf("%d ", b[i]);
		return 0;
}

10、将浮点数转换为整数类型,要求四舍五入。

将浮点数转换为整数类型,要求四舍五入。
输入描述:
    随机输入的浮点数
输出描述:
    四舍五入之后的整数
示例1
    输入:
    14.99

    输出:
    15
#include 
using namespace std;

int main() {
    float a;
    cin>>a;
    if(a>=0)
        cout<

!!利用+或者-0.5来实现舍还是入

你可能感兴趣的:(c语言,算法,c++,数据结构,c语言)