C语言入门代码

简介: C语言入门

作为一个小白,自己学C的时候就想找些代码练练手,就整理了一些。

1.最大公约数和最小公倍数

复制代码

include

int main(void)
{
  int i, j;
   int p, q;
   int m, n;
   printf("请输入您想要操作的两个数:");
   scanf("%d %d", &p, &q);
   i = p;
   j = q;
   // 将较小的数放在 i, 较大的数放在 j
   int temp;
  if (i>j)
   {
     temp = j;
     j = i;
     i = temp;
   }

//代码效果参考:http://www.zidongmutanji.com/bxxx/324600.html
   int r;
   r = j%i;
   while (r!=0)
   {
   j = i;
     i = r;
     r = j%i;
   }
   m = i;
   n = (p*q)/m;
   printf("最大公约数为:%d\n最小公倍数为:%d\n", m, n);
   return 0;
}

复制代码

2.

将大写字母与小写字母相互转换

复制代码

include

int main(void)
{
   char big, small;
   big = getchar();
   small = big + 32;
   putchar(small);

   return 0;
}
复制代码

3.约瑟夫环问题

问题描述:
杰克船长想要从 20 个水手中选出一个人做大副,为了公平
起见,所有人围坐成一个圈,依次从 1 ~ 3 循环报数,当
报到 3 时的人退出,最后的人即为大副。如果你想要做大副
你要坐在那个位子?

复制代码

include

define PERSON_CNT 20

define OUT_NUM 3

int main(void)
{
  int Person[PERSON_CNT] = {0}, count, PersonOut;
   int i;
   // 为每个人编号,编号是下标加 1
   for (i=0; i 1) // 判断还剩下一个人
   {
     for (i=0; i<PERSON_CNT; ++i) // 一个个报数排除
     {
       if (Person[i] != 0)
       {
         count++; // 报数循环
         if (count == OUT_NUM)
         {
           // 将出局的人打印出来
            printf("No.%-2d Out! \n", Person[i]);
           Person[i] = 0; // 将编号设置为 0
           count = 0; // 将计数器归零
           PersonOut--;
         }
       }
       }
     }
   for (i=0; i<PERSON_CNT; ++i)
   {
     if (Person[i] != 0)
     printf("The last person is No.%-2d!\n", Person[i]);
   }

   return 0;
}
复制代码

  1. 杨辉三角

    问题描述:

    要求程序输出一个由数字组成的等腰三角形,三角形
    

    的两个腰上的数字和顶角上的数字都为以,而三角形
    内的每个数字等于它上一行正对的头顶上的两数字的
    和。
    数学分析结果:
    为了使输出结果是等腰三角形,可知道若三角形共有
    n 行,则第 i 行之前需要输出的空格数为 n-i-1个。
    代码分析:
    下面的代码是将数据做了类似与数组的处理,每行的
    每个数都是从第 0 行 第 0 个数据开始

复制代码

include

int main(void)
{
   int i, n, r, j, s;
   printf("请输入您想要输出的行数:");
   scanf("%d", &n);
   for (i=0; i<n; ++i) // 控制行的循环
   {
      for (j=0; j<=n-1-i; ++j) // 控制每行前面要输出的空格
     printf(" "); // 里面是两个空格。
      for (r=0; r<=i; ++r) // 控制每一行的每个数字的输出{
      {
       s = 1; // 每个数据都相当于 i 个数中取 r 的数的组合数,求组合数的值
       for (j=0; j<=r; j++) // 求组合数
        if (j!=0) // 每行第零个数都是 1
         s = s * (i-r+j) / j;
       printf("%4d", s); // 输出第 i 行的第 r 个数
     }
       printf("\n"); // 每行输出结束后,输出换行
   }

   return 0;
}
复制代码

5.输出三位数的逆序数

复制代码

include

int main(void)
{
   int number_1;
   printf("请输入一个三位数:");
   scanf("%d", &number_1);
   int i, j, k;
   i = number_1/100;
   j = (number_1 - i100)/10;
   k = number_1%10;
   int number_2;
   number_2 = i + j
10 + k*100;
   printf("%d", number_2);

return 0;
}
复制代码

6.十进制转化为二进制数

复制代码

include

define N 16 // 两个字节

