IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 【C语言】初阶习题 -> 正文阅读

[C++知识库]【C语言】初阶习题

目录

1.图案问题

2、时分秒转换

3、打印1-100之间所有3的倍数的数字

4、打印100~200之间的素数

?5、给定两个数,求这两个数的最大公约数

6、在屏幕上输出9*9乘法口诀表

7、计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值,打印出结果

8、二分查找

9、交换两个整数

10、strlen的模拟(递归实现)

11、递归方式实现打印一个整数的每一位

12、计算斐波那契数

13、字符串逆序(递归/非递归实现)

14、冒泡排序

15、交换两个变量(不创建临时变量)

16、统计二进制中1的个数

17、打印整数二进制的奇数位和偶数位

18、求两个数二进制中不同位的个数

19、矩阵元素

?20、进制转换?编辑

21、矩阵转置

22、序列中删除指定数字

23、使用指针打印数组内容

24、字符串逆序(多组输入)?

25、打印菱形?

26、打印水仙花数?

27、计算求和?

?28、喝汽水问题

29、上三角矩阵判定

30、矩阵相等判断?

31、调整奇数偶数顺序?

32、有序序列合并?

33、有序序列判断

34、strcpy实现

36、strlen实现?

37、逆置字符串的变种?


1.图案问题

#include <stdio.h>
int main()
{
	int n = 0;
	while (scanf("%d",&n) != EOF)
	{
		for (int i = 0; i < n; i++)
		{
			printf("*");
		}
		printf("\n");
	}
	return 0;
}

2、时分秒转换

#include <stdio.h>
int main()
{
	int sec = 0, s, m, h;
	scanf("%d", &sec);
	h = sec / 60 / 60;
	m = sec / 60 % 60;
	s = sec % 60;
	printf("%d %d %d\n", h, m, s);
	return 0;
}

3、打印1-100之间所有3的倍数的数字

#include <stdio.h>
int main()
{
	for (int i = 1; i <= 100; i++)
	{
		if (i % 3 == 0)
		{
			printf("%d ", i);
		}
	}
	return 0;
}

4、打印100~200之间的素数

#include <stdio.h>
int main()
{
	for (int i = 100; i <= 200; i++)
	{
		for (int j = 2; j < i; j++)
		{
			if (i % j == 0)
			{
				break;
			}
			if (j == i-1)
			{
				printf("%d ", i);
			}

		}
		
	}
	return 0;
}

?5、给定两个数,求这两个数的最大公约数

#include <stdio.h>
int main()
{
	int a, b;
	scanf("%d %d", &a, &b);
	int c = a % b;
	while (c)
	{
		a = b;
		b = c;
		c = a % b;
	}
	printf("%d\n", b);
	return 0;
}

6、在屏幕上输出9*9乘法口诀表

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

7、计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值,打印出结果

#include <stdio.h>

int main()
{
	int flag = 1;
	double sum = 0.0;
	for (int i = 1; i <= 100; i++)
	{
		sum += flag * 1.0 / i;
		flag *= -1;
	}
	printf("%.2f\n", sum);
	return 0;
}


8、二分查找

#include <stdio.h>
int binary_search(int* arr, int sz,int key)
{
	int left = 0;
	int right = sz - 1;
	
	while (left<=right)
	{
		int mid = left + (right - left) / 2;
		if (arr[mid] > key)
		{
			right = mid - 1;
		}
		else if (arr[mid] < key)
		{
			left = mid + 1;
		}
		else
		{
			return mid;
		}
	}
}
int main()
{
	int arr[] = { 1,2,3,4,5,6,7 };
	int key = 5;
	int sz = sizeof(arr) / sizeof(arr[0]);
	int ret = binary_search(arr, sz,key);
	printf("下标为%d\n", ret);
	return 0;
}

9、交换两个整数

#include <stdio.h>
void swap(int* pa, int* pb)
{
	int tmp = *pa;
	*pa = *pb;
	*pb = tmp;
}
int main()
{
	int a, b;
	scanf("%d %d", &a, &b);
	swap(&a, &b);
	printf("%d %d\n", a, b);
	return 0;
}


10、strlen的模拟(递归实现)

#include <stdio.h>
int my_strlen(char* str)
{
	if (*str == '\0')
		return 0;
	else
		return 1 + my_strlen(str + 1);
}
int main()
{
	char arr[] = "abcdef";
	printf("%d\n", my_strlen(arr));
	return 0;
}


