分享之前和大家分享一本书叫做《厚黑学》,这本书可以了解一下社会现实,但是看这本书的时候切记,不可迷失自己。扉页的第一段话和大家分享一下:我自读书识字以来,就想为英雄豪杰,求之四书五经,茫无所得,求之诸子百家,与夫廿十四史,仍无所得,以为古之为英雄者,必有不传之秘,不过吾人生性愚鲁,寻他不出罢了。穷索冥搜,忘寝废食,如是者有年,一日偶然想起三国时几个人物,不觉恍然大悟曰:得之矣,得之矣,古之为英雄豪杰者,不过面厚心黑而已。这本书很好的,哈哈哈博主会努力这几天看完滴
今天给大家分享的是C语言经典题目(一)包含原题以及变式题目,非常值得深思和学习
一.将字符转化为 ASCII 码
ASCII表格
1.普通转换
#include <stdio.h> int main() { char c; printf("输入一个字符: "); // 读取用户输入 scanf("%c", &c); // %d 显示整数 // %c 显示对应字符 printf("%c 的 ASCII 为 %d", c, c); return 0; }
输出结果如下:
1. //输入一个字符: a 2. //a 的 ASCII 为 97
2.一次读取长字符,并一个一个显示 ASCII 码:
#include <stdio.h> #define MAX 65535 // 最大字符串长度 int main() { char s[MAX]; printf("请输入长度小于 %d 的任意字符:",MAX); scanf("%s",s); // 读取字符串。 for(int i = 0; s[i]!; i++) { printf("%c的ASCII:%d\t",s[i],s[i]); } }
3.ASCII与字符的相互转换
#include <stdio.h> #define MAX_ASCII 127 int main() { char num,enter; int temp=1; for(;temp>0;) { printf("----------------------------\n"); printf("|** 开始 **|\n"); printf("|**ASCII 转 字符 按:1 **|\n"); printf("|**字符 转 ASCII 按:2 **|\n"); printf("|** 结束 按:0 **|\n"); printf("----------------------------\n"); scanf("%d",&temp); if(temp==1) { printf("请输入数值小于 %d 的任意字符:",MAX_ASCII); scanf("%d",&num); printf("ASCII为 %d ,对应的字符为 %c \n",num,num); } if(temp==2) { printf("输入一个字符: \n"); scanf("%c", &enter); //回车键也算字符,所以这里使用其他变量替之. scanf("%c", &num); printf(" %c 的 ASCII 为 %d \n", num, num); } } return 0; }
二.计算字节大小
使用 sizeof 操作符计算int, float, double 和 char四种变量字节大小
需要注意以下两点:
1)sizeof 是 C 语言的一种单目操作符,如C语言的其他操作符++、--等,它并不是函数;
2) sizeof 操作符以字节形式给出了其操作数的存储大小;
1.计算 int, float, double 和 char 字节大小 :
#include <stdio.h> int main() { int integerType; float floatType; double doubleType; char charType; // sizeof 操作符用于计算变量的字节大小 printf("Size of int: %ld bytes\n",sizeof(integerType)); printf("Size of float: %ld bytes\n",sizeof(floatType)); printf("Size of double: %ld bytes\n",sizeof(doubleType)); printf("Size of char: %ld byte\n",sizeof(charType)); return 0; }
输出结果如下:
1. Size of int: 4 bytes 2. Size of float: 4 bytes 3. Size of double: 8 bytes 4. Size of char: 1 byte
2.计算 long long, long double 字节大小:
#include <stdio.h> int main() { int a; long b; long long c; double e; long double f; printf("Size of int = %ld bytes \n", sizeof(a)); printf("Size of long = %ld bytes\n", sizeof(b)); printf("Size of long long = %ld bytes\n", sizeof(c)); printf("Size of double = %ld bytes\n", sizeof(e)); printf("Size of long double = %ld bytes\n", sizeof(f)); return 0; }
输出结果如下:
Size of int = 4 bytes Size of long = 8 bytes Size of long long = 8 bytes Size of double = 8 bytes Size of long double = 16 bytes
三.判断三个数中的最大数
1.普通方法:
#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; }
输出结果如下:
1. 请输入三个数,以空格分隔: 1 2 3 2. 3.00 是最大数。
2.巧妙利用if—else语句
#include<stdio.h> int main() { int a,b,c,max; printf("请输入三个数,用空格隔开:"); scanf("%d %d %d",&a,&b,&c); if(a>b){ max=a; } else { max=b; } if(max>c){ printf("最大值是%d",max); } else{ max=c; printf("最大值是%d",max); } return 0; }
3.运用三元表达式
#include <stdio.h> int main() { int a, b, c, max; printf("请输入三个数,用空格分割: "); scanf("%d %d %d", &a, &b, &c); max = a > b ? ( a > c ? a : c ) : ( b > c ? b : c); printf("最大值是:%d", max); return 0; }
四.判断是否是闰年
- 普通方法(直接判断)
#include <stdio.h> int main() { int year; printf("输入年份: "); scanf("%d",&year); // year = 400; // (四年一闰,百年不闰) || 四百年在闰年 if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { printf("y\n"); } else { printf("n\n"); } return 0; }
2.多重if-else语句
#include <stdio.h> int main() { int year; printf("输入年份: "); scanf("%d",&year); if(year%4 == 0) { if( year%100 == 0) { // 这里如果被 400 整数是闰年 if ( year%400 == 0) printf("%d 是闰年", year); else printf("%d 不是闰年", year); } else printf("%d 是闰年", year ); } else printf("%d 不是闰年", year); return 0; }
五.计算自然数之和
1.使用for循环
#include <stdio.h> int main() { int n, i, sum = 0; printf("输入一个正整数: "); scanf("%d",&n); for(i=1; i <= n; ++i) { sum += i; // sum = sum+i; } printf("Sum = %d",sum); return 0; }
2.使用while循环
#include <stdio.h> int main() { int n, i, sum = 0; printf("输入一个正整数: "); scanf("%d",&n); i = 1; while ( i <=n ) { sum += i; ++i; } printf("Sum = %d",sum); return 0; }
3.使用递归
#include <stdio.h> int addNumbers(int n); int main() { int num; printf("输入一个整数: "); scanf("%d", &num); printf("Sum = %d",addNumbers(num)); return 0; } int addNumbers(int n) { if(n != 0) return n + addNumbers(n-1); else return n; }
4.利用等差数列求和公式
#include <stdio.h> int main() { int num; printf("请输入一个自然数:"); while (scanf("%d", &num) == 1) { printf("Sum = %d", (num + 1) * num / 2); break; } return 0; }
六.输出九九乘法表格
1.利用for循环
#include<stdio.h> int main(){ //外层循环变量,控制行 int i = 0; //内层循环变量,控制列 int j = 0; for(i=1;i<=9;i++){ for(j=1;j<=i;j++){ printf("%dx%d=%d\t",j,i,i*j); } //每行输出完后换行 printf("\n"); } }
输出结果如下:
1x1=1 1x2=2 2x2=4 1x3=3 2x3=6 3x3=9 1x4=4 2x4=8 3x4=12 4x4=16 1x5=5 2x5=10 3x5=15 4x5=20 5x5=25 1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36 1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49 1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64 1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81
2.递归实现方式
#include <stdio.h> void func(int i, int j) { if(i>j) return; printf("%dx%d=%d\t", i, j, i*j); func(i+1, j); } void f(int n) { if(n==1) printf("1x1=1\n"); else { f(n-1); func(1, n); putchar('\n'); } } int main() { f(9); return 0; }
七.斐波那契数列
斐波那契数列定义:
斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368........这个数列从第3项开始,每一项都等于前两项之和。
1.输出指定数量的斐波那契数列
#include <stdio.h> int main() { int i, n, t1 = 0, t2 = 1, nextTerm; printf("输出几项: "); scanf("%d", &n); printf("斐波那契数列: "); for (i = 1; i <= n; ++i) { printf("%d, ", t1); nextTerm = t1 + t2; t1 = t2; t2 = nextTerm; } return 0; }
输出结果如下:
1. 输出几项: 10 2. 斐波那契数列: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34,
2.输出指定数字前的斐波那契数列
#include <stdio.h> int main() { int t1 = 0, t2 = 1, nextTerm = 0, n; printf("输入一个正数: "); scanf("%d", &n); // 显示前两项 printf("斐波那契数列: %d, %d, ", t1, t2); nextTerm = t1 + t2; while(nextTerm <= n) { printf("%d, ",nextTerm); t1 = t2; t2 = nextTerm; nextTerm = t1 + t2; } return 0; }
输出结果如下:
1. 输入一个正数: 100 2. 斐波那契数列: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89,
八.求两个数的最大公约数
1.使用for和if
#include <stdio.h> int main() { int n1, n2, i, gcd; printf("输入两个正整数,以空格分隔: "); scanf("%d %d", &n1, &n2); for(i=1; i <= n1 && i <= n2; ++i) { // 判断 i 是否为最大公约数 if(n1%i==0 && n2%i==0) gcd = i; } printf("%d 和 %d 的最大公约数是 %d", n1, n2, gcd); return 0; }
输出结果如下:
1. 输入两个正整数,以空格分隔: 81 153 2. 81 和 153 的最大公约数是 9
2.使用while和if
#include <stdio.h> int main() { int n1, n2; printf("输入两个数,以空格分隔: "); scanf("%d %d",&n1,&n2); while(n1!=n2) { if(n1 > n2) n1 -= n2; else n2 -= n1; } printf("GCD = %d",n1); return 0; }
3.使用递归
#include <stdio.h> int hcf(int n1, int n2); int main() { int n1, n2; printf("输入两个正整数: "); scanf("%d %d", &n1, &n2); printf("%d 和 %d 的最大公约数为 %d", n1, n2, hcf(n1,n2)); return 0; } int hcf(int n1, int n2) { if (n2 != 0) return hcf(n2, n1%n2); else return n1; }
4.使用辗转相除法
#include <stdio.h> int main() { int a,b; int t; scanf("%d %d", &a, &b); while (b !=0 ){ t = a%b; a = b; b = t; printf("a=%d b=%d t=%d\n",a , b, t); } printf("最大公约数是%d\n", a); return 0; }
九.求两数的最小公倍数
1.使用while和if
#include <stdio.h> int main() { int n1, n2, minMultiple; printf("输入两个正整数: "); scanf("%d %d", &n1, &n2); // 判断两数较大的值,并赋值给 minMultiple minMultiple = (n1>n2) ? n1 : n2; // 条件为 true while(1) { if( minMultiple%n1==0 && minMultiple%n2==0 ) { printf("%d 和 %d 的最小公倍数为 %d", n1, n2,minMultiple); break; } ++minMultiple; } return 0; }
输出结果如下:
1. 输入两个正整数: 72 120 2. 72 和 120 的最小公倍数为 360
2.通过最大公约数计算
ps:(两个数相乘,再除以最大公倍数结果是最小公倍数数)
#include <stdio.h> int main() { int n1, n2, i, gcd, lcm; printf("输入两个正整数: "); scanf("%d %d",&n1,&n2); for(i=1; i <= n1 && i <= n2; ++i) { // 判断最大公约数 if(n1%i==0 && n2%i==0) gcd = i; } lcm = (n1*n2)/gcd; printf("%d 和 %d 的最小公倍数为 %d", n1, n2, lcm); return 0; }
输出结果如下:
1. 输入两个正整数: 72 120 2. 72 和 120 的最小公倍数为 360
十.计算阶乘
一个正整数的阶乘(英语:factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。n!=1×2×3×...×n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n。
1.普通方法
#include <stdio.h> int main() { int n, i; unsigned long long factorial = 1; printf("输入一个整数: "); scanf("%d",&n); // 如果输入是负数,显示错误 if (n < 0) printf("Error! 负数没有阶乘jiechen"); else { for(i=1; i<=n; ++i) { factorial *= i; // factorial = factorial*i; } printf("%d! = %llu", n, factorial); } return 0; }
2.使用递归
#include <stdio.h> long int multiplyNumbers(int n); int main() { int n; printf("输入一个整数: "); scanf("%d", &n); printf("%d! = %ld", n, multiplyNumbers(n)); return 0; } long int multiplyNumbers(int n) { if (n >= 1) return n*multiplyNumbers(n-1); else return 1; }
2023.01.30
From:努力进大厂的新青年