分享之前和大家分享一本书叫做《厚黑学》,这本书可以了解一下社会现实,但是看这本书的时候切记,不可迷失自己。扉页的第一段话和大家分享一下:我自读书识字以来,就想为英雄豪杰,求之四书五经,茫无所得,求之诸子百家,与夫廿十四史,仍无所得,以为古之为英雄者,必有不传之秘,不过吾人生性愚鲁,寻他不出罢了。穷索冥搜,忘寝废食,如是者有年,一日偶然想起三国时几个人物,不觉恍然大悟曰:得之矣,得之矣,古之为英雄豪杰者,不过面厚心黑而已。这本书很好的,哈哈哈博主会努力这几天看完滴
今天给大家分享的是C语言经典题目(一)包含原题以及变式题目,非常值得深思和学习的题目。
一.将字符转化为 ASCII 码
ASCII表格
![](https://i-blog.csdnimg.cn/blog_migrate/4d4c23e39847edf6f6b9c7e37afe1877.png)
ASCII表格
1.普通转换
#include <stdio.h>
int main()
{
char c;
printf("输入一个字符: ");
// 读取用户输入
scanf("%c", &c);
// %d 显示整数
// %c 显示对应字符
printf("%c 的 ASCII 为 %d", c, c);
return 0;
}
输出结果如下:
//输入一个字符: a
//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;
}
输出结果如下:
Size of int: 4 bytes
Size of float: 4 bytes
Size of double: 8 bytes
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 2 3
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;
}
输出结果如下:
输出几项: 10
斐波那契数列: 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;
}
输出结果如下:
输入一个正数: 100
斐波那契数列: 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;
}
输出结果如下:
输入两个正整数,以空格分隔: 81 153
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;
}
输出结果如下:
输入两个正整数: 72 120
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;
}
输出结果如下:
输入两个正整数: 72 120
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:努力进大厂的新青年