11、递归方式实现打印一个整数的每一位

#include <stdio.h>
Print(int a)
{
	if (a > 9)
	{
		Print(a/10);
	}
	printf("%d ", a%10);
}
int main()
{
	int a = 1234;
	Print(a);
	return 0;
}

12、计算斐波那契数

#include <stdio.h>
int fib(int a)
{
	if (a == 1 || a == 2)
	{
		return 1;
	}
	return fib(a - 1) + fib(a - 2);
}
int main()
{
	int a = 0;
	scanf("%d", &a);
	printf("%d\n", fib(a));
	return 0;
}


13、字符串逆序(递归/非递归实现)

递归:

#include <stdio.h>
#include <string.h>
void reverse(char* arr)
{
	int len = strlen(arr);
	char* tmp = *arr;
	*arr = *(arr + len - 1);
	
	*(arr + len - 1) = '\0';
	if (strlen(arr + 1) >= 2)
	{
		reverse(arr + 1);
	}
	*(arr + len - 1) = tmp;

}

int main()
{
	char arr[] = "abcdef";
	reverse(arr);
	printf("%s\n", arr);
	return 0;
}

?非递归:

#include <stdio.h>
#include <string.h>
void reverse(arr)
{
	char *left = arr;
	char *right = arr + strlen(arr) - 1;
	while (left <= right)
	{
		char tmp = *left;
		*left = *right;
		*right = tmp;
		left++;
		right--;
	}
}
int main()
{
	char arr[] = "abcdef";
	reverse(arr);
	printf("%s\n", arr);
	return 0;
}


14、冒泡排序

#include <stdio.h>

bubble_search(int* arr, int sz)
{
	for (int i = 0; i < sz - 1; i++)
	{
		for (int j = 0; j < sz-1-i; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				int tmp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tmp;
			}
		}
	}
}

int main()
{
	int arr[] = {1,2,9,8,4,6,3,7,5};
	int sz = sizeof(arr) / sizeof(arr[0]);
	bubble_search(arr, sz);
	for (int i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

15、交换两个变量(不创建临时变量)

#include <stdio.h>
int main()
{
	int a, b = 0;
	scanf("%d %d", &a, &b);
	a = a ^ b;
	b = a ^ b;
	a = a ^ b;
	printf("%d %d", a, b);
	return 0;
}


16、统计二进制中1的个数

比如: 15? ?0000 1111? ? 4 个 1?

#include <stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	int count = 0;
	for (int i = 0; i < 32; i++)
	{
		if (n & 1 == 1)
		{
			count++;
		}
		n = n >> 1;
	}
	printf("%d\n", count);
	return 0;
}


17、打印整数二进制的奇数位和偶数位

#include <stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	//打印奇数位
	for (int i = 31; i >=1; i -= 2)
	{
		printf("%d ", (n>>i) & 1);
		
	}
	printf("\n");
	for (int i = 30; i >= 0; i -= 2)
	{
		printf("%d ", (n >> i) & 1);

	}
}


18、求两个数二进制中不同位的个数

输入例子:

1999? ? 2299

输出例子: 7

#include <stdio.h>
int main()
{
	int m, n;
	scanf("%d %d", &m, &n);
	int t = m ^ n;
	int count = 0;
	for (int i = 0; i < 32; i++)
	{
		if ((t>>i)&1==1)
		{
			count++;
		}
	}
	printf("%d\n", count);
	return 0;
}


19、矩阵元素

#include <stdio.h>
int main()
{
	int m, n;
	scanf("%d %d", &n, &m);
	int arr[10][10];
	int sum = 0;
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
		{
			scanf("%d", &arr[i][j]);
		}
	}
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
		{
			if (arr[i][j] > 0)
			{
				sum += arr[i][j];
			}
		}
	}
	printf("%d\n", sum);
	return 0;
}


?20、进制转换

//递归:
#include <stdio.h>
void Print(int n)
{
	if (n >= 6)
	{
		Print(n / 6);
	}
	printf("%d", n%6);
}


int main()
{
	int n = 0;
	scanf("%d", &n);
	Print(n);
	return 0;
}

