C语言-编程实例2

1,三角形判断

2,指针计算

3,写一个函数打印arr数组的内容,不使用数组下标,使用指针

4,将一个字符串的内容颠倒过来

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

6,输出0-100000之间的水仙花数

7,打印菱形

8,指针数组与数组指针

9,喝汽水问题,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以多少汽水

10,进阶测评与*p++1,

11,求输入A和B的最小公倍数

12,将一句话的单词逆置,句号不逆置


1,三角形判断

复制代码
#include<stdio.h>
//三角形判断
int main() {
	int a = 0;
	int b = 0;
	int c = 0;
	while (scanf("%d %d %d",&a,&b,&c)==3) {
		if ((a+b>c)&&(b+c>a)&&(a+c>b))
		{
			if (a == b && b == c) {//等边
				printf("Equilateral triangle!\n");
			}
			else if ((a==b&&b!=c)||(a==c&&c!=b)||(b==c&&b!=a))
			{
				printf("Isosceles triangle!\n");
			}
			else
			{
				printf("Ordinary triangle!\n");
			}
		}
		else
		{
			printf("Not a triangle!\n");

		}
	}
}

2,指针计算

复制代码
#include<stdio.h>
//指针计算
//int main() {
//	int arr[] = { 1,2,3,4,5 };
//	short* p = (short*)arr;//arr地址为int类型,p是short类型,需要强制类型转换
//	int i = 0;
//	for ( i = 0; i < 4; i++)
//	{
//		*(p + i) = 0;//short 类型的指针变量一次移动2个字节
//	}
//	for ( i = 0; i < 5; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	return 0;
//}

//指针计算
//int main() {
//	unsigned long pulArray[] = { 6,7,8,9,10 };
//	unsigned long* pulPtr;
//	pulPtr = pulArray;
//	*(pulPtr + 3) += 3;
//	printf("%d %d", *pulPtr, *(pulPtr + 3));
//	return 0;
//}

//指针计算
int main() {
	int a = 0x11223344;      //在低地址存放的是44
	char* pc = (char*)&a;
	*pc = 0;
	printf("%x\n", a);
 	return 0;
}

3,写一个函数打印arr数组的内容,不使用数组下标,使用指针

