1.输出"Hello,World!"
#include<stdio.h>
int main()
{
printf("Hello,World!");
return 0;
}
2.输出整数
#include<stdio.h>
int main()
{
int number;
printf("请输入一个整数:");
scanf("%d",&number);
printf("你输入的整数是:%d",number);
return 0;
}
请输入一个整数:12
你输入的整数是:12
注:
①scanf("%d",& ) 格式化输入。&不要漏了
②注意" "框起来的内容,不要框错了
3.输出单个字符
使用printf()和%c格式化输出一个字符
#include<stdio.h>
int main()
{
char c;
c='A';
printf("c的值是%c",c);
return 0;
}
c的值是A
注:
①char占1个字节,是一个整数类型。
②字符型常量:用单引号括起来,只保存一个字符;
字符串常量:用双引号括起来,可以保存多个字符。
③如果printf("c的值为%d",c);
输出结果是: c的值是65
4.输出浮点数
使用 printf() 与 %f 输出浮点数。
#include<stdio.h>
int main()
{
float f;
f=12.001234;
printf("f的值为%f",f);
return 0;
}
f的值为12.001234
5.输出双精度数
使用 printf() 与 %e 输出双精度数。
#include <stdio.h>
int main()
{
double d;
d = 12.001234;
printf("d 的值为 %le", d);//此例中%e和%le没有区别都输出科学计数法
//%f和%lf没有区别都输出12.001234
//但还是要double就用%lf或者%le不然做其他题可能出错
return 0;
}
d 的值为 1.200123e+001
若d换成其他数字,有以下结果:
d = 12.001235;d 的值为 1.200123e+001
d = 12.0012345; d 的值为 1.200123e+001
d = 12.0012352; d 的值为 1.200124e+001
d = 120.001234; d 的值为 1.200012e+002
d = 120.001254; d 的值为 1.200013e+002
注:
①float是单精度浮点值。四个字节(32位)。1位符号+8位指数+23位小数。六位有效位。
double是双精度浮点值。八个字节(64位)。1位符号+11位指数+52位小数。十五位有效位。
②float用%f ; double用%lf
6.输入两个浮点数,计算乘积。
#include <stdio.h>
int main()
{
double firstNumber, secondNumber, product;
printf("输入两个浮点数: ");
scanf("%lf %lf", &firstNumber, &secondNumber);
product = firstNumber * secondNumber;
printf("结果 = %.2lf", product);// %.2lf 保留两个小数点
return 0;
}
输入两个浮点数:1.2 2.345
结果=2.81
1、%c:单个字符
2、%d:十进制整数(int)
3、%ld:十进制整数(long)
4、%lf:十进制浮点数(double)
5、%o:八进制数
6、%s:字符串(char)
7、%u:无符号十进制数(DWORD)
8、%x:十六进制数(0x00000)
9.%le意思是用科学计数法输出的double数据。
10.%.100f用来输出实数,保留小数点100位。
7.两个整数相加
#include<stdio.h>
int main()
{
int num1,num2,sum;
printf("请输入两个数:");
scanf("%d %d",&num1,&num2);//中间用空格隔开 //不要忘记&
sum=num1+num2;
printf("%d+%d=%d",num1,num2,sum);
//注意输出内容是 num1+num2=sum,而不是sum
return 0;
}
8.字符转 ASCII 码
#include <stdio.h>
int main()
{
char c;
printf("输入一个字符: ");
scanf("%c", &c);
printf("%c 的 ASCII 为 %d", c, c);
return 0;
}
或者下式也是可以的
#include <stdio.h>
int main()
{
char w;
printf("输入一个字符: ");
scanf("%c", &w);
printf("%c 的 ASCII 为 %d", w, w);
return 0;
}
输入一个字符: a
a 的 ASCII 为 97
输入一个字符:NUT
a 的 ASCII 为 78
//实际上输入的是N
注:
①
ASCII 定义了 128 个字符。
分类:
- 一:0-31、127(删除键)是控制字符
- 二:空白字符:空格(32)、 制表符、 垂直制表符、 换行、 回车。
- 三:可显示字符:a-z、A-Z、0-9、~、!、@、、%、^、&、#、$、*、(、)、-、+、{、}、[、]、'、"、<、>、,、?、/、|、\、_、:、;、.,还有顿号、。②
②
9.两数相除,如果有余数,输出余数。
#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.比较大小
10.(1)比较两个数
#include <stdio.h>
int main()
{
int a,b;
printf("请输入第一个值:");
scanf("%d",&a);
printf("请输入第二个值:");
scanf("%d",&b);
if(a>b)
printf("%d大于%d",a,b);
//这里的a和b前面不用加%,不然的话打出来乱七八糟的东西
//请输入第一个值:11
//请输入第二个值:12
//6487580小于等于6487576
if(a<b)
printf("%d小于%d",a,b);
else
printf("%d等于%d",a,b);
return 0;
}
请输入第一个值:
12
请输入第二个值:
11
a大于b
10.(2) 比较三个数
#include <stdio.h>
int main()
{
int a,b,c;
printf("请输入第一个值:");
scanf("%d",&a);
printf("请输入第二个值:");
scanf("%d",&b);
printf("请输入第三个值:");
scanf("%d",&b);
if(a>b&&a>c)
printf("%d最大",a);
if(a<b&&c<b)
printf("%d最大",b);
if(a<c&&b<c)
printf("%d最大",c);
else
printf("有两个或者三个数大小相等");
return 0;
}
输出结果错误:
请输入第一个值:1
请输入第二个值:2
请输入第三个值:3
3最大有两个或者三个数大小相等
#include <stdio.h>
int main()
{
int a,b,c;
printf("请输入第一个值:");
scanf("%d",&a);
printf("请输入第二个值:");
scanf("%d",&b);
printf("请输入第三个值:");
scanf("%d",&b);
if(a>b&&a>c)
printf("%d最大",a);
else if(a<b&&c<b)
printf("%d最大",b);
else if(a<c&&b<c)
printf("%d最大",c);
else
printf("有两个或者三个数大小相等");
return 0;
}
//如果不写else,会出错
if(a>b&&a>c)
printf("%d最大",a);
if(a<b&&c<b)
printf("%d最大",b);
if(a<c&&b<c)
printf("%d最大",c);
else
printf("有两个或者三个数大小相等");
//错误的输出为
输出结果错误:
请输入第一个值:1
请输入第二个值:2
请输入第三个值:3
3最大有两个或者三个数大小相等
10.(3)四个数比较大小
#include <stdio.h>
int main()
{
int a=5,b=4,c=3,d=6,min;
min=(((c<d)?c:d)<((a<b)?a:b))?((c<d)?c:d):((a<b)?a:b);
printf("最小的数字为:%d",min);
return 0;
}
运算符
一、算术运算符
- /分子除以分母
- %整除后的余数
- ++自增,整数值加1
- --自减,整数值-1
※区别a++和a--
#include <stdio.h>
int main()
{
int c;
int a = 10;
c = a++;
printf("先赋值后运算:\n");
printf("c 的值是 %d\n", c );//10
printf("a 的值是 %d\n", a );//11
a = 10;
c = a--;
printf("c 的值是 %d\n", c );//10
printf("a 的值是 %d\n", a );//9
printf("先运算后赋值:\n");
a = 10;
c = ++a;
printf("c 的值是 %d\n", c );//11
printf("a 的值是 %d\n", a );//11
a = 10;
c = --a;
printf("c的值是 %d\n", c );//9
printf("a 的值是 %d\n", a );//9
}
先赋值后运算:
c 的值是 10
c 的值是 11
c 的值是 10
a 的值是 9
先运算后赋值:
c 的值是 11
a 的值是 11
c的值是 9
a 的值是 9
形象的理解可以是i++先做别的事,再自己加1,++i先自己加1,再做别的事情。
二、关系运算符
- ==相等
- !=不相等
- >=大于等于
- <=小于等于
※不要写成=>
三、逻辑运算符
- &&和
- ||或
- !非
四、位运算符
- p&q(都是真为1,否则为0)
- p|q(有一个是真就为1,否则为0)
- p ^ q(取异:相同就为0,不同就为1)
- p~q将二进制取反
- <<二进制左移:左边位丢弃。右边补0。
- >>二进制右移:正数左边补0;负数左边补1。右边丢弃。
p | q | p & q | p | q | p ^ q |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
假设变量 A 的值为 60,变量 B 的值为 13,则:
A=0011 1100;B=0000 1101
(A & B) 将得到 12,即为 0000 1100
(A | B) 将得到 61,即为 0011 1101
(A ^ B) 将得到 49,即为 0011 0001
(~A ) 将得到 -61,即为 1100 0011
A << 2 将得到 240,即为 1111 0000
A >> 2 将得到 15,即为 0000 1111
五、赋值运算符
- =
※要区别=和==
- += C+=A相当于C=C+A
-= <<= >>= &= ^= |=都是一样
六、杂项运算符
- sizeof()返回变量的大小
- &返回变量的地址
- *指向一个变量
- ?:条件表达式
#include <stdio.h> int main() { int a = 4; short b; double c; int* ptr; //sizeof 运算符实例 printf("Line 1 - 变量 a 的大小 = %lu\n", sizeof(a) ); printf("Line 2 - 变量 b 的大小 = %lu\n", sizeof(b) ); printf("Line 3 - 变量 c 的大小 = %lu\n", sizeof(c) ); //c语言中%lu的含义:long unsigned数据类型无符号长整数或无符号长浮点数. //就比如int型是%d一样 //&和*运算符实例 ptr = &a; // 'ptr' 现在包含 'a' 的地址 printf("a 的值是 %d\n", a); printf("*ptr 是 %d\n", *ptr); //*ptr指向一个变量 //三元运算符实例 a = 10; b = (a == 1) ? 20: 30; printf( "b 的值是 %d\n", b ); b = (a == 10) ? 20: 30; printf( "b 的值是 %d\n", b ); }
Line 1 - 变量 a 的大小 = 4 Line 2 - 变量 b 的大小 = 2 Line 3 - 变量 c 的大小 = 8 a 的值是 4 *ptr 是 4 b 的值是 30 b 的值是 20
七、运算符优先级
具有较高优先级的运算符出现在表格的上面,具有较低优先级的运算符出现在表格的下面。
类别 | 运算符 | 结合性 |
---|---|---|
后缀 | () [] -> . ++ - - | 从左到右 |
一元 | + - ! ~ ++ - - (type)* & sizeof | 从右到左 |
乘除 | * / % | 从左到右 |
加减 | + - | 从左到右 |
移位 | << >> | 从左到右 |
关系 | < <= > >= | 从左到右 |
相等 | == != | 从左到右 |
位与 AND | & | 从左到右 |
位异或 XOR | ^ | 从左到右 |
位或 OR | | | 从左到右 |
逻辑与 AND | && | 从左到右 |
逻辑或 OR | || | 从左到右 |
条件 | ?: | 从右到左 |
赋值 | = += -= *= /= %=>>= <<= &= ^= |= | 从右到左 |
逗号 | , | 从左到右 |
例:a = 20; b = 10; c = 15; d = 5;
(a + b) * c / d=90
((a + b) * c) / d=90
(a + b) * (c / d)=90
a + (b * c) / d=50
11.计算 int, float, double 和 char 字节大小
使用 sizeof 操作符计算int, float, double 和 char四种变量字节大小。
sizeof 是 C 语言的一种单目操作符,如C语言的其他操作符++、--等,它并不是函数。
sizeof 操作符以字节形式给出了其操作数的存储大小。
#include<stdio.h>
int main()
{
int a;
float b;
double c;
char d;
long e;
long long f;
long double g;
printf("int的字节大小是%ld\n",sizeof(a));
printf("float的字节大小是%ld\n",sizeof(b));
printf("double的字节大小是%ld\n",sizeof(c));
printf("char的字节大小是%ld\n",sizeof(d));
printf("long的字节大小是%ld\n",sizeof(e));
printf("long long的字节大小是%ld\n",sizeof(f));
printf("long double的字节大小是%ld\n",sizeof(g));
return 0;
}
int的字节大小是4
float的字节大小是4
double的字节大小是8
char的字节大小是1
long的字节大小是4
long long的字节大小是8
long double的字节大小是16
12.使用临时变量交换两个浮点数的值
#include<stdio.h>
int main()
{
double num1,num2,temp;
printf("输入第一个数字");
scanf("%lf",&num1);
printf("输入第二个数字");
scanf("%lf",&num2);
temp=num1;
num1=num2;
num2=temp;
printf("交换后,第一个数字为%.2lf\n",num1);
printf("交换后,第二个数字为%.2lf\n",num2);//在%之后加上.2输出小数点后两位的数字
return 0;
}
13.判断奇偶
#include<stdio.h>
int main()
{
int num;
printf("输入一个整数");
scanf("%d",&num);
if(num%2==0)//是==不是=
printf("%d是偶数",num);
else
printf("%d是奇数",num);
return 0;
}
14.循环区间里判断奇偶
#include<stdio.h>
int main()
{
int i;
for(i=1;i<=10;i++)
{
if(i%2==0)
printf("%2d是偶数\n",i);//%后面加个2,表示占两个字节
}
return 0;
}
2是偶数
4是偶数
6是偶数
8是偶数
10是偶数
15.判断元音还是辅音
#include<stdio.h>
#include<stdio.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("输入错误");
return 0;
}
16.判断三个数中最大的数
#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()
{
double n1,n2,n3;
printf("请输入三个数");
scanf("%lf %lf %lf",&n1,&n2,&n3);
if(n1>=n2&&n1>=n3)
printf("%.2lf是最大数",n1);
if(n2>=n1&&n2>=n3)
printf("%.2lf是最大数",n2);
if(n3>=n2&&n3>=n1)
printf("%.2lf是最大数",n3);
return 0;
}
17.一元二次方程
#include<stdio.h>
#include<math.h>
int main()
{
double disc,a,b,c,p,q,x1,x2;
printf("输入a,b,c");
scanf("%lf %lf %lf",&a,&b,&c);
disc=b*b-4*a*c;
if(disc<0)
printf("方程没有实数根\n");
else
{
p=(-b)/(2*a);//注意分清/和\。
q=sqrt(disc)/(2*a);
x1=p+q;
x2=p-q;
printf("方程的解为%.2lf\t%.2lf",x1,x2);
}
return 0;
}
18.判断闰年
#include<stdio.h>
int main()
{
int year;
printf("输入年份");
scanf("%d",&year);
if((year%4==0&&year%100!=0)||year%400==0)//是!=不是!==
//四年一闰,百年不闰;四百年再闰
{
printf("是闰年\n");
}
else
{
printf("不是闰年");
}
return 0;
}
19.判断正数|负数|0
#include<stdio.h>
int main()
{
int num;
printf("输入一个整数");
scanf("%d",&num);
if(num%2==0)//是==不是=
printf("%d是偶数",num);
else
printf("%d是奇数",num);
return 0;
}
20.判断字母
#include<stdio.h>
int main()
{
char c;
printf("输入一个字符");
scanf("%c",&c);
if(c>='a'&&c<='z'||(c>='A'&&c<='Z'))
printf("%c是字母",c);
else
printf("%c不是字母",c);
return 0;
}
21.计算自然数的和
//运用for语句
#include<stdio.h>
int main()
{
int n,i,sum=0;
printf("输入一个正整数:");
scanf("%d",&n);
for(i=1;i<=n;++i)
{
sum+=i;
}
printf("从1到%d所有自然数的和为%d",n,sum);
return 0;
}
//运用while语句
#include<stdio.h>
int main()
{
int n,i,sum=0;
printf("输入一个正整数:");
scanf("%d",&n);
i=1;
while(i<=n)
{
sum+=i;
++i;
}
printf("从1到%d所有自然数之和为%d",n,sum);
return 0;
}
补充:大奖赛评分程序
在唱歌比赛中,一般有若干个评委,记分规则:去掉一个最高分和最低分,再计算平均分。
试编写一个在百分制记分的情况下的程序(穷举法)
#include <stdio.h>
int main()
{
int iScore, i, max = 0, min = 100;
float Sum = 0;
for(i = 1; i <= 7; i ++)
{
printf("输入第 %d 个得分:", i);
scanf("%d", &iScore);
Sum += iScore;
if(iScore > max) max = iScore;
if(iScore < min) min = iScore;
}
printf("最后得分:%.2f\n",
//注意是%.2f或者%f也可以,但是不能用%d,因为前面是float Sum.
(Sum-max-min)/5);
}
22.输出九九乘法表
#include<stdio.h>
int main()
{
printf("1\t2\t3\t4\t5\t6\t7\t8\t9\t\n");
printf("-----------------------------------------------------------------\n");
int i = 0;
int j = 0;
for(i=1;i<=9;i++)
{
for(j=1;j<=i;j++)
{
printf("%d\t",i*j);
}
printf("\n");
}
}
23.斐波那契数列??
斐波那契数列指的是这样一个数列 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, x;
printf("输出的斐波那契数列的项数为:");
scanf("%d",&n);
printf("斐波那契数列:");
for(i=1;i<=n;++i)
{
printf("%d,",t1);
x=t1+t2;
t1=t2;
t2=x;
}
return 0;
}
(2)输出指定数字前的斐波那契数列
24.求两个数的最大公约数
25.求两个数的最小公倍数
26.阶乘
#include<stdio.h>
int main()
{
int n,i;
unsigned long long f=1;
printf("输入一个整数:");
scanf("%d",&n);
if(n<0)
printf("负数没有阶乘!");
else
{
for(i=1;i<=n;++i)
{
f*=i;
}
printf("%d!=%llu",n,f);
}
return 0;
}
补充:输入 n 值,计算 1+1/1!+1/2!+…+1/n!
#include<stdio.h>
int main()
{
int i,n,k;
float sum=1;
printf("输入n:");
scanf("%d",&n);
k=1;
for(i=1;i<=n;i++)
{
k=k*i;
sum=sum+1.0/k;
}
printf("sum=%f\n",sum);
return 0;
}
27.循环输出26个字母
#include<stdio.h>
int main()
{
char c;
for(c='A';c<='Z'; ++c)
printf("%c",c);
return 0;
}
28.判断数字为几位数
#include<stdio.h>
int main()
{
long long n;
int count=0;
printf("输入一个整数:");
scanf("%lld",&n);
while(n!=0)
{
n/=10;
++count;
}
printf("数字是%d位数",count);
}
29.计算一个数的 n 次方
#include<stdio.h>
int main()
{
int i,a,b;
unsigned long c=1;
printf("请输入基数:");
scanf("%d",&a);
printf("请输入指数");
scanf("%d",&b);
for(i=1;i<=b;i++)
{
c*=a;
}
printf("%lu",c);
return 0;
}
#include<stdio.h>
int main()
{
int b,e;
long long result=1;
printf("输入基数:");
scanf("%d",&b);
printf("输入指数:");
scanf("%d",&e);
while(e!=0)
{
result*=b;
--e;
}
printf("结果是%lld",result);
return 0;
}
30.判断回文数
#include<stdio.h>
int main()
{
int n,a=0,b,c;
printf("请输入一个整数:");
scanf("%d",&n);
b=n;
while(n!=0)
{
c=n%10; //%表示除后的余数
a=a*10+c;
n/=10;
}
if(b==a)//如果打成=,则一直是回文数,如输入1234,输出的b为4321
printf("%d是回文数",b);
else
printf("%d不是回文数",b);
return 0;
}
补充:输入一个非负的整数,将其反向后输出。
例如 输入 24789,变成 98742 输出。
#include <stdio.h>
int main()
{ long n;
printf("输入一个非负整数:");
scanf("%ld", &n);
while(n > 0)
{
printf("%d", n % 10);
n = n/10;
}
return 0;
}
31.判断素数
#include<stdio.h>
int main()
{
int n,i,f=0;
printf("输入一个正整数:");
scanf("%d",&n);
for(i=2;i<=n/2; ++i)
{
if(n%i==0)
{
f=1;
break;
}
}
if(f==0)
printf("%d是素数",n);
else
printf("%d不是素数",n);
return 0;
}
#include<stdio.h>
#include<math.h>
int main()
{
int m,i,k;
k=sqrt(m); //()不能省略
printf("输入整数m:");
scanf("%d",&m);
if(m==2)
printf("2是素数\n");
else
{
for(i=2;i<=k;i++)
if(m%i==0)
break;
if(i>k)
printf("%d是素数\n",m);
else printf("%d不是素数\n",m);
}
}
补充:两个数之间的所有素数
#include<stdio.h>
int main()
{
int a,b,i,f;
printf("输入两个正整数:");
scanf("%d %d",&a,&b); //%d与%d之间要有空格
printf("%d与%d之间的素数有:\n",a,b);
while(a<b)
{
f=0;
for(i=2;i<=a/2;++i)
{
if(a%i==0)
{
f=1;
break;
}
}
if(f==0)
printf("%d\n",a);
++a;
}
return 0;
}
使用函数,不懂
#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;
}
32.判断Armstrong数(阿姆斯壮数)
// 判断C(阿姆斯壮数)
//Armstrong数:n位数的各位数的n次方之和等于该数
#include<stdio.h>
int main()
{
int n,o,i,result=0;
printf("输入一个三位数:");
scanf("%d",&n);
o=n;
while(o!=0)
{
i=o%10;
result+=i*i*i;
o/=10;
}
if(result==n)
printf("%d是Armstrong数",n);
else
printf("%d不是Armstrong数",n);
}
补充:求1000以内的完数
完数:指一个数恰好等于它的包括 1 在内的所有因子之和。如 6=1+2+3
#include<stdio.h>
int main()
{
int i,j,sum;
for(i=1;i<=1000;i++)
{
sum=0;
for(j=1;j<i;j++)
{
if(i%j==0)
{
sum+=j;
}
}
if(sum==i)
{
printf("%d\n",i);
}
}
return 0;
}
33. 求一个整数的所有因数
#include<stdio.h>
int main()
{
int number,i;
printf("请输入一个整数:");
scanf("%d",&number);
printf("%d的因数有\n",number);
for(i=1;i<=number; ++i)
{
if(number%i==0)
{
printf("%d\n",i);
}
}
return 0;
}
补充:求两个数之间的所有公因数
#include<stdio.h>
int main()
{
int n1,n2,i;
printf("输入两个数:");
scanf("%d %d",&n1,&n2);
printf("这两个数的所有公因数有\n",i);
for(i=1;i<=(n1>n2 ? n2:n1); ++i)
{
if(n1%i==0&&n2%i==0)
{
printf("%d\n",i);
}
}
return 0;
}
34.输出各种三角形图案
* * * * * * * * * * * * * * *
#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");
}
}
A B B C C C D D D D E E E E E
#include<stdio.h>
int main()
{ char i='A', j='G';
for( ;i<=j;i++,j--)
printf("%c%c", i, j);
}
* * * * * * * * * * * * * * * * * * * * * * * * *
#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;
}
*
* * *
* * * * *
* * * * * * *
* * * * * * * * *
* * * * * * *
* * * * *
* * *
*
#include <stdio.h>
int main()
{
int i, space, k=0;
for(i=1; i<=5; ++i, k=0)
{
for(space=1; space<=5-i; ++space)
{
printf(" ");
}
while(k != 2*i-1)
{
printf("* ");
++k;
}
printf("\n");
}
for(i=6; i<=9; ++i, k=0)
{
for(space=1; space<=i-5; ++space)
{
printf(" ");
}
while(k != (19-2*i))
{
printf("* ");
++k;
}
printf("\n");
}
return 0;
}
35.表格形式输出数据
36.实现简单的计算器
37.判断一个数是否可以为两个素数之和
38.二进制与十进制相互转换
39.八进制与十进制相互转换
40.八进制与二进制相互转换
42.输出数组并计算数组元素平均值
#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];
printf("%d ", array[loop]);
}
avg = (float)sum / loop; //如果不加(float),输出不为4.5,而是4
printf("\n平均值为 %.2f", avg);
return 0;
}
1 2 3 4 5 6 7 8 9 0
平均值为 4.50
补充:自定义输入计算平均值
#include<stdio.h>
int main()
{
int n,i;
float num[100],sum=0.0,average;
printf("输入元素个数(不大于100):");
scanf("%d",&n);
for(i=0;i<n;++i)
{
printf("%d.输入数字",i+1);
scanf("%f",&num[i]);
sum+=num[i];
}
average=sum/n;
printf("平均值为%.2f",average);
return 0;
}
43.逆向输出数组
#include<stdio.h>
int main()
{
int array[5]={1,2,3,4,5};
int loop;
for(loop=4;loop>=0;loop--)//loop=4而不是5
printf("%d",array[loop]);
return 0;
}
44.计算数组元素之和
#include <stdio.h>
int main()
{
int array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
int sum, loop;
sum = 0;
for(loop = 9; loop >= 0; loop--)
{
sum = sum + array[loop];
}
printf("元素和为:%d", sum);
return 0;
}
45.找出数组的最大元素值
#include<stdio.h>
int main()
{
int array[5]={1,2,3,4,5};
int loop,max;
max=array[0];
for(loop=1;loop<5;loop++)
{
if(max<array[loop])
{
max=array[loop];
}
}
printf("最大元素为%d",max);
return 0;
}
补充:用户自定义输出
#include<stdio.h>
int main()
{
int i,n;
float array[100];
printf("输入元素个数");
scanf("%d",&n);
for(i=0;i<n;++i)
{
printf("输入数字%d:",i+1);
scanf("%f",&array[i]);
}
for(i=1;i<n;++i)
{
if(array[0]<array[i])
array[0]=array[i];
}
printf("最大元素为%.2f",array[0]);
}
46.查找数组中最小的元素
使用 for 循环迭代出输出元素,从第一元素开始逐个比较,获取最小的元素
#include<stdio.h>
int main()
{
int array[5]={7,6,3,4,9};
int loop,min;
min=array[0];
for(loop=1;loop<5;loop++)
{
if(min>array[loop])
min=array[loop];
}
printf("最小元素为%d",min);
}
补充:冒泡法排序
#include<stdio.h>
int main()
{
int i = 0;
int j = 0;
int temp;
int a[10] = {1,0,2,4,3,6,7,9,8,5};
int len = sizeof(a)/sizeof(a[0]);
for(i = 0;i<len-1;i++)
{
for(j = 0;j< len-1-i;j++)
{
if(a[j+1]>a[j])
{
temp = a[j+1];
a[j+1] = a[j];
a[j] = temp;
}
}
}
for(i = 0;i<len;i++)
{
printf("%d ",a[i]);
}
return 0;
}
//冒泡法
#include <stdio.h>
int main()
{
int i,j,t,a[10]; //定义变量数组基本类型
printf("Please input numbers: ");
for(i=0;i<10;i++)
{
scanf("%d",&a[i]); //从键盘输入要排序的数组
}
printf("Please output numbers: ");
for(i=0;i<10;i++)
{
for(j=i+1;j<=9;j++)
{
if(a[i]>a[j])
{ //如果后一个数比前一个数大利用中间变量t实现俩值互换
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
printf("%-5d",a[i]);
}
}
补充:选择法排序
#include<stdio.h>
int main()
{
int i = 0; //定义一个i并且赋初值为0,i作为数组的下标
int j = 0; //定义j并且赋初值为0,j作为找到最大值时所对应的下标
int k; //定义一个k,用来保存此次循环中最大值的下标
int temp; //定义一个中间变量temp,供以后交换值的时候使用
int a[]={4,5,6,72,1,7,9,3,}; //定义了一个9个数的数组,并且初始化
int len = sizeof(a)/sizeof(a[0]); //len是数组的大小
for(i = 0;i<len;i++) //判断i是否小于len,执行下面的语句
{
k = i; //假设此次循环中的最大值就是当前的值
for(j = i+1;j<len;j++)
{
if(a[j]>a[k]) //将假设的当前最大值与后面的值比较
{
k = j; //若后面的值更大,则交换下标
}
}
if(k != i) //比较之后如果此次循环中最大值并非当前值
{
temp = a[i]; //将此次循环中的最大值与a[i]交换
a[i] = a[k];
a[k] = temp;
}
}
for(i=0;i<len;i++) //利用for循环将结果依次输出
{
printf("%d ",a[i]);
}
}
#include<stdio.h>
int main()
{
int a[10],i,j,k,t;
printf("输入十个数字:\n");
for(i=0;i<=9;i++)
scanf("%d",&a[i]);
printf("\n");
for(i=0;i<9;i++)
{
k=i;
for(j=i+1;j<10;j++)
if(a[j]<a[k])
k=j;
if(k!=i)
{
t=a[i];
a[i]=a[k];
a[k]=t;
}
}
printf("从小到大排列:\n");
for(i=0;i<=9;i++)
printf("%d ",a[i]);
}
例题:猴子选大王
例子: n 只猴子要选大王,选举方法如下:所有猴子按 1、2、3…n 编号围坐成一圈,从第1号开始,顺时针,按照 1、2…m 报数,凡是报到 m 的猴子退出圈外,如此循环报数,直到圈内剩下最后一只猴子,该猴子就是大王,编写程序实现上述过程,n,m 由键盘输入。
分析: 用一个含 n 个元素的数组 a,初始化时,a[i]的值为 i+1,存放猴子的编号1、2…n,计数器 count 清零,从 a[0] 开始循环报数(测试),每报一次,count 加 1,当 count 等于 m 时,这只猴子 a[i] 就出局,打印 a[i] 值,并将 a[i] 清零,count 也清零重新继续报数,如此反复,最后退出的猴子就是大王。
47.数组的拆分与合并
48.数组拷贝
50.两矩阵相加
51.矩阵转换
52.用指针访问数组元素
53.引用循环替换数值
54.判断最大值
55.删除字符串中的特殊字符
56.连接字符串
57.计算字符串的长度
58.查找字符在字符串中出现的次数
59.字符串中各种字符的计算
60.字符串复制
61.字符串排序
62.使用结构体
函数
例一、输入两个数 m,n 求 m!/n! 的值
#include<stdio.h>
int calu(int x)
{
int i,z=1;
for(i=1;i<=x;i++) //是<=不是<
z=z*i;
return(z);
}
int main()
{
int m,n;
printf("请输入m,n");
scanf("%d%d",&m,&n);
printf("m!/n! 的值为 %f\n",(float)calu(m)/(float)calu(n));
}
例二、
void f(int a, int b)
{ a += 2;
b -= 3;
printf("%d %d\n", a, b); //输出12 2
}
int main() // exp73.cpp
{ int x, y;
void f(int, int);
x = 10;
y = 5;
f(x, y);
printf("%d %d\n", x, y); //输出10 5
}
//输出 12 2
// 10 5
例三、
计算 s = 1^k + 2^k + 3^k + …… + n^k
#include <stdio.h>
int main( )
{
int sum(int,int);
int k = 4, n = 6;
printf("Sum of 1^k+2^k+3^k+……+n^k =");
printf("%d\n", sum(k,n)); // 调用 sum 函数
}
int sum(int k,int n) // 计算 1 到 n 的 k 次方之累加和
{
int s=0;
int power(int,int); // 求幂的函数说明
for(int i=1;i<=n;i++)
s += power(i, k); // 累加
return s;
}
int power(int m,int n) // 计算 m 的 n 次方
{
int p=1, i;
for(i=0;i<n;i++) p *= m; // 累乘算法
return p;
}
例四、
计算x^y
#include<stdio.h>
int ch(int a,int b)
{
int m,n;
n=1;
for(m=1;m<=b;m++)
n=n*a;
return n;
}
int main()
{
int x,y;
printf("请输入x,y");
scanf("%d%d",&x,&y);
printf("%d",ch(x,y));
}
例五、
1.组成不重复的数字
有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
#include<stdio.h>
int main()
{
int i,j,k;
printf("\n");
for(i=1;i<=4;i++)
{
for(j=1;j<=4;j++)
{
for(k=1;k<=4;k++)
{
if(i!=k&&i!=j&&j!=k)
{
printf("%d%d%d\n",i,j,k);
}
}
}
}
return 0;
}
123
124
132
134
142
143
213
214
231
234
241
243
312
314
321
324
341
342
412
413
421
423
431
432
2.企业发放的奖金根据利润提成
3.求解一个数x
一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
程序分析:
假设该数为 x。
1、则:x + 100 = n^2, x + 100 + 168 = m^2
2、计算等式:m^2 - n^2 = (m + n)(m - n) = 168
3、设置: m + n = i,m - n = j,i * j =168,i 和 j 至少一个是偶数
4、可得: m = (i + j) / 2, n = (i - j) / 2,i 和 j 要么都是偶数,要么都是奇数。
5、从 3 和 4 推导可知道,i 与 j 均是大于等于 2 的偶数。
6、由于 i * j = 168, j>=2,则 1< i < 168 / 2 + 1。
7、接下来将 i 的所有数字循环计算即可。
#include<stdio.h>
int main()
{
int i,j,m,n,x;
for(i=1;i<168/2+1;i++)
{
if(168%i==0)
{
j=168/i;
if(i>j&&i%2==0&&j%2==0)
{
m=(i+j)/2;
n=(i-j)/2;
x=n*n-100;
printf("%d+100=%d*%d\n",x,n,n);
printf("%d+268=%d*%d\n",x,m,m);
}
}
}
return 0;
}
-99+100=1*1
-99+268=13*13
21+100=11*11
21+268=17*17
261+100=19*19
261+268=23*23
1581+100=41*41
1581+268=43*43
4.判断某天是这一年的第几天
输入某年某月某日,判断这一天是这一年的第几天?
思路:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。
不同的方法
5.从小到大排序
输入三个整数x,y,z,请把这三个数由小到大输出。
#include<stdio.h>
int main()
{
int x,y,z,t;
printf("输入三个数字\n");
scanf("%d%d%d",&x,&y,&z);
if(x>y)
{
t=x;x=y;y=t;
}
if(x>z)
{
t=z;z=x;x=t;
}
if(y>z)
{
t=y;y=z;z=t;
}
printf("从小到大排序:%d %d %d\n",x,y,z);
}
#include <stdio.h>
int main()
{
int a,b,c,p,q,r,s,t;
printf("输入三个数字:");
scanf("%d%d%d",&a,&b,&c);
p=(a<b)?a:b;
q=(a>b)?a:b;
r=(p>c)?p:c;
s=(q>c)?q:c;
t=(p<c)?p:c;
printf("%d %d %d",t,r,s);
return 0;
}
设计程序输出 Fibonacii 数列的前 20 项
要求每行输出5个数据
Fibonacii 数列定义如下:
#include <stdio.h>
int main()
{
int f0=0,f1=1,f2;
printf("%-5d%-5d", f0,f1);//%-5d表示按五位的固定位宽输入整数型数值,如果不足五位,就在前面补空格
for(int n=2;n<20;n++)
{
f2=f0+f1;
if(n%5==0)
printf("\n");
printf("%-5d", f2);
f0=f1;
f1=f2;
}
}
“百鸡问题”
鸡翁一,值钱 五,鸡母一,值钱三,鸡雏三,值钱一。百钱买百 鸡,问鸡翁、母、雏各几何?
#include <stdio.h>
int main()
{ int i,j,k;
printf(" 公鸡 母鸡 小鸡\n");
for(i=0;i<=20;i++)
for(j=0;j<=33;j++)
{ k=100-i-j;
if((5*i+3*j+k/3==100)&&(k%3==0))
// 注意(k%3==0)非常重要,想一想为什么
printf("%6d%8d%8d\n", i, j, k);
}
}
26.
#include<stdio.h>
int fact(int n)
{
if (n==0||n==1)
return 1;
else
return n*fact(n-1);
}
int main(void)
{
int i;
for(i=1;i<=5;i++)
{
printf("%d!=%d\n",i,fact(i));
}
return 0;
}
28.
#include<stdio.h>
int age(int n)
{
if(n==1)
return 10;
else
return age(n-1)+2;
}
int main(void)
{
int n;
n=age(5);
printf("%d\n",n);
return 0;
}
补充
#include<stdio.h>
int Max(int a,int b,int c)
{
int max=a;
if(b>max)
{
max=b;
if(c>max)
{
max=c;
}
}
else
{
if(c>max)
{
max=c;
}
}
return max;
}
int main()
{
int x,y,z,maxOne;
printf("请输入三个数字");
scanf("%d%d%d",&x,&y,&z);
maxOne=Max(x,y,z);
printf("最大数为%d\n",maxOne);
return 0;
}
#include<stdio.h>
float Max(float a,float b,float c)
{
return a>=b?(a>=c?a:c):(b>=c?b:c);
}
int main()
{
float x,y,z,max;
printf("输入三个数\n");
scanf("%f%f%f",&x,&y,&z);
max=Max(x,y,z);
printf("最大值为:%f\n",max);
return 0;
}
递推
1.汉诺塔问题(hanoi)
有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小.要求按下列规则将所有圆盘移至C杆:
1.每次只能移动一个圆盘;
2.大盘不能叠在小盘上面.
可将圆盘临时置于B杆,也可将从A杆移出的圆盘重新移回A杆,但都必须尊循上述两条规则。求移动的过程。
A柱子上的(n-1)个圆环通过C移动到了B柱子上,且在B柱子从下往上,从大到小放着)此时当我们将最大的圆环从A移到C上后,A柱子已经空了,我们就需要将B柱子上剩下的(n-1)圆环通过A移动到C即可。是不是有点熟悉,这一步和上一步是类似的
#include <stdio.h>
int m;
void Hanoi(int n, char A, char B, char C)
{
if (n == 1)
printf("step %d: 塔%c --> 塔%c\n", m++, A, C);
else
{
Hanoi(n - 1, A, C, B);
printf("step %d: 塔%c --> 塔%c\n", m++, A, C);
Hanoi(n - 1, B, A, C);
}
}
int main()
{
int n;
m = 1;
printf("请输入汉诺塔圆盘数量>:");
scanf("%d", &n);
Hanoi(n, 'A', 'B', 'C'); //圆盘数量 塔A, 塔B, 塔C
return 0;
}
请输入汉诺塔圆盘数量>:4
step 1: 塔A --> 塔B
step 2: 塔A --> 塔C
step 3: 塔B --> 塔C
step 4: 塔A --> 塔B
step 5: 塔C --> 塔A
step 6: 塔C --> 塔B
step 7: 塔A --> 塔B
step 8: 塔A --> 塔C
step 9: 塔B --> 塔C
step 10: 塔B --> 塔A
step 11: 塔C --> 塔A
step 12: 塔B --> 塔C
step 13: 塔A --> 塔B
step 14: 塔A --> 塔C
step 15: 塔B --> 塔C
2.Fibonacii 数列
#include<stdio.h>
int fib(int n)
{
if(n==1 || n==2)
return 1;
else
return fib(n-1) + fib(n-2);
}
int main()
{
int a=0,sum;
printf("请输入正整数n:");
scanf("%d",&a);
for(int i=a;i>0;i--)
{
sum=fib(i);
printf("fibonacci数列第%d个数:%d\n",i,sum);}
}
请输入正整数n:4
fibonacci数列第4个数:3
fibonacci数列第3个数:2
fibonacci数列第2个数:1
fibonacci数列第1个数:1