找大小
三数按照大小排序
int main(){
int a;
int b;
int c;
scanf("%d %d %d",&a,&b,&c);
if (a<b){
int temp = a;
a = b;
b = temp;
}
if (a<c){
int temp = a;
a = c;
c = temp;
}
if (b<c){
int temp = b;
b = c;
c = temp;
}
printf("%d %d %d",a,b,c);
}
判断闰年
int main(){
int year = 0;
int count = 0;
for(year=1000;year<=2000;year++){
//判断year是否是闰年
//1. 能被4整除但是不能被100整除是闰年
//2. 能被400整除的是闰年
if(((year%4==0)&&(year%100!=0))||(year%400==0)){
printf("%d ",year);
count++;
}
}
printf("\n count = %d",count);
return 0;
}
素数判断
#include <math.h>
int main() {
int i = 0;
int count = 0;
for (i = 100; i < 200; i++) {
//判断i是否为素数
//试除法
int j = 0;
for ( j = 2; j < sqrt(i); j++) {
if(i%j==0){
break; // 说明不是
}
}
if (j > sqrt(i)){
printf("%d ",i);
count++;
}
}
printf("\ncount = %d",count);
return 0;
}
还可以将将计算的数从101开始,然后每次运算加2(只计算奇数)。
1-100中7出现的次数
int main(){
int i = 0;
int count = 0;
for (i = 1;i<=100;i++){
if (i%10==7){ //个位出现9
count++;
}
if (i/10==7){ //十位出现9
count++;
}
}
printf("count=%d",count);
return 0;
}
计算最大公因数
辗转相除法(两个数)
int main(){
int m = 24;
int n = 18;
int r = 0;
while(m%n){
r = m % n;
m = n;
n = r;
}
printf("%d\n",n);
return 0;
}
求n个数的最大公约数。2<=n<50
输入:n个正整数,以0作为数的结束。用空格隔开。
输出:最大公约数和这n个数,用一个空格隔开。
样例:
210 54 24 0
6 210 54 24
int main() {
//1.输入
int a[51] = {1}; //最多50个所以使用51
int n = 1; //记录长度数组 至少要有一位是0
while (a[n - 1] != 0) { // 0是最后一位
scanf("%d", &a[n]);
n = n + 1;
} // n-2是输入的个数
// 2. 计算 使用辗转相除法 先算1和2 结果和3算 结果再和4算 以此类推 得到的就是多个数的最大公约数
//(1) 固定左边的值 (2) 一个值一个值的向右移动 (3)终止条件是:所有的值都算完了
int left = a[1], right = a[2];
for (int i = 2; i <= n - 2; i++) {
int midNum;
//辗转相除法过程
while (right != 0) {
midNum = left % right;
left = right;
right = midNum;
}
// 一次公约数计算完成,下一次计算时左值就是现在的left右值就是a[i+1]
left = left;
right = a[i];
}
printf("%d ",left);
// 3.处理输出
int m = n - 1; //n加上了最后的0实际上使用的时候应该先减回来。
while (m > 1) {
printf("%d ", a[n - m]);
m--;
}
}
最小公倍数
求n个数的最小公倍数,2<=n<10。
输入:n个正整数,以0作为数的结束。用空格隔开。
输出:最小公倍数和这n个数,用一个空格隔开。
样例:
210 54 24 0
7560 210 54 24
int main() {
//1.输入
int a[11] = {-1}; //最多10个所以使用11
int n = 1; //记录长度数组 至少要有一位是0
while (a[n - 1] != 0) { // 0是最后一位
scanf("%d", &a[n]);
n = n + 1;
if (a[0] < a[n - 1]) {
a[0] = a[n - 1]; //将第一个值存为最大的值
}
} // n-2是输入的个数
// 2. 计算 最小公倍数 先算1和2 结果和3算 结果再和4算 以此类推 得到的就是多个数的最大公约数
//(1) 固定左边的值 (2) 一个值一个值的向右移动 (3)终止条件是:所有的值都算完了
int left = a[0], right = a[1];
int timesNum = left;
for (int i = 1; i <= n - 1; i++) {
//最小公倍数
//计算最小公倍数
while (timesNum % left != 0 || timesNum % right != 0) {
timesNum+=1;
}
// 一次公约数计算完成,下一次计算时左值就是现在的left右值就是a[i+1]
left = timesNum;
right = a[i];
}
printf("%d ", timesNum);
// 3.处理输出
int m = n - 1; //n加上了最后的0实际上使用的时候应该先减回来。
while (m > 1) {
printf("%d ", a[n - m]);
m--;
}
}
分数求和
计算1/1-1/2+1/3-1/4+1/5…+1/99-1/100的值,打印出结果
int main() {
int i;
double sum = 0.0;
int flag = 1;
for (i = 1; i <= 100; i++) {
sum += flag * 1.0 / i;
flag = -flag;
}
printf("%lf\n", sum);
return 0;
}
求最大值
求10个数的最大值
int main() {
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int max = a[0];//最大值 这个地方不要用自定义的值,因为有可能自定义的值为最大值
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
for (i = 1; i < sz; i++) { //因为arr[0]为最开始的max所以从1开始就可以了
if (arr[i] > max) {
max = arr[i];
}
}
printf("max = %d\n", max);
return 0;
}
乘法口诀表
int main(){
int i = 0;
//打印九行
for ( i = 1; i <= 9; i++) {
//打印其中一行
int j;
for(j=1;j<=i;j++){
printf("%d*%d=%-2d ",i,j,i*j);//-2左对齐 占两位
}
printf("\n");
}
}
二分查找
在一个有序数组中查找具体的某个数字n。编写int binsearch(int x,int v[],int n);功能:在v[0]<=v[1]<=v[2]<=…<=v[n-1]的数组中查找x。
//可以遍历 但是没有进步性 这里使用的是二分查找
int main() {
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int find = 7;
int sz = sizeof(arr) / sizeof(arr[0]);
int left = 0; //左下标
int right = sz - 1; //右下标
while (left <= right) { //二分查找的条件
int mid = (left + right) / 2;
if (arr[mid] > find) {
right = mid - 1;
} else if (arr[mid] < find) {
left = mid + 1;
} else {
printf("找到了,下标是:%d", mid);
break;
}
}
if (left>right){ // 如果因为没有跳出来的情况是这样的
printf("找不到啊!\n");
}
return 0;
}
猜数字游戏
需求:
-
电脑会生成一个随机数
-
猜数字
-
重开
#include <stdlib.h>
#include <time.h>
int game(){
//生成随机数
int randNum = 0;
int guessNum = 0;//存储猜的数字
//用时间戳来设置随机数的起点
// srand((unsigned int)time(NULL)); //这个应该写在外面 一个程序设置一次就可以了
randNum = rand()%100+1;//生成随机数 1-100 这个函数本身生成的是0-32767
// printf("%d",randNum);
//2.猜数字
while (1){
printf("你猜的数字是:");
scanf("%d", &guessNum);
if(guessNum>randNum){
printf("猜大了\n");
}else if(guessNum<randNum){
printf("猜小了\n");
}else{
printf("恭喜你,猜对了\n");
break;
}
}
return 0;
}
int main(){
int input = 0;
//用时间戳来设置随机数的起点
srand((unsigned int)time(NULL));
do {
printf("#############################################\n");
printf("######## 1.开始游戏 2.退出游戏 ########\n");
printf("#############################################\n");
printf("->请选择:");
scanf("%d",&input);
switch (input) {
case 1:
game();
// 猜数字
break;
case 2:
printf("退出游戏\n");
break;
default:
printf("游戏结束,再见!\n");
break;
}
} while (input);
return 0;
}