//循环:
int main()
{
	int n = 0, sum = 0, i = 1;
	scanf("%d", &n);
	while (n)
	{
		sum += n % 6 * i;
		n /= 6;
		i *= 10;
	}
	printf("%d\n", sum);
	return 0;
}


21、矩阵转置

#include <stdio.h>
int main()
{
	int n, m;
	scanf("%d %d", &n, &m);
	int arr[10][10];
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
		{
			scanf("%d", &arr[i][j]);
		}
	}
	printf("\n");
	for (int j = 0; j < m; j++)
	{
		for (int i = 0; i < n; i++)
		{
			printf("%d ", arr[i][j]);
		}
		printf("\n");
	}
	return 0;
}


22、序列中删除指定数字

#include <stdio.h>
int main()
{
	int n = 0, x = 0;
	scanf("%d", &n);
	int arr[50];
	for (int i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
	}
	scanf("%d", &x);
	for (int i = 0; i < n; i++)
	{
		if (arr[i] != x)
		{
			printf("%d ", arr[i]);
		}
	}
	return 0;
}

23、使用指针打印数组内容

#include <stdio.h>
int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8 };
	int* p = arr;
	for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
	{
		printf("%d ", *(p + i));
	}
	return 0;
}

24、字符串逆序(多组输入)?

#include <stdio.h>
#include <string.h>
reverse(char* str)
{
	char* left = str;
	char* right = str + strlen(str) - 1;
	while (left <= right)
	{
		char tmp = *left;
		*left = *right;
		*right = tmp;
		left++;
		right--;
	}
}


int main()
{
	char arr[100];
	while (gets(arr))
	{
		reverse(arr);
		printf("%s\n", arr);
		memset(arr, 0, sizeof(arr) / sizeof(arr[0]));//初始化
	}
	return 0;
}

25、打印菱形?

#include <stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	//上半
	for (int i = 0; i < n; i++)
	{
		//打印空格
		for (int j = 0; j < n -1-i; j++)
		{
			printf(" ");
		}
		//打印*
		for (int k = 0; k < 2*i+1; k++)
		{
			printf("*");
		}
		printf("\n");
	}
	//下半
	for (int i = 0; i < n - 1; i++)
	{
		//打印空格
		for (int j = 0; j < i + 1; j++)
		{
			printf(" ");
		}
		//打印*
		for (int k = 0; k < 2 * (n - 2 - i) + 1; k++)
		{
			printf("*");
		}
		printf("\n");
	}
	return 0;
}

26、打印水仙花数?

求出0~100000之间的所有“水仙花数”并输出。“水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如:153=1^3+5^3+3^3,则153是一个“水仙花数”

#include <stdio.h>
#include <math.h>
int main()
{
	for (int i = 0; i <= 100000; i++)
	{
		int count = 1;
		int sum = 0;
		int tmp = i;
		//获取位数
		while (tmp > 9)
		{
			count++;
			tmp /= 10;
		}
		tmp = i;
		//计算次方和
		while (tmp != 0)
		{
			sum += pow(tmp % 10, count);
			tmp /= 10;
		}
		//判断
		if (sum == i)
		{
			printf("%d ", i);
		}
	}
	return 0;
}

27、计算求和?

求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字,

例如:2+22+222+2222+22222

#include <stdio.h>
int main()
{
	int a = 0;
	scanf("%d", &a);
	int ret = a;
	int sum = 0;
	for (int i = 0; i < 5; i++)
	{
		sum += ret;
		ret = ret * 10 + a;
	}
	printf("%d\n", sum);
	return 0;
}

?28、喝汽水问题

喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以多少汽水(编程实现)。

//直接计算
#include <stdio.h>
int main()
{
	int money = 0;
	scanf("%d", &money);
	int count = money;
	int empty = money;
	while (empty > 1)
	{
		count += empty / 2;
		empty = empty / 2 + empty % 2;
	}
	printf("%d\n", count);
	return 0;
}

//等差数列
int main()
{
	int money = 0;
	scanf("%d", &money);
	int count = 0;
	if (money <= 0)
	{
		count = 0;
	}
	else
	{
		count = 2 * money - 1;
	}
	printf("%d\n", count);
	return 0;
}

29、上三角矩阵判定

#include <stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	int arr[10][10];
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			scanf("%d", &arr[i][j]);
		}
	}
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			if (i > j&&arr[i][j]!=0)
			{
				return 0;
			}
		}
	}
	printf("YES\n");
	return 0;
}