复制代码
#include<stdio.h>
//写一个函数打印arr数组的内容,不使用数组下标,使用指针
void print(int* p, int sz) {
	int i = 0;
	for ( i = 0; i < sz; i++)
	{
		printf("%d ", *(p + i));
	}
	printf("\n");
}
int main() {
	int arr[] = { 1,2,3,4,5,6,7,8,9 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	print(arr, sz);
	return 0;
}

4,将一个字符串的内容颠倒过来

复制代码
#include<stdio.h>
//将一个字符串的内容颠倒过来
#include<string.h>
int main() {
	char arr[10001] = { 0 };
	gets(arr);
	//逆序
	int left = 0;
	int right = strlen(arr) - 1;
	while (left<right) {
		char tmp = arr[left];
		arr[left] = arr[right];
		arr[right] = tmp;

		left++;
		right--;

	}
	printf("%s\n", arr);
	return 0;
}

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

复制代码
#include<stdio.h>
//求Sn=a+aa+aaa+aaaa+aaaaa的前5项和,其中a是一个数字
//例如:2+22+222+2222+22222
int main() {
	int a = 0;
	int n = 0;
	scanf("%d %d", &a, &n);
	int i = 0;
	int sum = 0;
	int k = 0;
	for ( i = 0; i < n; i++)
	{
		k = k * 10 + a;
		sum += k;
	}
	printf("%d\n", sum);
	return 0;
}

6,输出0-100000之间的水仙花数

复制代码
#include<stdio.h>
//输出0-100000之间的水仙花数
#include<math.h>
int main() {
	int i = 0;
	for ( i = 0; i <=100000; i++)
	{
		//1.计算i是几位数
		int n = 1;//任何一个数至少是一位数
		int tmp = i;
		int sum = 0;
		while (tmp/10) {
			n++;
			tmp /= 10;
		}
		//.得到i的每一位,计算他的n次方之和
		tmp = i;
		while (tmp) {
			sum += pow(tmp % 10, n);
			tmp /= 10;
		}
		if (sum == i)
		{
			printf("%d ", i);
		}
	}
	return 0;
}

7,打印菱形

复制代码
#include<stdio.h>
//打印菱形
int main() {
	//上边三角形
	int line = 0;
	scanf("%d", &line);
	int i = 0;
	for ( i = 0; i < line; i++)
	{
		//打印一行
		//空格
		int j = 0;
		for ( j = 0; j < line-1-i; j++)
		{
			printf(" ");
		}
		//*
		for (j = 0; j < 2*i+1; j++)
		{
			printf("*");
		}
		printf("\n");
	}

	//下三角形
	for (i = 0; i < line-1; i++)
	{
		//打印一行
		//空格
		int j = 0;
		for (j = 0; j <=i; j++)
		{
			printf(" ");
		}
		//*
		for (j = 0; j < 2 *(line-1-i)-1; j++)
		{
			printf("*");
		}
		printf("\n");
	}
	return 0;
}

8,指针数组与数组指针

复制代码
#include<stdio.h>
int main() {
  int *arr[10];//是指针数组
 //int (*arr)[10];//是一个数组指针--指向数组的指针
	return 0;
}

9,喝汽水问题,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以多少汽水

复制代码
#include<stdio.h>
//喝汽水问题,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以多少汽水
int main() {
	int money = 0;
	scanf("%d", &money);
	int total = money;
	int empty = money;

	//置换
	while (empty >= 2) {
		total += empty / 2;
		empty = empty / 2 + empty % 2;
	}
	printf("%d\n", total);
	return 0;
}

10,进阶测评与*p++

复制代码
#include<stdio.h>
//初阶测评
//int a = 1;
//void test() {
//	int a = 2;
//	a += 1;
//}
//int main() {
//	test();
//	printf("%d\n", a);//1
//	return 0;
//}

int main() {
 *p++;//++是作用于p,不是*p
// 等价于:  *p; p=p+1
	return 0;
}

11,求输入A和B的最小公倍数

复制代码
#include<stdio.h>
//求输入A和B的最小公倍数
//方法一
//int main() {
//	int a = 0;
//	int b = 0;
//	scanf("%d %d", &a, &b);
//	//计算a和b的最小公倍数
//	int m = (a > b ? a : b);
//	while (1) {
//		if (m%a==0&&m%b==0)
//		{
//			break;
//		}
//		m++;
//	}
//	printf("%d\n", m);
//	return 0;
//}
//方法二
int main() {
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	int i = 1;
	//计算a和b的最小公倍数
	while (a*i%b) {
		i++;
	}
	printf("%d\n", i*a);
	return 0;
}

12,将一句话的单词逆置,句号不逆置

复制代码
#include<stdio.h>
//将一句话的单词逆置,句号不逆置
// 例如:  I like beijing.   ==>   beijing. like I
//方法有许多
//巧妙的方法:先整体把每个字符逆置 ,在把每个单词逆置
#include<assert.h>
void reverse(char* left, char* right) {
	assert(left);
	assert(right);
	while (left<right) {
		char tmp = *left;
		*left = *right;
		*right = tmp;
		left++;
		right--;
	}

}
int main() {
	char arr[101] = { 0 };
	//输入
	gets(arr);
	//逆置整个字符串
	int len = strlen(arr);
	reverse(arr, arr + len - 1);
	//逆置每个单词
	char* start = arr;
	while (*start) {
		char* end = start;
		while (*end!=' '&&*end!='\0') {
			end++;
		}
		reverse(start,end - 1);
		if (*end!='\0')
		end++;
		start = end;
	}
	//输出
	printf("%s\n", arr);

	return 0;
}
相关推荐
dreams_dream1 小时前
Python 的 GIL 是什么?有什么影响?
开发语言·python
麻瓜pro2 小时前
【迭代】高性能c++实时对话系统e2e_voice
开发语言·c++·onnxruntime·端到端语音
zjxtxdy2 小时前
C语言(续)
c语言·开发语言
无尽的沉默2 小时前
Thymeleaf 基本语法和表达式
java·开发语言
Coder_Boy_2 小时前
Java后端核心技术体系全解析(个人总结)
java·开发语言·spring boot·分布式·spring cloud·中间件
zh_xuan2 小时前
kotlin Flow的用法2
android·开发语言·kotlin·协程·flow·被压
南部余额2 小时前
函数式接口 Lambda 表达式好搭档:Predicate、Function、Consumer、Supplier
java·开发语言·consumer·lambda·function·predicate·supplier
Navigator_Z2 小时前
LeetCode //C - 964. Least Operators to Express Number
c语言·算法·leetcode
遨游xyz2 小时前
Trie树(字典树)
开发语言·python·mysql