适合初学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 ...
随机推荐
- 717. 1-bit and 2-bit Characters@python
We have two special characters. The first character can be represented by one bit 0. The second char ...
- 「 SPOJ GSS3 」 Can you answer these queries III
# 题目大意 GSS3 - Can you answer these queries III 需要你维护一种数据结构,支持两种操作: 单点修改 求一个区间的最大子段和 # 解题思路 一个区间的最大子段 ...
- MySQL丨03丨基本语句
MySQL语句都是以 ; 号结尾的 看库(刘大婶直接面对的是各种档案袋) show databases; 建库(新弄了一个档案袋) create database database_name; 删库( ...
- 自动化测试如何解析excel文件?
前言 自动化测试中我们存放数据无非是使用文件或者数据库,那么文件可以是csv,xlsx,xml,甚至是txt文件,通常excel文件往往是我们的首选,无论是编写测试用例还是存放测试数据,excel都是 ...
- Linux常用命令大全 --- 文件备份和压缩命令
在linux中,常用的文件压缩工具有gzip.bzip2.zip . bzip2是最理想的压缩工具,它提供了最大限度的压缩.zip 兼容性好windows也支持 1.bzip2 命令 在shell 提 ...
- 大数据学习——sqoop入门
下载地址 https://pan.baidu.com/s/1qWDl29L9I_KVU54c0ioNfQ fvfh 3.1 概述 sqoop是apache旗下一款“Hadoop和关系数据库服务器之间传 ...
- Python+selenium登录测试
我们以登录新浪微博为案例来讲解,首先进入登录页面,输入用户名和密码,点击登录按钮,并且获得用户信息以验证是否登录成功. Web地址:https://login.sina.com.cn/signup/s ...
- 【Kubernetes】Kubernetes的Service外部访问方式:NodePort和LoadBalancer
Kubernetes的Pod的寿命是有限的,它们不会复活,因此尽管每个Pod都有自己的IP地址,但是这些IP地址是不可靠的,会随着Pod的消亡而消失. 这就带来一个问题,如果一些Pod的集合(称之为b ...
- 搜狗大数据总监、Polarr 联合创始人关于深度学习的分享交流 | 架构师小组交流会
架构师小组交流会是由国内知名公司技术专家参与的技术交流会,每期选择一个时下最热门的技术话题进行实践经验分享.第一期:来自沪江.滴滴.蘑菇街.扇贝架构师的 Docker 实践分享 第二期:来自滴滴.微博 ...
- 洛谷P1145 约瑟夫
题目描述 n个人站成一圈,从某个人开始数数,每次数到m的人就被杀掉,然后下一个人重新开始数,直到最后只剩一个人.现在有一圈人,k个好人站在一起,k个坏人站在一起.从第一个好人开始数数.你要确定一个最小 ...