C语言基础算法

    科技2022-08-07  114

    1.从键盘输入一个字符串,将其中的大写字母变小写字母,小写字母变大写字母,并输出。 #include<stdio.h> 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<stdio.h> 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 <stdio.h> 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 <stdio.h> #include <string.h> 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 <stdio.h> #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 <stdio.h> #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 <stdio.h> 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 <stdio.h> 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 <stdio.h> 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 <stdio.h> 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]); } 11.字符数组逆序排列

    【释义】把输入的字符串逆序排列,如输入ABCDE,输出EDCBA

    #include <stdio.h> #include <string.h> 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; } 12.递归调用(求n的阶乘) #include <stdio.h> 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; } 13.求1到n阶乘的和 #include <stdio.h> 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; }
    Processed: 0.009, SQL: 8