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