C语言小练

2023-12-03 01:30
文章标签 语言 小练

本文主要是介绍C语言小练,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

打印斐波那契数列指定位置的值

给定两个数,求这两个数的最大公约数

三个数从大到小输出

模拟用户登陆情况,且只能输如三次

采用二分法查找数组中的指定元素

打印输出九九乘法表

数一下1-100中所有整数出现多少个数字9

打印1-200之间的素数,并输出总共有多少个

不引用第三个变量,交换两个数的值

有 1、2、3、4 四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

企业发放的奖金根据利润提成。

一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

输入某年某月某日,判断这一天是这一年的第几天?

打印出所有的"水仙花数"

输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。

用递归的方法求一个数的阶乘

利用递归函数调用方式,将所输入的字符串,以相反顺序打印出来。


打印斐波那契数列指定位置的值

菲波那切数列:指的是这样一个数列:1、1、2、3、5、8、13、21、34、……这个数列从第3项开始,每一项都等于前两项之和。

int fib(int n){if(n<=2)return 1;elsereturn fib(n-1)+fib(n-2);
}int main(){int i=0;int ret=0;scanf("%d",&i);ret=fib(i);printf("ret=%d",ret);return 0;
}

给定两个数,求这两个数的最大公约数

本算法主要利用辗转相除法求出两个数的最大公约数。

int main(){int m=0;int n=0;int r=0;scanf("%d %d",&m,&n);while(r=m%n){m=n;n=r;} printf("%d\n",n);return 0;
}

三个数从大到小输出


int main(){int a=0;int b=0;int c=0;scanf("%d%d%d",&a,&b,&c);//算法实现:a中放最大值   b次之   c中放最小值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;    
} 

模拟用户登陆情况,且只能输如三次


