C语言实例
1、求三个数的平均值
float AVE(float x, float y, float z)
{
float aver;
aver = (x + y + z) / 3;
return aver;
}
int main()
{
float a = 6.5;
float b = 4.2;
float c = 25.4;
float ave = 0;
ave = AVE(a, b, c);
printf("ave=%f\n", ave);
}

2、求两个数的较大值
int main()
{
int a, b;
printf("请输入两个数:");
scanf("%d,%d", &a, &b);
if (a > b)
printf("%d\n", a);
else
printf("%d\n", b);
}
3、求圆面积
#define PI 3.14159 //宏替换
int main()
{
float r, s;
system("cls");//清屏
printf("请输入半径:");
scanf("%f", &r);
if (r < 0)//半径不能为负数
{
printf("输入错误\n");
exit(0);//停止程序执行,返回操作系统
}
s = PI * pow(r, 2);//pow函数求次方
printf("圆的面积为:%.3f\n", s);//限制小数位数
}

4、交换两个数字
int main()
{
int a = 3;//011
int b = 5;//101
printf("交换前a=%d,b=%d\n", a, b);
//1.使用第三方变量
//int c = 0;
//c = a;
//a = b;
//b = c;
//2.使用两数和,容易造成整型溢出 INT_MAX
//a = a + b; //a是和,b还是原来的b
//b = a - b;//b得到原来的a
//a = a - b;//a得到原来的b
//3.按二进制位异或 相同为0,相异为1
a = a ^ b;//a=110 b=101
b = a ^ b;//b=011 a=110
a = a ^ b;//a=101 b=011
printf("交换后a=%d,b=%d\n", a, b);
}
5、找出整型中的单身狗
int main()
{
int arr[] = { 1,2,3,4,5,1,2,3,4 };
//1.暴力求解
/*int i = 0;
int j = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
for (i = 0; i < sz; i++)
{
int count = 0;
for (j = 0; j < sz; j++)
{
if (arr[i] == arr[j])
{
count++;
}
}
if (count == 1)
{
printf("单身狗:%d\n", arr[i]);
}
}*/
//2.异或 只能找到一只单身狗
int i = 0;
int ret = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
for (i = 0; i < sz; i++)
{
ret = ret ^ arr[i];
}
printf("单身狗:%d\n", ret);
}
6、将三个数从大到小输出
int main()
{
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
if (a < b)
{
int tem = a;
a = b;
b = tem;
}
if (a < c)
{
int tem = a;
a = c;
c = tem;
}
if (b < c)
{
int tem = b;
b = c;
c = tem;
}
printf("%d %d %d\n", a, b, c);
}
7、打印3的倍数
int main()
{
int i = 0;
for (i = 1; i <= 100; i++)
{
if (i % 3 == 0)
{
printf("%d\n", i);
}
}
}
8、判断一个数是否为奇数
int main()
{
int num;
scanf("%d", &num);
if (num % 2 == 1)
{
printf("是奇数");
}
else
{
printf("不是奇数");
}
return 0;
}

9、输出1-100之间的奇数
int main()
{
int i=0;
while (i < 100)
{
i++;
if (i % 2 == 1)
printf("%d\n", i);
}
return 0;
}
int main()
{
int i=1;
while (i < 100)
{
printf("%d\n", i);
i += 2;
}
return 0;
}