int main(void)
{
unsigned int decimal; // 定义无符号十进制数
int arry[N], i, j;
printf("请输入您想要转换的数:");
scanf("%d", &decimal);
i = 0;
do
{
arry[i] = decimal%2;
++i;
decimal /= 2;
} while (decimal);
printf("\n转换后的二进制数为:");
for (j=i-1; j>=0; --j) // 逆序输出
{
printf("%d", arry[j]);
if (j%4 == 0 && j != 0) // 每个四位打印分隔符
{
printf(" ");
}
}
printf("\n");

return 0;
}
复制代码
//代码效果参考:http://www.zidongmutanji.com/zsjx/502377.html

  1. 生成随机数种子

    srand 函数

复制代码

include

include

include

int main(void)
{
srand(time(0));
printf("%ld", 10000 + rand()%90000);

return 0;
}
复制代码

每次运行后产生的结果都不相同。

8.判断某年是否为闰年

复制代码

include

int main(void)
{
int i;
printf("请输入您想要判定的年份:");
scanf("%d", &i);
if (i%4==0 && i%100!=0 ||i%400==0)
printf("%d 年是闰年!\n", i);
else
printf("%d年不是闰年!\n", i);

return 0;
}
复制代码

9.日期转换,将年月日转换成某年的第几天

复制代码

include

