1.求圆的面积
pi*r方 = pi * r * r
#include <stdio.h>
#define PI 3.14
int main(){
float y;
float r;
r = 2;
y = PI * r * r;
printf("%10.4f",y); //
return 0;
}
2.输入三条边,求三角形面积
#include <stdio.h>
#include <math.h>
//输入三条边,求三角形面积
//tips1 首先任意两边之和,大于第三边
//tips2 需要用到数学函数库math.h
//tips3 要知道怎么求三角形面积 海伦公式
// area = sqrt(s * (s - a) * (s - b) * (s - c)) 其中,a、b和c是三角形的三条边的长度,s是半周长(即三边长度之和的一半),sqrt表示平方根运算。
int main(){
float a,b,c,s,area;
printf("请输入三角形的三边长");
scanf("%f%f%f",&a,&b,&c);
if(a+c>c && a+c > b && c+b >a){
s=(a+b+c)/2.0;
area = sqrt(s * (s-a)*(s-b)*(s-c));
}else{
printf("不能构成三角形");
}
return 0;
}
3.求一元二次方程的解
求一元二次方程:ax2+bx+c=0 的根。
输入三个实数a,b,c的值,且a不等于0。
简单版
#include <stdio.h>
#include <math.h>
int main()
{
float a,b,c,x1,x2,d;
printf("输入方程的三个系数:");
scanf("%f %f %f",&a,&b,&c);
if(a!=0)
{
d=sqrt(b*b-4*a*c);
x1=(-b+d)/(2*a);
x2=(-b-d)/(2*a);
if(x1<x2)
printf("%0.2f %0.2f\n",x2,x1);
else
printf("%0.2f %0.2f\n",x1,x2);
}
return 0;
}
进阶
#include <stdio.h>
#include <math.h>
int main(){
float a,b,c,x1,x2,derta,xu,xu1;
printf("输入方程的三个系数:");
scanf("%f %f %f",&a,&b,&c);
if(fabs(a) > 1e-6 ){
derta = b*b - 4*a*c;
if(fabs(derta) < 1e-6 ){ //说明是0 相等
printf("有两个相等的实根%8.4f\n",-b/(2*a));
}else if(derta > 1e-6){ //两个不相等的
x1 = (-b-sqrt(derta))/(2*a);
x2 = (-b+sqrt(derta)/(2*a));
printf("有两个不相等的实根%8.4f %8.4f\n",x1,x2);
}else{ 无实根,虚根
printf("无实根,有虚根");
xu = -b/(2*a);
xu1 = sqrt(-derta)/(2*a)
printf("%8.4f-%8.4f *i\n",xu,xu1);
printf("%8.4f+%8.4f *i\n",xu,xu1);
}
}else{
printf("不是一元二次方程");
}
return 0;
}
while累加和
sum = 1+2+3+。。。+100
#include <stdio.h>
void main(){
int i=1,sum=0;
while(i<100){
sum = sum + i;
i++;
}
printf("sum = %d",sum);
}
sum = 1+3+5。。。+99
#include <stdio.h>
void main(){
int i=1,sum=0;
while(i<100){
sum = sum + i;
i=i+2;
}
printf("sum = %d",sum);
}
猴子吃桃-C语言
题目:猴子第一天摘了若干个桃子,当即吃了一半,还不解馋,又多吃了一个;第二天,吃剩下的桃子的一半,还不过瘾,又多吃了一个;以后每天都吃前一天剩下的一半多一个,到第n天想再吃时,只剩下一个桃子了。问第一天共摘了多少个桃子?(用户自己输入不同的天数,看第一天有多少个桃)。
分析 :
x是桃子
两天 -> 第二天x = 1,因为4/2-1 = 1,所以第一天x = 4;(4 = (1+1)*2)
三天 -> 第三天 x = 1, 第二天x = 4,因为10/2-1 = 4,所以第一天x = 10;(10 = (4+1)*2)
如果是第四天->第四天 x = 1,第三天x = 4,第二天 x = 10,第一天就为22; (22 = (10+1)*2)
for循环
#include <stdio.h>
int main(){
int i,j,sum=1;
int day;
printf("INPUT DAYS:\n");
scanf("%d",day);
if(day>0){
for(i = 1;i<=day;i++){
sum = (sum+1) * 2;
}
}else{
printf("不对");
return 0;
}
printf("sum = %d\n",sum);
}
while
#include <stdio.h>
int main(){
int day,x1,x2;
x2= 1;
printf("INPUT DAYS:\n");
scanf("%d",day);
while(day>0){
x1 = (x2+1)*2;
x2 = x1;
day--;
};
printf("一共%d",x1);
}
输入成绩,输出对应的得分
输出90分以上的 A 80分B 70分 C 。。。。
使用switch选择语句,
#include <stdio.h>
int main(){
int cj;
scanf("%d",&cj);
switch (cj/10){
case 10 :
case 9:
printf("A");
break;
case 8 :
printf("B");
break;
case 7 :
printf("C");
break;
case 6 :
printf("D");
break;
default:
printf("E");
break;
}
return 0;
}
这里我们注意 switch()中 要是表达式。注意break的结束语句
交换两个数的值
使用临时变量
#include <stdio.h>
int main(){
int a,b,Temp;
scanf("%d %d",&a,&b);
Temp = a;
a = b;
b = Temp;
printf("交换后a=%d,b=%d",a,b);
return 0;
}
不使用临时变量
#include <stdio.h>
int main(){
int a,b,Temp;
scanf("%d %d",&a,&b);
a = a + b;
b= a-b;
a = a-b;
printf("交换后a=%d,b=%d",a,b);
return 0;
}
指针方法
通过指针,传递的地址, 来交换地址里的内容
#include<stdio.h>
void swap(int *a,int*b)
{
int temp=*a;
*a=*b;
*b=temp;
}
int main()
{
int a=1,b=2;
swap(&a,&b);
printf("a=%d\nb=%d\n",a,b);
return 0;
}
判断奇数/偶数
方法用 取余2 == 0? =0是 正数 =1是奇数
#include <stdio.h>
int main(){
int a;
scanf("%d",&a);
if(a % 2 == 0 ){
printf("偶数a=%d",a);
}else{
printf("奇数a=%d",a);
}
return 0;
}
三目方法
#include <stdio.h>
int main(){
int a,b;
scanf("%d",&a);
b = (a % 2 == 0 )?printf("偶数%d",a):printf("奇数%d",a);
//printf("%d",b);
return 0;
}
循环区间范围内的奇数/偶数
循环输出区间范围内的奇数/偶数可以通过除于 2 的余数来判断
100 - 500
#include <stdio.h>
int main(){
int a,b;
scanf("%d",&a);
b = (a % 2 == 0 )?printf("偶数%d",a):printf("奇数%d",a);
// (a % 2 != 0 )奇数
printf("\n %d",b);
return 0;
}
判断三个数中的最大数
#include <stdio.h>
int main()
{
double n1, n2, n3;
printf("请输入三个数,以空格分隔: ");
scanf("%lf %lf %lf", &n1, &n2, &n3);
if(n1>n2 && n1 > n3){
printf("%.2f 是 最大数",n1);
}
if(n2>n1 && n2 > n3){
printf("%.2f 是 最大数",n2);
}
if(n3>n1 && n3 > n2){
printf("%.2f 是 最大数",n3);
}
return 0;
}
直接条件判断闰年
#include <stdio.h>
int main(){
int year;
printf("输入年份");
scanf("%d",year);
if((year%4 == 0 && year % 100 != 0 ) || year %400 == 0){
printf("是闰年");
}else{
printf("no 不是")
}
return 0;
}
+分子-分子+分子
#include <stdio.h>
#include <math.h>
void main(){
double fm=1,fz=1,f=1,sum=0,itm=fz/fm;
while(fabs(item) >= 1e-8){
sum +=item;
fm+=2
f = -f
item = (fz/fm)*f;
}
printf("%f",sum*4);
}
用户输入一个数字,判断该数字是正数还是负数或是零
#include <stdio.h>
int main()
{
double number;
printf("输入一个数字: ");
scanf("%lf", &number);
if (number <= 0.0)
{
if (number == 0.0)
printf("你输入的是 0。");
else
printf("你输入的是负数。");
}
else
printf("你输入的是正数。");
return 0;
将一个正整数逆序输出。例如-12345,则输出5 4 3 2 1
#include <stdio.h>
#include <math.h>
int main(){
int x,tage;
scanf("%d",&x);
while (x!=0){
tage = x%10;
printf("逆序是 %d ",tage);
x = x / 10;
}
}
将一个正整数逆序输出。例如-12345,则输出54321
乘10就好了
#include <stdio.h>
#include <math.h>
int main(){
int x,tage;
scanf("%d",&x);
while (x!=0){
tage = x%10 + tage*10;
printf("逆序是 %d ",tage);
x = x / 10;
}
printf("逆序是 %d ",tage);
}
编程打印99乘法表
#include <stdio.h>
int main(){
int i,j;
for(i=1;i<=9;i++){
for(j=1;j<=i;j++){
printf("%d*%d=%d\t",i,j,i*j);
}
printf("\n");
}
return 0;
}
直角三角形
#include <stdio.h>
int main(){
int i,j;
for(i=1;i<=4;i++){
for(j=1;j<=i;j++){
printf("*");
}
printf("\n");
}
return 0;
}
输出 倒直角三角形
使用5-i 就可以
#include <stdio.h>
int main(){
int i,j;
for(i=1;i<=4;i++){
for(j=1;j<=5-i;j++){
printf("*");
}
printf("\n");
}
return 0;
}
#include <stdio.h>
int main(){
int i,j;
for(i=1;i<=4;i++){
for(j=1;j<=5-i;j++){
printf(" ");
}
for(int k=1;k<=i;k++){
printf("*");
}
printf("\n");
}
return 0;
}
#include <stdio.h>
int main(){
int i,j;
for(i=1;i<=4;i++){
for(j=1;j<=i;j++){
printf(" ");
}
for(int k=1;k<=5-i;k++){
printf("*");
}
printf("\n");
}
return 0;
}
#include <stdio.h>
int main(){
int i,j;
for(i=1;i<=4;i++){
for(j=1;j<=2*i-1;j++){ //找关系 2i-1
printf("*");
}
printf("\n");
}
return 0;
}
#include <stdio.h>
int main(){
int i,j;
for(i=1;i<=4;i++){
for(int k = 0;k<=5-i;k++){
printf(" ");
}
for(j=1;j<=2*i-1;j++){ //找关系 2i-1
printf("*");
}
printf("\n");
}
return 0;
}
#include <stdio.h>
int main(){
int i,j;
for(i=1;i<=4;i++){
for(int k = 0;k<=5-i;k++){
printf(" ");
}
for(j=1;j<=2*i-1;j++){ //找关系 2i-1
printf("*");
}
printf("\n");
}
for(i=3;i>=1;i--){
for(int k = 0;k<=5-i;k++){
printf(" ");
}
for(j=1;j<=2*i-1;j++){ //找关系 2i-1
printf("*");
}
printf("\n");
}
return 0;
}
输入的小写字母转大写字母,直到输入非小写字符为止
#include <stdio.h>
int main(){
//输入的小写字母转大写字母,直到输入非小写字符为止
char c;
while(1){
c = getchar();
if(c>='a' && c <='z'){
putchar(c-32);
}else{
break;
}
}
return 0;
}
//求1+2+3+……….直到和值首次大于10000为止;
#include <stdio.h>
int main(){
//求1+2+3+……….直到和值首次大于10000为止;
int a=0,i=0;
while(1){
a = a+i;
if(a>10000){
break;
}
i++;
}
printf("%d",a);
return 0;
}
反while条件
#include <stdio.h>
int main(){
//求1+2+3+……….直到和值首次大于10000为止;
int a=0,i=0;
while(a<=10000){
a = a+i;
i++;
}
printf("%d",a);
return 0;
}
for方法
#include <stdio.h>
int main(){
//求1+2+3+……….直到和值首次大于10000为止;
int a=0,i=0;
for(i=0;a<=10000;i++){
a = a+i;
}
printf("%d",a);
return 0;
}
勒泰公式的 求派的 近似值
#include <stdio.h>
#include <math.h>
int main(){
int sign=0;
double pi = 0,n=1,term=1;
while (fabs(term)>=1e-6)
{
pi = pi + term;
n += 2;
sign = -sign;
term = sign/n;
}
pi = pi * 4;
printf("pi = %10.8f",pi);
return 0;
}
斐波那契数列(Fibonacci)
也要记住英文名!!! 有的时候会用英文
特点,第1,2个数,为 1,1 从第3个数开始,是前两个数之和
求前40个
//斐波那契数列(Fibonacci)
#include <stdio.h>
int main(){
long int a=1,b=1,next;
printf("%10ld %10ld",a,b);
int n=2;
for(int i = 3; i <=40; i++){
next = a+b;
printf("%10ld",next);
n++;
if (n%4==0){ //每行输出4个
printf("\n");
}
a=b;b=next;
}
return 0;
}
思路就是,前两个是1 第三个是 两个的和 通过交换变量的值,累加
第二种方式
//斐波那契数列(Fibonacci)
#include <stdio.h>
int main(){
int a=1,b=1,c,i;
for(i=1;i<=20;i++){
printf("%d %d\t",a,b);
a = a+b;
b = b+a;
}
return 0;
}
判断一个数是否是素数(质数)
定义是: 只能被1和自己整除的数,叫做素数
n /i i的值2 - n-1;
2 3 4 5 。。。。 这些只要能被整除了 那就不是素数了,直接结束
采用for
// 判断一个数是否是素数(质数)
#include <stdio.h>
void main(){
int n,i=2;
scanf("%d",&n);
for (i = 2; i <= n-1; i++){
if(n%i==0){
break;
}
}
if (i>=n){
printf("%d是素数\n",n);
}else{
printf("%d不是素数",n);
}
}
判断3-99之间的素数
// 判断一个数是否是素数(质数)
#include <stdio.h>
void main(){
int n,i=2;
//scanf("%d",&n);
for (n = 3; n < 99; n++){
for (i = 2; i <= n-1; i++){
if(n%i==0){
break;
}
}
if (i>=n){
printf("%d是素数\n",n);
}
}
}
求3-99之间的素数和
// 判断一个数是否是素数(质数)
#include <stdio.h>
void main(){
int n,i=2,sum=0;
//scanf("%d",&n);
for (n = 3; n < 100; n++){
for (i = 2; i <= n-1; i++){
if(n%i==0){
break;
}
}
if (i>=n){
printf("%d是素数\n",n);
sum = sum + n;
}
}
printf("%d是",sum);
}
编程:学校在1000名师生中发起慈善捐款,自愿募捐、款数不限,总数超过20000(2万)元活动结束。编写程序,统计参与捐款的师生人数及捐款总数(精确到角币,即保留1位小数)。
#include <stdio.h>
#define M 20000
int main(){
float money,sum=0;
for (int i = 1; i <= 1000; i++){
scanf("%f",&money);
sum = sum + money;
if(sum > M)break;
}
if(i<=1000){
printf("捐款人数%d,捐款总数%.1f",i,sum);
}else{
printf("捐款人数%d,捐款总数%.1f",i-1,sum)
}
return 0;
}
方式二 这个好
#include <stdio.h>
#define M 20000
int main(){
float money,sum=0;
int i;
for (i = 1; sum < M || i >1000;i++){
scanf("%f",&money);
sum = sum + money;
}
printf("捐款人数%d,捐款总数%.1f",i-1,sum);
return 0;
}
输入一行字符统计出字母、数字空格及其它字符 个数
// 输入一行字符统计出字母、数字空格及其它字符 个数
#include <stdio.h>
void main(){
char ch;
int zm,sz,kg,qt;
zm=sz=kg=qt=0;
printf("输入一行字符\n");
while( (ch=getchar())!='\n'){
if (ch >= 'a'&& ch<= 'z' || ch >= 'A'&& ch<= 'Z'){
zm++;
}else if(ch >= '0' && ch<='9'){
sz++;
}else if(ch ==' '){
kg++;
}else{
qt++;
}
}
printf("字母是%d 数字%d 空格%d 其他%d",zm,sz,kg,qt);
}
求两个整数的最大公约数
// 求两个整数的最大公约数
#include <stdio.h>
void main(){
int a,b,c;
scanf("%d%d",&a,&b);
if (a<b){
c = a;a=b;b=c;
}
while (b!=0){
c = a%b;
a = b; //最大公约数
b = c;
}
printf("最大公约数是%d",a);
}
求两个整数的最小公倍数
两种方法
求1-20阶乘之和
#include <stdio.h>
void main(){
int i,n;
float sum=0,fac=0;
for (i = 1; i <= 20; i++){
n=1;fac=1;
do{
fac = fac *n;
n++;
} while (n<=i);
sum = sum + fac;
}
printf("su
单层for循环
#include <stdio.h>
void main(){
int fac=1,sum=0;
for (int i =1; i <= 20; i++)
{
fac = fac * i;
sum = sum +fac;
}
printf("sum=%e\n",sum);
}
#include <stdio.h>
void main(){
int fac=1,sum=0;
for (int i =1; i <= 20; i++)
{
fac = fac * 2;
sum = sum +fac;
}
printf("sum=%e\n",sum);
}
公鸡5元买1只,母鸡3元1只,小鸡1元买3只。用100元钱买100只鸡,问公鸡、母鸡、小鸡各买多少只?
我们要知道数学公式
第一个100个鸡
第二个100块钱
有分式,要扩大3倍
#include <stdio.h>
void main(){
int x,y,z;
for (x = 0; x <= 100; x++){ //公鸡 5元一只 最多 20只, 可以改成20
for (y = 0; y <= 100; y++) //母鸡 3元 最多33只
{
z = 100 - x - y;
if(15 * x + 9 * y + z == 300){
printf("x=%-10d y = %-10d z=%-10d \n",x,y,z);
}
}
}
}
水仙花数
三位整数,每位数字立方和等于自己,
重点还是 拆分 百位 十位 个位
百位用 /100 得到百位
十位 用 /10 后 %10
个位用 %10
#include <stdio.h>
void main(){
int i,a,b,c;
for ( i = 100; i <= 999; i++){
a = i%10;
b = i/10%10;
c = i/100;
if(a*a*a + b*b*b + c*c*c == i){
printf("水仙花数是%d",i);
}
}
}
凯撒密码问题
凯撒密码,动过移动位数 ,改变字母
不是字母的,保持原状不变
#include <stdio.h>
void main(){
char c;
while ((c = getchar()) != '\n'){
if( (c >= 'a' && c<= 'z') || (c >='A' && c <= 'Z') ){
if (c>='w' && c <= 'z' || c>='W' && c <= 'Z' ){
c = c - 22;
}else{
c = c +4;
}
}
printf("%c",c);
}
}
因子之和
#include <stdio.h>
void main(){
int i,s,k;
for(i=1;i<1000;i++){
s=0;
for(k=1;k<i;k++){
if(i%k==0)s = s+k;
}
if(s==i)printf("%d",i);
}
}