适合初学C语言是练习的代码
作为一个小白,自己学C的时候就想找些代码练练手,就整理了一些。
1.最大公约数和最小公倍数
# include <stdio.h>
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;
}
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 <stdio.h>
int main(void)
{
char big, small;
big = getchar();
small = big + ;
putchar(small); return ;
}
3.约瑟夫环问题
问题描述:
杰克船长想要从 20 个水手中选出一个人做大副,为了公平
起见,所有人围坐成一个圈,依次从 1 ~ 3 循环报数,当
报到 3 时的人退出,最后的人即为大副。如果你想要做大副
你要坐在那个位子?
# include <stdio.h>
# define PERSON_CNT
# define OUT_NUM
int main(void)
{
int Person[PERSON_CNT] = {}, count, PersonOut;
int i;
// 为每个人编号,编号是下标加 1
for (i=; i<PERSON_CNT; ++i)
Person[i] = i + ;
// 记录报数的人的人数
PersonOut = PERSON_CNT;
count = ;
while (PersonOut > ) // 判断还剩下一个人
{
for (i=; i<PERSON_CNT; ++i) // 一个个报数排除
{
if (Person[i] != )
{
count++; // 报数循环
if (count == OUT_NUM)
{
// 将出局的人打印出来
printf("No.%-2d Out! \n", Person[i]);
Person[i] = ; // 将编号设置为 0
count = ; // 将计数器归零
PersonOut--;
}
}
}
}
for (i=; i<PERSON_CNT; ++i)
{
if (Person[i] != )
printf("The last person is No.%-2d!\n", Person[i]);
} return ;
}
4. 杨辉三角
问题描述:
要求程序输出一个由数字组成的等腰三角形,三角形
的两个腰上的数字和顶角上的数字都为以,而三角形
内的每个数字等于它上一行正对的头顶上的两数字的
和。
数学分析结果:
为了使输出结果是等腰三角形,可知道若三角形共有
n 行,则第 i 行之前需要输出的空格数为 n-i-1个。
代码分析:
下面的代码是将数据做了类似与数组的处理,每行的
每个数都是从第 0 行 第 0 个数据开始
# include <stdio.h>
int main(void)
{
int i, n, r, j, s;
printf("请输入您想要输出的行数:");
scanf("%d", &n);
for (i=; i<n; ++i) // 控制行的循环
{
for (j=; j<=n--i; ++j) // 控制每行前面要输出的空格
printf(" "); // 里面是两个空格。
for (r=; r<=i; ++r) // 控制每一行的每个数字的输出{
{
s = ; // 每个数据都相当于 i 个数中取 r 的数的组合数,求组合数的值
for (j=; j<=r; j++) // 求组合数
if (j!=) // 每行第零个数都是 1
s = s * (i-r+j) / j;
printf("%4d", s); // 输出第 i 行的第 r 个数
}
printf("\n"); // 每行输出结束后,输出换行
} return ;
}
5.输出三位数的逆序数
# include <stdio.h>
int main(void)
{
int number_1;
printf("请输入一个三位数:");
scanf("%d", &number_1);
int i, j, k;
i = number_1/;
j = (number_1 - i*)/;
k = number_1%;
int number_2;
number_2 = i + j* + k*;
printf("%d", number_2); return ;
}
6.十进制转化为二进制数
# include <stdio.h>
# define N // 两个字节
int main(void)
{
unsigned int decimal; // 定义无符号十进制数
int arry[N], i, j;
printf("请输入您想要转换的数:");
scanf("%d", &decimal);
i = ;
do
{
arry[i] = decimal%;
++i;
decimal /= ;
} while (decimal);
printf("\n转换后的二进制数为:");
for (j=i-; j>=; --j) // 逆序输出
{
printf("%d", arry[j]);
if (j% == && j != ) // 每个四位打印分隔符
{
printf(" ");
}
}
printf("\n"); return ;
}
7. 生成随机数种子
srand 函数
# include <stdio.h>
# include <time.h>
# include <stdlib.h>
int main(void)
{
srand(time());
printf("%ld", + rand()%); return ;
}
每次运行后产生的结果都不相同。
8.判断某年是否为闰年
# include <stdio.h>
int main(void)
{
int i;
printf("请输入您想要判定的年份:");
scanf("%d", &i);
if (i%== && i%!= ||i%==)
printf("%d 年是闰年!\n", i);
else
printf("%d年不是闰年!\n", i); return ;
}
9.日期转换,将年月日转换成某年的第几天
# include <stdio.h>
int main(void)
{
int DayTab[][] = {
{, , , , , , , , , , , },
{, , , , , , , , , , , }
}; // 使用一个二维数组储存闰年和非闰年的每月的天数
int Year, Month, Day, DayCnt, Leap, i;
printf("请按照年月日的顺序输入日期:");
// 获取日期
scanf("%d%*c%d%*c%d", &Year, &Month, &Day);
/*
由于无法保证用户输入日期的格式,使用%*c表示跳过一个输
入的字符,如要跳过两个字符,使用&2*c
*/
DayCnt = Day;
// 判断是否为闰年
Leap = Year% == && Year% != || Year% == ;
for (i=; i<Month-; ++i)
{
DayCnt += DayTab[Leap][i];
}
printf("%d年%d月%d日是%d年的第%d天!\n", Year, Month, Day, Year, DayCnt); return ;
}
10.
取出一个整数的第 k 位
问题描述:即将一个数的二进制数的从右数起的第
k 为二进制数字输出。
# include <stdio.h>
int main(void)
{
int i, j, k;
printf("请输入您想要操作的数:");
scanf("%d", &i);
printf("请输入您想要拿出的位数:");
scanf("%d", &j);
i >>= j-; // 将 i 向右移动 j-1 位
k = i&; // 按位与运算
printf("%d\n", k); return ;
}
11.判断一个数字是否为素数
# include <stdio.h>
int main(void)
{
int i, j;
printf("请输入您想要判定的数:");
scanf("%d", &i);
for (j=; j<i; ++j)
{
if (i%j == )
break;
}
if (j == i)
printf("%d是素数!\n", i);
else
printf("%d不是素数!\n", i); return ;
}
12. 矩阵转置 将一个 3*4 的矩阵转置成一个 4*3 的矩阵
# include <stdio.h>
# include <time.h>
# include <stdlib.h>
int main(void)
{
srand(time()); // 生成随机数种子
int arry_1[][], arry_2[][];
int i, j;
for (i=; i<; ++i)
for (j=; j<; ++j)
{
arry_1[i][j] = rand()%; // 生成随机数
}
for (i=; i<; ++i)
for (j=; j<; ++j)
{
arry_2[j][i] = arry_1[i][j]; // 矩阵转置
}
for (i=; i<; ++i) // 打印原矩阵
{
for (j=; j<; ++j)
{
printf("%-4d", arry_1[i][j]);
}
printf("\n");
}
for (i=; i<; ++i) // 打印转置后的矩阵
{
for (j=; j<; ++j)
{
printf("%-4d", arry_2[i][j]);
}
printf("\n");
} return ;
}
13.九九乘法口诀表
# include <stdio.h>
int main(void)
{
int i, j, k;
for (i=; i<=; ++i)
{
for (j=; j<=i; ++j)
{
k = j*i;
printf("%2d * %2d = %2d", j, i, k);
}
printf("\n");
} return ;
}
14.
比赛选手评分
规则:去除最高分和最低分,以剩下的分数的平均分为准。
# include <stdio.h>
// 前置申明
double MAX(double *, int);
double MIN(double *, int);
int main(void)
{
int i; // 裁判人数
double sum = , ave, max, min, score[i];
// 数据代表 总分,平均分,最高分,最低分,每个裁判各处的分数
printf("请输入裁判人数:");
scanf("%d", &i);
printf("\n请输入每个裁判给的分数:");
int j;
for (j=; j<i; ++j) // 输入裁判评分情况
{
scanf("%lf", &score[j]);
}
max = MAX(score, i); //求出最高分
min = MIN(score, i); //求出最低分
for (j=; j<i; ++j)
{
sum += score[j];
}
ave = (sum - min - max) * (1.0/(i - ));
printf("选手总分为:%lf,选手平均得分为:%lf", sum, ave); return ;
}
// 求最大值
double MAX(double * a, int i)
{
double max;
for (int j=; j<i-; ++j)
{
if (a[j] > a[j+])
max = a[j];
else
max = a[j+];
}
return max;
}
// 求最小值
double MIN(double * a, int i)
{
double min;
for (int j=; j<i-; ++j)
{
if (a[j] < a[j+])
min = a[j];
else
min = a[j+];
}
return min;
}
15. Fibonacci
# include <stdio.h>
int main(void)
{
int i, j, k;
int val;
i = ;
j = ;
for (k = ; k <= ; ++k)
{
if ( == k)
val = i;
else if ( == k)
val = j;
else
{
val = i + j;
i = j;
j = val;
}
printf("%d\n", val);
} return ; // 次程序和上一个程序的区别是使用循环和选择将数组替换了
}
16.
猴子吃桃问题:
猴子第一天摘了若干个桃子,当即吃了一半零一个,以后每天
都吃剩下的一半零一个,到第十天,准备吃的时候,只剩下了
一个,问最开始猴子摘了多少个桃子。
# include <stdio.h>
int main(void)
{
int i, sum = ;
for (i=; i<; ++i)
{
sum = (sum+) * ;
}
printf("%d", sum); return ;
}
17.将一个整数的二进制表示的第 k 位清零
# include <stdio.h>
int main(void)
{
int i, j, k;
printf("请输入您想要操作的数和所操作的位数:");
scanf("%d %d", &i, &j);
k = i&~(<<j-);
printf("%o,%o\n", i, k); return ;
}
18. 交换两数的值
# include <stdio.h>
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 ;
}
适合初学C语言是练习的代码的更多相关文章
- 初学c语言
虽然有一点点基础,但是还是从头学吧,这一周也就一些c语言的几个代码代表的意思和一个Hello world的程序. #include是头文件名,<>这是要返回的函数类型,然后是main主函数 ...
- 为什么还坚持.NET? 找一门适合自己的语言去做编程
为什么还坚持.NET? 找一门适合自己的语言去做编程 接触了.NET快十二年了,现在专注于分布式服务的开发. 中间经历过各种编程语言的诱惑,ios等. 前几年才对自己有比较明确的定位 技术上:找到适合 ...
- Tinyhttpd - 超轻量型Http Server,使用C语言开发,全部代码只有502行(包括注释),附带一个简单的Client(Qt也有很多第三方HTTP类)
- 2. Tinyhttpd tinyhttpd是一个超轻量型Http Server,使用C语言开发,全部代码只有502行(包括注释),附带一个简单的Client,可以通过阅读这段代码理解一个 Htt ...
- NSGA,NSGA-II,Epsilon-MOEA,DE C语言Deb教授原版代码
NSGA,NSGA-II,Epsilon-MOEA,Basic Differential Evolution (DE) C语言Deb教授原版代码地址 觉得有用的话,欢迎一起讨论相互学习~[Follow ...
- c语言心形告白代码实现
c语言心形告白代码实现 1.彩色告白 include<stdio.h> include<math.h> include<windows.h> include< ...
- 初学Objective-C语言需要了解的星星点点
其实大多数开发初学者都有一些相同的特点,可以说是一种“职业病”.Most有其他平台开发基础的初学者,看到Xcode就想摩拳擦掌:看到Interface Builder就想跃跃欲试:而 ...
- PHP和Java的主要区别有哪些?哪个最适合Web开发语言?
一.前言 PHP和Java都是现在比较流行的二种编程语言. 对于许多新手来说,都会思考如果学的时候,该学哪种语言呢?下面这篇文章给大家整理两者的区别以及一些选择建议,一起来看看吧. 二.简介 PHP与 ...
- 适合学习C语言开源项目——嵌入式脚本语言 Berry
嵌入式脚本语言 Berry github网址 :https://github.com/Skiars/berry Berry 是一款面向小型嵌入式系统的脚本语言,目前发布了 0.1.0 版本.相比于其他 ...
- zh-cn en-uk、zh-tw表示语言(文化)代码与国家地区对照表(最全的各国地区对照表)
af 公用荷兰语 af-ZA 公用荷兰语 - 南非 sq 阿尔巴尼亚 sq-AL 阿尔巴尼亚 -阿尔巴尼亚 ar 阿拉伯语 ar-DZ 阿拉伯语 -阿尔及利亚 ar-BH 阿拉伯语 -巴林 ar-EG ...
随机推荐
- InnoDB INFORMATION_SCHEMA Buffer Pool Tables
InnoDB INFORMATION_SCHEMA Buffer Pool Tables InnoDB INFORMATION_SCHEMA缓冲池表提供有关InnoDB缓冲池中页面的缓冲池状态信息和元 ...
- 深入Linux内核架构——简介与概述
一.内核的任务 纯技术层面上,内核是硬件与软件的之间的一个中间层.作用是将应用程序的请求传递给硬件,并充当底层驱动程序,对系统中的各种设备和组件进行寻址. 从应用程序视角上看,内核可以被认为是一台增强 ...
- Postman插件如何安装
我们chrome插件网热门推荐的软件之一就是postman.但是postman的适应平台分为:postman chrome应用程序,postman应用程序,postman插件.谷歌应用商店从2018年 ...
- 06 PhantomJS浏览器
PhantomtomJS PhantomJS是一款无界面浏览器,其自动化操作流程和谷歌浏览器是一致的.由于是无界面的,为了能够展示自动化操作流程,PhantomJS为用户提供了一个截屏的功能,使用sa ...
- SpringMVC中的几种事务管理器
转载https://blog.csdn.net/qq_26222859/article/details/52032853 1JDBC及iBATIS.MyBatis框架事务管理器 <bean id ...
- 【HDU 6000】Wash(贪心)
Problem Description Mr.Panda is about to engage in his favourite activity doing laundry! He's brough ...
- jquery的ajax和getJson跨域获取json数据
目前浏览器端跨域访问常用的两种方法有两种: 1.通过jQuery的ajax进行跨域,这其实是采用的jsonp的方式来实现的. jsonp是英文json with padding的缩写.它允许在服务器端 ...
- UVA624 CD,01背包+打印路径,好题!
624 - CD 题意:一段n分钟的路程,磁带里有m首歌,每首歌有一个时间,求最多能听多少分钟的歌,并求出是拿几首歌. 思路:如果是求时常,直接用01背包即可,但设计到打印路径这里就用一个二维数组标记 ...
- 使用using current logfile实现DG备库实时更新
DG1是主库,DG2是备库:运行在最大可用模式. 实验一:未使用using current logfile参数时,备库在最大可用模式下,不能实时同步备库的更新 -此时需要等待主库进行归档---侧面证明 ...
- Java设计模式之(设计模式的概述)
概述: 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用.设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案.这些解决方案是众多软件开发 ...