代码分享
- 1.计算余弦距离
- 2.对字符串的一些处理操作
- 3.根据数字分等级
- 4.实现输入度数计算正弦
- 5.找1,2,3,4不同组合情况
- 6.求利润
- 7.找满足条件的数
- 8.输入日期,判断为该年第几天
- 9.将3个数排序
- 10.输出字母“C"
- 11.输出九九乘法表
- 12.兔子数学问题
- 13.找101~200间的素数
- 14.找水仙花
- 15.将一个数分解为质因数
- 16.输入一个数,判断位数,然后逆序输出
- 17、判断素数
- 18、打印数字图形
- 19、
1.计算余弦距离
#include<stdio.h>
#include<math.h>
int main()
{
float a[10], b[10];
int i, j, k;
float sum1 = 0, sum2 = 0, sum3 = 0,sum4=0;
scanf("%d", &k);
for (i = 0; i < k; i++)
scanf("%f", &a[i]);
for (i = 0; i < k; i++)
scanf("%f", &b[i]);
for (i = 0; i < k; i++)
sum1 += a[i] * b[i];//分子
for (i = 0; i < k; i++)
{
sum2 += a[i] * a[i];
sum3 += b[i] * b[i];
}
sum4 = sqrt(sum2 * sum3);
printf("%.4f", 1-sum1 / sum4);
}
2.对字符串的一些处理操作
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void filt(char* w);
void capital(char* w);
void sort(char* w);
void shift(char* w, int m);
void out(char* w);
int main()
{
char w[80] = { 0 };
int m = 0;
gets(w);
filt(w);
capital(w);
sort(w);
scanf("%d", &m);
shift(w,m);
out(w);
}
//滤除非字母
void filt(char* w)
{
char z[100];
int i,j,n=0;
for(i=0,j=0;w[i]!='\0';i++)
if ((w[i] >= 'A' && w[i] <= 'Z') || (w[i] >= 'a' && w[i] <= 'z'))
{
z[j] = w[i];
j++;
}
z[j]='\0';
strcpy(w, z);
n=j;
}
//将字符串中字母大写
void capital(char* w)
{
strcpy(w, strupr(w));
}
//从大到小排序
void sort(char* w)
{
char t;
int i,j,n=0;
for(i=0;w[i]!='\0';i++)
n++;
for (i = 1; i< n; i++)
for (j = 0; j<n-i; j++)
if (w[j]<w[j+1])
{
t = w[j];
w[j] = w[j + 1];
w[j + 1] = t;
}
}
//平移字符
void shift(char* w, int m)
{
char b[m];
int i,j=0,n=0;
for (i = 0; i < m; i++)
{
b[j] = w[i];
j++;
}
for (i = 0; i < strlen(w) - m; i++)
w[i] = w[i + m];
for (j = 0; j < m; j++)
{
w[i] = b[j];
i++;
}
w[i] = '\0';
}
//输出
void out(char* w)
{
int i,j,n=0;
for (i = 0; w[i] != '\0'; i++)
printf("%c", w[i]);
}
3.根据数字分等级
#include<stdio.h>
char Gradling(int R);
int main()
{
int r;
scanf("%d", &r);
printf("%c\n", Gradling(r));
return 0;
}
char Gradling(int R)
{
if (R >= 100) return 'A';
else if (R >= 90 && R <100) return 'B';
else if (R >= 80 && R < 90) return 'C';
else return 'D';
}
4.实现输入度数计算正弦
#include<stdio.h>
#include<math.h>
int main()
{
float a, b,c=0;
scanf("%f", &a);
b=a;
while(a <= -360 || a >=360)
{
if(a>0) a-=360;
else a+=360;
}
c=sin(a*3.14159/180);
printf("sin(%.0f)=%.2f\n", b, c);
}
5.找1,2,3,4不同组合情况
#include<stdio.h>
/*
题目:有 1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
1.程序分析:可填在百位、十位、个位的数字都是 1、2、3、4。组成所有的排列后再去掉不满足条件的排列。
*/
main()
{
int i, j, k; printf("\n");
for (i = 1; i < 5; i++) /*以下为三重循环*/
for (j = 1; j < 5; j++)
for (k = 1; k < 5; k++)
if (i != k && i != j && j != k) /*确保i、j、k 三位互不相同*/
printf("%d,%d,%d\n", i, j, k);
}
6.求利润
#include<stdio.h>
/*
题目:企业发放的奖金根据利润提成。
利润(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,求应发放奖金总数?
1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。
*/
main()
{
long int i;
int bonus1, bonus2, bonus4, bonus6, bonus10, bonus;
scanf("%ld", &i);
bonus1 = 100000 * 0.1;
bonus2 = bonus1 + 100000 * 0.75;
bonus4 = bonus2 + 200000 * 0.5;
bonus6 = bonus4 + 200000 * 0.3;
bonus10 = bonus6 + 400000 * 0.15;
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
bonus = bonus10 + (i - 1000000) * 0.01; printf("bonus=%d", bonus);
}
7.找满足条件的数
#include<stdio.h>
#include "math.h"
/*
一个整数,它加上 100 后是一个完全平方数,再加上 168 又是一个完全平方数,请问该数是多少?
程序分析:在 10 万以内判断,先将该数加上 100 后再开方,再将该数加上 268 后再开方,
如果开方后的结果满足如下条件,即是结果
*/
main()
{
long int i, x, y, z;
for (i = 1; i < 100000; i++)
{
x = sqrt(i + 100); /*x 为加上 100 后开方后的结果*/
y = sqrt(i + 268); /*y 为再加上 168 后开方后的结果*/
if (x * x == i + 100 && y * y == i + 268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/
printf("\n%ld\n", i);
}
}
8.输入日期,判断为该年第几天
#include<stdio.h>
/*
题目:输入某年某月某日,判断这一天是这一年的第几天?
1.程序分析:以 3 月 5 日为例,应该先把前两个月的加起来,然后再加上 5 天即本年的第几天,特殊
情况,闰年且输入月份大于 3 时需考虑多加一天。
*/
main() {
int day, month, year, sum, leap;
printf("\nplease input year,month,day(逗号隔开)\n");
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 = 334; break;
default: printf("data error"); break;
}
sum = sum + day; /*再加上某天的天数*/
if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))/*判断是不是闰年*/
leap = 1; else leap = 0;
if (leap == 1 && month > 2)/*如果是闰年且月份大于 2,总天数应该加一天*/
sum++;
printf("It is the %dth day.", sum);
}
9.将3个数排序
#include<stdio.h>
/*
题目:输入三个整数 x,y,z,请把这三个数由小到大输出。
1.程序分析:我们想办法把最小的数放到 x 上,先将 x 与y 进行比较,如果 x>y 则将 x 与 y 的值进行交换,
然后再用x 与 z 进行比较,如果 x>z 则将x 与 z 的值进行交换,这样能使 x 最小。
*/
main() {
int x, y, z, t;
scanf("%d%d%d", &x, &y, &z); if (x > y)
{
t = x;
x = y;
y = t;
}
/*交换x,y 的值*/
if (x > z)
{
t = z;
z = x;
x = t;
}
/*交换 x,z 的值*/
if (y > z)
{
t = y;
y = z;
z = t;
}/*交换 z,y 的值*/
printf("small to big: %d %d %d\n", x, y, z);
}
10.输出字母“C"
#include <stdio.h>
/*
题目:用*号输出字母C 的图案。
1.程序分析:可先用'*'号在纸上写出字母C,再分行输出。
*/
main()
{
printf("Hello C-world!\n");
printf(" ****\n");
printf(" *\n");
printf(" * \n");
printf(" ****\n");
}
11.输出九九乘法表
#include <stdio.h>
/*
题目:输出 9*9 口诀。
1.程序分析:分行与列考虑,共 9 行 9 列,i 控制行,j 控制列。
*/
main()
{
int i, j, result;
printf("\n");
for (i = 1; i < 10; i++)
{
for (j = 1; j < 10; j++)
{
result = i * j;
printf("%d*%d=%-3d", i, j, result);/*-3d 表示左对齐,占 3 位*/
}
printf("\n");/*每一行后换行*/
}
}
12.兔子数学问题
#include <stdio.h>
/*
题目:古典问题:有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔
子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
1.程序分析: 兔子的规律为数列 1,1,2,3,5,8,13,21....
*/
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; /*前两个月加起来赋值给第三个月*/
}
}
13.找101~200间的素数
#include <stdio.h>
#include <math.h>
/*
判断 101-200 之间有多少个素数,并输出所有素数。
1.程序分析:判断素数的方法:用一个数分别去除 2 到 sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。
*/
main()
{
int m, i, k, h = 0, leap = 1;
printf("\n");
for (m = 101; m <= 200; m++)
{
k = sqrt(m + 1);
for (i = 2; i <= k; i++)
if (m % i == 0)
{
leap = 0;
break;
}
if (leap)
{
printf("%-4d", m);
h++;
if (h % 10 == 0)
printf("\n");
}
leap = 1;
}
printf("\nThe total is %d", h);
}
14.找水仙花
#include <stdio.h>
#include <math.h>
/*
题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数
字立方和等于该数 本身。例如:153 是一个“水仙花数”,因为 153=1 的三次方+5 的三次方+3 的三次方。
1.程序分析:利用 for 循环控制 100-999 个数,每个数分解出个位,十位,百位。
*/
main()
{
int i, j, k, n;
printf("'water flower'number is:");
for (n = 100; n < 1000; n++)
{
i = n / 100;/*分解出百位*/
j = n / 10 % 10;/*分解出十位*/
k = n % 10;/*分解出个位*/
if (i * 100 + j * 10 + k == i * i * i + j * j * j + k * k * k)
{
printf("%-5d", n);
}
}
printf("\n");
}
15.将一个数分解为质因数
#include <stdio.h>
#include <math.h>
/*
题目:将一个正整数分解质因数。例如:输入 90,打印出 90=2*3*3*5。
程序分析:对n 进行分解质因数,应先找到一个最小的质数 k,然后按下述步骤完成:
(1)如果这个质数恰等于 n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果 n<>k,但 n 能被k 整除,则应打印出 k 的值,并用 n 除以k 的商,作为新的正整数你n,
重复执行第一步。
(3)如果 n 不能被 k 整除,则用 k+1 作为k 的值,重复执行第一步。
*/
main()
{
int n, i;
printf("\nplease input a number:\n");
scanf("%d", &n);
printf("%d=", n);
for (i = 2; i <= n; i++)
{
while (n != i)
{
if (n % i == 0)
{
printf("%d*", i);
n = n / i;
}
else break;
}
}
printf("%d", n);
}
16.输入一个数,判断位数,然后逆序输出
#include<stdio.h>
int main()
{
int a, b[5];//a:输入的整数,b:存储a的每一个数字
int i, j = 1, k = 0;
scanf("%d", &a);
//检测输入合法性
while (a > 100000)
{
printf("\n最多5位数,请重新输入:");
scanf("%d", &a);
}
//判断是几位数
while (a > j)
{
j *= 10;
k++;//存储位数
}
printf("\n位数:%d\n\n\n",k);
//数组初始化
for (i = 0; i < 5; i++)
b[i] = -1;//-1相当于结束符
for (i = 0; i < k; i++)
{
if (a / 10 != 0)//a/10得到的是最高位,不为0就说明还不是个位
{
b[i] = a % 10;//求余是得到个位,即直接逆序存储
a /= 10;//去除个位
}
else
b[i] = a;//现在是只有1位了
}
//逆序输出
printf("逆序输出结果:\t");
for (i = 0; i < k && b[i]!=-1; i++)
printf("%d ", b[i]);
}
17、判断素数
/*
第一题解决思想:存在整除就是非素数,反之为素数
*/
#include<stdio.h>
main()
{
int a,b,i,j;
int c=0;//初始化为0,默认代表非素数
printf("请问你想验证几个数?\n");
scanf("%d",&a);
for(i=0;i<a;i++)
{
printf("\n请输入想要验证的数(>=2):");
scanf("%d",&b);
for(j=2;j<b;j++)
{
if(b%j==0)
{
c=0;
break;//存在整除,视为非素数,直接退出循环
}
else
c=1;//反之视为素数,继续循环判断
}
if(b==2) printf("%d是素数\n\n",b);
else if(c==0 && b!=2) printf("%d不是素数\n\n",b);
else printf("%d是素数\n\n",b);
c=0;//更新c为0,表示下一个判断的数,默认为非素数
}
}
18、打印数字图形
/*
第二题:
1.先保证循环17次(一次性解决,不采取多循环)
2.打印的数是几,就打印几次
3.<=9时,一直递增,之后递减
*/
#include<stdio.h>
main()
{
int a=0,i,j;
for(i=0;i<17;i++)
{
if(i>8) a--;
else a++;
for(j=0;j<a;j++)
printf("%d\t",a);
printf("\n");
}
}
19、