30、矩阵相等判断?

#include <stdio.h>
int main()
{
	int n = 0, m = 0;
	scanf("%d %d", &n, &m);
	int arr1[10][10];
	int arr2[10][10];
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
		{
			scanf("%d", &arr1[i][j]);
		}
	}
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
		{
			scanf("%d", &arr2[i][j]);
		}
	}
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
		{
			if (arr1[i][j] != arr2[i][j])
			{
				printf("No\n");
				return 0;
			}
		}
	}
	printf("Yes\n");
	return 0;
}

31、调整奇数偶数顺序?

调整数组使奇数全部都位于偶数前面。输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。

#include <stdio.h>
swap_arr(int arr[], int sz)
{
	int left = 0;
	int right = sz - 1;
	while (left <= right)
	{
		//从左向右找偶数
		while ((left <= right) && (arr[left] % 2 == 1))
		{
			left++;
		}
		//从右向左找奇数
		while ((left <= right) && (arr[right] % 2 == 0))
		{
			right--;
		}
		if (left <= right)
		{
			int tmp = arr[left];
			arr[left] = arr[right];
			arr[right] = tmp;
		}
	}
}
int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	swap_arr(arr, sz);
	for (int i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

32、有序序列合并?

#include <stdio.h>

int main()
{
	int n = 0,m = 0;
	scanf("%d %d", &n, &m);
	int arr[2000];
	for (int i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
	}
	for (int i = n; i < n + m; i++)
	{
		scanf("%d", &arr[i]);
	}
	//冒泡排序
	for (int i = 0; i < n + m - 1; i++)
	{
		for (int j = 0; j < n + m - 1 - i; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				int tmp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tmp;
			}
		}
	}
	for (int i = 0; i < n + m; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

33、有序序列判断

#include <stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	int arr[50];
	int count1 = 0, count2 = 0;//分别表示升序降序个数
	for (int i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
	}
	for (int i = 0; i < n-1; i++)
	{
		if (arr[i] - arr[i + 1]<=0)
		{
			count1++;
		}
		else if (arr[i] - arr[i + 1] >= 0)
		{
			count2++;
		}
	}
	if (count1 == n - 1 || count2 == n - 1)
	{
		printf("sorted");
	}
	else
	{
		printf("unsorted");
	}
	return 0;
}

34、strcpy实现

模拟实现库函数strcpy

#include <stdio.h>
#include <assert.h>

char* my_strcpy(char* dest,char* src)
{
	assert(dest && src);//断言

	/*while (*src != '\0')
	{
		*dest++ = *src++;
	}
	*dest = *src;
	return dest;*/

	while (*dest++=*src++)
	{
		;
	}
	return dest;
}

int main()
{
	char arr1[] = "xxxxxxxxxxx";
	char arr2[] = "abcdef";
	my_strcpy(arr1,arr2);
	printf("%s\n", arr1);
	return 0;
}

36、strlen实现?

模拟实现库函数strlen

#include <stdio.h>
#include <assert.h>

int my_strlen(char* arr)
{
	int count = 0;
	assert(arr);
	while (*arr++)
	{
		count++;
	}
	return count;
}

int main()
{
	char arr[] = "abcdef";
	int ret = my_strlen(arr);
	printf("%d\n", ret);
	return 0;
}

37、逆置字符串的变种?

#include <stdio.h>
#include <string.h>
#include <assert.h>

void reverse(char* left, char* right)
{
    assert(left && right);
    while (left < right)
    {
        char tmp = *left;
        *left = *right;
        *right = tmp;
        left++;
        right--;
    }
}

int main() {
    char arr[100] = { 0 };
    //输入
    gets(arr);
    int len = strlen(arr);
    //完成这个逆序
    //1. 逆序整个字符串
    reverse(arr, arr + len - 1);
    //逆序每个单词
    char* cur = arr;

    while (*cur)
    {
        char* start = cur;
        while (*cur != ' ' && *cur != '\0')
        {
            cur++;
        }
        reverse(start, cur - 1);
        if (*cur != '\0')
            cur++;
    }

    //打印
    printf("%s\n", arr);

    return 0;
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-12-25 10:47:31  更:2022-12-25 10:49:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年3日历 -2024/3/29 18:56:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码