目录
基础算法
1.大小字母写转换
2.按序向数组插入数字
3.求水仙花数
4.将键盘输入字符串中出现的指定字符全部删除
5.杨辉三角
6.从键盘上输入5个数,输出最大、最小元素的值以及他们的下标
7.求两个数的最小公倍数
8.求两、三个数中较大者的函数
9.电文加密问题
10.冒泡排序法
11.字符数组逆序排列
12.递归调用(求n的阶乘)
13.求1到n阶乘的和
基础算法
1.从键盘输入一个字符串,将其中的大写字母变小写字母,小写字母变大写字母,并输出。
#include
void main()
{
int i;
char a[20];
//输入字符串
printf("请输入字符串的内容:\t");
do{
scanf("%c", &a[i]);
i++;
}while(a[i - 1] != '\n');
a[i] = '\0';
printf("*******************************\n");
printf("\n输入字符串的内容:\t");
i = 0;
while(a[i] != '\0')
{
printf("%c", a[i]);
i++;
}
printf("*******************************\n");
printf("转换后字符串的内容:\t");
i = 0;
char c;
while(a[i] != '\0')
{
c = a[i];
if(c >= 'a' && c <= 'z')
a[i] -= 32;
else if(c >= 'A' && c <= 'Z')
a[i] += 32;
printf("%c", a[i]);
i++;
}
}
2.把一个整数按大小顺序插入已排好序的数组中
#include
void main()
{
int i, j, p, q, s, n;
int a[11] = {
11, 12, 13, 14, 15, 10, 19, 18, 17, 16 };
for(i = 0; i < 10; i++)
{
p = i; q = a[i];
for(j = i + 1; j < 10; j++)
if(q < a[j])
{
p = j;
q = a[j];
}
if(p != i)
{
s = a[i];
a[i] = a[p];
a[p] = s;
}
printf("%d\t", a[i]);
}
printf("\n***********************************************\n");
printf("input number:\n");
scanf("%d", &n);
for(i = 0; i < 10; i++)
if(n > a[i])
{
for(s = 9; s >= i; s--)
a[s + 1] = a[s];
break;
}
a[i] = n;
printf("***************************************************\n");
for(i = 0; i <= 10; i++)
printf("%d\t", a[i]);
}
3.求水仙花数:输入一个三位数,判断是否是一个水仙花数。(水仙花数是指3位数的各个位数字的立方和等于这个3位数本身。)
#include
void main()
{
int i, n, x1, x2, x3, sum;
for(i = 153; i < 1000; i++)
{
n = i;
x1 = n % 10;
x2 = n / 10 % 10;
x3 = n / 100;
sum = x1 * x1 * x1 + x2 * x2 * x2 + x3 * x3 * x3;
if(sum == i)
printf("%d is a narcissus number!\n", i);
}
}
4.从键盘输入一个字符串与一个指定字符,将字符串中出现的指定字符全部删除。
#include
#include
void prochar(char *str, char c)
{
char *p;
for(p = str; *p != '\0'; p++)
if(*p != c)
*str ++= *p;
*str = '\0';
}
void main()
{
char str[80], char_c;
printf("请输入字符串:");
gets(str);
printf("请输入要删除的指定字符:");
scanf("%c", &char_c);
prochar(str, char_c);
puts(str);
}
5.杨辉三角
#include
#define N 10
void yanghui_triangle(int a[][N], int n);
void main()
{
int i, j, n, b[N][N];
printf("【行数不能超过所定义的N的值】请输入行数:");
scanf("%d", &n);
yanghui_triangle(b, n);
for(i = 0; i < n; i++)
{
for(j = 0; j <= i; j++)
printf("%-4d", b[i][j]);
printf("\n");
}
}
void yanghui_triangle(int a[][N], int n)
{
int i,j;
for(i = 0; i < n; i++) //生成三角形边上的元素
{
a[i][0] = 1; //0列与i列i行的元素为1
a[i][i] = 1;
}
for(i = 2; i < n; i++)
for(j = 1; j < i; j++)
a[i][j] = a[i - 1][j - 1] + a[i -1][j];
}
6.从键盘上输入5个数,输出最大、最小元素的值以及他们的下标
#include
#define N 5
void main()
{
int i, j, k, max, min;
static int a[5];
for(i = 0; i < 5; i++)
{
printf("请输入第%d个数字:", i + 1);
scanf("%d", &a[i]);
}
max = min = a[0];
j = k = 0;
for(i = 0; i < 5; i++)
{
if(max < a[i])
{
max = a[i];
j = i;
}
else if(min > a[i])
{
min = a[i];
k = i;
}
}
printf("max : a[%d] = %d, min : a[%d] = %d", j, max, k, min);
}
7.求两个数的最小公倍数。
#include
int divisor(int a, int b);
int multiple(int a, int b);
void main()
{
int a, b, c;
printf("输入第一个数a:");
scanf("%d", &a);
printf("输入第二个数b:");
scanf("%d", &b);
c = multiple(a, b);
printf("a和b的最小公倍数c为:%d", c);
}
int divisor(int a, int b)
{
int r;
while((r = a % b) != 0)
{
a = b;
b = r;
}
return b;
}
int multiple(int a, int b)
{
int d;
d = divisor(a, b);
return a * b / d;
}
8.求两、三个数中较大者的函数
#include
int max(int, int, int);
void main()
{
int a, b, c, t;
printf("依次输入三个数:\n请输入第一个数:");
scanf("%d", &a);
printf("请输入第二个数:");
scanf("%d", &b);
printf("请输入第三个数:");
scanf("%d", &c);
t = max(a, b, c);
printf("max : %d", t);
}
int max(int a, int b, int c)
{
int t;
if(a > b)
if(a > c)
t = a;
else
t = c;
else
if(b > c)
t = b;
else
t = c;
return t;
}
9.电文加密问题
【释义】已知电文加密规律为:将字母变成其后面的第3个字母,其他字符保持不变。例如:a变为d。
#include
void main()
{
char ch;
printf("请输入字符串:");
while((ch = getchar()) != '\n')
{
if((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
{
ch += 3; //对字母进行加密处理
if((ch > 'Z' && ch < 'a') || (ch > 'z'))
ch -= 26; //加密后越界进行处理
}
printf("%c", ch);
}
}
用getchar()函数进行字符的输入,不是从键盘硬件中读取输入的字符,而是从“输入缓冲区”读取字符。
10.冒泡排序法
1.比较第一个数与第二个数,若为逆序a[0]>a[1],则交换;
然后比较第二个数与第三个数;
依次类推,直至第n - 1个数和第n个数比较为止——第一趟冒泡排序,结果最大的数被安置在最后一个元素位置上
2.对前n - 1个数进行第二趟冒泡排序,结果使次大的数被安置在第n - 1个元素位置;
3.重复上述过程,共经过n - 1趟冒泡排序后,排序结束。
#include
void main()
{
int a[11], i, j, t;
printf("input 10 numbers:\n");
for(i = 1; i < 11; i++)
scanf("%d", &a[i]);
printf("the unsorted numbers:\n");
for(i = 1; i < 11; i++)
printf("%d\t", a[i]);
printf("\n*********************************\n");
for(j = 1; j <= 9; j++)
for(i = 1; i <= 10 - j; i++)
if(a[i] > a[i + 1])
{
t = a[i];
a[i] = a[i + 1];
a[i + 1] = t;
}
printf("the sorted numbers:\n");
for(i = 1; i < 11; i++)
printf("%d\t", a[i]);
}
【释义】把输入的字符串逆序排列,如输入ABCDE,输出EDCBA
#include
#include
int main()
{
char c, str[80];
int i, j;
printf("Input character array with keyboard:\n");
gets(str);
for(i = 0, j = strlen(str) - 1; i < j; i++, j--)
{
c = str[i];
str[i] = str[j];
str[j] = c;
}
printf("Reversed string:%s", str);
return 0;
}
#include
float fac(int n)
{
float f;
if(n < 0)
{
printf("n < 0, data error!");
}
else if(n == 0 || n == 1)
{
f = 1;
}
else
f = fac(n - 1) * n;
return f;
}
int main()
{
int n, y;
printf("Input a integer number:");
scanf("%d", &n);
y = fac(n);
printf("%d!=%d", n, y);
return 0;
}
#include
float fac(int n)
{
float f;
if(n < 0)
{
printf("n < 0, input error!");
}
else if(n == 0 || n == 1)
f = 1;
else
f = fac(n - 1) * n;
return f;
}
int main()
{
int n, i;
float y = 0;
printf("input a figure:\n");
scanf("%d", &n);
for(i = 0; i <= n; i++)
y = y + fac(i);
printf("%d!=%f", n, y);
return 0;
}