int main(void)
{
int DayTab[2][12] = {
{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
}; // 使用一个二维数组储存闰年和非闰年的每月的天数
int Year, Month, Day, DayCnt, Leap, i;
printf("请按照年月日的顺序输入日期:");
// 获取日期
scanf("%d%c%d%c%d", &Year, &Month, &Day);
/
由于无法保证用户输入日期的格式,使用%
c表示跳过一个输
入的字符,如要跳过两个字符,使用&2c /
DayCnt = Day;
// 判断是否为闰年
Leap = Year%4 == 0 && Year%100 != 0 || Year%400 == 0;
for (i=0; i<Month-1; ++i)
{
DayCnt += DayTab[Leap][i];
}
printf("%d年%d月%d日是%d年的第%d天!\n", Year, Month, Day, Year, DayCnt);

return 0;
}
复制代码

10.

取出一个整数的第 k 位
问题描述:即将一个数的二进制数的从右数起的第
k 为二进制数字输出。

复制代码

include

int main(void)
{
int i, j, k;
printf("请输入您想要操作的数:");
scanf("%d", &i);
printf("请输入您想要拿出的位数:");
scanf("%d", &j);
i >>= j-1; // 将 i 向右移动 j-1 位
k = i&1; // 按位与运算
printf("%d\n", k);

return 0;
}
复制代码

11.判断一个数字是否为素数

复制代码

include

int main(void)
{
int i, j;
printf("请输入您想要判定的数:");
scanf("%d", &i);
for (j=2; j<i; ++j)
{
if (i%j == 0)
break;
}
if (j == i)
printf("%d是素数!\n", i);
else
printf("%d不是素数!\n", i);

return 0;
}
复制代码

  1. 矩阵转置 将一个 34 的矩阵转置成一个 43 的矩阵

复制代码

include

include

include

int main(void)
{
srand(time(0)); // 生成随机数种子
int arry_1[3][4], arry_2[4][3];
int i, j;
for (i=0; i<3; ++i)
for (j=0; j<4; ++j)
{
arry_1[i][j] = rand()%100; // 生成随机数
}
for (i=0; i<3; ++i)
for (j=0; j<4; ++j)
{
arry_2[j][i] = arry_1[i][j]; // 矩阵转置
}
for (i=0; i<3; ++i) // 打印原矩阵
{
for (j=0; j<4; ++j)
{
printf("%-4d", arry_1[i][j]);
}
printf("\n");
}
for (i=0; i<4; ++i) // 打印转置后的矩阵
{
for (j=0; j<3; ++j)
{
printf("%-4d", arry_2[i][j]);
}
printf("\n");
}

return 0;
}
复制代码

13.九九乘法口诀表

复制代码

include

int main(void)
{
int i, j, k;
for (i=1; i<=9; ++i)
{
for (j=1; j<=i; ++j)
{
k = ji;
printf("%2d
%2d = %2d", j, i, k);
}
printf("\n");
}

return 0;
}
复制代码

14.

比赛选手评分
规则:去除最高分和最低分,以剩下的分数的平均分为准。

复制代码

include

// 前置申明
double MAX(double , int);
double MIN(double
, int);
int main(void)
{
int i; // 裁判人数
double sum = 0, ave, max, min, score[i];
// 数据代表 总分,平均分,最高分,最低分,每个裁判各处的分数
printf("请输入裁判人数:");
scanf("%d", &i);
printf("\n请输入每个裁判给的分数:");
int j;
for (j=0; j<i; ++j) // 输入裁判评分情况
{

//代码效果参考:http://www.zidongmutanji.com/bxxx/245890.html
scanf("%lf", &score[j]);
}
max = MAX(score, i); //求出最高分
min = MIN(score, i); //求出最低分
for (j=0; j<i; ++j)
{
sum += score[j];
}
ave = (sum - min - max) * (1.0/(i - 2));
printf("选手总分为:%lf,选手平均得分为:%lf", sum, ave);

return 0;
}
// 求最大值
double MAX(double a, int i)
{
double max;
for (int j=0; j a[j+1])
max = a[j];
else
max = a[j+1];
}
return max;
}
// 求最小值
double MIN(double
a, int i)
{
double min;
for (int j=0; j<i-1; ++j)
{
if (a[j] < a[j+1])
min = a[j];
else
min = a[j+1];
}
return min;
}
复制代码

  1. Fibonacci

复制代码

include

int main(void)
{
int i, j, k;
int val;
i = 1;
j = 1;
for (k = 1; k <= 20; ++k)
{
if (1 == k)
val = i;
else if (2 == k)
val = j;
else
{
val = i + j;
i = j;
j = val;
}
printf("%d\n", val);
}

return 0;

// 次程序和上一个程序的区别是使用循环和选择将数组替换了
}
复制代码

16.

猴子吃桃问题:
猴子第一天摘了若干个桃子,当即吃了一半零一个,以后每天
都吃剩下的一半零一个,到第十天,准备吃的时候,只剩下了
一个,问最开始猴子摘了多少个桃子。

复制代码

include

int main(void)
{
int i, sum = 1;
for (i=0; i<9; ++i)
{
sum = (sum+1) * 2;
}
printf("%d", sum);

return 0;
}

复制代码

17.将一个整数的二进制表示的第 k 位清零

复制代码

include

int main(void)
{
int i, j, k;
printf("请输入您想要操作的数和所操作的位数:");
scanf("%d %d", &i, &j);
k = i&~(1<<j-1);
printf("%o,%o\n", i, k);

return 0;
}
复制代码

  1. 交换两数的值

复制代码

include

int main(void)
{
int i, j, temp;
printf("请输入两个需要被交换的数:");
scanf("%d %d", &i, &j);
temp = i;
i = j;
j = temp;
printf("%d, %d", i, j);

return 0;
}

相关文章
|
1月前
|
NoSQL 编译器 程序员
【C语言】揭秘GCC:从平凡到卓越的编译艺术,一场代码与效率的激情碰撞,探索那些不为人知的秘密武器,让你的程序瞬间提速百倍!
【8月更文挑战第20天】GCC,GNU Compiler Collection,是GNU项目中的开源编译器集合,支持C、C++等多种语言。作为C语言程序员的重要工具,GCC具备跨平台性、高度可配置性及丰富的优化选项等特点。通过简单示例,如编译“Hello, GCC!”程序 (`gcc -o hello hello.c`),展示了GCC的基础用法及不同优化级别(`-O0`, `-O1`, `-O3`)对性能的影响。GCC还支持生成调试信息(`-g`),便于使用GDB等工具进行调试。尽管有如Microsoft Visual C++、Clang等竞品,GCC仍因其灵活性和强大的功能被广泛采用。
91 1
|
1月前
|
存储 C语言
【C语言】基础刷题训练4(含全面分析和代码改进示例)
【C语言】基础刷题训练4(含全面分析和代码改进示例)
|
2天前
|
安全 C语言
在C语言中,正确使用运算符能提升代码的可读性和效率
在C语言中,运算符的使用需要注意优先级、结合性、自增自减的形式、逻辑运算的短路特性、位运算的类型、条件运算的可读性、类型转换以及使用括号来明确运算顺序。掌握这些注意事项可以帮助编写出更安全和高效的代码。
16 4
|
19天前
|
存储 算法 C语言
数据结构基础详解(C语言):单链表_定义_初始化_插入_删除_查找_建立操作_纯c语言代码注释讲解
本文详细介绍了单链表的理论知识,涵盖单链表的定义、优点与缺点,并通过示例代码讲解了单链表的初始化、插入、删除、查找等核心操作。文中还具体分析了按位序插入、指定节点前后插入、按位序删除及按值查找等算法实现,并提供了尾插法和头插法建立单链表的方法,帮助读者深入理解单链表的基本原理与应用技巧。
|
19天前
|
存储 C语言 C++
数据结构基础详解(C语言) 顺序表:顺序表静态分配和动态分配增删改查基本操作的基本介绍及c语言代码实现
本文介绍了顺序表的定义及其在C/C++中的实现方法。顺序表通过连续存储空间实现线性表,使逻辑上相邻的元素在物理位置上也相邻。文章详细描述了静态分配与动态分配两种方式下的顺序表定义、初始化、插入、删除、查找等基本操作,并提供了具体代码示例。静态分配方式下顺序表的长度固定,而动态分配则可根据需求调整大小。此外,还总结了顺序表的优点,如随机访问效率高、存储密度大,以及缺点,如扩展不便和插入删除操作成本高等特点。
|
19天前
|
存储 C语言
数据结构基础详解(C语言): 栈与队列的详解附完整代码
栈是一种仅允许在一端进行插入和删除操作的线性表,常用于解决括号匹配、函数调用等问题。栈分为顺序栈和链栈,顺序栈使用数组存储,链栈基于单链表实现。栈的主要操作包括初始化、销毁、入栈、出栈等。栈的应用广泛,如表达式求值、递归等场景。栈的顺序存储结构由数组和栈顶指针构成,链栈则基于单链表的头插法实现。
123 3
|
19天前
|
存储 算法 C语言
C语言手撕实战代码_二叉排序树(二叉搜索树)_构建_删除_插入操作详解
这份二叉排序树习题集涵盖了二叉搜索树(BST)的基本操作,包括构建、查找、删除等核心功能。通过多个具体示例,如构建BST、查找节点所在层数、删除特定节点及查找小于某个关键字的所有节点等,帮助读者深入理解二叉排序树的工作原理与应用技巧。此外,还介绍了如何将一棵二叉树分解为两棵满足特定条件的BST,以及删除所有关键字小于指定值的节点等高级操作。每个题目均配有详细解释与代码实现,便于学习与实践。
|
19天前
|
存储 算法 C语言
C语言手撕实战代码_二叉树_构造二叉树_层序遍历二叉树_二叉树深度的超详细代码实现
这段代码和文本介绍了一系列二叉树相关的问题及其解决方案。其中包括根据前序和中序序列构建二叉树、通过层次遍历序列和中序序列创建二叉树、计算二叉树节点数量、叶子节点数量、度为1的节点数量、二叉树高度、特定节点子树深度、判断两棵树是否相似、将叶子节点链接成双向链表、计算算术表达式的值、判断是否为完全二叉树以及求二叉树的最大宽度等。每道题目均提供了详细的算法思路及相应的C/C++代码实现,帮助读者理解和掌握二叉树的基本操作与应用。
|
19天前
|
存储 算法 C语言
C语言手撕实战代码_循环单链表和循环双链表
本文档详细介绍了用C语言实现循环单链表和循环双链表的相关算法。包括循环单链表的建立、逆转、左移、拆分及合并等操作;以及双链表的建立、遍历、排序和循环双链表的重组。通过具体示例和代码片段,展示了每种算法的实现思路与步骤,帮助读者深入理解并掌握这些数据结构的基本操作方法。
|
19天前
|
算法 C语言 开发者
C语言手撕实战代码_单链表
本文档详细介绍了使用C语言实现单链表的各种基本操作和经典算法。内容涵盖单链表的构建、插入、查找、合并及特殊操作,如头插法和尾插法构建单链表、插入元素、查找倒数第m个节点、合并两个有序链表等。每部分均配有详细的代码示例和注释,帮助读者更好地理解和掌握单链表的编程技巧。此外,还提供了判断子链、查找公共后缀等进阶题目,适合初学者和有一定基础的开发者学习参考。