10、求两数的最大公约数
int main()
{
int m, n, r;
scanf("%d %d", &m, &n);
while (r=m%n)
{
m = n;
n = r;
}
printf("%d\n", n);
}
11、打印1000-2000年的闰年
int main()
{
int year;
int count = 0;
for (year = 1000; year <= 2000;year++)
{
//判断year是否为闰年
//1、能被4整除,不能被100整除是闰年
//2、能被四百整除是闰年
/*if (year % 4 == 0 && year % 100 != 0)
{
printf("%d ", year);
count++;
}
else if (year % 400 == 0)
{
printf("%d\n", year);
count++;
}*/
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
{
printf("%d\n", year);
count++;
}
}
printf("%d\n", count);
}
//函数形式
int is_leap_year(int n)
{
if ((n % 4 == 0 && n % 100 != 0) || n % 400 == 0)
return 1;
else
return 0;
}
int main()
{
int year;
for (year = 1000; year <= 2000; year++)
{
if (is_leap_year(year==1));
printf("%d\n", year);
}
}
12、打印100-200之间的素数
int main()
{
int i = 0;
int count = 0;
for (i = 100; i <= 200; i++)
{
//判断i是否为素数
//1.试除法
//产生2->i-1
int j = 0;
for (j = 2; j < i; j++)
{
if (i % j == 0)
{
break;
}
}
if (j == i)
{
count++;
printf("%d\n", i);
}
}
printf("%d\n", count);
}
//i=a*b a和b中至少有一个数字<=开平方i
#include<math.h>
int main()
{
int i = 0;
int count = 0;
for (i = 101; i <= 200; i+=2)//偶数一定不是素数,跳过所有偶数
{
int j = 0;
for (j = 2; j <= sqrt(i); j++)//开平方
{
if (i % j == 0)
{
break;
}
}
if (j > sqrt(i))
{
count++;
printf("%d\n", i);
}
}
printf("%d\n", count);
}
//函数形式 是素数返回1,不是素数返回0
int is_prime(int n)
{
int j = 0;
for (j = 2; j < n; j++)
{
if (n % j == 0)
{
return 0;
}
}
return 1;
}
int main()
{
int i = 0;
for (i = 100; i <= 200; i++)
{
//判断i是否为素数
if (is_prime(i) == 1)
printf("%d\n", i);
}
}
13、逆序打印字符串
int my_strlen(char* arr)
{
int count = 0;
while (*arr != '\0')
{
count++;
arr++;
}
return count;
}
void reverse_string(char* str)//指针传参
//{
// assert(str);
// int len = my_strlen(str);
// char* left = str;
// char* right = str + len - 1;
// while (left<right)
// {
// int tmp = *left;
// *left = *right;
// *right= tmp;
// left++;
// right--;
// }
//}
//void reverse_string(char arr[])//数组传参
//{
// int left = 0;
// int right = my_strlen(arr) - 1;
// while (left<right)
// {
// int tmp = arr[left];
// arr[left] = arr[right];
// arr[right] = tmp;
// left++;
// right--;
// }
//}
void reverse_string(char* arr)//递归形式
{
char tmp = arr[0];
int len = my_strlen(arr);
arr[0] = arr[len - 1];
arr[len - 1] = '\0';
if (my_strlen(arr + 1) >= 2)
{
reverse_string(arr + 1);
}
arr[len - 1] = tmp;
}
int main()
{
char arr[] = "abcdef";
reverse_string(arr);
printf("%s\n", arr);
}
14、输入一个非负整数,返回组成它的数字之和
int DigitSum(unsigned int num)//递归
{
if (num > 9)
{
return DigitSum(num / 10) + num % 10;
}
else
{
return num;
}
}
int main()
{
unsigned int num = 0;
scanf("%d", &num);
int ret = DigitSum(num);
printf("ret=%d\n", ret);
}
15、递归实现n的k次方
double Pow(int n, int k)
{
if (k < 0)
return(1.0 / (Pow(n, -k)));
else if (k ==0)
return 1;//停止
else
return n*Pow(n,k-1);
}
int main()
{
int n = 0;
int k = 0;
scanf("%d %d", &n,&k);
double ret = Pow(n, k);
printf("ret=%.2lf\n", ret);
}
16、五个人,每个选手说对一半,判断排名
A说:B第二,我第三
B说:我第二,E第四
C说:我第一,D第二
D说:C最后,我第三
E说:我第四,A第一
int main()
{
int a, b, c, d, e = 0;
for (a = 1; a <= 5; a++)
{
for (b = 1; b <= 5; b++)
{
for (c = 1; c <= 5; c++)
{
for (d = 1; d <= 5; d++)
{
for (e = 1; e <= 5; e++)
{
if (((b==2)+(a==3)==1) && ((b == 2) + (e == 4)==1) && ((c == 1) + (d == 2)==1) && ((c == 5) + (d == 3)==1) && ((e == 4) + (a == 1)==1))
{
if (a * b* c* d* e == 120)
{
printf("a=%d b=%d c=%d d=%d e=%d\n", a, b, c, d, e);
}
}
}
}
}
}
}
}