int main(){int i=0;char password[20]={0};for(i=0;i<3;i++){printf("请输入密码:>");scanf("%s",password);if(strcmp(password,123456)==0){  //==不能用来比较两个字符串是否相等,应该使用一个库函数--strcmp printf("登陆成功\n");break;}else{printf("密码错误\n");}}if(i==3)printf("三次密码错误,退出程序\n");return 0;

采用二分法查找数组中的指定元素


int main(){int arr[]={1,2,3,4,5,6,7,8,9,10};int k=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]>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;
}

打印输出九九乘法表

int main()
{int i=0;int j=0;for(i=1;i<10;i++){    //一共9行 for(j=1;j<=i;j++){printf("%d*%d=%-2d ",i,j,i*j);  //"%-2d"的作用是使打印的结果左对齐 }printf("\n");   //打印完一行再分行 }return 0;
}

数一下1-100中所有整数出现多少个数字9


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("count=%d\n",count);return 0;
}

打印1-200之间的素数,并输出总共有多少个

int main(){int i=0;int count=0;for(i=100;i<=sqrt(i);i++){int j=0;for(j=2;j<i;j++){if(i%j==0){break;}}if(j>sqrt(i)){  //sqrt(i)表示开平方 --记得调用数学库函数count++;printf("%d\n",i);}}printf("count=%d\n",count);return 0;
}

不引用第三个变量,交换两个数的值
 

方法一:int main(){int a,b;  scanf("%d %d",&a,&b);a=a+b;b=a-b;a=a-b;printf("a=%d b=%d\n",a,b);  return 0;
} 
这种方法有缺陷,可能会导致整形溢出 。方法二:int main(){int a,b;scanf("%d %d",&a,&b);a=a^b;b=a^b;a=a^b; printf("a=%d b=%d\n",a,b); return 0;
}

有 1、2、3、4 四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

程序分析:可填在百位、十位、个位的数字都是 1、2、3、4,组成所有的排列后再去掉不满足条件的排列。

int main()
{int i,j,k;for(i=1;i<5;i++) { // 以下为三重循环for(j=1;j<5;j++) {for (k=1;k<5;k++) { // 确保i、j、k三位互不相同if (i!=k&&i!=j&&j!=k) { printf("%d,%d,%d\n",i,j,k);}}}}
}

企业发放的奖金根据利润提成。

利润(I)低于或等于10万元时,奖金可提10%;

利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;

20万到40万之间时,高于20万元的部分,可提成5%;

40万到60万之间时高于40万元的部分,可提成3%;

60万到100万之间时,高于60万元的部分,可提成1.5%;

高于100万元时,超过100万元的部分按1%提成。

从键盘输入当月利润I,求应发放奖金总数?

程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成双精度浮点(double)型。

#include<stdio.h>int main()
{double i;double bonus, bonus1, bonus2, bonus4, bonus6, bonus10 ;printf("你的净利润是:\n");scanf("%lf",&i);bonus1=100000*0.1;bonus2=bonus1+100000*0.075;bonus4=bonus2+200000*0.05;bonus6=bonus4+200000*0.03;bonus10=bonus6+400000*0.015;if(i<=100000) {bonus=i*0.1;} else if(i<=200000) {bonus=bonus1+(i-100000)*0.075;} else if(i<=400000) {bonus=bonus2+(i-200000)*0.05;} else if(i<=600000) {bonus=bonus4+(i-400000)*0.03;} else if(i<=1000000) {bonus=bonus6+(i-600000)*0.015;} else if(i>1000000) {bonus=bonus10+(i-1000000)*0.01;}printf("提成为:bonus=%.3lf",bonus);//结果限制到小数点后三位 return 0; 
}

一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

程序分析:

假设该数为 x。

1、则:x + 100 = n2, x + 100 + 168 = m2

2、计算等式:m2 - n2 = (m + n)(m - n) = 168

3、设置: m + n = i,m - n = j,i * j =168,i 和 j 至少一个是偶数

4、可得: m = (i + j) / 2, n = (i - j) / 2,i 和 j 要么都是偶数,要么都是奇数。

5、从 3 和 4 推导可知道,i 与 j 均是大于等于 2 的偶数。

6、由于 i * j = 168, j>=2,则 1 < i < 168 / 2 + 1

7、接下来将 i 的所有数字循环计算即可。

 /* 假设要求的数为: x;* 则x+100=n的平方;x+100+168=m的平方  ; * 从而有:m方-n方=(m+n)*(m-n)=168 ; *  再令m+n=i; m-n=j; i*j=168. */
int main (void)
{int  i, j, m, n, x;for (i = 1; i < 168 / 2 + 1; i++){if (168 % i == 0){j = 168 / i;if ( i > j && (i + j) % 2 == 0 && (i - j) % 2 == 0){m = (i + j) / 2;n = (i - j) / 2;x = n * n - 100;printf ("%d + 100 = %d * %d\n", x, n, n);printf ("%d + 268 = %d * %d\n", x, m, m);printf ("\n");}}}return 0;
}

输入某年某月某日,判断这一天是这一年的第几天?

程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。

#include<stdio.h>
int main()
{int year, month, day,sumday=0;int monthday[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };printf("请输入年、月、日,格式为:年,月,日(2015 12 10)\n");scanf("%d %d %d",&year,&month,&day);if (year % 400 == 0 || (year % 100 != 0 && year % 4 == 0)){monthday[1] =29;         		//闰年的话则把二月置为29天 }for (int i = 0; i < month-1; i++)	{sumday += monthday[i];}sumday += day;printf("这是%d年的第%d天\n",year,sumday);return 0;
}

打印出所有的"水仙花数"

所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数 本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。

程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。

int main()
{int i,x,y,z;for(i=100;i<1000;i++){x=i%10;y=i/10%10;z=i/100%10;if(i==(x*x*x+y*y*y+z*z*z))printf("%d\n",i);}return 0;
}

输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

程序分析:利用while语句,条件为输入的字符不为'\n'。  也可以使用ASCⅡ码作为判断条件。

int main(void)
{char ch;int alpha = 0, num = 0, space = 0, others = 0;printf("请输入一些字母:\n");while((ch = getchar()) != '\n'){if((ch >= 'a' && ch <= 'z')||(ch >='A' && ch <='Z'))alpha++;else if(ch >= '0' && ch <= '9')num++;else if(ch == ' ')space++;elseothers++;}printf("字母=%d,数字=%d,空格=%d,其他=%d",alpha,num,space,others);return 0;
}

求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。

例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。

程序分析:关键是计算出每一项的值。

int main()
{int s=0,a,n,t;printf("请输入要加的数字a和要加的次数n:\n");scanf("%d%d",&a,&n);t=a;while(n>0){s+=t;a=a*10;t+=a;n--;}printf("a+aa+...=%d\n",s);return 0;
}

用递归的方法求一个数的阶乘

//用递归的方法求一个数的阶乘 
int fact(int n)
{if(n == 0 || n == 1)return 1;elsereturn n*fact(n - 1);
}int main(void)
{int i,x;printf("请输入要求多少的阶乘:");scanf("%d",&x);for(i = 0; i <= x; i++){printf("%d! = %d\n",i,fact(i));}return 0;
}

利用递归函数调用方式,将所输入的字符串,以相反顺序打印出来。

#include <stdio.h>void fun()
{char str;if((str=getchar())!='\n') {fun();}if(str!='\n') {printf("%c",str);}
}void main()
{printf("请输入字符: ");fun();
}

这篇关于C语言小练的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/447591

相关文章

基于Python实现多语言朗读与单词选择测验

《基于Python实现多语言朗读与单词选择测验》在数字化教育日益普及的今天,开发一款能够支持多语言朗读和单词选择测验的程序,对于语言学习者来说无疑是一个巨大的福音,下面我们就来用Python实现一个这... 目录一、项目概述二、环境准备三、实现朗读功能四、实现单词选择测验五、创建图形用户界面六、运行程序七、

使用Go语言开发一个命令行文件管理工具

《使用Go语言开发一个命令行文件管理工具》这篇文章主要为大家详细介绍了如何使用Go语言开发一款命令行文件管理工具,支持批量重命名,删除,创建,移动文件,需要的小伙伴可以了解下... 目录一、工具功能一览二、核心代码解析1. 主程序结构2. 批量重命名3. 批量删除4. 创建文件/目录5. 批量移动三、如何安

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要

C语言中自动与强制转换全解析

《C语言中自动与强制转换全解析》在编写C程序时,类型转换是确保数据正确性和一致性的关键环节,无论是隐式转换还是显式转换,都各有特点和应用场景,本文将详细探讨C语言中的类型转换机制,帮助您更好地理解并在... 目录类型转换的重要性自动类型转换(隐式转换)强制类型转换(显式转换)常见错误与注意事项总结与建议类型

Go语言利用泛型封装常见的Map操作

《Go语言利用泛型封装常见的Map操作》Go语言在1.18版本中引入了泛型,这是Go语言发展的一个重要里程碑,它极大地增强了语言的表达能力和灵活性,本文将通过泛型实现封装常见的Map操作,感... 目录什么是泛型泛型解决了什么问题Go泛型基于泛型的常见Map操作代码合集总结什么是泛型泛型是一种编程范式,允

Android kotlin语言实现删除文件的解决方案

《Androidkotlin语言实现删除文件的解决方案》:本文主要介绍Androidkotlin语言实现删除文件的解决方案,在项目开发过程中,尤其是需要跨平台协作的项目,那么删除用户指定的文件的... 目录一、前言二、适用环境三、模板内容1.权限申请2.Activity中的模板一、前言在项目开发过程中,尤

C语言小项目实战之通讯录功能

《C语言小项目实战之通讯录功能》:本文主要介绍如何设计和实现一个简单的通讯录管理系统,包括联系人信息的存储、增加、删除、查找、修改和排序等功能,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录功能介绍:添加联系人模块显示联系人模块删除联系人模块查找联系人模块修改联系人模块排序联系人模块源代码如下

基于Go语言实现一个压测工具

《基于Go语言实现一个压测工具》这篇文章主要为大家详细介绍了基于Go语言实现一个简单的压测工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录整体架构通用数据处理模块Http请求响应数据处理Curl参数解析处理客户端模块Http客户端处理Grpc客户端处理Websocket客户端

使用SQL语言查询多个Excel表格的操作方法

《使用SQL语言查询多个Excel表格的操作方法》本文介绍了如何使用SQL语言查询多个Excel表格,通过将所有Excel表格放入一个.xlsx文件中,并使用pandas和pandasql库进行读取和... 目录如何用SQL语言查询多个Excel表格如何使用sql查询excel内容1. 简介2. 实现思路3