为了方便大家学习,这里提供了文章电子版方便打印学习!https://lovexh666.lanzoui.com/icqkNvyqpgh
教程推荐
1.啊哈C语言
2.啊哈算法
3.菜鸟教程
https://www.runoob.com/cprogramming/c-tutorial.html
0.Dev-C++ 安装
https://pc.qq.com/search.html#!keyword=devc%2B%2B
选择 普通下载
点击OK
点击 I Agree
点击 Next
点击 Install 也可以选择Browse安装到其他路劲
1.输出 "Hello, World!"
int main()
{
// printf() 中字符串需要引号
printf("Hello, World!");
return 0;
}
输出结果:HellWorld!
2.输出整数"
题目:使用 printf() 与 %d 格式化输出整数
#include <stdio.h>
int main()
{
int number;
// printf() 输出字符串
printf("输入一个整数: ");
// scanf() 格式化输入
scanf("%d", &number);
// printf() 显示格式化输入
printf("你输入的整数是: %d", number);
return 0;
}
输出结果:输入一个整数: 45
你输入的整数是: 45
3.输出单个字符
题目:使用 printf() 与 %c 格式化输出一个字符
#include <stdio.h>
int main() {
char c; // 声明 char 变量
c = 'A'; // 定义 char 变量
printf("c 的值为 %c", c);
return 0;
}
输出结果:c 的值为 A
4.输出浮点数
题目:使用 printf() 与 %f 输出浮点数
#include <stdio.h>
int main() {
float f; // 声明浮点数变量
f = 12.001234; // 定义浮点数变量
printf("f 的值为 %f", f);
return 0;
}
输出结果f 的值为 12.001234
5. 输出双精度(double)数
题目:使用 printf() 与 %e 输出双精度数
#include <stdio.h>
int main() {
double d; // 声明双精度变量
d = 12.001234; // 定义双精度变量
printf("d 的值为 %le", d);
return 0;
}
输出结果:d 的值为 1.200123e+01
6.两个整数相加
题目:使用 scanf() 来接收输入, printf() 与 %d 格式化输出整数
#include <stdio.h>
int main()
{
int firstNumber, secondNumber, sumOfTwoNumbers;
printf("输入两个数(以空格分割): ");
// 通过 scanf() 函数接收用户输入的两个整数
scanf("%d %d", &firstNumber, &secondNumber);
// 两个数字相加
sumOfTwoNumbers = firstNumber + secondNumber;
// 输出结果
printf("%d + %d = %d", firstNumber, secondNumber, sumOfTwoNumbers);
return 0;
}
输出结果:输入两个数(以空格分割): 1 2
1 + 2 = 3
7. 两个浮点数相乘
题目:输入两个浮点数,计算乘积
#include <stdio.h>
int main()
{
double firstNumber, secondNumber, product;
printf("输入两个浮点数: ");
// 用户输入两个浮点数
scanf("%lf %lf", &firstNumber, &secondNumber);
// 两个浮点数相乘
product = firstNumber * secondNumber;
// 输出结果, %.2lf 保留两个小数点
printf("结果 = %.2lf", product);
return 0;
}
输出结果:输入两个浮点数: 1.2 2.345
结果 = 2.81
8.字符转 ASCII 码
#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
(1)一次读取长字符,并一个一个显示 ASCII 码
#include <stdio.h>
#define MAX_STRING_LENGTH 65535 // 最大字符串长度
int main(){
char s[MAX_STRING_LENGTH];
printf("请输入长度小于 %d 的任意字符:",MAX_STRING_LENGTH);
scanf("%s",s); // 读取字符串。
for(int i = 0; s[i]; i++){
printf("%c的ASCII:%d\t",s[i],s[i]);
}
}
(2)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;
}
9. 两数相除
题目:使用 scanf() 来接收输入, printf() 与 %d 格式化输出整数
#include <stdio.h>
int main(){
int dividend, divisor, quotient, remainder;
printf("输入被除数: ");
scanf("%d", ÷nd);
printf("输入除数: ");
scanf("%d", &divisor);
// 计算商
quotient = dividend / divisor;
// 计算余数
remainder = dividend % divisor;
printf("商 = %d\n", quotient);
printf("余数 = %d", remainder);
return 0;
}
输出结果:输入被除数: 5
输入除数: 2
商 = 2
余数 = 1
10.数值比较
(1)比较两个数
以下实例中定义了两个整数变量,并使用 if 来比较两个数值,可以先看下逻辑图:
#include <stdio.h>
int main() {
int a, b;
a = 11;
b = 99;
// 也可以通过以下代码实现让用户在终端输入两个数
// printf("输入第一个值:");
// scanf("%d", &a);
// printf("输入第二个值:");
// scanf("%d", &b);
if(a > b)
printf("a 大于 b");
else
printf("a 小于等于 b");
return 0;
}
输出结果:a 小于等于 b
(2)比较三个数
以下实例中定义了两个整数变量,并使用 if 来比较三个数值,可以先看下逻辑图:
#include <stdio.h>
int main() {
int a, b, c;
a = 11;
b = 22;
c = 33;
if ( a > b && a > c )
printf("%d 最大", a);
else if ( b > a && b > c )
printf("%d 最大", b);
else if ( c > a && c > b )
printf("%d 最大", c);
else
printf("有两个或三个数值相等");
return 0;
}
输出结果:33 最大
(3)比较两数从键盘输入:
#include <stdio.h>
int main()
{
int a,b;
printf("请输入俩个整数以空格隔开: \n");
scanf("%d %d",&a,&b); // 从键盘输入两个数
if(a>b){
printf("%d>%d\n",a,b);
}
else
{
printf("%d<%d\n",a,b);
}
}
11.计算字节大小
(1)计算 int, float, double 和 char 字节大小
知识点
`使用 sizeof 操作符计算int, float, double 和 char四种变量字节大小
sizeof 是 C 语言的一种单目操作符,如C语言的其他操作符++、--等,它并不是函数
sizeof 操作符以字节形式给出了其操作数的存储大小`
#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
12.交换两个数的值
(1)使用临时变量
#include <stdio.h>
int main()
{
double firstNumber, secondNumber, temporaryVariable;
printf("输入第一个数字: ");
scanf("%lf", &firstNumber);
printf("输入第二个数字: ");
scanf("%lf",&secondNumber);
// 将第一个数的值赋值给 temporaryVariable
temporaryVariable = firstNumber;
// 第二个数的值赋值给 firstNumber
firstNumber = secondNumber;
// 将 temporaryVariable 赋值给 secondNumber
secondNumber = temporaryVariable;
printf("\n交换后, firstNumber = %.2lf\n", firstNumber);
printf("交换后, secondNumber = %.2lf", secondNumber);
return 0;
}
输出结果:输入第一个数字: 1
输入第二个数字: 2
交换后, firstNumber = 2.00
交换后, secondNumber = 1.00
(2)不使用临时变量
#include <stdio.h>
int main() {
int a, b;
a = 11;
b = 99;
printf("交换之前 - \n a = %d, b = %d \n\n", a, b);
a = a + b; // ( 11 + 99 = 110) 此时 a 的变量为两数之和,b 未改变
b = a - b; // ( 110 - 99 = 11)
a = a - b; // ( 110 - 11 = 99)
printf("交换后 - \n a = %d, b = %d \n", a, b);
}
输出结果:交换之前 -
a = 11, b = 99
交换后 -
a = 99, b = 11
13.判断奇数/偶数
#include <stdio.h>
int main()
{
int number;
printf("请输入一个整数: ");
scanf("%d", &number);
// 判断这个数除以 2 的余数
if(number % 2 == 0)
printf("%d 是偶数。", number);
else
printf("%d 是奇数。", number);
return 0;
}
输出结果:请输入一个整数: 5
5 是奇数。
参考方法:
`奇偶数判断其实有个更简单高效的办法,我们的整数,在计算机中存储的都是二进制
奇数的最后一位必是1,所以我们可以这样写:`
#include <stdio.h>
int main()
{
int number;
printf("请输入一个整数: ");
scanf("%d", &number);
// 判断这个数最后一位是1这为奇数
if(number&1)
printf("%d 是奇数。", number);
else
printf("%d 是偶数。", number);
return 0;
}
14.循环区间范围内的奇数/偶数
(1)循环输出指定区间范围的偶数
#include <stdio.h>
int main() {
int i;
for(i = 1; i <= 10; i++) {
if(i%2 == 0)
printf(" %2d\n", i);
}
return 0;
}
输出结果:2
4
6
8
10
(2)循环输出指定区间范围的奇数
#include <stdio.h>
int main() {
int i;
for(i = 1; i <= 10; i++) {
if(i%2 != 0)
printf("%d\n", i);
}
return 0;
}
输出结果:1
3
5
7
9
(3)使用按位与运算符判断奇偶数
#include <stdio.h>
int main(){
for (int i=1; i<10; i++)
// 通过按位与运算符判断奇偶数
i & 1 ? printf("奇数: %d\n", i) : printf("偶数: %d\n", i);
}
(4)改写为设定区间和除数,返回可以整除的数
#include <stdio.h>
int main()
{
// 定义自变量和起始数字及除数
int i, start, end,divisor;
printf("Please input a starting number:");
scanf("%d", &start);
printf("Please input a end number:");
scanf("%d", &end);
printf("Please input a integer as the divisor:");
scanf("%d", &divisor);
// 返回给定区间能被除数整除的数字
for (i = start; i <= end; i++)
{
if (i % divisor == 0)
printf("%d\n", i);
}
return 0;
}
15.判断元音/辅音
题目:判断输入的字母是元音,还是辅音
`英语有26个字母,元音只包括 a、e、i、o、u 这五个字母,其余的都为辅音
y是半元音、半辅音字母,但在英语中都把他当作辅音`
#include <stdio.h>
int main()
{
char c;
int isLowercaseVowel, isUppercaseVowel;
printf("输入一个字母: ");
scanf("%c",&c);
// 小写字母元音
isLowercaseVowel = (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u');
// 大写字母元音
isUppercaseVowel = (c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U');
// if 语句判断
if (isLowercaseVowel || isUppercaseVowel)
printf("%c 是元音", c);
else
printf("%c 是辅音", c);
return 0;
}
输出结果:输入一个字母: G
G 是辅音
(1)从键盘中输入的不是字母
如果从键盘中输入的不是字母,例如,数字,标点符号,都会输出是辅音。所以我对这个做了一个简单的判定
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <ctype.h>
int main()
{
char cLetter;
int iInRange, iCheck, i, iLetter;
i = 1;
while (i)
{
printf("输入一个字母, 判断元音与辅音. 如果想退出,请输入“0”。\n");
scanf("%c", &cLetter);
getchar();
printf("----------------------------------------------------------------------\n");
iLetter = (int)cLetter;
iCheck = isalpha(iLetter);
if (iCheck)
{
iInRange = (cLetter == 'a') || (cLetter == 'e') || (cLetter == 'i') || (cLetter == 'o') || (cLetter == 'u') || (cLetter == 'A') || (cLetter == 'E') || (cLetter == 'I') || (cLetter == 'O') || (cLetter == 'U');
if (iInRange)
{
printf("字母 %c 是元音字母!\n", cLetter);
printf("----------------------------------------------------------------------\n");
continue;
}
else
{
printf("字母 %c 是辅音字母!\n", cLetter);
printf("----------------------------------------------------------------------\n");
continue;
}
}
else if (iCheck == 0)
{
if (iLetter != 48)
{
printf("Error input!\n");
printf("----------------------------------------------------------------------\n");
continue;
}
else if ((int)cLetter == 48)
{
printf("Bye bye~~~!\n");
printf("----------------------------------------------------------------------\n");
i = (int)cLetter - 48;
}
}
}
return 0;
}
(2)参考方法:
#include <stdio.h>
#include <stdlib.h>
int main() {
char c;
printf("请输入一个字母:");
scanf("%c",&c);
if ((c>='A'&&c<='Z')||(c>='a'&&c<='z'))
if (c=='A'||c=='E'||c=='I'||c =='O'||c=='U'||c=='a'||c=='e'||c=='i'||c =='o'||c=='u')
printf("%c为元音",c);
else
printf("%c为辅音",c);
else
printf("Error input!");
return 0;
}
(3)多个字符输入错误的问题:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <ctype.h>
int main()
{
char cLetter,b,a;
int iInRange, iCheck, i, iLetter;
i = 1;
while (i)
{
printf("输入一个字母, 判断元音与辅音. 如果想退出,请输入“0”。\n");
scanf("%c", &a);
cLetter=a;
scanf("%c", &a);
while(a!=10 )
{
scanf("%c", &a);
}
//getchar();//getchar is must get a key input and CR
printf("----------------------------------------------------------------------\n");
iLetter = (int)cLetter;
iCheck = isalpha(iLetter);
if (iCheck)
{
iInRange = (cLetter == 'a') || (cLetter == 'e') || (cLetter == 'i') || (cLetter == 'o') || (cLetter == 'u') || (cLetter == 'A') || (cLetter == 'E') || (cLetter == 'I') || (cLetter == 'O') || (cLetter == 'U');
if (iInRange)
{
printf("字母 %c 是元音字母!\n", cLetter);
printf("----------------------------------------------------------------------\n");
continue;
}
else
{
printf("字母 %c 是辅音字母!\n", cLetter);
printf("----------------------------------------------------------------------\n");
continue;
}
}
else if (iCheck == 0)
{
if (iLetter != 48)
{
printf("Error input!\n");
printf("----------------------------------------------------------------------\n");
continue;
}
else if ((int)cLetter == 48)
{
printf("Bye bye~~~!\n");
printf("----------------------------------------------------------------------\n");
i = (int)cLetter - 48;
}
}
}
return 0;
}
16. 判断三个数中的最大数
#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 是最大数。
(1)参考方法:
#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;
}
(2)用三元表达式判断:
#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;
}
17.一元二次方程
**题目:求一元二次方程:ax2+bx+c=0 的根。
输入三个实数a,b,c的值,且a不等于0。**
#include <stdio.h>
#include <math.h>
int main()
{
float a,b,c,x1,x2,d;
printf("输入方程的三个系数:");
scanf("%f %f %f",&a,&b,&c);
if(a!=0)
{
d=sqrt(b*b-4*a*c);
x1=(-b+d)/(2*a);
x2=(-b-d)/(2*a);
if(x1<x2)
printf("%0.2f %0.2f\n",x2,x1);
else
printf("%0.2f %0.2f\n",x1,x2);
}
return 0;
}
输出结果:输入方程的三个系数:1 2 1
-1.00 -1.00
输入的三个系数 a、b、c 的判断解的情况
一元二次方程可能有两个实数解,或者一个实数解,或者无实数解
#include <stdio.h>
#include <math.h>
int main(void)
{
double a ,b , c;
double delat;
double x1, x2;
char ch;
do
{
printf("请输入一元二次方程的三个系数:\n");
printf("请输入系数 a = \t");
scanf("%lf",&a);
printf("请输入系数 b = \t");
scanf("%lf",&b);
printf("请输入系数 c = \t");
scanf("%lf",&c);
delat = b*b-4*a*c;
if(delat>0)
{
x1= ( -b+sqrt(delat) )/2;
x2= ( -b-sqrt(delat) )/2;
printf("有2个实数解:x1 = %lf x2 = %lf\n",x1,x2);
}
else if(delat==0)
{
x1=( -b+sqrt(delat) )/2;
printf("有2个相等实数解:x1=x2 = %lf\n",x1);
}
else
printf("无实数解\n");
printf("是否继续吗:Y/N\n");
scanf(" %c",&ch);
}while(ch=='y'||ch=='Y');
return 0;
}
18.判断闰年
题目:用户输入年份,判断该年份是否为闰年
#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;
}
输出结果:输入年份: 1990
1990 不是闰年
19.计算自然数的和
自然数是指表示物体个数的数,即由0开始,0,1,2,3,4,……一个接一个,组成一个无穷的集体,即指非负整数
(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;
}
20.输出九九乘法口诀表
使用嵌套 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
方法二:递归实现方式
#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;
}
21.斐波那契数列
**题目:斐波那契数列指的是这样一个数列 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 = 1, 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
斐波那契数列: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55,
(2)方法二:输出指定数字前的斐波那契数列
#include <stdio.h>
int main()
{
int t1 = 1, t2 = 1, nextTerm = 2, 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
斐波那契数列: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89,
22.求两数的最大公约数
题目:用户输入两个数,求这两个数的最大公约数
(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;
}
输出结果:输入两个数,以空格分隔: 81 153
GCD = 9
(3)方法三:适用正数和负数
#include <stdio.h>
int main()
{
int n1, n2;
printf("输入两个数,以空格分隔: ");
scanf("%d %d",&n1,&n2);
// 如果输入的是负数,将其转换为正数
n1 = ( n1 > 0) ? n1 : -n1;
n2 = ( n2 > 0) ? n2 : -n2;
while(n1!=n2)
{
if(n1 > n2)
n1 -= n2;
else
n2 -= n1;
}
printf("GCD = %d",n1);
return 0;
}
输出结果:输入两个数,以空格分隔: 81 -153
GCD = 9
(4)方法四:使用递归
#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;
}
(5)方法五:用辗转相除法
#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;
}
23.求两数最小公倍数
题目:用户输入两个数,求这两个数的最小公倍数
(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)方法二:通过最大公约数计算
#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
24.阶乘
**一个正整数的阶乘(英语: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;
}
输出结果:输入一个整数: 10
10! = 3628800
(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;
}
25. 循环输出26个字母
(1)循环输出 26 个字母
#include <stdio.h>
int main()
{
char c;
for(c = 'A'; c <= 'Z'; ++c)
printf("%c ", c);
return 0;
}
输出结果:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
(2)输出大写或小写字母
#include <stdio.h>
int main()
{
char c;
printf("输入 u 显示大写字母,输入 l 显示小写字母: ");
scanf("%c", &c);
if(c== 'U' || c== 'u')
{
for(c = 'A'; c <= 'Z'; ++c)
printf("%c ", c);
}
else if (c == 'L' || c == 'l')
{
for(c = 'a'; c <= 'z'; ++c)
printf("%c ", c);
}
else
printf("Error! 输入非法字符。");
return 0;
}
输出结果:输入 u 显示大写字母,输入 l 显示小写字母: l
a b c d e f g h i j k l m n o p q r s t u v w x y z
26.判断数字为几位数
题目:用户输入数字,判断该数字是几位数
记忆:除取前,余取后
#include <stdio.h>
int main()
{
long long n;
int count = 0;
printf("输入一个整数: ");
scanf("%lld", &n);
while(n != 0)
{
// n = n/10
n /= 10;
++count;
}
printf("数字是 %d 位数。", count);
}
输出结果:输入一个整数: 2345
数字是 4 位数。
27.计算一个数的 n 次方
题目:计算一个数的 n 次方,例如: 23,其中 2 为基数,3 为指数
(1)方法一: 使用 while
#include <stdio.h>
int main()
{
int base, exponent;
long long result = 1;
printf("基数: ");
scanf("%d", &base);
printf("指数: ");
scanf("%d", &exponent);
while (exponent != 0)
{
result *= base;
--exponent;
}
printf("结果:%lld", result);
return 0;
}
输出结果:基数: 2
指数: 3
结果:8
(2)方法二:使用 pow() 函数
#include <stdio.h>
#include <math.h>
int main()
{
double base, exponent, result;
printf("基数: ");
scanf("%lf", &base);
printf("指数: ");
scanf("%lf", &exponent);
// 计算结果
result = pow(base, exponent);
printf("%.1lf^%.1lf = %.2lf", base, exponent, result);
return 0;
}
输出结果:基数: 2
指数: 3
2.0^3.0 = 8.00
(3)方法三:递归
#include <stdio.h>
int power(int n1, int n2);
int main()
{
int base, powerRaised, result;
printf("基数: ");
scanf("%d",&base);
printf("指数(正整数): ");
scanf("%d",&powerRaised);
result = power(base, powerRaised);
printf("%d^%d = %d", base, powerRaised, result);
return 0;
}
int power(int base, int powerRaised)
{
if (powerRaised != 0)
return (base*power(base, powerRaised-1));
else
return 1;
}
28.判断回文数
**题目:判断一个数是否为回文数。
设n是一任意自然数。若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。例如,若n=1234321,则称n为一回文数;但若n=1234567,则n不是回文数**
include <stdio.h>
int main()
{
int n, reversedInteger = 0, remainder, originalInteger;
printf("输入一个整数: ");
scanf("%d", &n);
originalInteger = n;
// 翻转
while( n!=0 )
{
remainder = n%10;
reversedInteger = reversedInteger*10 + remainder;
n /= 10;
}
// 判断
if (originalInteger == reversedInteger)
printf("%d 是回文数。", originalInteger);
else
printf("%d 不是回文数。", originalInteger);
return 0;
}
输出结果:输入一个整数: 12321
12321 是回文数
参考方法:
#include <stdio.h>
#include<string.h>
int main()
{
int a=12021;
char s[10]={'\0'},s1[10]={'\0'};
sprintf(s,"%d",a); // 将整数转换为字符串
int n=strlen(s);
int j=0;
for(int i=n-1;i>=0;i--)
{
s1[j++]=s[i];
}
//s[j]='\0';
printf("%s %s\n",s,s1);
if(!strcmp(s,s1))
printf("整数%d是回文串",a);
else
printf("整数%d不是回文串",a);
return 0;
}
29.判断素数
题目:质数(prime number)又称素数,有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数,这样的数称为质数
(1)判断素数
#include <stdio.h>
int main()
{
int n, i, flag = 0;
printf("输入一个正整数: ");
scanf("%d",&n);
for(i=2; i<=n/2; ++i)
{
// 符合该条件不是素数
if(n%i==0)
{
flag=1;
break;
}
}
if (flag==0)
printf("%d 是素数",n);
else
printf("%d 不是素数",n);
return 0;
}
输出结果:输入一个正整数: 29
29 是素数
(2)判断两个数之间的素数
#include <stdio.h>
int main()
{
int low, high, i, flag;
printf("输入两个整数: ");
scanf("%d %d", &low, &high);
printf("%d 与 %d 之间的素数为: ", low, high);
while (low < high)
{
flag = 0;
for(i = 2; i <= low/2; ++i)
{
if(low % i == 0)
{
flag = 1;
break;
}
}
if (flag == 0)
printf("%d ", low);
++low;
}
return 0;
}
输出结果:输入两个整数: 100 200
100 与 200 之间的素数为: 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199
(3)使用函数判断两数间的素数
#include <stdio.h>
int checkPrimeNumber(int n);
int main()
{
int n1, n2, i, flag;
printf("输入两个正整数: ");
scanf("%d %d", &n1, &n2);
printf("%d 和 %d 间的素数为: ", n1, n2);
for(i=n1+1; i<n2; ++i)
{
// 判断是否为素数
flag = checkPrimeNumber(i);
if(flag == 1)
printf("%d ",i);
}
return 0;
}
// 函数定义
int checkPrimeNumber(int n)
{
int j, flag = 1;
for(j=2; j <= n/2; ++j)
{
if (n%j == 0)
{
flag =0;
break;
}
}
return flag;
}
输出结果:输入两个正整数: 10 30
10 和 30 间的素数为: 11 13 17 19 23 29
(4)用sqrt降低时间复杂度
#include<stdio.h>
#include<math.h>
int issushu(int k);
int main(){
int n,count=0;
scanf("%d",&n);
for(int i=n;i>3;i--)
if(issushu(i))
if(issushu(i-2))
count++;
printf("%d",count);
return 0;
}
int issushu(int k){
for(int i=2;i<sqrt(k)+1;i++){
if(k%i==0)
return 0;
}
return 1;
}
30.判断Armstrong数(阿姆斯壮数)
Armstrong 数,就是n位数的各位数的n次方之和等于该数,如153 = 1^3 + 5^3 + 3^3, 1634 = 1^4 + 6^4 + 3^4 + 4^4
(1)判断一个数是否为Armstrong数
#include <stdio.h>
int main()
{
int number, originalNumber, remainder, result = 0;
printf("输入三位数: ");
scanf("%d", &number);
originalNumber = number;
while (originalNumber != 0)
{
remainder = originalNumber%10;
result += remainder*remainder*remainder;
originalNumber /= 10;
}
if(result == number)
printf("%d 是 Armstrong 数",number);
else
printf("%d 不是 Armstrong 数",number);
return 0;
}
输出结果:输入三位数: 371
371 是 Armstrong
(2)两数之间的 Armstrong 数
#include <stdio.h>
#include <math.h>
int main()
{
int low, high, i, temp1, temp2, remainder, n = 0, result = 0;
printf("输入两个整数: ");
scanf("%d %d", &low, &high);
printf("%d 和 %d 之间的 Armstrong 数为: ", low, high);
for(i = low + 1; i < high; ++i)
{
temp2 = i;
temp1 = i;
// 计算
while (temp1 != 0)
{
temp1 /= 10;
++n;
}
while (temp2 != 0)
{
remainder = temp2 % 10;
result += pow(remainder, n);
temp2 /= 10;
}
if (result == i) {
printf("%d ", i);
}
n = 0;
result = 0;
}
return 0;
}
输出结果:输入两个整数: 100 1000
100 和 1000 之间的 Armstrong 数为: 153 370 371 407
(3) 使用函数判断Armstrong 数
#include <stdio.h>
#include <math.h>
int checkPrimeNumber(int n);
int checkArmstrongNumber(int n);
int main()
{
int n, flag;
printf("输入正整数: ");
scanf("%d", &n);
// 检测 Armstrong 数
flag = checkArmstrongNumber(n);
if (flag == 1)
printf("%d 是 Armstrong 数。", n);
else
printf("%d 不是 Armstrong 数。",n);
return 0;
}
int checkArmstrongNumber(int number)
{
int originalNumber, remainder, result = 0, n = 0, flag;
originalNumber = number;
while (originalNumber != 0)
{
originalNumber /= 10;
++n;
}
originalNumber = number;
while (originalNumber != 0)
{
remainder = originalNumber%10;
result += pow(remainder, n);
originalNumber /= 10;
}
// 判断条件
if(result == number)
flag = 1;
else
flag = 0;
return flag;
}
输出结果:输入正整数: 371
371 是 Armstrong 数。
31.求一个整数的所有因数
假如a*b=c(a、b、c都是整数),那么我们称a和b就是c的因数
#include <stdio.h>
int main()
{
int number, i;
printf("输入一个整数: ");
scanf("%d",&number);
printf("%d 的因数有: ", number);
for(i=1; i <= number; ++i)
{
if (number%i == 0)
{
printf("%d ",i);
}
}
return 0;
}
输出结果:输入一个整数: 60
60 的因数有: 1 2 3 4 5 6 10 12 15 20 30 60
寻找两数的所有公因数:
#include <stdio.h>
int main()
{
int num1, num2, i;
printf("输入两个数,使用空格分隔:");
scanf("%d %d", &num1, &num2);
for (i = 1; i <= (num1 > num2 ? num2 : num1) ; ++i)
{
if (num1%i == 0 && num2%i == 0)
{
printf("%d ", i);
}
}
return 0;
}
32.创建各类三角形图案
(1)创建三角形图案
题目:
#include <stdio.h>
int main()
{
int i, j, rows;
printf("行数: ");
scanf("%d",&rows);
for(i=1; i<=rows; ++i)
{
for(j=1; j<=i; ++j)
{
printf("* ");
}
printf("\n");
}
return 0;
}
输出结果:
*
* *
* * *
* * * *
* * * * *
(2)金字塔
#include <stdio.h>
int main()
{
int i, space, rows, k=0;
printf("Enter number of rows: ");
scanf("%d",&rows);
for(i=1; i<=rows; ++i, k=0)
{
for(space=1; space<=rows-i; ++space)
{
printf(" ");
}
while(k != 2*i-1)
{
printf("* ");
++k;
}
printf("\n");
}
return 0;
}
输出结果:
*
* * *
* * * * *
* * * * * * *
* * * * * * * * *
(3)倒金字塔
#include<stdio.h>
int main()
{
int rows, i, j, space;
printf("行数: ");
scanf("%d",&rows);
for(i=rows; i>=1; --i)
{
for(space=0; space < rows-i; ++space)
printf(" ");
for(j=i; j <= 2*i-1; ++j)
printf("* ");
for(j=0; j < i-1; ++j)
printf("* ");
printf("\n");
}
return 0;
}
输出结果:
* * * * * * * * *
* * * * * * *
* * * * *
* * *
*
(4)杨辉三角
#include <stdio.h>
int main()
{
int rows, coef = 1, space, i, j;
printf("行数: ");
scanf("%d",&rows);
for(i=0; i<rows; i++)
{
for(space=1; space <= rows-i; space++)
printf(" ");
for(j=0; j <= i; j++)
{
if (j==0 || i==0)
coef = 1;
else
coef = coef*(i-j+1)/j;
printf("%4d", coef);
}
printf("\n");
}
return 0;
}
输出结果:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
(5)弗洛伊德三角形
#include <stdio.h>
#define N 10
int main()
{
int i,j,l;
for(i=1,j=1;i<=N;i++)
{
for(l=1;l<=i;l++,j++)
printf("%5d",j);
printf("\n");
}
return 0;
}
输出结果:
1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 32 33 34 35 36
37 38 39 40 41 42 43 44 45
46 47 48 49 50 51 52 53 54 55
33.小项目:计算器
(1)实现加减乘除计算
# include <stdio.h>
int main() {
char operator;
double firstNumber,secondNumber;
printf("输入操作符 (+, -, *,): ");
scanf("%c", &operator);
printf("输入两个数字: ");
scanf("%lf %lf",&firstNumber, &secondNumber);
switch(operator)
{
case '+':
printf("%.1lf + %.1lf = %.1lf",firstNumber, secondNumber, firstNumber + secondNumber);
break;
case '-':
printf("%.1lf - %.1lf = %.1lf",firstNumber, secondNumber, firstNumber - secondNumber);
break;
case '*':
printf("%.1lf * %.1lf = %.1lf",firstNumber, secondNumber, firstNumber * secondNumber);
break;
case '/':
printf("%.1lf / %.1lf = %.1lf",firstNumber, secondNumber, firstNumber / secondNumber);
break;
// operator doesn't match any case constant (+, -, *, /)
default:
printf("Error! operator is not correct");
}
return 0;
}
输出结果:输入操作符 (+, -, *,): *
输入两个数字: 4 5
4.0 * 5.0 = 20.0
(2)豪华版计算器
#include <stdio.h>
int get_option();
void print_result(int num1,int num2,int result,int option);
int main(void)
{
int done = 0;
int option,num1,num2,result;
while(!done)
{
option = get_option();
if(option == 5)
{
done = 1;
}
else {
do {
printf("\n请输入两个数:");
scanf("%d %d",&num1,&num2);
if(option == 4 && num2 == 0)
{
printf("\n对不起,除数不能为零");
}
else {
switch(option){
case 1:
result = num1 + num2;
break;
case 2:
result = num1 - num2;
break;
case 3:
result = num1 * num2;
break;
case 4:
result = num1 / num2;
}
print_result(num1,num2,result,option);
}
}while(option == 4 && num2 == 0);
}
}
return 0;
}
int get_option()
{
int option;
do
{
printf("\n ****************");
printf("\n * 1.加法 *");
printf("\n * 2.减法 *");
printf("\n * 3.乘法 *");
printf("\n * 4.除法 *");
printf("\n * 0.退出 *");
printf("\n ****************");
printf("\n请输入您需要的功能:");
scanf("%d",&option);
if(option <1 || option > 5)
{
printf("对不起您输入的数字有误,请重新输入。\n");
}
}while(option <1 || option > 5);
return option;
}
void print_result(int num1,int num2,int result,int option){
char operator;
switch(option){
case 1:
operator = '+';
break;
case 21:
operator = '-';
break;
case 3:
operator = '*';
break;
case 4:
operator = '/';
break;
}
printf("\n** %d %c %d = %d **\n",num1,operator,num2,result);
}
34.计算一个数是否可为两个素数之和
#include <stdio.h>
int checkPrime(int n);
int main()
{
int n, i, flag = 0;
printf("输入正整数: ");
scanf("%d", &n);
for(i = 2; i <= n/2; ++i)
{
// 检测判断
if (checkPrime(i) == 1)
{
if (checkPrime(n-i) == 1)
{
printf("%d = %d + %d\n", n, i, n - i);
flag = 1;
}
}
}
if (flag == 0)
printf("%d 不能分解为两个素数。", n);
return 0;
}
// 判断素数
int checkPrime(int n)
{
int i, isPrime = 1;
for(i = 2; i <= n/2; ++i)
{
if(n % i == 0)
{
isPrime = 0;
break;
}
}
return isPrime;
}
输出结果:输入正整数: 34
34 = 3 + 31
34 = 5 + 29
34 = 11 + 23
34 = 17 + 17
35.二进制与十进制相互转换
(1)二进制转换为十进制
#include <stdio.h>
#include <math.h>
int convertBinaryToDecimal(long long n);
int main()
{
long long n;
printf("输入一个二进制数: ");
scanf("%lld", &n);
printf("二进制数 %lld 转换为十进制为 %d", n, convertBinaryToDecimal(n));
return 0;
}
int convertBinaryToDecimal(long long n)
{
int decimalNumber = 0, i = 0, remainder;
while (n!=0)
{
remainder = n%10;
n /= 10;
decimalNumber += remainder*pow(2,i);
++i;
}
return decimalNumber;
}
输出结果:输入一个二进制数: 110110111
二进制数 110110111 转换为十进制为 439
(2)十进制转换为二进制
#include <stdio.h>
#include <math.h>
long long convertDecimalToBinary(int n);
int main()
{
int n;
printf("输入一个十进制数: ");
scanf("%d", &n);
printf("十进制数 %d 转换为二进制位 %lld", n, convertDecimalToBinary(n));
return 0;
}
long long convertDecimalToBinary(int n)
{
long long binaryNumber = 0;
int remainder, i = 1, step = 1;
while (n!=0)
{
remainder = n%2;
printf("Step %d: %d/2, 余数 = %d, 商 = %d\n", step++, n, remainder, n/2);
n /= 2;
binaryNumber += remainder*i;
i *= 10;
}
return binaryNumber;
}
输出结果:输入一个十进制数: 100
Step 1: 100/2, 余数 = 0, 商 = 50
Step 2: 50/2, 余数 = 0, 商 = 25
Step 3: 25/2, 余数 = 1, 商 = 12
Step 4: 12/2, 余数 = 0, 商 = 6
Step 5: 6/2, 余数 = 0, 商 = 3
Step 6: 3/2, 余数 = 1, 商 = 1
Step 7: 1/2, 余数 = 1, 商 = 0
十进制数 100 转换为二进制位 1100100
36.字符串翻转
(1)字符串翻转(递归法)
#include <stdio.h>
void reverseSentence();
int main()
{
printf("输入一个字符串: ");
reverseSentence();
return 0;
}
void reverseSentence()
{
char c;
scanf("%c", &c);
if( c != '\n')
{
reverseSentence();
printf("%c",c);
}
}
输出结果:输入一个字符串: xiaohang
gnahoaix
(2)参考方法1:
#include <stdio.h>
#include <string.h>
char* reverseStr(char* str);
int main()
{
char str[30];
printf("输入一个字符串: ");
scanf("%s", str);
printf("翻转之前的字符串为:%s\n",str);
printf("翻转之后的字符串为:%s",reverseStr(str));
return 0;
}
char* reverseStr(char* str)
{
int i=0;
int j=strlen(str)-1;
char temp;
while (i<j)
{
temp=*(str+i);
*(str+i)=*(str+j);
*(str+j)=temp;
i++;
j--;
}
return str;
}
(3)参考方法2:
#include <stdio.h>
#include <string.h>
void reverseStr(char* str);
int main()
{
char str[30];
printf("输入一个字符串: ");
scanf("%s", str);
printf("翻转之后的字符串为:");
reverseStr(str);
return 0;
}
void reverseStr(char* str)
{
if(*str=='\0') return;
reverseStr(str+1);
printf("%c",*str);
}
37.计算数组元素平均值
使用 for 循环迭代出输出元素,并将各个元素相加算出总和,再除于元素个数
(1)实例 1
#include <stdio.h>
int main() {
int array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
int sum, loop;
float avg;
sum = avg = 0;
for(loop = 0; loop < 10; loop++) {
sum = sum + array[loop];
}
avg = (float)sum / loop;
printf("平均值为 %.2f", avg);
return 0;
}
输出结果:平均值为 4.50
(2)用 scanf 的特性来控制循环:
#include <stdio.h>
int main(void)
{
float x;
printf("请输入数字:(输入q退出)");
int i=0;
float status;
float sum=0;
float avg=0;
status=scanf("%f", &x);
while ( status==1 ) {
sum+=x;
printf("请输入数字:(输入q退出)");
status=scanf("%f", &x);
i++;
}
avg=sum/(i);
printf("%.2f",avg);
return 0;
}
38.输出数组
使用 for 循环输出数组:
#include <stdio.h>
int main() {
int array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
int loop;
for(loop = 0; loop < 10; loop++)
printf("%d ", array[loop]);
return 0;
}
输出结果:1 2 3 4 5 6 7 8 9 0
39.查找数组中最大的元素值
打擂台法
#include <stdio.h>
int main() {
int array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
int loop, largest;
largest = array[0];
for(loop = 1; loop < 10; loop++) {
if( largest < array[loop] )
largest = array[loop];
}
printf("最大元素为 %d", largest);
return 0;
}
输出结果:最大元素为 9
40. 数组拆分与合并
(1)将一个数组拆分为一个为奇数数组,一个为偶数数组:
#include <stdio.h>
int main() {
int array[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int even[10], odd[10];
int loop, e, d;
e = d = 0;
for(loop = 0; loop < 10; loop++) {
if(array[loop]%2 == 0) {
even[e] = array[loop];
e++;
}else {
odd[d] = array[loop];
d++;
}
}
printf(" 原始数组 -> ");
for(loop = 0; loop < 10; loop++)
printf(" %d", array[loop]);
printf("\n 偶数 -> ");
for(loop = 0; loop < e; loop++)
printf(" %d", even[loop]);
printf("\n 奇数 -> ");
for(loop = 0; loop < d; loop++)
printf(" %d", odd[loop]);
return 0;
}
输出结果:原始数组 -> 0 1 2 3 4 5 6 7 8 9
偶数 -> 0 2 4 6 8
奇数 -> 1 3 5 7 9
(2)将奇数数组与偶数数组合并为一个数组:
#include <stdio.h>
int main() {
int array[10];
int even[5] = {0, 2, 4, 6, 8};
int odd[5] = {1, 3, 5, 7, 9};
int loop, index, e_len, o_len;
e_len = o_len = 5;
index = 0;
for(loop = 0; loop < e_len; loop++) {
array[index] = even[loop];
index++;
}
for(loop = 0; loop < o_len; loop++) {
array[index] = odd[loop];
index++;
}
printf("\n偶数 -> ");
for(loop = 0; loop < e_len; loop++)
printf(" %d", even[loop]);
printf("\n奇数 -> ");
for(loop = 0; loop < o_len; loop++)
printf(" %d", odd[loop]);
printf("\n合并后 -> ");
for(loop = 0; loop < 10; loop++)
printf(" %d", array[loop]);
return 0;
}
输出结果:偶数 -> 0 2 4 6 8
奇数 -> 1 3 5 7 9
合并后 -> 0 2 4 6 8 1 3 5 7 9
41.数组拷贝
思考:值传递与地址传递的区别?
#include <stdio.h>
int main() {
int original[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
int copied[10];
int loop;
for(loop = 0; loop < 10; loop++) {
copied[loop] = original[loop];
}
printf("元素数组 -> 拷贝后的数组 \n");
for(loop = 0; loop < 10; loop++) {
printf(" %2d %2d\n", original[loop], copied[loop]);
}
return 0;
}
输出结果:
元素数组 -> 拷贝后的数组
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
0 0
思考:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int array[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int *arrayPointer = (int*)calloc(sizeof(array) / sizeof(array[0]), sizeof(int)), i;//令指针指向一块新内存区,该内存区大小刚好可以容纳旧数组所有元素
for ( i = 0; i < sizeof(array)/sizeof(array[0]); i++)
*arrayPointer++ = array[i];
*arrayPointer = '\0';//为新数组手动添上结束标记
arrayPointer -= sizeof(array) / sizeof(array[0]);//指针归首位
printf("元素数组 -> 拷贝后的数组 \n");
for (i = 0; i < sizeof(array) / sizeof(array[0]); i++)
printf("%5d%13d\n",array[i],arrayPointer[i]);
return 0;
}
42.计算标准偏差
#include <stdio.h>
#include <math.h>
float calculateSD(float data[]);
int main()
{
int i;
float data[10];
printf("输入10个元素: ");
for(i=0; i < 10; ++i)
scanf("%f", &data[i]);
printf("\n标准偏差 = %.6f", calculateSD(data));
return 0;
}
float calculateSD(float data[])
{
float sum = 0.0, mean, standardDeviation = 0.0;
int i;
for(i=0; i<10; ++i)
{
sum += data[i];
}
mean = sum/10;
for(i=0; i<10; ++i)
standardDeviation += pow(data[i] - mean, 2);
return sqrt(standardDeviation/10);
}
输出结果:
输入10个元素: 1
2
3
4
5
6
7
8
9
10
标准偏差 = 2.872281
43.两个矩阵相加
(1)使用多维数组将两个矩阵相加
#include <stdio.h>
int main(){
int r, c, a[100][100], b[100][100], sum[100][100], i, j;
printf("输入行数 ( 1 ~ 100): ");
scanf("%d", &r);
printf("输入列数 ( 1 ~ 100): ");
scanf("%d", &c);
printf("\n输入第一维数组的元素:\n");
for(i=0; i<r; ++i)
for(j=0; j<c; ++j)
{
printf("输入元素 a%d%d: ",i+1,j+1);
scanf("%d",&a[i][j]);
}
printf("输入第二维数组的元素:\n");
for(i=0; i<r; ++i)
for(j=0; j<c; ++j)
{
printf("输入元素 a%d%d: ",i+1, j+1);
scanf("%d", &b[i][j]);
}
// 相加
for(i=0;i<r;++i)
for(j=0;j<c;++j)
{
sum[i][j]=a[i][j]+b[i][j];
}
// 显示结果
printf("\n二维数组相加结果: \n\n");
for(i=0;i<r;++i)
for(j=0;j<c;++j)
{
printf("%d ",sum[i][j]);
if(j==c-1)
{
printf("\n\n");
}
}
return 0;
}
输出结果:
输入行数 ( 1 ~ 100): 2
输入列数 ( 1 ~ 100): 3
输入第一维数组的元素:
输入元素 a11: 2
输入元素 a12: 3
输入元素 a13: 4
输入元素 a21: 5
输入元素 a22: 2
输入元素 a23: 3
输入第二维数组的元素:
输入元素 a11: -4
输入元素 a12: 5
输入元素 a13: 3
输入元素 a21: 5
输入元素 a22: 6
输入元素 a23: 3
二维数组相加结果:
-2 8 7
10 8 6
(2)矩阵相乘
#include <stdio.h>
// 求 m*k 型矩阵 A 左乘 k*n 型矩阵 B 后的 m*n 型矩阵 C
int main()
{
struct Matrixs
{
int elements[100][100];
int row;
int col;
}matrixA, matrixB, matrixC;
int m, k, n;
printf("请输入矩阵A行数和列数:");
scanf("%d %d", &matrixA.row, &matrixA.col);
matrixB.row = matrixA.col;//矩阵A的列数等于矩阵B的行数
printf("请输入矩阵B列数:");
scanf("%d", &matrixB.col);
printf("\n输入矩阵A:\n");
for (m = 0; m < matrixA.row; ++m)
for (k = 0; k < matrixA.col; ++k)
{
printf("请输入元素A(%d,%d):", m+1, k+1);
scanf("%d", &matrixA.elements[m][k]);
}
printf("\n输入矩阵B:\n");
for (k = 0; k < matrixA.col; ++k)
for (n = 0; n < matrixB.col; ++n)
{
printf("请输入元素B(%d,%d):", k+1, n+1);
scanf("%d", &matrixB.elements[k][n]);
}
for (m = 0; m < matrixA.row; ++m)
for (n = 0; n < matrixB.col; ++n)
for (k = 0; k < matrixA.col; ++k)
{
if (k == 0) matrixC.elements[m][n] = 0;//为新矩阵C每个元素初始化
matrixC.elements[m][n] += matrixA.elements[m][k] * matrixB.elements[k][n];
}
printf("\n\n矩阵A为:\n\n");
for (m = 0; m < matrixA.row; ++m)
{
printf(" |");
for (k = 0; k < matrixA.col; ++k)
{
printf(" %-5d", matrixA.elements[m][k]);
}
printf("\b\b\b|\n");
}
printf("\n\n矩阵B为:\n\n");
for (k = 0; k < matrixB.row; ++k)
{
printf(" |");
for (n = 0; n < matrixB.col; ++n)
{
printf(" %-6d", matrixB.elements[k][n]);
}
printf("\b\b|\n");
}
printf("\n矩阵A左乘矩阵B为:\n\n");
for (m = 0; m < matrixA.row; ++m)
{
printf(" |");
for (n = 0; n < matrixB.col; ++n)
{
printf(" %-6d",matrixC.elements[m][n]);
}
printf("\b\b|\n");
}
printf("\n");
return 0;
}
44.矩阵转置
#include <stdio.h>
int main()
{
int a[10][10], transpose[10][10], r, c, i, j;
printf("输入矩阵的行与列: ");
scanf("%d %d", &r, &c);
// 存储矩阵的元素
printf("\n输入矩阵元素:\n");
for(i=0; i<r; ++i)
for(j=0; j<c; ++j)
{
printf("输入元素 a%d%d: ",i+1, j+1);
scanf("%d", &a[i][j]);
}
// 显示矩阵 a[][] */
printf("\n输入矩阵: \n");
for(i=0; i<r; ++i)
for(j=0; j<c; ++j)
{
printf("%d ", a[i][j]);
if (j == c-1)
printf("\n\n");
}
// 转换
for(i=0; i<r; ++i)
for(j=0; j<c; ++j)
{
transpose[j][i] = a[i][j];
}
// 显示转换后的矩阵 a
printf("\n转换后矩阵:\n");
for(i=0; i<c; ++i)
for(j=0; j<r; ++j)
{
printf("%d ",transpose[i][j]);
if(j==r-1)
printf("\n\n");
}
return 0;
}
输出结果:
输入矩阵的行与列: 2 3
输入矩阵元素:
输入元素 a11: 2
输入元素 a12: 3
输入元素 a13: 4
输入元素 a21: 5
输入元素 a22: 6
输入元素 a23: 4
输入矩阵:
2 3 4
5 6 4
转换后矩阵:
2 5
3 6
4 4
45.删除字符串中的特殊字符
(1)删除字符串中的除字母外的字符
#include<stdio.h>
int main()
{
char line[150];
int i, j;
printf("输入一个字符串: ");
fgets(line, (sizeof line / sizeof line[0]), stdin);
for(i = 0; line[i] != '\0'; ++i)
{
while (!( (line[i] >= 'a' && line[i] <= 'z') || (line[i] >= 'A' && line[i] <= 'Z') || line[i] == '\0') )
{
for(j = i; line[j] != '\0'; ++j)
{
line[j] = line[j+1];
}
line[j] = '\0';
}
}
printf("输出: ");
puts(line);
return 0;
}
输出结果:输入一个字符串: love666xh
输出: lovexh
(2)参考方法:
#include <stdio.h>
#include <string.h>
int main()
{
char line[100];
int i,j,len;
printf("输入一个字符串: ");
scanf("%s",line);
len = strlen(line);
for(i=0;i<len+1;i++)
{
if((line[i]>='a'&&line[i]<='z') || (line[i]>='A'&&line[i]<='Z'))
continue;
for(j=i;j<len;j++)
{
line[j] = line[j+1];
}
len--;
i--;
}
//line[len]='\0';
printf("%s\n",line);
return 0;
}
46.连接字符串
(1)使用 strcat() 连接两个字符串
#include <stdio.h>
int main()
{
char s1[100], s2[100], i, j;
printf("输入第一个字符串: ");
scanf("%s", s1);
printf("输入第二个字符串: ");
scanf("%s", s2);
// 计算字符串 s1 长度
for(i = 0; s1[i] != '\0'; ++i);
for(j = 0; s2[j] != '\0'; ++j, ++i)
{
s1[i] = s2[j];
}
s1[i] = '\0';
printf("连接后: %s", s1);
return 0;
}
输出结果:输入第一个字符串: xiao
输入第二个字符串: hang
连接后: xiaohang
(2)参考方法:
#include <stdio.h>
#include <string.h>
int main()
{
char s1[100], s2[100];
printf("输入第一个字符串: ");
scanf("%s", s1);
printf("输入第二个字符串: ");
scanf("%s", s2);
int len1 = strlen(s1);
int len2 = strlen(s2);
//printf("%d %d", len1, len2);
for (int i = 0; i <= len2; i++)
{
s1[i + len1] = s2[i];
}
printf("%s\n", s1);
// system("pause");
return 0;
}
(3)指针方法:
#include <stdio.h>
int main()
{
char str1[100], str2[100], *p = str1,n = 0;
printf("请输入第一个字符串:");
scanf("%s", str1);
printf("请输入第二个字符串:");
scanf("%s", str2);
while (*p++ != '\0');/*移动指针到str1尾*/
--p;//回退一个单元,以便覆盖str1末的'\0p;//回退一个单元,以便覆盖str1末的'\0'
while (str2[n] != '\0')
{
*p++ = str2[n];//将str2接到str1末
++n;
};
*p = '\0';//拼接完成,手动为str1末添上结束标记
printf("结果为:\n%s\n\n",str1);
return 0;
}
47. 计算字符串长度
(1)使用 strlen()
#include <stdio.h>
#include <string.h>
int main()
{
char s[1000];
int len;
printf("输入字符串: ");
scanf("%s", s);
len = strlen(s);
printf("字符串长度: %d", len);
return 0;
}
输出结果:输入字符串: xiaohang
字符串长度: 8
(2)不使用 strlen()
#include <stdio.h>
int main()
{
char s[1000], i;
printf("输入字符串: ");
scanf("%s", s);
for(i = 0; s[i] != '\0'; ++i);
printf("字符串长度: %d", i);
return 0;
}
48.查找字符在字符串中出现的次数
查找字符在字符串中的起始位置(索引值从 0 开始)
#include <stdio.h>
int main()
{
char str[1000], ch;
int i, frequency = 0;
printf("输入字符串: ");
fgets(str, (sizeof str / sizeof str[0]), stdin);
printf("输入要查找的字符: ");
scanf("%c",&ch);
for(i = 0; str[i] != '\0'; ++i)
{
if(ch == str[i])
++frequency;
}
printf("字符 %c 在字符串中出现的次数为 %d", ch, frequency);
return 0;
}
输出结果:输入字符串: xiaohang
输入要查找的字符: a
字符 a 在字符串中出现的次数为 2
49.字符串中各种字符计算
题目:计算字符串中的元音、辅音、数字、空白符
#include <stdio.h>
int main()
{
char line[150];
int i, vowels, consonants, digits, spaces;
vowels = consonants = digits = spaces = 0;
printf("输入一个字符串: ");
scanf("%[^\n]", line);
for(i=0; line[i]!='\0'; ++i)
{
if(line[i]=='a' || line[i]=='e' || line[i]=='i' ||
line[i]=='o' || line[i]=='u' || line[i]=='A' ||
line[i]=='E' || line[i]=='I' || line[i]=='O' ||
line[i]=='U')
{
++vowels;
}
else if((line[i]>='a'&& line[i]<='z') || (line[i]>='A'&& line[i]<='Z'))
{
++consonants;
}
else if(line[i]>='0' && line[i]<='9')
{
++digits;
}
else if (line[i]==' ')
{
++spaces;
}
}
printf("元音: %d",vowels);
printf("\n辅音: %d",consonants);
printf("\n数字: %d",digits);
printf("\n空白符: %d", spaces);
return 0;
}
输出结果:输入一个字符串: xiaohang
元音: 4
辅音: 4
数字: 0
空白符: 0
50.字符串复制
(1)使用 strcpy()
#include <stdio.h>
#include <string.h>
int main()
{
char src[40];
char dest[100];
memset(dest, '\0', sizeof(dest));
strcpy(src, "This is apple");
strcpy(dest, src);
printf("最终的目标字符串: %s\n", dest);
return(0);
}
输出结果:最终的目标字符串: This is apple
(2) 不使用 strcpy()
#include <stdio.h>
int main()
{
char s1[100], s2[100], i;
printf("字符串 s1: ");
scanf("%s",s1);
for(i = 0; s1[i] != '\0'; ++i)
{
s2[i] = s1[i];
}
s2[i] = '\0';
printf("字符串 s2: %s", s2);
return 0;
}
51.字符串排序
按字典顺序排序
#include<stdio.h>
#include <string.h>
int main()
{
int i, j;
char str[10][50], temp[50];
printf("输入10个单词:\n");
for(i=0; i<10; ++i) {
scanf("%s[^\n]",str[i]);
}
for(i=0; i<9; ++i) {
for(j=i+1; j<10 ; ++j)
{
if(strcmp(str[i], str[j])>0)
{
strcpy(temp, str[i]);
strcpy(str[i], str[j]);
strcpy(str[j], temp);
}
}
}
printf("\n排序后: \n");
for(i=0; i<10; ++i)
{
puts(str[i]);
}
return 0;
}
输出结果:
输入10个单词:
C
C++
Java
PHP
Python
Perl
Ruby
R
JavaScript
PHP
排序后:
C
C++
Java
JavaScript
PHP
PHP
Perl
Python
R
Ruby
52.使用结构体(struct)
#include <stdio.h>
struct student
{
char name[50];
int roll;
float marks;
} s;
int main()
{
printf("输入信息:\n");
printf("名字: ");
scanf("%s", s.name);
printf("编号: ");
scanf("%d", &s.roll);
printf("成绩: ");
scanf("%f", &s.marks);
printf("显示信息:\n");
printf("名字: ");
puts(s.name);
printf("编号: %d\n",s.roll);
printf("成绩: %.1f\n", s.marks);
return 0;
}
输出结果:
输入信息:
名字: 文艺倾年
编号: 1
成绩: 99
显示信息:
名字: 文艺倾年
编号: 1
成绩: 99.0
53.复数相加
**使用结构体(struct)将两个复数相加。
我们把形如 a+bi(a,b均为实数)的数称为复数,其中 a 称为实部,b 称为虚部,i 称为虚数单位。**
#include <stdio.h>
typedef struct complex
{
float real;
float imag;
} complex;
complex add(complex n1,complex n2);
int main()
{
complex n1, n2, temp;
printf("第一个复数 \n");
printf("输入实部和虚部:\n");
scanf("%f %f", &n1.real, &n1.imag);
printf("\n第二个复数 \n");
printf("输入实部和虚部:\n");
scanf("%f %f", &n2.real, &n2.imag);
temp = add(n1, n2);
printf("Sum = %.1f + %.1fi", temp.real, temp.imag);
return 0;
}
complex add(complex n1, complex n2)
{
complex temp;
temp.real = n1.real + n2.real;
temp.imag = n1.imag + n2.imag;
return(temp);
}
输出结果:
第一个复数
输入实部和虚部:
2.3 4.5
第二个复数
输入实部和虚部:
3.4 5
Sum = 5.7 + 9.5i
54.计算两个时间段的差值
#include <stdio.h>
struct TIME
{
int seconds;
int minutes;
int hours;
};
void differenceBetweenTimePeriod(struct TIME t1, struct TIME t2, struct TIME *diff);
int main()
{
struct TIME startTime, stopTime, diff;
printf("输入开始时间: \n");
printf("输入小时、分钟、秒:");
scanf("%d %d %d", &startTime.hours, &startTime.minutes, &startTime.seconds);
printf("输入停止时间: \n");
printf("输入小时、分钟、秒: ");
scanf("%d %d %d", &stopTime.hours, &stopTime.minutes, &stopTime.seconds);
// 计算差值
differenceBetweenTimePeriod(startTime, stopTime, &diff);
printf("\n差值: %d:%d:%d - ", startTime.hours, startTime.minutes, startTime.seconds);
printf("%d:%d:%d ", stopTime.hours, stopTime.minutes, stopTime.seconds);
printf("= %d:%d:%d\n", diff.hours, diff.minutes, diff.seconds);
return 0;
}
void differenceBetweenTimePeriod(struct TIME start, struct TIME stop, struct TIME *diff)
{
if(stop.seconds > start.seconds){
--start.minutes;
start.seconds += 60;
}
diff->seconds = start.seconds - stop.seconds;
if(stop.minutes > start.minutes){
--start.hours;
start.minutes += 60;
}
diff->minutes = start.minutes - stop.minutes;
diff->hours = start.hours - stop.hours;
}
输出结果:
输入开始时间:
输入小时、分钟、秒:12 34 55
输入停止时间:
输入小时、分钟、秒: 8 12 5
差值: 12:34:55 - 8:12:5 = 4:22:50
55.学习static定义静态变量的用法
#include<stdio.h>
int main()
{
void fun();
for(int i=0;i<3;i++)
fun();
return 0;
}
void fun()
{
int i=0;
static int static_i=0;
printf("i=%d\n",i);
printf("static_i=%d\n",static_i);
i++;
static_i++;
}
输出结果:
i=0
static_i=0
i=0
static_i=1
i=0
static_i=2
56.学习使用auto定义变量的用法
#include <stdio.h>
int main()
{
int i,num;
num=2;
for(i=0;i<3;i++)
{
printf("num 变量为 %d \n",num);
num++;
{
auto int num=1;
printf("内置模块 num 变量为 %d \n",num);
num++;
}
}
return 0;
}
输出结果:
num 变量为 2
内置模块 num 变量为 1
num 变量为 3
内置模块 num 变量为 1
num 变量为 4
内置模块 num 变量为 1
57.学习使用static的另一用法
#include <stdio.h>
int main()
{
int i,num;
num=2;
for(i=0;i<3;i++)
{
printf("num 变量为 %d \n",num);
num++;
{
static int num=1;
printf("内置模块 num 变量为 %d\n",num);
num++;
}
}
return 0;
}
输出结果:
num 变量为 2
内置模块 num 变量为 1
num 变量为 3
内置模块 num 变量为 2
num 变量为 4
内置模块 num 变量为 3
58.学习使用external的用法
#include <stdio.h>
int a,b,c;
void add()
{
int a;
a=3;
c=a+b;
}
int main()
{
a=b=4;
add();
printf("c 的值为 %d\n",c);
return 0;
}
输出结果:
c 的值为 7
59.学习使用register定义变量的方法
#include <stdio.h>
int main()
{
register int i;
int tmp=0;
for(i=1;i<=100;i++)
tmp+=i;
printf("总和为 %d\n",tmp);
return 0;
}
输出结果:
总和为 5050
60.宏#define命令练习
#include<stdio.h>
#define TRUE 1
#define FALSE 0
#define SQ(x) (x)*(x)
int main()
{
int num;
int again=1;
printf("如果值小于 50 程序将终止。\n");
while(again)
{
printf("\n请输入数字:");
scanf("%d",&num);
printf("该数字的平方为 %d \n",SQ(num));
if(num>=50)
again=TRUE;
else
again=FALSE;
}
return 0;
}
输出结果:
如果值小于 50 程序将终止。
请输入数字:100
该数字的平方为 10000
请输入数字:5
该数字的平方为 25
61.宏#define命令练习2
#include<stdio.h>
#define exchange(a,b) { int t;t=a;a=b;b=t;}//注意放在一行里
int main()
{
int x=10;
int y=20;
printf("x=%d; y=%d\n",x,y);
exchange(x,y);
printf("x=%d; y=%d\n",x,y);
return 0;
}
输出结果:
x=10; y=20
x=20; y=10
62.宏#define命令练习3
#define LAG >
#define SMA <
#define EQ ==
#include <stdio.h>
int main()
{
int i,j;
printf("请输入两个数字:\n");
scanf("%d %d",&i,&j);
if(i LAG j)
printf("%d 大于 %d \n",i,j);
else if(i EQ j)
printf("%d 等于 %d \n",i,j);
else if(i SMA j)
printf("%d 小于 %d \n",i,j);
else
printf("没有值。\n");
return 0;
}
输出结果:
请输入两个数字:
1 2
1 小于 2
63.学习使用按位与 &
程序分析:0&0=0; 0&1=0; 1&0=0; 1&1=1 (全真才真)
#include <stdio.h>
int main()
{
int a,b;
a=077;
b=a&3;
printf("a & b(decimal) 为 %d \n",b);
b&=7;
printf("a & b(decimal) 为 %d \n",b);
return 0;
}
输出结果:
a & b(decimal) 为 3
a & b(decimal) 为 3
64.学习使用按位或 |
程序分析:0|0=0; 0|1=1; 1|0=1; 1|1=1 (有真则真)
#include<stdio.h>
int main()
{
int a,b;
a=077;
b=a|3;
printf("b 的值为 %d \n",b);
b|=7;
printf("b 的值为 %d \n",b);
return 0;
}
输出结果:
b 的值为 63
b 的值为 63
65.学习使用按位异或 ^
程序分析:0^0=0; 0^1=1; 1^0=1; 1^1=0 (不同为真)
#include <stdio.h>
int main()
{
int a,b;
a=077;
b=a^3;
printf("b 的值为 %d \n",b);
b^=7;
printf("b 的值为 %d \n",b);
return 0;
}
输出结果:
b 的值为 60
b 的值为 59
66.学习使用按位取反~
程序分析:~0=1; ~1=0;
#include <stdio.h>
int main()
{
int a,b;
a=234;
b=~a;
printf("a 的按位取反值为(十进制) %d \n",b);
a=~a;
printf("a 的按位取反值为(十六进制) %x \n",a);
return 0;
}
输出结果:
请输入整数:
a 的按位取反值为(十进制) -235
a 的按位取反值为(十六进制) ffffff15