17、汽水问题 一瓶汽水一元,两个空瓶换一个汽水,问能喝几瓶
int main()
{
int money = 0;
int total = 0;
int empty = 0;
scanf("%d", &money);
//买回来的汽水
total = money;
empty = money;
//换回来的汽水
while (empty >= 2)
{
total += empty / 2;
empty = empty / 2 + empty % 2;
}
printf("total=%d\n", total);
}
//将数组的奇数放到前面,偶数放到后面
//从左边开始找一个偶数
//从右边开始找一个奇数
//把它们交换
void move(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;
}
}
}
void print(int arr[], int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
}
int main()
{
int arr[] = { 2,4 };
int sz = sizeof(arr) / sizeof(arr[0]);
move(arr, sz);
print(arr, sz);
}
18、求Sn=a+aa+aaa+aaaa+aaaaa前五项和
int main()
{
int n = 0;
int a = 0;
int i = 0;
int sum = 0;
int ret = 0;
scanf("%d %d", &a, &n);
//2 22 222 2222 2222 前一项*10+2
for (i = 0; i < n; i++)
{
ret = ret * 10 + 2;//求出每一项的数
sum += ret;//相加
}
printf("%d\n", sum);
}
19、水仙花(自幂数) n位数,每位数的n次方之和等于这个数
#include<math.h>
int main()
{
int i = 0;
for (i = 0; i <= 100000; i++)
{
//判断i是否为水仙花数
//1.判断i的位数--n
int n = 1;
int tmp = i;
while (tmp/=10)
{
n++;
}
//123/10=12 n++
//12/10=1 n++
//1/10=0
//2.计算i的每一位数的n次方之和 sum
tmp = i;
int sum = 0;
while (tmp)
{
sum+=pow(tmp % 10, n);
tmp /= 10;
}
//3.比较i和sum
if (i == sum)
{
printf("%d ", i);
}
}
}
20、打印菱形
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;
}
21、左旋字符串
//旋转字符串
//1、暴力求解
#include<string.h>
#include<assert.h>
void left_move(char* arr, int k)
{
assert(arr != NULL);
int i = 0;
int len = strlen(arr);
for (i = 0; i < k; i++)
{
//左旋转一个字符
//1.将第一个字符拿出来
char tmp = *arr;
//2.将其余字符分别往前移动一个
int j = 0;
for (j = 0; j < len - 1; j++)
{
*(arr + j) = *(arr + j + 1);
}
//3.将第一个字符放到最后一个
*(arr + len - 1) = tmp;
}
}
int main()
{
char arr[] = "abcdef";
left_move(arr,2);
printf("%s\n", arr);
}
//2、三步翻转法
//ab cdef
//ba fedc
//cdefab
//逆序字符串的函数
void reverse(char* left, char* right)
{
assert(left != NULL);
assert(right != NULL);
while (left < right)
{
char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
void left_move(char* arr, int k)
{
int len = strlen(arr);
assert(arr);
assert(k <= len);
reverse(arr, arr + k - 1);
reverse(arr + k, arr + len - 1);
reverse(arr, arr + len - 1);
}
int main()
{
char arr[] = "abcdef";
left_move(arr, 3);
printf("%s\n", arr);
}
22、判断字符串是否为左旋之后的字符串
int is_left_move(char* s1, char* s2)
{
int len = strlen(s1);
int i = 0;
for (i = 0; i < len; i++)
{
left_move(s1, 1);//穷举旋转后的所有字符串
int ret = strcmp(s1, s2);//比较
if (ret == 0)
return 1;
}
return 0;
}
int main()
{
char arr1[] = "abcdef";
char arr2[] = "cdefba";
int ret = is_left_move(arr1, arr2);
if (ret == 1)
printf("Yes\n");
else
printf("No\n");
}
int is_left_move(char* str1, char* str2)
{
int len1 = strlen(str1);
int len2 = strlen(str2);
if (len1 != len2)
return 0;
//1.在str1字符串中追加一个str1字符串
//strcat(str1,str1)//err
strncat(str1,str1,len1);
//2.判断str2指向的字符串是否是str1指向的字符串的子串
char* ret = strstr(str1, str2);//在str1中找str2,若找到返回str2的地址,找不到返回空指针
if (ret == NULL)
{
return 0;
}
else
{
return 1;
}
}
int main()
{
char arr1[30] = "abcdef";
char arr2[] = "cdefab";
int ret = is_left_move(arr1, arr2);
if (ret == 1)
printf("Yes\n");
else
printf("No\n");
}
23、杨氏矩阵 每一行从左到右依次增加,每一列从左到右依次增加
找右上角 一行里面最大的,一列里面最小的 //找左下角
一行里面最小的,一列里面最大的
int FindNum(int arr[3][3], int k, int*px, int*py)
{
int x = 0;
int y = *py - 1;
while (x <= *px - 1 && y >= 0)
{
if (arr[x][y] > k)
{
y--;
}
else if (arr[x][y] < k)
{
x++;
}
else
{
*px = x;
*py = y;
return 1;
}
}
return 0;
}
int main()
{
int arr[3][3] = { {1,2,3},{4,5,6},{7,8,9} };
int k = 7;
int x = 3;
int y = 3;
//返回型参数
int ret = FindNum(arr, k, &x, &y);
if (ret == 1)
{
printf("找到了\n");
printf("下标是%d %d\n", x, y);
}
else
{
printf("找不到\n");
}
}
该博客主要展示了一系列C语言实例,涵盖数学计算,如求平均值、最大公约数等;逻辑判断,如判断奇数、闰年等;字符串操作,如逆序打印、左旋等;还有一些趣味问题,如汽水问题、选手排名判断等,体现了C语言在不同场景的应用。
3224

被折叠的 条评论
为什么被折叠?



