求10-90的随机数
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
srand((unsigned)time(NULL));//随机种子每次都是随机数,rand只有第一次随机下次不变
int a[50] = { 0 };
int i,j;
int max, min;
for (i = 0;i < 50;i++)
{
a[i] = rand() % (99 - 10 + 1) + 10;
for (j = 0;j < i;j++)//j是i上一个元素
if(a[j]==a[i])
{
i--;
break;
}
}
printf("50个随机数\n");
for (i = 0;i < 50;i++)
{
printf(" %d", a[i]);
if ((i + 1) % 10 == 0)
printf("\n");
}
max = 10, min = 99;
for (i = 0;i < 50;i++)
{
if (a[i] < min)
min = a[i];
if (a[i] > max)
max = a[i];
}
printf("最大值是%d,最小值是%d", max, min);
}
水仙花
判断100到1000以内有多少水仙花数
#include<stdio.h>
int main()
{
int i,j,k,l,m;
for (i = 100;i <= 1000;i++)
{
j = i / 100;
k = i/10 % 10;
l = i % 10;
if (i == j * j * j + k * k * k + l * l * l)
printf(" %d", i);
}
printf("\n");
return 0;
}
四叶玫瑰数
判断1000到10000有多少四叶玫瑰数
#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
int i,a,b,c,d,s;
for(i=1000;i<10000;i++)
{
a = i%10;
b = i/10%10;
c = i/100%10;
d = i/1000;
s = a * a * a*a+ b * b * b*b + c * c * c*c+d*d*d*d;
if(i==s)
printf(" %d",i);
}
}
闰年
能被4整除不能被100整除或能被400整除
#include<stdio.h>
int main()
{
int year,sum=0;
for (year = 1000;year <= 2000;year++)
{
if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0))
{
printf(" %d", year);
sum++;
}
}
printf("\n");
printf("%d", sum);
return 0;
}
杨辉三角
1
11
121
1331
14641
...
#include<stdio.h>
int main()
{
int arr[100][100];
int i, j;
int n = 10;
for (i = 0; i < n; i++)
{
arr[i][0] = 1; //把外围的1都赋值上
arr[i][i] = 1;
}
for (i = 2; i < n; i++) //i为2是因为第0行和第1行都已被赋值为1
{
for (j = 1; j < i; j++)
{
arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
}
}
for (int i = 0; i < n; i++) //打印输出
{
for (int j = 0; j <= i; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
}
二进制转十进制
#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
int n,i;
int s,sum=0;
scanf("%d",&n);
for(i=0;n!=0;i++)
{
s = n%10;
n = n/10;
sum+=s*pow(2,i);
}
printf("十进制数为%d",sum);
return 0;
}
十进制转二进制
#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
int n,m=2;
printf("请输入数字");
scanf("%d",&n);
int arr[20], i;
for(i=0;n!=0;i++)
{
arr[i]= n%m;//十进制转二进制算出余数
n = n/m;//把尾数去掉
}
for(;i;i--)
printf("%d",arr[i-1]);//退出循环时,i已经自增了,所以要减去
}
递归法
#include<stdio.h>
int fun(int n)
{
if(n>0)
{
fun(n/2);
printf("%d",n%2);
}
}
int main()
{
int n;
scanf("%d",&n);
fun(n);
}
一元二次方程
deltal就是b^2-4ac,detal>0的时候就有两个根,小于0就没有根,等于0就是一个根
#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
float a,b,c,x1,x2;//x1,x2是二个根
scanf("%f%f%f",&a,&b,&c);
float deltal = b*b-4*a*c;//detal是实数
if(deltal>0)//大于0两个根
{
x1=(-b+sqrt(deltal))/(2*a);
x2=(-b-sqrt(deltal))/(2*a);
printf("x1值为%.2f,x2值为.2%f",x1,x2);
}
else if(deltal==0)//相等于0,有两个相同的根
{
x1=x2=(-b)/(2*a);
printf("解为%.2f",x1);
}
else //小于0
{printf("没有实数根");
}
}
四舍五入
1234.567保留两位小数,对第三位进行四舍五入成为1234.57
#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
long t;
double f;
scanf("%lf",&f);
t=(f*1000+5)/10;
printf("%lf",(double)t/100 );
}
完全平方数
给整数加上100是一个完全平方数,并且给n加上268也是一个完全平方数
#include <stdio.h>
#include <math.h>
int fun(long n)
{
int s1 ,s2;
s1 = (int)sqrt((double)n+100);
s2 = (int)sqrt((double)n+268);
if(s1==sqrt((double)n+100)&&(s2==sqrt((double)n+268)))
return 1;
else
return 0;
}
int main()
{
int i;
for(i=1;i<10000;i++)
{
if (fun(i))
{
printf("%ld\n", i);
}
}
}
题2:求1-1000以内的完全平方数
#include<stdio.h>
#include<math.h>
int main()
{
int i,x,n =0;
for(i=1;i<=1000;i++)
{
x = (int)sqrt(i);
if(x*x==i)
{
n++;
printf("%d ",i);
}
}
printf("\n个数为%d",n);
}
题3:若一自然数全部正整数因子(该因子不包括其本身)之和仍为该自然数,则该自然数成为完全平方数。如:6=1+2+3,则6是完全平方数。求[2,1000]以内的完全平方数。
#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
int x,m,n ;
for (n = 2; n <= 1000; n++)
{
x = 0;
for (m = 1; m < n; m++)
{
if (n % m == 0)
x = x + m;
}
if (x == n)
printf("%d\n",n);
}
}
。。
求主对角线和反对角线的元素和
1 3 5
4 6 7
9 8 6
#include<stdio.h>
#include<math.h>
#include<string.h>
#define N 3
int main()
{
int arr[N][N] = {1,3,5,4,6,7,9,8,6};
int sum=0;
int i,j,k=0;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
if(i==j||i+j==N-1)
sum+=arr[i][j];//arr[1][1] 是共同部分只会被计算一次
printf("%d",sum);
}
1,2,3,4能组成多少种不相同的三位数
#include<stdio.h>
#include<math.h>
#include<string.h>
#define N 100
int main()
{
int xxx[N];
int i,j=0,a,b,c;
for(i=0;i<100;i++)
xxx[i] = 0;
for(i=123;i<=432;i++)//1234最小数为123,最大三位数为432
{
a = i%10;
b = i/10%10;
c = i/100%10;
if(a!=b&&a!=c&&b!=c&&a>=1&&a<=4&&b>=1&&b<=4&&c>=1&&c<=4 )
//是在1234之间,所以判断条件要在1-4之间
xxx[j++] = i;
}
printf("能组成%d种数字",j);
}
方法二
#include<stdio.h>
int main()
{
int i ,j,k,n;
for(i=1;i<5;i++)
for(j=1;j<5;j++)
for(k=1;k<5;k++)
if(i!=j&&i!=k&&j!=k)
{
n = i *100 + 10*j+k;
printf("%4d",n);
}
}
把每个偶数后面加上.
#include<stdio.h>
#include<math.h>
#include<string.h>
#define N 100
/* 函数int_to_str的功能是将参数n中的整数转换成字符串,存入s指内存中 */
void int_become_str(int n,char *s)
{
sprintf(s,"%d",n); //把偶数存到s数组中
}
int main()
{
int x[6] = {1,4,19,82,61,2};
static char str[200],s[10];
int i;
*str = 0;
for(i=0;i<6;i++)
{
if(x[i]%2==0)
{ int_become_str(x[i],s);//调用函数become
strcat(str,s);
strcat(str,".");
}
}
puts(str);
}
判该日是这一年的哪一天
题目:输入某年某月的某日,判断这一天是这一年的第几天,如3月5日,应该把前两个月加起来,然后加上5天即本年第几天,特殊情况,闰年且输入月份大于3时要考虑多加一天
#include<stdio.h>
#include<math.h>
#include<string.h>
#define N 100
int rn(int year)//判断是不是闰年,是闰年多加一天
{ int leap;
leap= (year%4==0 && year%100!=0 || year%400==0);
return leap;
}
int fun(int year, int month, int day)
{ int table[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int days=0 , i;
for(i=1; i<month; i++)
days=days + table[i];//累加平年的月份
days=days+day;//加上日的天数
if( rn(year) && month>2 )//如果闰年并且累加月份大于2,需要多加1天
days=days+1;
return days;
}
int main()
{ int year, month, day, days ;
printf("请输入年、月、日:");
scanf("%d%d%d",&year, &month, &day);
days = fun(year, month, day);
printf("%d年%d月%d日是该年的第%d天\n",year, month, day, days);
}
方法二
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int year, month, day, leap, sum;
scanf("%d,%d,%d",&year,&month,&day);
switch (month)//判断是第几个月
{
case 1: sum = 0; break;
case 2: sum = 31; break;
case 3: sum = 59; break;
case 4: sum = 90; break;
case 5: sum = 120; break;
case 6: sum = 151; break;
case 7: sum = 181; break;
case 8: sum = 212; break;
case 9: sum = 243; break;
case 10: sum = 273; break;
case 11: sum = 304; break;
case 12: sum = 374; break;
default:
printf("error");
break;
}
sum += day;//加上天数
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)//判断是否是闰年
leap = 1;
else
leap = 0;
if (leap == 1 && month > 2)
sum++;
printf("%d年%d月%d日",year,month,day,sum);
}
数组周边元素之和
#include <stdio.h>
#define M 4
#define N 5
int fun ( int a[M][N] )
{
int i,j,sum = 0;
for(i=0;i<M;i++)
for(j=0;j<N;j++)
if(j==0||j==N-1||i==0||i==M-1)//判断是不是周边元素
sum+=a[i][j];
return sum;
}
main( )
{ int aa[M][N]={{1,3,5,7,9},
{2,9,9,9,4},
{6,9,9,9,8},
{1,3,5,7,0}};
int i, j, y;
printf ( "The original data is : \n" );//打印数组
for ( i=0; i<M; i++ )
{ for ( j =0; j<N; j++ ) printf( "%6d", aa[i][j] );
printf ("\n");
}
y = fun ( aa );//调用函数
printf( "\nThe sum: %d\n" , y );
printf("\n");
}
将大于整数m且紧靠m的k个素数存入所指的数组中
#include<stdio.h>
#include<math.h>
#include<string.h>
#define N 100
int main()
{
int m,k,i,j,n=0;
int arr[1000];
printf("请输入数字和周边素数的个数");
scanf("%d%d",&m,&k);
for(i=m+1;n<k;i++)//m+1是因为求得是周边素数的个数,所以自身就不算
{ //n是已经得到的素数的个数
for(j=2;j<i;j++)//下边就是判断素数了
{
if(i%j==0)
break;
}
if(i==j)
{
arr[n++] = i;
}
}
for(i=0;i<n;i++)
printf("%d ",arr[i]);
}
数组行列互换
#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
int arr[5][5] = {1,2,3,6,5,4,7,9,8,6,3,1,7,8,4,8,1,9,6,4,8,5,3,2,0};
int i,j,t;
printf("没有调换之前\n");
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
printf("%5d",arr[i][j]);
printf("\n");
}
printf("\t");
for(i=0;i<5;i++)
for(j=0;j<=i;j++)
{
t = arr[j][i];
arr[j][i] = arr[i][j];
arr[i][j] = t;
}
printf("调换之后\n");
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
printf("%5d",arr[i][j]);
printf("\n");
}
}
将下标为偶数同时ASCII码为奇数的字符删除
#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
int i,j=0;
char t[20];
char s[20] = "";
gets(s);
for(i=0;s[i]!='\0';i++)
{
if(!(i%2==0&&s[i]%2==1))
//如果输入1 1的ASCII码是奇数,但是下标是奇数,不应当删除,所以用!运算符而不用
//if(i%2!=0&&s[i]%2==0)
t[j++] = s[i];
}
t[j] = '\0';
puts(t);
}
将元素平移到数组的最后
#include<stdio.h>
#include<math.h>
#include<string.h>
#define N 80
int main()
{
int i,t,j,p;
int a[15]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
int sz = 15;
printf("原先数据为:\n");
for(i=0; i<sz; i++)printf("%3d",a[i]);
printf("\n");
printf("请输入要把多少元素移动到后面");
scanf("%d",&p);
for(i=0;i<=p;i++)
{
t = a[0];//记录第一个元素
for(j=1;j<sz;j++)//把元素往前移动
{
a[j-1] = a[j];
}
a[sz-1] = t;//最后一个元素变成了倒数第二个元素,把原先第一个元素放在最后
}
for(i=0; i<sz; i++)printf("%3d",a[i]);
printf("\n\n");
}
循环向后移动
#include<stdio.h>
void fun(int *a,int m)
{
int i,j,k;
for(i=1;i<=m;i++)
{
k = a[10-1];
for(j=10-1;j>0;j--)
a[j] = a[j-1];
a[0] = k;
}
}
int main()
{
int arr[10];
int i,m;
for(i=0;i<10;i++)
scanf("%d",&arr[i]);
printf("要向后移动几位\n");
scanf("%d",&m);
fun(arr,m);
for(i=0;i<10;i++)
printf("%d ",arr[i]);
}
全部都逆序存放
#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
int i,t;
int arr[5] = {18,2,50,43,69};
int n = 5;
for(i=0;i<n/2;i++)
{
t = arr[i];
arr[i] = arr[n-1-i];
arr[n-1-i] = t;
}
for(i=0;i<5;i++)
printf("%d ",arr[i]);
}
除了首尾字符外,将其余字符按降序排列
#include <stdio.h>
#include <string.h>
void fun(char *s,int num)
{
int i,j,t;
for(i=0;i<num;i++)
{
for(j=1;j<num-1;j++)
{
if(s[j]<s[j+1]&&(j+1)<num-1)
{
t = s[j+1];
s[j+1] = s[j];
s[j] = t;
}
}
}
}
int main()
{
char s[10];
printf("输入7个字符的字符串:");
gets(s);
fun(s,7);
printf("\n%s",s);
}
字符转数字
#include <stdio.h>
#include <string.h>
long fun ( char *p)
{
long t=0;
int flag=1;
if(*p=='-')//判断正负数
{ flag = -1;
p++;
}
else if(*p=='+')
p++;
while(*p!='\0')
{
t = t*10+(*p-'0');
p++;
}
return t*flag;
}
int main() /* 主函数 */
{ char s[6];
long n;
printf("Enter a string:\n") ;
gets(s);
n = fun(s);
printf("%ld\n",n);
}
找出二维数组中每列中的最大元素
#include <stdio.h>
#include <stdlib.h>
#define M 3
#define N 4
void fun(int tt[M][N],int pp[N])
{
int i,j,k=0;
int max=0;
for(j=0;j<N;j++)//列
{
max = 0;
for(i=0;i<M;i++)//行
{
if(max<tt[i][j])
{
max = tt[i][j];
}
}
pp[k++] = max;
}
}
int main( )
{
int t[M][N]={{68, 32, 54, 12},{14, 24, 88, 58},{42, 22, 44, 56}};
int p [ N ], i, j, k;
printf ( "The original data is : \n" );
for( i=0; i<M; i++ ){
for( j=0; j<N; j++ )
printf ( "%6d", t[i][j] );
printf("\n");
}
fun ( t, p );
printf( "\nThe result is:\n" );
for ( k = 0; k < N; k++ ) printf ( " %4d ", p[ k ] );
printf("\n");
}
求出w的后面几位数
5794 得到的结果是794
#include<stdio.h>
#include<stdlib.h>
unsigned fun(unsigned w)
{
int i ,n=0,t,s=1;
t = w;
while(t!=0)//先判断有多少位
{
t = t/10;
n++;
}
for(i=0;i<n-1;i++)
s*=10;//举例 5947 %1000 = 947 s乘以三次10得到1000
return w%s;
}
int main()
{
unsigned x;
printf("Enter a unsigned integer number: ");
scanf ("%u",&x);
printf("The original data is:%u\n",x);
if(x<10)
printf("Data error! ");
else
printf ("The result :%u\n", fun(x));
}
统计各个年龄段的人数
#include<stdio.h>
#define N 50
# define M 11
void fun(int *a, int *b)
{
int i;
for(i=0;i<M;i++)
b[i] = 0;
for(i=0;i<N;i++)
{
if(a[i]>=100)
b[10]++;
else
b[a[i]/10]++;//取出十位数,就可以判断是哪个年龄层,19的十位数是1,年龄层是10岁
}
}
double rnd()//随机函数
{
static int t=29,c=217,m=1024,r=0;
r=(r*t+c)%m;
return((double)r/m);
}
int main()
{ int age[N], i, d[M];void NONO (int d[M]);
for(i=0; i<N;i++)
age[i]=(int)(115*rnd()); /*产生一个随机的年龄数组*/
printf("The original data :\n");
for(i=0;i<N;i++)
printf((i+1)%10==0?"%4d\n":"%4d",age[i]); /*每行输出10个数*/
printf("\n\n");
fun( age, d);
for(i=0;i<10;i++)printf("%4d---%4d : %4d\n",i*10,i*10+9,d[i]);
printf(" Over 100 : %4d\n",d[10]);
}
判断整数是几位
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
int j=0;
while(n!=0)
{
n = n/10;
j++;
}
printf("n是%d位数",j);
}
判断a~z之间的字母个数
#include <stdio.h>
#include <string.h>
void fun(char *tt, int pp[])
{
int i;
for(i=0;i<26;i++)
pp[i] = 0;
for(i=0;i<strlen(tt);i++)
{
pp[tt[i]-'a']++;
}
}
int main()
{
char aa[1000] ;
int bb[26], k ;
printf( "\nPlease enter a char string:" ) ; scanf("%s", aa) ;
fun(aa, bb ) ;
for ( k = 0 ; k < 26 ; k++ ) printf ("%d ", bb[k]) ;
printf( "\n" ) ;
}
删除数组中所有相同的数
#include <stdio.h>
#define N 80
int fun(int a[], int n)
{
int i,j=1;//注意从1开始
for(i=1;i<n;i++)
{
if(a[i-1]!=a[i])
a[j++] = a[i];
}
return j;
}
int main()
{ int a[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10},i,n=20;
printf("The original data :\n");
for(i=0; i<n; i++)printf("%3d",a[i]);
n=fun(a,n);
printf("\n\nThe data after deleted :\n");
for(i=0;i<n;i++)printf("%3d",a[i]); printf("\n\n");
}
判断数组中多少个重复数字
要求:3001中有重复数字0,所以算一个重复数字
先通过while循序将数组元素的各位位上的数字存放到数组b中。再通过循环,将有重复数字的标志flag设置为1,如果flag为1表示有重复数字,sum++,最后返回sum
#include <stdio.h>
#include <string.h>
int fun(int a[], int n)
{
int i,j,k,s,m,b[10],sum=0,flag = 0;
for(i=0;i<n;i++)
{
j = 0;
while(a[i])
{
b[j++] = a[i]%10;
a[i] = a[i]/10;
}
for(k=0;k<j;k++)
{
s = b[k];
for(m=k+1;m<j;m++)
if(s==b[m])
flag = 1;
}
if(flag ==1)
{
sum++;
flag = 0;
}
}
return sum;
}
int main()
{
int a[10]={2430,3001,1798,199,498,277,229,851,369,1146};
int m;
m = fun(a, 10);
printf("符合条件的数共有:%d\n",m);
}
判断什么三角形
三角形任意两边和大于第三边,任意两边差小于第三边。
1、直角三角形:存在有两边的平方和等于第三边的平方。(a2=b2+c2)
2、钝角三角形:存在最长边的平方大于其他两边的平方和。(a2>b2+c2)
3、锐角三角形:存在任意两边的平方和大于第三边的平方。(a2+b2>c2)
4、等边三角形:三边相等。(a=b=c)
#include<stdio.h>
int main()
{
int a, b, c;
scanf_s("%d,%d,%d", &a, &b, &c);
if (a + b > c && a + c > b && b + c > a)//判断是不是三角形
{
if (a * a > b * b + c * c || b * b > a * a + c * c || c * c > a * a + b * b)
printf("钝角三角形");
else if (a * a == b * b + c * c || b * b == a * a + c * c || c * c == a * a + b * b)
printf("直角三角形");
else if (b * b + c * c>a * a && a * a + c * c>b * b && a * a + b * b>c * c && a != b || a != c || b != c)
printf("锐角三角形");
else if (a == b && a == c)
printf("等边三角形");
else
printf("不存在");
}
else
printf("三角形不存在");
}
方法2:
#include <stdio.h>
#include <math.h>
int main()
{
float a,b,c;
float s,area;
printf("请输入三角形的三条边:\n");
scanf("%f,%f,%f",&a,&b,&c);
if(a+b>c&&b+c>a&&a+c>b)
{
s=(a+b+c)/2;
area=(float)sqrt(s*(s-a)*(s-b)*(s-c));
printf("三角形的面积是:%f\n" ,area);
if(a==b&&a==c)
printf("三角形是等边三角形\n");
else if(a==b||a==c||b==c)
printf("三角形是等腰三角形\n");
else if((a*a+b*b==c*c)||(a*a+c*c==b*b)||(b*b+c*c==a*a))
printf("三角形是直角三角形\n");
else
printf("三角形是普通三角形\n");
}
else
printf("不能构成三角形\n");
return 0;
}
鸡兔同笼
#include<stdio.h>
int main()
{
int m,n,x,y;
scanf("%d,%d",&m,&n);//m是头的数量,n是脚的数量
x = (n-m*2)/2;//兔子的数量
y = m - x; //m头的数量就相当于总数量。
printf("%d %d",x,y);
}
方法2:
#include<stdio.h>
int main()
{
int m,n;
int x,y;//x是兔子,y是鸡
scanf("%d,%d",&m,&n);//m是头的数量,n是脚的数量
for(x=0;x<m;x++)
{
for(y=0;y<m;y++)
if(x+y==m&&4*x+2*y==n)
printf("%d %d",x,y);
}
}
阶乘
求10!
#include<stdio.h>
int main()
{
int i,s=1;
for(i=1;i<=10;i++)
s = s * i;
printf("%d",s);
}
计算1-3+5-7+...-99+101
#include<stdio.h>
int main()
{
int i,t = 1,s=0;
for(i=1;i<=101;i+=2)
{
s = s+i*t;
t = -t;
}
printf("%d\n",s);
}
求m=1-2+3-4+...+9-10
#include<stdio.h>
int main()
{
int m = 0,f = 1 , i;
for(i=1;i<=10;i++)
{
m+=i*f;
f = -f;
}
printf("m=%d",m);
}
求s=1-1/3+1/5-1/7+....1/101
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int n, f = -1;
float sum = 0, t;
for (n = 1; n <= 101; n=n+2)
{
t = 1.0 / n;
f = -f;
sum = sum + t * f;
}
printf("%f", sum);
}
求e的近似值
题目:根据公式,求e = 1+1/1!+1/2!+1/3!+...
2!就是求他的阶乘1*2
3! 就是1*2*3
#include<stdio.h>
#include<string.h>
int main()
{
double e = 1;
int i =1;
int t = 1;
while(1.0/t>1e-6)
{
t = t * i;
e = e + 1.0 / t;
i++;
}
printf("e的阶乘是%lf",e);
}
求e的n次方
函数fun1求每项分子的值,fun2求每项分母的值
e的x方 = 1+x的平方/1到20的阶乘
#include<stdio.h>
float fun1(int x,int n)
{
int i;
float j = 1.0;
for (i = 1; i <= n; i++)
j = j * x;
return j;
}
float fun2(int n )
{
if (n == 1)
return 1;
else
return (fun2(n - 1) * n);
}
int main()
{
float e = 1.0;
int n, x;
scanf("%d", &x);
e = e + x;
for (n = 2; n < 20; n++)
e = e + fun1(x, n) / fun2(n);
printf("%d=%8.4f",x,e);
}
求a+aa+aaa+aaaa...(n个a)的值
#include<stdio.h>
#include<string.h>
int fun(int a,int n)
{
int i ;
int s = 0;
for(i=1;i<n;i++)
{
s = s*10+a;
}
return s;
}
int main()
{
int n ,a;
scanf("%d,%D",&a,&n);
printf("%d",fun(a,n));
}
卖西瓜
有1020个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个
#include<stdio.h>
#include<string.h>
int main()
{
int day=0,x1=1020,x2;
while(x1){
x2 = x1/2-2;//核心
x1 = x2;
day++;
}
printf("%d",day);
}
换钱问题
一百元大钞换为1元,5元,10元,每一种最少要一张
#include<stdio.h>
int main()
{
int y, w, s, n = 0;
for (y = 1; y < 100; y++)
for (w = 1; w < 20; w++)
for (s = 1; s < 10; s++)
if (y + w * 5 + s * 10 == 100)
n++;
printf("%d",n);
}
求两点坐标的距离
#include<stdio.h>
#include<math.h>
int main()
{
double x1,x2,y1,y2,dx,dy;
printf("请输入一个坐标");
scanf("%lf,%lf",&x1,&y1);
printf("请输入第二个坐标");
scanf("%lf,%lf",&x2,&y2);
dx = x1 - x2;
dy = y1 - y2;
dx = sqrt(dx*dx+dy*dy);
printf("%lf",dx);
}
问海滩上原来有多少个桃子
五只猴子分桃,第一只猴子把桃子分成五份,多了一个,把多的扔进了海中,拿走了一份,第二只猴子把剩下的桃子又分成五份,又多一个,同样扔进海中,拿走一份,其余三只猴子都是一样的操作,
#include<stdio.h>
int main()
{
int peach, i, j, count, rest;
for (i = 4; i < 10000; i += 4)
{
rest = i;
count = 0;
for (j = 0; j < 5; j++)
{
peach = rest / 4 * 5 + 1;
rest = peach;
if (peach % 4 == 0)
count++;
else
break;
}
if (count == 4)
{
printf("桃子的总数为%d", peach);
break;
}
}
}
猴子吃桃问题
猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天的一半零一个。到帝释天早上在想吃时,就只剩一个桃子了。求第一天一共摘了多少个桃子?
#include<stdio.h>
int main()
{
int day, x1, x2;
day = 9;
x2 = 1;
while (day > 0)
{
x1 = (x2 + 1) * 2;
x2 = x1;
day--;
}
printf("%d",x1);
}
方法二:
#include<stdio.h>
int main()
{
int n=1,i=1;
for(i=1;i<=9;i++)
n = (n+1)*2;
printf("%d",n);
}
服装店问题
服装店经营套服,也单件出售。若买的不少于50套每套 80 元;不足 50套的每套90 元; 只买上衣每件 60 元;只买裤子每条 45元。计算应付款 m。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main() {
int c, t, m;
printf("请输入上衣的数量和裤子的数量");
scanf("%d,%d",&c,&t);
if (t == c)
{
if (c >= 50)
m = c * 80;
else
m = c * 90;
}
else
if (c > t)
if (t >= 50)
m = t * 80 + (c - t) * 60;
else
m = t * 90 + (c - t) * 60;
else
if (c >= 50)
m = c * 80 + (t - c) * 45;
else
m = c * 90 + (t - c) * 45;
printf("总价为%d", m);
}
是否构成四边形
从键盘中华按逆时针或顺时针顺序输入4个顶点坐标,根据顶点坐标判断是否构成四边形
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
int x[4], y[4]; //存放四个顶点横纵坐标
int i, j, k, l;
int flag = 0; //判断是否为四边形
for (i = 0; i < 4; i++)
{
printf("输入第%d的横坐标", i + 1);
scanf("%d", &x[i]);
printf("输入第%d的纵坐标", i + 1);
scanf("%d", &y[i]);
}
//判断是否构成四边形
for (i = 0; i < 4; i++)
{
j = (i + 1 % 4);
k = (i + 2 % 4);
l = (i + 3 % 4);
//判断相邻两边是否平行
if ((y[j] - y[i]) * (x[k] - x[j]) == (y[k] - y[j]) * (x[j] - x[i]))
{
flag = 1;
break;
}
}
if (flag == 1)
printf("四个点构成不了四边形");
else
printf("四个点构成四边形");
return 0;
}
折纸问题
有一张纸,厚0.09毫米,将它对折多少次可以打倒珠穆朗玛峰的高度(8848米)?
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
double a = 9e-2;
int n = 0;
while (a <= 8848)
{
a = a * 2;
n++;
}
printf("a=%d", n);
}
三天打鱼两天晒网
有一个渔夫从2023年1月1日开始,每三天打一次鱼,两天晒一次网,当输入2023.1.1以后额任意一天时,该渔夫是在打鱼还是晒网
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int leap(int a) /*自定义函数 leap()用来指定输入的年份是否为国年*/
{
if (a % 4 == 0 && a % 100 != 0 || a % 400 == 0)
return 1; //润年判定条件
else
return 0; // 不是润年近回 O
}
int number(int year, int month, int day)/*自定义函数 number() 计算输入日期距2023年1月1日共有多少天*/
{
int sum = 0, i, j, k;
int a[12] = { 31, 28, 31, 30, 31, 30, 31,31,30, 31, 30, 31 }; //平年每月的天数
int b[12] = { 31, 29, 31, 30, 31, 30 ,31 ,31, 30, 31, 30,31 }; //闰年年每月的天数
if (leap(year) == 1)/*判断是否为闰年*/
for (i = 0; i < month - 1; i++)
sum += b[i]; //x是润年,累加数组 b前m - 1 个月份的天数
for (i = 0; i < month - 1; i++)
sum += a[i]; //不是闰年,累加数组a前m-1个月份的天数
for (j = 2023; j < year; j++)
if (leap(j) == i)
sum += 366;/*2023年到输入的年份是润年的加366*/
else
sum += 365;/*2023年到输入的年份不是闰年的加 365*/
sum += day; /*将前面累加的结采加上日期,求出总天数*/
return sum;/*返回计算的天数*/
}
int main()
{
int year, month, day, n;
printf("请输入年月日\n");
scanf("%d%d%d" ,&year, &month, &day );
n = number(year, month, day);
if((n % 5) < 4 && (n % 5) > 0)
printf("%d:%d:%d 打鱼\n", year, month, day);
else
printf("%d:%d:%d 晒网\n", year, month, day);
}
兔子问题(斐波那契)
#include<stdio.h>
int main()
{
long f1, f2;
int i;
f1 = f2 = 1;
for (i = 1; i <= 20; i++)
{
printf("%12ld %12ld", f1, f2);
if (i % 2 == 0)
{
printf("\n");
f1 = f1 + f2;
f2 = f1 + f2;
}
}
}
鞍点
找出具有m行n列二维数组Array的“鞍点”,即该位置上的元素在该行上最大,在该列上最小,其中1<=m,n<=10。
方法:找出最大的数,在找出改数所在列数的最小的数,如果两个相同,就是鞍点
#define MAX 10
#define MIN 10
int main()
{
int arr[MAX][MIN];
int n, m; // n行 m列
int i, j, k;
// 输入数组的行数和列数
printf("Enter the number of rows (1-10): ");
scanf("%d", &m);
printf("Enter the number of columns (1-10): ");
scanf("%d", &n);
printf("Enter the elements of the array:\n");
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
scanf("%d", &arr[i][j]);
}
}
for (i = 0; i < m; i++)
{
int max = 0;
for (j = 1; j < n; j++)
{
if (arr[i][max] < arr[i][j])
{
max = j;
}
}
int min = 0;
for (j = 1; j < m; j++)
{
if (arr[min][max] > arr[j][max])
{
min = j;
}
}
if (arr[i][max] == arr[min][max])
{
printf("Saddle point found at (%d, %d): %d\n", i + 1, max + 1, arr[i][max]);
}
}
return 0;
}
将输入的数字按规律插入数组
#include<stdio.h>
int main()
{
int a[10] = {10,20,30,40,50,60,70,80,90};
int i, j, t;
int n;
scanf("%d", &n);
a[9] = n;
for(i=0;i<9;i++)
if (a[9] < a[i])
{
t = a[9];
for (j = 8; j >= i; j--)
{
a[j + 1] = a[j];
a[j] = t;
}
}
for (i = 0; i < 10; i++)
printf("%d\t",a[i]);
return 0;
}
数据加密
加密规则:每位数字都加6,然后用和除以8的余数代替该数字,再将第一位和第五位交换,第二位和第四位交换
#include<stdio.h>
int main()
{
int num,enum1,d1,d2,d3,d4,d5;
scanf("%d",&num);
d1 = num / 10000;
d2 = (num/1000)%10;
d3 = (num/100)%10;
d4 = (num/10)%10;
d5 = num%10;
//加密
d1 = (d1+6) % 8;
d2 = (d2+6) % 8;
d3 = (d3+6) % 8;
d4 = (d4+6) % 8;
d5 = (d5+6) % 8;
//交换
enum1 = d5*10000+d4*1000+d3*100+d2*10+d1;
printf("%d",enum1);
}
三点判断三角形
题目:已知平面上三个点:(7,1)、(4,6)、(5,8),判断这三点组成的三角形是何种三角形(锐角,直角,钝角)
#include<stdio.h>
int main()
{
int x1 = 7,y1 = 1;
int x2 = 4,y2 = 6;
int x3 = 5,y3 = 8;
//计算向量AB和向量AC
int vecAB_x = x2 - x1;
int vecAB_y = y2 - y1;
int vecAC_x = x3 - y1;
int vecAC_y = y3 - y1;
//计算向量AB和向量AC的点积
int d = vecAB_x * vecAC_x + vecAB_y * vecAC_y;
if(d>0)
{
printf("锐角三角形");
}
else if(d==0)
printf("直角三角形");
else
printf("钝角三角形");
}
折半查找法
#include <stdio.h>
#define N 15
int main() {
int i,number,top,bott,mid,loca,a[N],flag=1,sign;
char c;
scanf("%d",&a[0]);//输入第一个数
i = 1;
while(i<N)//检查数是否已经输入完毕
{
scanf("%d",&a[i]);//输入下一个数
if(a[i]>=a[i-1])//如果输入的数大于前一个数 就继续输入
i++;
else
printf("重新输入");
}
printf("输入的数字为\n");
for(i=0;i<15;i++)
printf("%d ",a[i]);
printf("\n");
while(flag)
{
printf("输入要找的数字");
scanf("%d",&number);
sign = 0; //sign为0表示尚未找到
top = 0;//top是查找区间的启示位置
bott = N -1;//bott是查找区间的最末位置
if((number<a[0])||(number>a[N-1]))//要查找的数不在区间内
loca = -1;//表示找不到
//核心代码
while((!sign)&&(top<=bott))
{
mid = (bott+top)/2;//找出中间元素的下标
if(number==a[mid])//如果要查找中的数正好等于中间元素
{
loca = mid;//记录该下标
printf("找到了,下标为%d ",loca);
sign =1;//表示找到了
}
else if(number<a[mid])//如果要找的数小于中间元素的值
bott = mid - 1;//只须在下标为0~mid-1的元素中找
else //如果要查找的数不小于中间元素的值
top = mid+1;
}
if(!sign||loca==-1) //sign为0或loca等于-1,意味着找不到
printf("error");
}
}
负数靠左,正数靠右
#include<stdio.h>
int main()
{
int a[10] = {9,-6,5,-8,-7,-5,3,12,10,-11};
int i,left=0,right = 9,t;
while(left<right)
{
while(a[left]<0)
left++;
while(a[right]>0)
right--;
if(left<right)
{
t = a[left];
a[left] = a[right];
a[right] = t;
left++;
right--;
}
}
for(i=0;i<10;i++)
printf("%d ",a[i]);
}
球的高度
一个球从100米高度自由落下,每次落地后反弹回原来高度的一半,再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
#include<stdio.h>
int main()
{
int n = 10; //第10次落地
double height = 100;//初始高度
double distance = 0.0;//总距离
int i;
for(i=1;i<=n;i++)
{
distance += height; //累加经过的距离
height /=2.0; //更新反弹高度
distance += height;//累加反弹高度
}
printf("第%d次落地时经过的总距离:%.2f米\n",n,distance);
printf("第%d次反弹的高度:%.2f米\n",n,height);
}
*---