初学c语言中的一些常见代码
1.输出乘法口诀表#include<stdio.h>int main(){int i = 0;for (i = 1; i < 10; i++){//打印一行int j = 0;for (j = 1; j <=i; j++){printf("%d*%d = %-4d", j,i , i*j);}printf("\n...
·
初学c语言中的一些常见代码
- 一、输出乘法口诀表
- 二、判断1000年---2000年之间的闰年
- 三、输出1~100之间的奇数
- 五、计算1!+2!+3!+...+10!
- 六、在一个有序数组中查找具体的某个数字n
- 七、编写代码,演示多个字符从两端移动,向中间汇聚
- 八、编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则提示登陆成功,如果三次均输入错误,则退出程序)
- 九、猜数字游戏
- 十、关机小程序
- 十一、打印100~200之间的素数(递归)试除法见第三篇博客
- 十二、给定两个整形变量的值,将两个值的内容进行交换
- 十三、不允许创建临时变量,交换两个数的内容
- 十四、求10 个整数中最大值
- 十五、将三个数按从大到小输出
- 十六、求两个数的最大公约数
- 十七、将数组A中的内容和数组B中的内容进行交换。(数组一样大)
- 十八、计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值
- 十九、编写程序数一下 1到 100 的所有整数中出现多少次数字9
- 二十、在屏幕上输出菱形
- 二十一、求出0~999之间的所有“水仙花数”并输出
- 二十二、求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字, 例如:2+22+222+2222+22222
- 二十三、编写一个程序,可以一直接收键盘字符, 如果是小写字符就输出对应的大写字符, 如果接收的是大写字符,就输出对应的小写字符, 如果是数字不输出
- 二十四、实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定,
- 二十五、创建一个数组, 实现函数init()初始化数组、 实现empty()清空数组、 实现reverse()函数完成数组元素的逆置。 要求:自己设计函数的参数,返回值。
- 二十六、编写一个函数实现n^k,使用递归实现
- 二十七、strlen的常规写法和递归写法
一、输出乘法口诀表
#include<stdio.h>
int main()
{
int i = 0;
for (i = 1; i < 10; i++)
{
//打印一行
int j = 0;
for (j = 1; j <=i; j++)
{
printf("%d*%d = %-4d", j,i , i*j);
}
printf("\n");
}
return 0;
}
二、判断1000年—2000年之间的闰年
方法1:
#include<stdio.h>
int main()
{
int year = 0;
for (year = 1000; year <= 2000; year++)
{
if (year % 4 == 0)
{
if (year % 100 != 0)
{
printf("%d ",year);
}
}
if (year % 400 == 0)//不能用else if,因为year%4要是成立,程序就不会跑到else if这里
{
printf("%d ", year);
}
}
return 0;
}
方法2:
#include<stdio.h>
int main()
{
int year = 0;
for (year = 1000; year <= 2000; year++)
{
if (((year%4 == 0)&&(year%100!=0)) || (year%400 == 0))
printf("%d ", year);
}
return 0;
}
三、输出1~100之间的奇数
方法1:
#include<stdio.h>
int main()
{
int i = 0;
for (i = 1; i <= 100; i++)
{
if (i % 2 == 1)
{
printf("%d ", i);
}
}
return 0;
}
方法2:
#include<stdio.h>
int main()
{
int i = 0;
for (i = 1; i <= 100; i+=2)
printf("%d ", i);
return 0;
}
四、计算n的阶乘
#include<stdio.h>
int main()
{
int n = 0;
int i = 0;
int ret = 0;
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
ret = ret*i;
}
printf("%d", ret);
return 0;
}
五、计算1!+2!+3!+…+10!
方法1:
#include<stdio.h>
int main()
{
int n = 0;
int i = 0;
int ret = 1;
int sum = 0;
for (n = 1; n <= 10; n++)
{
ret = 1;
for (i = 1; i <= n; i++)
{
ret = ret*i;
}
sum = sum + ret;
}
printf("%d\n", sum);
return 0;
}
方法2:
#include<stdio.h>
int main()
{
int n = 0;
int i = 0;
int ret = 1;
int sum = 0;
for (n = 1; n <= 10; n++)
{
ret = ret*n;
sum = sum + ret;
}
printf("%d\n", sum);
return 0;
}
六、在一个有序数组中查找具体的某个数字n
#include<stdio.h>
int main()
{
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int k = 7;
int left = 0;
int right = 9;
while (left <= right)
{
int mid = (left + right) / 2;
if (arr[mid] > k)
{
right = mid - 1;
}
else if (arr[mid] < k)
{
left = mid - 1;
}
else
{
printf("找到了,下标是:%d\n", mid);
break;
}
if (left>right)
{
printf("找不到\n");
}
}
return 0;
}
七、编写代码,演示多个字符从两端移动,向中间汇聚
#include<stdio.h>
#include<string.h>
#include<windows.h>
int main()
{
char arr1[] = "welcome to school!!!";
char arr2[] = "####################";
int left = 0;
int right = strlen(arr1) - 1;
while (left <= right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
Sleep(1000);
system("cls");
left++;
right--;
}
return 0;
}
八、编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则提示登陆成功,如果三次均输入错误,则退出程序)
#include<stdio.h>
int main()
{
int i = 0;
char password[20] = { 0 };
for (i = 0; i < 3; i++)
{
printf("请输入密码:");
scanf("%s", password);
if (strcmp(password, "123456") == 0)
{
printf("登陆成功\n");
break;
}
else
{
printf("密码错误,请重新输入!\n");
}
if (i == 3)
{
printf("三次密码错误,退出程序\n");
}
}
return 0;
}
九、猜数字游戏
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()
{
printf("*********************************\n");
printf("********** 1.play **********\n");
printf("********** 0.exit **********\n");
printf("*********************************\n");
}
void game()
{
int ret = rand()%100 + 1;
int guess = 0;
while (1)
{
printf("请输入猜的数字:");
scanf("%d", &guess);
if (ret < guess)
{
printf("猜大了\n");
}
else if (ret>guess)
{
printf("猜小了\n");
}
else
{
printf("恭喜您,猜对了\n");
break;
}
}
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL));
do
{
menu();
printf("请选择\n");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
break;
default:
printf("选择错误,请重新输入!\n");
break;
}
}while (input);
return 0;
}
十、关机小程序
方法1:
#include<stdio.h>
int main()
{
char input[20] = { 0 };
system("shutdow -s -t 60");
again:
printf("请注意,您的电脑将在一分钟内关机,如果输入:我是猪,就取消关机\n");
scanf("%s", input);
if (strcmp(input, "我是猪") == 0)
{system("shutdown -a");
}
else
{
goto again;
}
return 0;
}
方法2:
#include<stdio.h>
int main()
{
char input[20] = { 0 };
system("shutdow -s -t 60");
while (1)
{
printf("请注意,您的电脑将在一分钟内关机,如果输入:我是猪,就取消关机\n");
scanf("%s", input);
if (strcmp(input, "我是猪") == 0)
{
system("shutdown -a");
break;
}
}
return 0;
}
十一、打印100~200之间的素数(递归)试除法见第三篇博客
#include<stdio.h>
int is_prime(int i)
{
int j = 0;
for (j = 2; j <i; j++)
{
if (i%j == 0)
return 0;
}
return 1;
}
int main()
{
int i = 0;
//int count = 0;
for (i = 100; i <= 200; i++)
{
if (is_prime(i) == 1)
{
//count++;
printf("%d ", i);
}
}
//printf("\ncount = %d\n", count);
return 0;
}
十二、给定两个整形变量的值,将两个值的内容进行交换
#include<stdio.h>
int main()
{
int a = 3;
int b = 5;
int c = 0;
printf("a = %d b = %d\n", a, b);
c = a;
a = b;
b = c;
printf("a = %d b = %d\n", a, b);
return 0;
}
十三、不允许创建临时变量,交换两个数的内容
方法1:
#include<stdio.h>
int main()
{
int a = 3;
int b = 5;
printf("a = %d b = %d\n", a, b);
a = a + b;
b = a-b;
a = a-b;
printf("a = %d b = %d\n", a, b);
return 0;
}
方法2:
#include<stdio.h>
int main()
{
int a = 3;
int b = 5;
printf("a = %d b = %d\n", a, b);
a = a^b;
b = a^b;
a = a^b;
printf("a = %d b = %d\n", a, b);
return 0;
}
十四、求10 个整数中最大值
#include<stdio.h>
int main()
{
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
int max = arr[0];
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
for (i = 1; i < sz; i++)
{
if (arr[i]>max)
{
max = arr[i];
}
}
printf("max = %d\n", max);
return 0;
}
十五、将三个数按从大到小输出
#include<stdio.h>
int main()
{
int a = 2;
int b = 1;
int c = 3;
if (a < b)
{
int tmp = a;
a = b;
b = tmp;
}
if (a < c)
{
int tmp = a;
a = c;
c = tmp;
}
if (b < c)
{
int tmp = b;
b = c;
c = tmp;
}
printf("%d %d %d\n", a, b, c);
return 0;
}
- 上述过程太过冗余,优化代码如下:
#include<stdio.h>
void Swap(int *px, int *py)
{
int tmp = 0;
tmp = *px;
*px = *py;
*py = tmp;
}
int main()
{
int a = 2;
int b = 1;
int c = 3;
if (a < b)
{
Swap(&a, &b);
}
if (a < c)
{
Swap(&a, &c);
}
if (b < c)
{
Swap(&b, &c);
}
printf("%d %d %d\n", a, b, c);
return 0;
}
十六、求两个数的最大公约数
#include<stdio.h>
int main()
{
int a = 24;
int b = 18;
int c = 0;
while (c = a%b)
{
a = b;
b = c;
}
printf("%d\n", b);
return 0;
}
十七、将数组A中的内容和数组B中的内容进行交换。(数组一样大)
#include<stdio.h>
int main()
{
int arr1[] = { 1, 3, 5, 7, 9 };
int arr2[] = { 2, 4, 6, 8, 0 };
int sz = sizeof(arr1) / sizeof(arr1[0]);
int tmp = 0;
int i = 0;
for (i = 0; i < sz; i++)
{
tmp = arr1[i];
arr1[i] = arr2[i];
arr2[i] = tmp;
printf("%d ", arr1[i]);
}
return 0;
}
十八、计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值
#include<stdio.h>
int main()
{
int i = 0;
double sum = 0;
int flag = 1;
for (i = 1; i <= 100; i++)
{
sum += flag*1.0/i;
flag = -flag;
}
printf("%lf\n", sum);
return 0;
}
十九、编写程序数一下 1到 100 的所有整数中出现多少次数字9
#include<stdio.h>
int main()
{
int i = 0;
int count = 0;
for (i = 1; i <= 100; i++)
{
if (i % 10 == 9)
count++;
if (i / 10 == 9)
count++;
}
printf("%d\n", count);
return 0;
}
二十、在屏幕上输出菱形
#include<stdio.h>
int main()
{
int i = 0;
int line = 0;
scanf("%d", &line);//15 7
//上
for (i = 0; i < line;i++)
{
int j = 0;
//打印一行
//打印空格
for (j = 0; j < line - i - 1; 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;
}
二十一、求出0~999之间的所有“水仙花数”并输出
- “水仙花数”是指一个三位数,其各位数字的立方和确好等于该数本身,如;153=1+5+3?,则153是一个“水仙花数”。(在数论中,水仙花数(Narcissistic number)也称为自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),是指一N位数,其各个数之N次方和等于该数。 例如153、370、371及407就是三位数的水仙花数,其各个数之立方和等于该数:
- 153 = 1^3 + 5^3 + 3^3。
- 370 = 3^3 + 7^3 + 0^3。
- 371 = 3^3 + 7^3 + 1^3。
- 407 = 4^3 + 0^3 + 7^3.
#include<stdio.h>
#include<math.h>
int main()
{
int i = 0;
for (i = 1; i < 1000; i++)
{
int count = 1;
double sum = 0;
//求出位数
int tmp = i;
while (tmp / 10)
{
count++;
tmp /= 10;
}
//计算每一位n次方的和
tmp = i;
while (tmp)
{
sum += pow(tmp % 10, count);
tmp/= 10;
}
//判断
if (sum == i)
{
printf("%d\n", i);
}
}
return 0;
}
二十二、求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字, 例如:2+22+222+2222+22222
#include<stdio.h>
int main()
{
int a = 0;
int n = 0;
int sum = 0;
int i = 0;
int k = 0;
scanf("%d%d", &a, &n);
for (i = 0; i < n; i++)
{
k = k * 10 + a;
sum += k;
}
printf("%d\n", sum);
return 0;
}
二十三、编写一个程序,可以一直接收键盘字符, 如果是小写字符就输出对应的大写字符, 如果接收的是大写字符,就输出对应的小写字符, 如果是数字不输出
方法1:
#include<stdio.h>
int main()
{
int ch = 0;
while ((ch = getchar()) != EOF)
{
if (ch >= 'a' && ch <= 'z')
{
putchar(ch - 32);
}
else if (ch >= 'A' && ch <= 'Z')
{
putchar(ch + 32);
}
else if (ch >= '0' && ch <= '9')
{
continue;
}
else
{
putchar(ch);
}
}
return 0;
}
方法2:
#include<stdio.h>
#include<ctype.h>
int main()
{
int ch = 0;
while ((ch = getchar()) != EOF)
{
if (islower(ch))
{
putchar(toupper(ch));
}
else if (isupper(ch))
{
putchar(tolower(ch));
}
else if (isdigit(ch))
{
continue;
}
else
{
putchar(ch);
}
}
return 0;
}
二十四、实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定,
- 输入9,输出99口诀表,输入12,输出1212的乘法口诀表。**
#include<stdio.h>
void PrintTable(int n)
{
int i = 0;
for (i = 1; i <= n; i++)
{
int j = 0;
for (j = 1; j <= i; j++)
{
printf("%d*%d = %-3d ", i, j, i*j);
}
printf("\n");
}
}
int main()
{
int line = 0;
scanf("%d", &line);//9
PrintTable(line);
return 0;
}
二十五、创建一个数组, 实现函数init()初始化数组、 实现empty()清空数组、 实现reverse()函数完成数组元素的逆置。 要求:自己设计函数的参数,返回值。
#include<stdio.h>
void Init(int arr[], int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
arr[i] = 0;
}
}
void Print(int arr[], int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
void Reverse(int arr[], int sz)
{
int left = 0;
int right = sz - 1;
while (left < right)
{
int tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
left++;
right--;
}
}
int main()
{
int arr[5] = { 1,2,3,4,5 };
int sz = sizeof(arr) / sizeof(arr[0]);
//Print(arr, sz);
//Init(arr, sz);
Print(arr, sz);
Reverse(arr, sz);
Print(arr, sz);
return 0;
}
二十六、编写一个函数实现n^k,使用递归实现
#include<stdio.h>
double Pow(int n, int k)
{
if (k > 0)
return n*Pow(n, k - 1);
else if (k == 0)
return 1;
else
return 1.0/Pow(n, -k);
}
int main()
{
int n = 0;
int k = 0;
double ret = 0.0;
scanf("%d%d", &n, &k);
ret = Pow(n,k);
printf("ret = %lf\n", ret);
return 0;
}
二十七、strlen的常规写法和递归写法
常规写法:
#include<stdio.h>
#include<assert.h>
int my_strlen(const char *str)
{
int count = 0;
assert(str != NULL);
while (*str != '\0')
{
count++;
str++;
}
return count;
}
int main()
{
char arr[] = "girl";
int len = my_strlen(arr);
printf("len = %d\n", len);
return 0;
}
递归写法:
#include<stdio.h>
#include<assert.h>
int my_strlen(const char *str)
{
assert(str != NULL);
if (*str != '\0')
return 1 + my_strlen(str + 1);
else
return 0;
}
int main()
{
char arr[] = "girl";
int len = my_strlen(arr);
printf("len = %d\n", len);
return 0;
}
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献2条内容
所有评论(0)