赞
踩
目录:
===============================基础例题100道===============================
(1)计算 int, float, double 和 char 字节大小
(2)计算 long long, long double 字节大小
===============================进阶例题100道===============================
1.有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
3.一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
7.输出特殊图案,请在c环境中运行,看一看,Very Beautiful!
15.利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示
17.输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数
19.一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数
24.:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和
27.利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来
29.给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字
31.请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母
32.删除一个字符串中的指定字母,如:字符串 "aca",删除其中的 a 字母
35.字符串反转,如将字符串 "www.runoob.com" 反转为 "moc.boonur.www"
39.有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中
64.利用ellipse and rectangle 画图(在TC中实现)
67.输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组
68.有 n个整数,使其前面各数顺序向后移 m 个位置,最后m个数变成最前面的 m 个数
69.有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位
70.写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度
71.编写input()和output()函数输入,输出5个学生的数据记录
76.编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n(利用指针函数)
81.809*??=800*??+9*?? 其中??代表的两位数, 809*??为四位数,8*??的结果为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果
88.读取7个数(1—50)的整数值,每读取一个值,程序打印出该值个数的 *
97.从键盘输入一些字符,逐个把它们送到磁盘上去,直到输入一个#为止
98.从键盘输入一个字符串,将小写字母全部转换成大写字母,然后输出到一个磁盘文件"test"中保存。 输入的字符串以!结束
99.有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列),输出到一个新文件C中
===============================基础例题100道===============================
- #include <stdio.h>
- int main()
- {
- // printf() 中字符串需要引号
- printf("Hello, World!");
- return 0;
- }
输出结果:
Hello, World!
- #include <stdio.h>
- int main()
- {
- int number;
-
- // printf() 输出字符串
- printf("输入一个整数: ");
-
- // scanf() 格式化输入
- scanf("%d", &number);
-
- // printf() 显示格式化输入
- printf("你输入的整数是: %d", number);
- return 0;
- }
使用 printf() 与 %d 格式化输出整数
输出结果:
- 输入一个整数: 45
- 你输入的整数是: 45
- #include <stdio.h>
-
- int main() {
- char c; // 声明 char 变量
-
- c = 'A'; // 定义 char 变量
-
- printf("c 的值为 %c", c);
-
- return 0;
- }
使用 printf() 与 %c 格式化输出一个字符
输出结果:
c 的值为 A
- #include <stdio.h>
-
- int main() {
- float f; // 声明浮点数变量
-
- f = 12.001234; // 定义浮点数变量
-
- printf("f 的值为 %f", f);
-
- return 0;
- }
使用 printf() 与 %f 输出浮点数
输出结果:
f 的值为 12.001234
- #include <stdio.h>
-
- int main() {
- double d; // 声明双精度变量
-
- d = 12.001234; // 定义双精度变量
-
- printf("d 的值为 %le", d);
-
- return 0;
- }
使用 printf() 与 %e 输出双精度数
输出结果:
d 的值为 1.200123e+01
- #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;
- }
使用 scanf() 来接收输入, printf() 与 %d 格式化输出整数
输出结果:
- 输入两个数(以空格分割): 1 2
- 1 + 2 = 3
- #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
- #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
- #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]);
- }
- }
- #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;
- }
两数相除,如果有余数,输出余数
- #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
以下实例中定义了两个整数变量,并使用 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
以下实例中定义了两个整数变量,并使用 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 最大
- #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);
- }
- }
使用 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
- #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
以下实例演示了交换两个浮点数的值
- #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
不使用临时变量交换两个整数的值
- #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
- #include<stdio.h>
-
- void swap(int *a,int*b)
- {
- int temp=*a;
- *a=*b;
- *b=temp;
- }
- int main()
- {
- int a=1,b=2;
- swap(&a,&b);
- printf("a=%d\nb=%d\n",a,b);
- return 0;
- }
以下实例判断用户输入的整数是奇数还是偶数
- #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;
- }
循环输出区间范围内的奇数/偶数可以通过除于 2 的余数来判断
- #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
- #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
- #include <stdio.h>
- int main(){
- for (int i=1; i<10; i++)
- // 通过按位与运算符判断奇偶数
- i & 1 ? printf("奇数: %d\n", i) : printf("偶数: %d\n", i);
- }
- #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;
- }
判断输入的字母是元音,还是辅音
英语有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 是辅音
如果从键盘中输入的不是字母,例如,数字,标点符号,都会输出是辅音。所以我对这个做了一个简单的判定
- #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;
- }
- #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;
- }
- #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;
- }
- #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 是最大数。
- #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;
- }
- #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 getMax(int a, int b, int c)
- {
- int max=a;
- if(b>max)
- {
- max = b;
- }
- if(c>max)
- {
- max = c;
- }
- return max;
- }
-
-
- int main()
- {
- int a, b, c;
- printf("请输入三个整数,用空格分隔:");
- scanf("%d %d %d",&a, &b, &c);
- printf("最大值是:%d",getMax(a, b, c));
- return 0;
- }
求一元二次方程: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
一元二次方程可能有两个实数解,或者一个实数解,或者无实数解
- #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;
- }
用户输入年份,判断该年份是否为闰年
- #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;
- }
输出结果:
- 输入年份: 1990
- 1990 不是闰
- #include <stdio.h>
-
- int main()
- {
- int year;
- printf("输入年份: ");
- scanf("%d",&year);
- // year = 300;
-
- // 先处理百年,余下的在处理非百年
- if(year % 100 == 0) // 先找出百年
- {
- if(year % 400 == 0) // 找出 400年
- {
- printf("y\n");
- }
- else // 剩下就是是100年但不是400年
- {
- printf("n\n");
- }
- }
- else // 剩下的是非百年的年份按照正常走
- {
- if(year % 4 == 0)
- {
- printf("y\n");
- }
- else
- {
- printf("n\n");
- }
- }
-
- return 0;
- }
总体思路,先把特殊的百年年份拿出来,是 400 的倍数,是闰年,不是 400 的倍数,不是闰年。
然后,百年年份剩余的都为正常的非百年的年份直接按照 4 处理。
直接条件判断闰年
- #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;
- }
用户输入一个数字,判断该数字是正数还是负数或是零
- #include <stdio.h>
- int main()
- {
- double number;
-
- printf("输入一个数字: ");
- scanf("%lf", &number);
-
- if (number <= 0.0)
- {
- if (number == 0.0)
- printf("你输入的是 0。");
- else
- printf("你输入的是负数。");
- }
- else
- printf("你输入的是正数。");
- return 0;
- }
输出结果:
- 输入一个数字: 9
- 你输入的是正数。
- #include<stdio.h>
-
- int main(){
- double number;
- printf("请输入一个数字: ");
- scanf("%lf", &number);
- if(number < 0.0)
- printf("你输入的是负数>_<\n");
- else if(number > 0.0)
- printf("你输入的是正数-.-\n");
- else
- printf("你输入的是零0.0\n");
- }
用户输入一个字符,判断该字符是否为一个字母
- #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;
- }
输出结果:
- 输入一个字符: a
- a 是字母
- #include <stdio.h>
-
- int main(){
- char c;
- printf("请输入一个字符:");
- scanf("%c",&c);
- ( (c>='a' && c<='z') || (c>='A' && c<='Z')) ? printf("%c是字母",c) : printf("%c不是字母",c);
- return 0;
- }
自然数是指表示物体个数的数,即由0开始,0,1,2,3,4,……一个接一个,组成一个无穷的集体,即指非负整数
- #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;
- }
- #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;
- }
输出结果:
- 输入一个正整数: 100
- Sum = 5050
- #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;
- }
- #include <stdio.h>
- int main()
- {
- int num;
- printf("请输入一个自然数:");
- while (scanf("%d", &num) == 1)
- {
- printf("Sum = %d", (num + 1) * num / 2);
- break;
- }
- return 0;
- }
使用嵌套 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;
- }
斐波那契数列指的是这样一个数列 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项开始,每一项都等于前两项之和
- #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,
- #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,
用户输入两个数,求这两个数的最大公约数
- #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
- #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
- #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
- #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;
- }
- #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;
- }
- #include <stdio.h>
-
- int main(void)
- {
- int x, y, gcd;
- printf("请输入两个正整数:");
- scanf("%d%d", &x, &y);
- if(x < y)
- gcd = x;
- else
- gcd = y;
- while(x % gcd ||y % gcd)
- gcd--;
- printf("gcd = %d\n", gcd);
-
- return 0;
- }
用户输入两个数,求这两个数的最小公倍数
- #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
- #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
- #include <stdio.h>
-
- int gcd(int m, int n){ //定义函数
- if(m % n == 0) return n;
- else return gcd(n, m%n); //辗转相除法
- }
- void main() {
- int a,b, t,lcm;
- printf("请输入两个数:");
- scanf("%d%d",&a,&b);
- if(a < b) {t=a, a=b, b=t; } //确保 a>b
-
- t = gcd(a, b); // 递归调用
- printf("%d和%d的最大公约数是:%d\n",a,b,t);
-
- lcm = (a * b)/ t; // 通过最大公约数t 计算最小公倍数
- printf("%d和%d的最小公倍数是:%d",a,b,lcm);
- }
输出结果:
- 请输入两个数:12 18
- 18和12的最大公约数是:6
一个正整数的阶乘(英语:factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。
n!=1×2×3×...×n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n。
- #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
- #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;
- }
- #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
- #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
- #include<stdio.h>
-
- int main(){
- int A=65;
- int i;
- for(i=1;i<=26;i++){
- printf("%c\n",A);
- A++;
- }
- return 0;
- }
- #include "stdio.h"
-
- int main() {
- int i,n;
- ant:printf("输入0或1输出小写或大写:");
- scanf("%d",&i);
- if(i!=0 && i!=1) {
- printf("error!输入0或1 !\n");
- goto ant;
- } else {
- if(i==0)
- {
- printf("0 小写:");
- for(n=97;n<123;n++)
- printf("%c ",n);
- printf("\n");
- }
-
- if(i==1) {
- printf("1 大写:");
- for(n=65;n<91;n++)
- printf("%c ",n);
- printf("\n");
- }
- }
-
- }
用户输入数字,判断该数字是几位数
- #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 位数。
- #include<stdio.h>
-
- int main()
- {
- int a, b=10, c=1;
- printf("请输入一个人数字: ");
- scanf("%d",&a);
- while(a/b>0)
- {
- b=b*10;
- c++;
- };
- printf("%d是一个%d位数 \n",a,c);
- return 0;
- }
计算一个数的 n 次方,例如: 23,其中 2 为基数,3 为指数
- #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
- #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
- #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;
- }
- #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;
- }
判断一个数是否为回文数。
设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;
- }
质数(prime number)又称素数,有无限个。质数定义为在大于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 是素数
- #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
- #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
- #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;
- }
Armstrong 数,就是n位数的各位数的n次方之和等于该数,如:
- 153=1^3+5^3+3^3
- 1634=1^4+6^4+3^4+4^4
- #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
- #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
- #include <stdio.h>
- #include <math.h>
-
- int checkPrimeNumber(int n);
- int checkArmstrongNumber(int n);
-
- int main()
- {
- int n, flag;
-
- printf("输入正整数: ");
- scanf("%d", &n);
-
- // 检测素数
- flag = checkPrimeNumber(n);
- if (flag == 1)
- printf("%d 是素数。\n", n);
- else
- printf("%d 不是素数\n", n);
-
- // 检测 Armstrong 数
- flag = checkArmstrongNumber(n);
- if (flag == 1)
- printf("%d 是 Armstrong 数。", n);
- else
- printf("%d 不是 Armstrong 数。",n);
- return 0;
- }
-
- int checkPrimeNumber(int n)
- {
- int i, flag = 1;
-
- for(i=2; i<=n/2; ++i)
- {
-
- // 非素数条件
- if(n%i == 0)
- {
- flag = 0;
- break;
- }
- }
- return flag;
- }
-
- 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 不是素数
- 371 是 Armstrong 数。
- #include<stdio.h>
- long long power(long long x,int y)
- {
- long long sum = 1;
- while(y--)
- {
- sum *= x;
- }
- return sum;
- }
-
- int check_arm(long long n)
- {
- long long temp,sum = 0,remainder,count = 0;
- temp = n;
- while(temp*10/10 != 0)
- {
- temp /= 10;
- ++count;
- }
- temp = n;
- while(temp*10/10 != 0)
- {
- sum += power(temp%10,count);
- temp /= 10;
- }
- if(n == sum)
- {
- return 1;
- }
- else
- {
- return 0;
- }
- }
- int main()
- {
- long long temp,n,result,a,b,i;
- int flag;
- printf("Please enter a number:\n");
- scanf("%lld",&n);
- result = check_arm(n);
- if(result == 1)
- {
- printf("Yes, it's an Armstrong number.\n\n");
- }
- else
- {
- printf("No, it isn't an Armstrong number.\n\n");
- }
- printf("Please enter two numbers as an interregional,seperated by a space.\n");
- scanf("%lld %lld",&a,&b);
- flag = 1;
- if(a == b)
- {
- printf("That is no an valid interregional.\n");
- flag = 0;
- }
- else if(a > b)
- {
- temp = a;
- a = b;
- b = temp;
- }
- if(flag == 1)
- {
- printf("Armstrong number(s) between %lld and %lld is(are):\n",a,b);
- for(i = a;i<=b;i++)
- {
- if(check_arm(i) == 1)
- {
- printf("%lld ",i);
- }
- }
- }
- return 0;
- }
- #include <stdio.h>
- int main(){
- int low,high;
- scanf("%d %d",&low,&high);
- while(low<=high){
- if(arm(low)==1) printf("%d \t",low);
- low++;
- }
-
- }
-
- int arm(int a){
-
- int b=0,c=0,e=0; //初始化
- c=a;
- while(c>0){
- if(c%10>=0) e++;
- c =c/10;
- }
- c=a;
- while(a>0){
- b=b+pow(a%10,e);
- a=a/10;
- }
- if(c==b) return 1;
- else return 0;
- }
假如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;
- }
- #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;
- }
输出结果:
- *
- * *
- * * *
- * * * *
- * * * * *
- #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("%d ",j);
- }
- printf("\n");
- }
- return 0;
- }
输出结果:
- 1
- 1 2
- 1 2 3
- 1 2 3 4
- 1 2 3 4 5
- #include <stdio.h>
- int main()
- {
- int i, j;
- char input, alphabet = 'A';
-
- printf("输入大写字母: ");
- scanf("%c",&input);
-
- for(i=1; i <= (input-'A'+1); ++i)
- {
- for(j=1;j<=i;++j)
- {
- printf("%c", alphabet);
- }
- ++alphabet;
-
- printf("\n");
- }
- return 0;
- }
输出结果:
- A
- B B
- C C C
- D D D D
- E E E E E
- #include <stdio.h>
- int main()
- {
- int i, j, rows;
-
- printf("行数: ");
- scanf("%d",&rows);
-
- for(i=rows; i>=1; --i)
- {
- for(j=1; j<=i; ++j)
- {
- printf("* ");
- }
- printf("\n");
- }
-
- return 0;
- }
输出结果:
- * * * * *
- * * * *
- * * *
- * *
- *
- #include <stdio.h>
- int main()
- {
- int i, j, rows;
-
- printf("行数: ");
- scanf("%d",&rows);
-
- for(i=rows; i>=1; --i)
- {
- for(j=1; j<=i; ++j)
- {
- printf("%d ",j);
- }
- printf("\n");
- }
-
- return 0;
- }
输出结果:
- 1 2 3 4 5
- 1 2 3 4
- 1 2 3
- 1 2
- 1
- #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, rows, k=0, count = 0, count1 = 0;
-
- printf("行数: ");
- scanf("%d",&rows);
-
- for(i=1; i<=rows; ++i)
- {
- for(space=1; space <= rows-i; ++space)
- {
- printf(" ");
- ++count;
- }
-
- while(k != 2*i-1)
- {
- if (count <= rows-1)
- {
- printf("%d ", i+k);
- ++count;
- }
- else
- {
- ++count1;
- printf("%d ", (i+k-2*count1));
- }
- ++k;
- }
- count1 = count = k = 0;
-
- printf("\n");
- }
- return 0;
- }
输出结果:
- 1
- 2 3 2
- 3 4 5 4 3
- 4 5 6 7 6 5 4
- 5 6 7 8 9 8 7 6 5
- #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;
- }
输出结果:
- * * * * * * * * *
- * * * * * * *
- * * * * *
- * * *
- *
- #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
- #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
- #include<stdio.h>
- int main(){
- int i,j,k,n;
- printf("请输入数字金字塔基座宽度(正奇数):");
- scanf("%d",&n);
- for(k=1;k<=(n+1)/2;k++){
- for(i=1;i<(n+1)/2+1-k;i++) printf(" ");
- for(j=k;j<(2*k);j++) printf("%d",j);
- for(j-=2;j>=k;j--) printf("%d",j);
- printf("\n");
- }
- }
- #include <stdio.h>
- int main()
- {
- int blank, number, column, n;
- printf("请输入数字金字塔层数(小于50):");
- scanf("%d", &n);
- //判断输出三角形中最大数的位数,即最后一行中间数的位数
- int count = 0;
- int x = 0;
- x = 2 * n - 1;//最后一行中间数数值
- while (x != 0)
- {
- x /= 10;
- ++count;
- }
- //输出
- for (column = 1; column <= n; column++)
- {
- for (blank = 1; blank < (n - column)*(count+1)+count; blank++) printf(" ");//输出每行前部空格
- for (number = column; number < (2 * column); number++)//输出从小到大;例:123
- {
- if (number < 10&&count != 1)
- {
- printf(" %d", number);
- }
- else
- {
- printf(" %d", number);
- }
- }
- for (number -= 2; number >= column; number--)//输出从大到小;例:21
- {
- if (number < 10 && count != 1)
- {
- printf(" %d", number);
- }
- else
- {
- printf(" %d", number);
- }
- }
- printf("\n\n");
- }
- return 0;
- }
- #include <stdio.h>
-
- int main() {
- int i, j, count;
-
- for(i = 1; i <= 10; i++) {
- for(j = i; j <=100; j += 10 )
- printf(" %3d", j);
-
- printf("\n");
- }
-
- return 0;
- }
输出
- 1 11 21 31 41 51 61 71 81 91
- 2 12 22 32 42 52 62 72 82 92
- 3 13 23 33 43 53 63 73 83 93
- 4 14 24 34 44 54 64 74 84 94
- 5 15 25 35 45 55 65 75 85 95
- 6 16 26 36 46 56 66 76 86 96
- 7 17 27 37 47 57 67 77 87 97
- 8 18 28 38 48 58 68 78 88 98
- 9 19 29 39 49 59 69 79 89 99
- 10 20 30 40 50 60 70 80 90 100
- #include <stdio.h>
-
- int main() {
- int i, j, count;
- int start, end;
-
- start = 2, end = 10;
-
- for(i = start; i <= end; i++) {
- count = i;
-
- for(j = 1; j <= 10; j++) {
- printf(" %3d", count*j);
- }
-
- printf("\n");
- }
-
- return 0;
- }
输出结果:
- 2 4 6 8 10 12 14 16 18 20
- 3 6 9 12 15 18 21 24 27 30
- 4 8 12 16 20 24 28 32 36 40
- 5 10 15 20 25 30 35 40 45 50
- 6 12 18 24 30 36 42 48 54 60
- 7 14 21 28 35 42 49 56 63 70
- 8 16 24 32 40 48 56 64 72 80
- 9 18 27 36 45 54 63 72 81 90
- 10 20 30 40 50 60 70 80 90 100
- #include <stdio.h>
-
- int main() {
- int i, j, n;
-
- n = 3;
- j = 1;
-
- for(i = n; i <= (n*10); i+=n) {
- printf("%3d x %2d = %3d\n", n, j, i);
- j++;
- }
-
- return 0;
- }
输出结果:
- 3 x 1 = 3
- 3 x 2 = 6
- 3 x 3 = 9
- 3 x 4 = 12
- 3 x 5 = 15
- 3 x 6 = 18
- 3 x 7 = 21
- 3 x 8 = 24
- 3 x 9 = 27
- 3 x 10 = 30
- #include<stdio.h>
-
- int main()
- {
- int i, j, count=0;
- for(i=1;i<=10;i++){
- for(j=1;j<=10;j++){
- count++;
- printf("%4d",count);
- }
- printf("\n");
- }
- return 0;
- }
- # 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
- #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);
- }
计算一个数为两个素数之和
- #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
- #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
- #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
- #include<stdio.h>
-
- //求a的b次方函数
- unsigned ppow(unsigned a, unsigned b) {
- unsigned cc = 1;
- while (b) {
- cc*=a;
- b--;
- }
- return cc;
- }
- int main()
- {
- unsigned long long n = 0;
- unsigned i, k=0, count = 0;
- printf("请输入2进制数:");
-
- scanf_s("%lld", &n); //用scanf()在Visual Studio 2019 会警告返回值被忽略
- while (n) {
- i = n % 10; //这个说错了,2和10都可以,用10会比较好
- if (i) { //判断i是否为0
- count += ppow(2, k);
- }
- k++; //k做为2的次方数,每次n /= 10 就+1
- n /= 10;
- }
- printf(" 转成10进制= %d",count);
- return 0;
- }
- #include <stdio.h>
- #include <math.h>
-
- int convertDecimalToOctal(int decimalNumber);
- int main()
- {
- int decimalNumber;
-
- printf("输入一个十进制数: ");
- scanf("%d", &decimalNumber);
-
- printf("十进制数 %d 转换为八进制为 %d", decimalNumber, convertDecimalToOctal(decimalNumber));
-
- return 0;
- }
-
- int convertDecimalToOctal(int decimalNumber)
- {
- int octalNumber = 0, i = 1;
-
- while (decimalNumber != 0)
- {
- octalNumber += (decimalNumber % 8) * i;
- decimalNumber /= 8;
- i *= 10;
- }
-
- return octalNumber;
- }
输出结果:
- 输入一个十进制数: 78
- 十进制数 78 转换为八进制为 116
- #include <stdio.h>
- #include <math.h>
-
- long long convertOctalToDecimal(int octalNumber);
- int main()
- {
- int octalNumber;
-
- printf("输入一个八进制数: ");
- scanf("%d", &octalNumber);
-
- printf("八进制数 %d 转换为十进制为 %lld", octalNumber, convertOctalToDecimal(octalNumber));
-
- return 0;
- }
-
- long long convertOctalToDecimal(int octalNumber)
- {
- int decimalNumber = 0, i = 0;
-
- while(octalNumber != 0)
- {
- decimalNumber += (octalNumber%10) * pow(8,i);
- ++i;
- octalNumber/=10;
- }
-
- i = 1;
-
- return decimalNumber;
- }
输出结果:
- 输入一个八进制数: 116
- 八进制数 116 转换为十进制为 78
- /*
- 任意进制转换
- srBaseNum: 原进制下的数
- srBse: 原进制的基
- destBase: 目标进制的基
- destBaseNum:转换后的数
- */
-
- int numBaseConversion(int srBaseNum, int srBase, int destBase)
- {
- int destBaseNum=0, i=0;
- while (srBaseNum != 0){
- destBaseNum += (srBaseNum % destBase) * pow(srBase,i);
- srBaseNum /= destBase;
- i ++;
- }
- return destBaseNum;
- }
- #include <stdio.h>
- #include <math.h>
-
- int convertBinarytoOctal(long long binaryNumber);
- int main()
- {
- long long binaryNumber;
-
- printf("输入一个二进制数: ");
- scanf("%lld", &binaryNumber);
-
- printf("二进制数 %lld 转换为八进制为 %d", binaryNumber, convertBinarytoOctal(binaryNumber));
-
- return 0;
- }
-
- int convertBinarytoOctal(long long binaryNumber)
- {
- int octalNumber = 0, decimalNumber = 0, i = 0;
-
- while(binaryNumber != 0)
- {
- decimalNumber += (binaryNumber%10) * pow(2,i);
- ++i;
- binaryNumber/=10;
- }
-
- i = 1;
-
- while (decimalNumber != 0)
- {
- octalNumber += (decimalNumber % 8) * i;
- decimalNumber /= 8;
- i *= 10;
- }
-
- return octalNumber;
- }
输出结果:
- 输入一个二进制数: 101001
- 二进制数 101001 转换为八进制为 51
- #include <stdio.h>
- #include <math.h>
-
- long long convertOctalToBinary(int octalNumber);
- int main()
- {
- int octalNumber;
-
- printf("输入一个八进制数: ");
- scanf("%d", &octalNumber);
-
- printf("八进制数 %d 转二进制为 %lld", octalNumber, convertOctalToBinary(octalNumber));
-
- return 0;
- }
-
- long long convertOctalToBinary(int octalNumber)
- {
- int decimalNumber = 0, i = 0;
- long long binaryNumber = 0;
-
- while(octalNumber != 0)
- {
- decimalNumber += (octalNumber%10) * pow(8,i);
- ++i;
- octalNumber/=10;
- }
-
- i = 1;
-
- while (decimalNumber != 0)
- {
- binaryNumber += (decimalNumber % 2) * i;
- decimalNumber /= 2;
- i *= 10;
- }
-
- return binaryNumber;
- }
输出结果:
- 输入一个八进制数: 51
- 八进制数 51 转二进制为 101001
- //分别定义函数实现八进制转二进制
-
- #include <stdio.h>
-
- int octTodeci(int num);//声明八进制转十进制函数
- long long deciTobina(int num);//声明十进制转二进制函数
- int powNum(int base,int exp);//声明求base的exp次方函数
-
- void main()
- {
- int octNum, deciNum;
- long long binaNum;
- printf("Please enter an octal number:");
- scanf("%d", &octNum);
- deciNum = octTodeci(octNum);
- binaNum = deciTobina(deciNum);
- printf("The conversion from octal number %d to binary number is %lld.\n%", octNum, binaNum);
- }
-
- int octTodeci(int num)//定义八进制转十进制函数
- {
- int n = 0,remainder,result = 0;
- while (num != 0)
- {
- remainder = num %10;
- result += remainder*powNum(8, n);
- num /= 10;
- ++n;
- }
- return result;
- }
-
- long long deciTobina(int num)//定义十进制转二进制函数
- {
- int remainder,n=0;
- long long result = 0;
- while (num != 0)
- {
- remainder = num % 2;
- result += remainder*powNum(10, n);
- num /= 2;
- ++n;
- }
- return result;
- }
-
- int powNum(int base,int exp)//定义求base的exp次方函数
- {
- int result = 1,k;
- for (k = exp; k >= 1;--k)
- result *= base;
- return result;
- }
- #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);
- }
- }
输出结果:
- 输入一个字符串: runoob
- boonur
- #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;
- }
- #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);
- }
- #include <stdio.h>
- #include <string.h>
- int main()
- {
- char c[40];
- int i=1;
- printf("请输入字符串:");
- scanf("%s",c);
- int j=strlen(c);
- do{
- printf("%c",c[j-i]);
- ++i;
- } while(i<=j);
- return 0;
- }
使用 for 循环迭代出输出元素,并将各个元素相加算出总和,再除于元素个数:
- #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
- #include <stdio.h>
-
- int main()
- {
- int n, i;
- float num[100], sum = 0.0, average;
-
- printf("输入元素个数: ");
- scanf("%d", &n);
-
- while (n > 100 || n <= 0)
- {
- printf("Error! 数字需要在1 到 100 之间。\n");
- printf("再次输入: ");
- 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;
- }
输出结果:
- 输入元素个数: 4
- 1. 输入数字: 1
- 2. 输入数字: 2
- 3. 输入数字: 4
- 4. 输入数字: 8
- 平均值 = 3.75
- #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;
- }
- #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
- #include <stdio.h>
-
- int main() {
- int array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
- int loop;
-
- for(loop = 9; loop >= 0; loop--)
- printf("%d ", array[loop]);
-
- return 0;
- }
输出结果:
0 9 8 7 6 5 4 3 2 1
使用 for 循环迭代出输出元素,并将各个元素相加:
- #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);
-
- re
输出结果:
元素和为:45
- #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
- #include <stdio.h>
-
- int main()
- {
- int i, n;
- float arr[100];
-
- printf("输入元素个数(0~100): ");
- scanf("%d", &n);
- printf("\n");
-
- // 接收用户输入
- for(i = 0; i < n; ++i)
- {
- printf("输入数字 %d: ", i+1);
- scanf("%f", &arr[i]);
- }
-
- // 循环,并将最大元素存储到 arr[0]
- for(i = 1; i < n; ++i)
- {
- // 如果要查找最小值可以将 < 换成 >
- if(arr[0] < arr[i])
- arr[0] = arr[i];
- }
- printf("最大元素为 = %.2f", arr[0]);
-
- return 0;
- }
输出结果:
- 输入元素个数(0~100): 4
-
- 输入数字 1: 12
- 输入数字 2: 23
- 输入数字 3: 1
- 输入数字 4: 3
- 最大元素为 = 23.00
- #include <stdio.h>
- int main(){
- int n[]={3,2,1,4,7,6,5,8,0,9};
- int largest,i,num;
- num= sizeof(n)/sizeof(n[0]);
- for(i=0;i<num;i++) largest=(n[i] > largest)? n[i] : largest;
- printf("Largest Number is:%d",largest);
- }
使用 for 循环迭代出输出元素,并将各个元素相加算出总和,再除于元素个数:
- #include <stdio.h>
-
- int main() {
- int array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
- int loop, smallest;
-
- smallest = array[0];
-
- for(loop = 1; loop < 10; loop++) {
- if( smallest > array[loop] )
- smallest = array[loop];
- }
-
- printf("最小元素为 %d", smallest);
-
- return 0;
- }
输出结果:
最小元素为 0
- #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
- #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
- #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"
-
- int ArrayCopy(char* ori, char* cop, char Length)
- {
- char loop;
- for(loop = 0; loop < Length; loop++)
- {
- *cop++ = *ori++;
- }
- return 0;
- }
- int main()
- {
- char original[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
- char *copiedOne=original;
- char copiedTwo[10];
- char loop;
- char Length;
-
- Length = sizeof(original);
- printf("元素数组 -> 拷贝后的数组 \n");
- for(loop = 0; loop < sizeof(original); loop++)
- {
- printf(" %2d %2d\n", original[loop], copiedOne[loop]);
- }
- ArrayCopy(original,copiedTwo, Length);
-
- copiedTwo[9] = 20;
- printf("值传递:\n");
- printf("值传递更改数据后,只有拷贝的数组中的元素被更改: \n");
- printf("元素数组 -> 拷贝后的数组 \n");
- for(loop = 0; loop < sizeof(original); loop++)
- {
- printf(" %2d %2d\n", original[loop], copiedTwo[loop]);
- }
-
- copiedOne[9] = 50;
- printf("地址传递:\n");
- printf("地址传递更改数据后,原数组元素与拷贝的数组中的元素同时被更改: \n");
- printf("元素数组 -> 拷贝后的数组 \n");
- for(loop = 0; loop < sizeof(original); loop++)
- {
- printf(" %2d %2d\n", original[loop], copiedOne[loop]);
- }
-
- return 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;
- }
- #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
- #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
- #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;
- }
- #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
- #include <stdio.h>
-
- int main()
- {
- int data[5], i;
- printf("输入元素: ");
-
- for(i = 0; i < 5; ++i)
- scanf("%d", data + i);
-
- printf("你输入的是: \n");
- for(i = 0; i < 5; ++i)
- printf("%d\n", *(data + i));
-
- return 0;
- }
输出结果:
- 输入元素: 1
- 2
- 3
- 5
- 4
- 你输入的是:
- 1
- 2
- 3
- 5
- 4
a、b、c 三个变量,通过引用按顺序循环替换他们的值
- #include<stdio.h>
-
- void cyclicSwap(int *a,int *b,int *c);
-
- int main()
- {
- int a, b, c;
-
- printf("输入 a, b 和 c 的值: ");
- scanf("%d %d %d",&a,&b,&c);
-
- printf("交换前:\n");
- printf("a = %d \nb = %d \nc = %d\n",a,b,c);
-
- cyclicSwap(&a, &b, &c);
-
- printf("交换后:\n");
- printf("a = %d \nb = %d \nc = %d",a, b, c);
-
- return 0;
- }
- void cyclicSwap(int *a,int *b,int *c)
- {
-
- int temp;
-
- // 交换
- temp = *b;
- *b = *a;
- *a = *c;
- *c = temp;
- }
输出结果:
- 输入 a, b 和 c 的值: 1 2 3
- 交换前:
- a = 1
- b = 2
- c = 3
- 交换后:
- a = 3
- b = 1
- c = 2
通过用户输入指定的数值,来判断最大值
- #include <stdio.h>
- #include <stdlib.h>
-
- int main()
- {
- int i, num;
- float *data;
-
- printf("输入元素个数(1 ~ 100): ");
- scanf("%d", &num);
-
- // 为 'num' 元素分配内存
- data = (float*) calloc(num, sizeof(float));
-
- if(data == NULL)
- {
- printf("Error!!! 内存没有分配。");
- exit(0);
- }
-
- printf("\n");
-
- // 用户输入
- for(i = 0; i < num; ++i)
- {
- printf("输入数字 %d: ", i + 1);
- scanf("%f", data + i);
- }
-
- // 循环找出最大值
- for(i = 1; i < num; ++i)
- {
- // 如果需要找出最小值可以将 < 改为 >
- if(*data < *(data + i))
- *data = *(data + i);
- }
-
- printf("最大元素 = %.2f", *data);
-
- return 0;
- }
输出结果:
- 输入元素个数(1 ~ 100): 5
-
- 输入数字 1: 12
- 输入数字 2: 32
- 输入数字 3: 6
- 输入数字 4: 56
- 输入数字 5: 21
- 最大元素 = 56.00
- #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;
- }
输出结果:
- 输入一个字符串: run4#$1oob
- 输出: runoob
- #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;
- }
- #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;
- }
输出结果:
- 输入第一个字符串: google
- 输入第二个字符串: runoob
- 连接后: googlerunoob
- #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;
- }
- #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;
- }
- #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;
- }
输出结果:
- 输入字符串: runoob
- 字符串长度: 6
- #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;
- }
输出结果:
- 输入字符串: runoob
- 字符串长度: 6
查找字符在字符串中的起始位置(索引值从 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;
- }
输出结果:
- 输入字符串: runoob
- 输入要查找的字符: o
- 字符 o 在字符串中出现的次数为 2
计算字符串中的元音、辅音、数字、空白符
- #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;
- }
输出结果:
- 输入一个字符串: runoob123 erkcomsww dfrunoob
- 元音: 8
- 辅音: 15
- 数字: 3
- 空白符: 2
- #include <stdio.h>
- #include <string.h>
-
- int main()
- {
- char src[40];
- char dest[100];
-
- memset(dest, '\0', sizeof(dest));
- strcpy(src, "This is runoob.com");
- strcpy(dest, src);
-
- printf("最终的目标字符串: %s\n", dest);
-
- return(0);
- }
输出结果:
最终的目标字符串: This is runoob.com
- #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;
- }
输出结果:
- 字符串 s1: runoob
- 字符串 s2: runoob
按字典顺序排序
- #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
- #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;
- }
输出结果:
- 输入信息:
- 名字: runoob
- 编号: 123
- 成绩: 89
- 显示信息:
- 名字: runoob
- 编号: 123
- 成绩: 89.0
- #include "stdio.h"
-
- struct
- {
- int i;
- char j;
- }s1;
-
- #pragma pack(1)
- struct
- {
- int i;
- char j;
- }s2;
- int main(void)
- {
- int size_s1;
- int size_s2;
-
- size_s1 = sizeof(s1);
- size_s2 = sizeof(s2);
-
- printf(" 默认对齐方式下size_s1 = %d\n",size_s1);
- printf(" 按字节对齐方式下size_s2 = %d\n",size_s2);
- }
输出结果:
- 默认对齐方式下size_s1 = 8
- 按字节对齐方式下size_s2 = 5
使用结构体(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
- #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
- #include <stdio.h>
- #include <stdlib.h> /* exit() 函数 */
-
- int main()
- {
- char sentence[1000];
- FILE *fptr;
-
- fptr = fopen("runoob.txt", "w");
- if(fptr == NULL)
- {
- printf("Error!");
- exit(1);
- }
-
- printf("输入字符串:\n");
- fgets(sentence, (sizeof sentence / sizeof sentence[0]), stdin);
-
- fprintf(fptr,"%s", sentence);
- fclose(fptr);
-
- return 0;
- }
输出结果:
- 输入字符串:
- runoob.com
打开文件 runoob.txt:
- $ cat runoob.txt
- runoob.com
- #include <stdio.h>
- #include <stdlib.h>
-
- int main()
- {
- char msg[1000];
- FILE *stream;
- int i=0;
- if ((stream = fopen("G:/text/abc.txt","w")) == NULL)
- {
- perror ("fail to write");
- exit (1);
- }
- scanf("%s",msg); //控制台键入内容到文件中
- while(msg[i])
- {
- fputc(msg[i],stream);
- i++;
- }
- return 0;
- }
C 语言实现读取一个 txt 文件里的数据,要按行读出来:
1、打开文件 fopen("需要打开的路径")
2、然后使用 fgets 函数读取行
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define MAX_LINE 1024
- int main()
- {
- char buf[MAX_LINE]; /*缓冲区*/
- FILE *fp; /*文件指针*/
- int len; /*行字符个数*/
- if((fp = fopen("test.txt","r")) == NULL)
- {
- perror("fail to read");
- exit (1) ;
- }
- while(fgets(buf,MAX_LINE,fp) != NULL)
- {
- len = strlen(buf);
- buf[len-1] = '\0'; /*去掉换行符*/
- printf("%s %d \n",buf,len - 1);
- }
- return 0;
- }
文件 runoob.txt 内容:
$ cat runoob.txt runoob.com google.com
- #include <stdio.h>
- #include <stdlib.h> // exit() 函数
- int main()
- {
- char c[1000];
- FILE *fptr;
-
- if ((fptr = fopen("runoob.txt", "r")) == NULL)
- {
- printf("Error! opening file");
- // 文件指针返回 NULL 则退出
- exit(1);
- }
-
- // 读取文本,直到碰到新的一行开始
- fscanf(fptr,"%[^\n]", c);
-
- printf("读取内容:\n%s", c);
- fclose(fptr);
-
- return 0;
- }
输出结果:
- 读取内容:
- runoob.com
- #include "stdlib.h"
- #include "stdio.h"
-
- int main(int argc, char *argv[])
- {
- FILE *in= fopen("D:/in.java", "r");
- char buf[1024];
-
- while (fgets(buf, sizeof(buf), in) != NULL)
- {
- printf("%s", buf);
- }
-
- fclose(in);
-
- return 0;
- }
同理,如果要实现,文件逐行写入到另一个文件,可以使用fputs函数即可
- #include "stdlib.h"
- #include "stdio.h"
-
- int main(int argc, char *argv[])
- {
- FILE *in= fopen("D:/In.java", "r");
- FILE *out = fopen("D:/Out.java", "w");
-
- char buf[1024];
-
- while (fgets(buf, sizeof(buf), in) != NULL)
- {
- fputs(buf, out);
- }
-
- fclose(in);
- fclose(out);
-
- return 0;
- }
输出当前文件执行代码,__FILE__ 为当前执行的文件常量
- #include <stdio.h>
- int main() {
- FILE *fp;
- char c;
- fp = fopen(__FILE__,"r");
- do {
- c = getc(fp);
- putchar(c);
- }
- while(c != EOF);
- fclose(fp);
- return 0;
- }
输出结果:
- #include <stdio.h>
- int main() {
- FILE *fp;
- char c;
- fp = fopen(__FILE__,"r");
- do {
- c = getc(fp);
- putchar(c);
- }
- while(c != EOF);
- fclose(fp);
- return 0;
- }
30 个人在一条船上,超载,需要 15 人下船。
于是人们排成一队,排队的位置即为他们的编号。
报数,从 1 开始,数到 9 的人下船。
如此循环,直到船上仅剩 15 人为止,问都有哪些编号的人下船了呢?
- #include<stdio.h>
-
- int c = 0;
- int i = 1;
- int j = 0;
- int a[30] = { 0 };
- int b[30] = { 0 };
-
- int main()
- {
- while (i<=31)
- {
- if (i == 31)
- {
- i = 1;
- }
- else if (c == 15)
- {
- break;
- }
- else
- {
- if (b[i] != 0)
- {
- i++;
- continue;
- }
- else
- {
- j++;
- if (j != 9)
- {
- i++;
- continue;
- }
- else
- {
- b[i] = 1;
- a[i] = j;
- j = 0;
- printf("第%d号下船了\n", i);
- i++;
- c++;
- }
- }
- }
- }
- }
输出结果:
- 第9号下船了
- 第18号下船了
- 第27号下船了
- 第6号下船了
- 第16号下船了
- 第26号下船了
- 第7号下船了
- 第19号下船了
- 第30号下船了
- 第12号下船了
- 第24号下船了
- 第8号下船了
- 第22号下船了
- 第5号下船了
- 第23号下船了
A、B、C、D、E 五人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方睡觉。
日上三杆,A 第一个醒来,他将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份。
B 第二个醒来,也将鱼分为五份,把多余的一条鱼扔掉拿走自己的一份。 。
C、D、E依次醒来,也按同样的方法拿鱼。
问他们台伙至少捕了多少条鱼?以及每个人醒来时见到了多少鱼?
- #include <stdio.h>
- int main(){
- int n,x,j,k,l,m;
- for(n=5;;n++){
- j=4*(n-1)/5;
- k=4*(j-1)/5;
- l=4*(k-1)/5;
- m=4*(l-1)/5;
- if(n%5==1&&j%5==1&&k%5==1&&l%5==1&&m%5==1){
- printf("至少合伙捕鱼:%d条\n",n);
- printf("分别见到鱼的条数:%d %d %d %d\n",j,k,l,m);
- break;
- }
- }
- return 0;
- }
输出结果:
- 至少合伙捕鱼:3121条
- 分别见到鱼的条数:2496 1996 1596 1276
===============================进阶例题100道===============================
程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列
- #include<stdio.h>
-
- int main()
- {
- int i,j,k;
- printf("\n");
- for(i=1;i<5;i++) { // 以下为三重循环
- for(j=1;j<5;j++) {
- for (k=1;k<5;k++) { // 确保i、j、k三位互不相同
- if (i!=k&&i!=j&&j!=k) {
- printf("%d,%d,%d\n",i,j,k);
- }
- }
- }
- }
- }
输出结果:
- 1,2,3
- 1,2,4
- 1,3,2
- 1,3,4
- 1,4,2
- 1,4,3
- 2,1,3
- 2,1,4
- 2,3,1
- 2,3,4
- 2,4,1
- 2,4,3
- 3,1,2
- 3,1,4
- 3,2,1
- 3,2,4
- 3,4,1
- 3,4,2
- 4,1,2
- 4,1,3
- 4,2,1
- 4,2,3
- 4,3,1
- 4,3,2
- 利润(I)低于或等于10万元时,奖金可提10%;
- 利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;
- 20万到40万之间时,高于20万元的部分,可提成5%;
- 40万到60万之间时高于40万元的部分,可提成3%;
- 60万到100万之间时,高于60万元的部分,可提成1.5%;
- 高于100万元时,超过100万元的部分按1%提成。
从键盘输入当月利润I,求应发放奖金总数?
程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。
- #include<stdio.h>
- int main()
- {
- double i;
- double bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
- printf("你的净利润是:\n");
- scanf("%lf",&i);
- bonus1=100000*0.1;
- bonus2=bonus1+100000*0.075;
- bonus4=bonus2+200000*0.05;
- bonus6=bonus4+200000*0.03;
- bonus10=bonus6+400000*0.015;
- if(i<=100000) {
- bonus=i*0.1;
- } else if(i<=200000) {
- bonus=bonus1+(i-100000)*0.075;
- } else if(i<=400000) {
- bonus=bonus2+(i-200000)*0.05;
- } else if(i<=600000) {
- bonus=bonus4+(i-400000)*0.03;
- } else if(i<=1000000) {
- bonus=bonus6+(i-600000)*0.015;
- } else if(i>1000000) {
- bonus=bonus10+(i-1000000)*0.01;
- }
- printf("提成为:bonus=%lf",bonus);
-
- printf("\n");
- }
输出结果:
- 你的净利润是:
- 120000
- 提成为:bonus=11500.000000
- #include <stdio.h>
-
- #define WAN 10000
-
- int main()
- {
- double I = 0; // 利润
- double B = 0; // 奖金
-
- scanf("%lf", &I);
- I /= WAN;
-
- if (I > 100 * WAN)
- {
- B += ((I - 100) * 0.01);
- I = 100;
- }
-
- if (I > 60)
- {
- B += ((I - 60) * 0.015);
- I = 60;
- }
- if (I > 40)
- {
- B += ((I - 40) * 0.03);
- I = 40;
- }
-
- if (I > 20)
- {
- B += ((I - 20) * 0.05);
- I = 20;
- }
-
- if (I > 10)
- {
- B += ((I - 10) * 0.075);
- I = 10;
- }
-
- B += (I * 0.1);
-
- printf("%lf", B);
- }
- #include<stdio.h>
- int main()
- {
- int i;
- double lirun;
- double jiangjin = 0;
- float fanwei[] = {100000, 200000, 400000, 600000, 1000000};
- float ticheng[] = {0.1, 0.075, 0.05, 0.03, 0.015, 0.01};
- printf("您好,请问您的净利润是多少?\n");
- scanf("%lf", &lirun);
- for (i=0;i<5;i++)
- {
- if (lirun < fanwei[i])
- {
- jiangjin += lirun * ticheng[i];
- break;
- }
- else
- {
- jiangjin += fanwei[i] * ticheng[i];
- lirun -= fanwei[i];
- }
- }
- printf("奖金是%.2lf\n", jiangjin);
-
- return 0;
- }
- #include <stdio.h>
-
- int main(){
- double d;
- int money = 100000;
- float res=0.0;
- int flag;
- scanf("%lf",&d);
- flag = (int)(d/money);
- flag = flag >10?10:flag;
- switch(flag){
- case 10:
- res += (d-10*money)*0.01;
- d = 10*money;
- case 9:
- case 8:
- case 7:
- case 6:
- res += (d-6*money)*0.015;
- d = 6*money;
- case 5:
- case 4:
- res+= (d-4*money)*0.03;
- d = 4*money;
- case 3:
- case 2:
- res += (d-2*money)*0.05;
- d = 2*money;
- case 1:
- res += (d-money)*0.075;
- d = money;
- case 0:
- res += d *0.1;
- }
-
- printf("%.2f\n",res);
- return 0;
- }
程序分析:
假设该数为 x。
1、则:x + 100 = n2, x + 100 + 168 = m2
2、计算等式:m2 - n2 = (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 (void)
- {
- 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 + j) % 2 == 0 && (i - 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
程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天
- #include <stdio.h>
- int main()
- {
- int day,month,year,sum,leap;
- printf("\n请输入年、月、日,格式为:年,月,日(2015,12,10)\n");
- scanf("%d,%d,%d",&year,&month,&day); // 格式为:2015,12,10
- switch(month) // 先计算某月以前月份的总天数
- {
- case 1:sum=0;break;
- case 2:sum=31;break;
- case 3:sum=59;break;
- case 4:sum=90;break;
- case 5:sum=120;break;
- case 6:sum=151;break;
- case 7:sum=181;break;
- case 8:sum=212;break;
- case 9:sum=243;break;
- case 10:sum=273;break;
- case 11:sum=304;break;
- case 12:sum=334;break;
- default:printf("data error");break;
- }
- sum=sum+day; // 再加上某天的天数
- if(year%400==0||(year%4==0&&year%100!=0)) {// 判断是不是闰年
- leap=1;
- } else {
- leap=0;
- }
- if(leap==1&&month>2) { // *如果是闰年且月份大于2,总天数应该加一天
- sum++;
- }
- printf("这是这一年的第 %d 天。",sum);
- printf("\n");
- }
输出结果:
- 请输入年、月、日,格式为:年,月,日(2015,12,10)
- 2015,10,1
- 这是这一年的第 274 天。
程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include <stdio.h>
-
- int main()
- {
- int x,y,z,t;
- printf("\n请输入三个数字:\n");
- scanf("%d%d%d",&x,&y,&z);
- if (x>y) { /*交换x,y的值*/
- t=x;x=y;y=t;
- }
- if(x>z) { /*交换x,z的值*/
- t=z;z=x;x=t;
- }
- if(y>z) { /*交换z,y的值*/
- t=y;y=z;z=t;
- }
- printf("从小到大排序: %d %d %d\n",x,y,z);
- }
输出结果:
- 请输入三个数字:
- 1
- 3
- 2
- 从小到大排序: 1 2 3
程序分析:可先用'*'号在纸上写出字母C,再分行输出
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include "stdio.h"
- int main()
- {
- printf("用 * 号输出字母 C!\n");
- printf(" ****\n");
- printf(" *\n");
- printf(" * \n");
- printf(" ****\n");
- }
输出结果:
- 用 * 号输出字母 C!
- ****
- *
- *
- ****
程序分析:字符共有256个。不同字符,图形不一样。
VC6.0下出现中文乱码(原因+解决方法):
176的16进制是B0,219的16进制是DB,0xB0DB是"佰"字的内码,所以输出的就是"佰"了。
主要原因是文件信息的代码页不同,我们所使用的操作系统中文状态下的代码页,要显示扩展的ASCII码需要在437 OEM-美国这个下面显示,这样就可以显示出你所希望的。具体修改控制台的默认代码页步骤如下:
- 1.点击运行界面左上角标题栏图标【c:\】,选择默认值一项
- 2.修改默认代码页,936(ANSI/OEM-简体中文GBK)为437 OEM-美国
- 3、关闭后重新运行一下即可
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include<stdio.h>
- int main()
- {
- char a=176,b=219;
- printf("%c%c%c%c%c\n",b,a,a,a,b);
- printf("%c%c%c%c%c\n",a,b,a,b,a);
- printf("%c%c%c%c%c\n",a,a,b,a,a);
- printf("%c%c%c%c%c\n",a,b,a,b,a);
- printf("%c%c%c%c%c\n",b,a,a,a,b);
- return 0;
- }
输出结果:
程序分析:分行与列考虑,共 9 行 9 列,i 控制行,j 控制列
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include<stdio.h>
- int main()
- {
- int i,j,result;
- printf("\n");
- for (i=1;i<10;i++)
- {
- for(j=1;j<=i;j++)
- {
- result=i*j;
- printf("%d*%d=%-3d",i,j,result); /*-3d表示左对齐,占3位*/
- }
- printf("\n"); /*每一行后换行*/
- }
- }
输出结果:
- 1*1=1
- 2*1=2 2*2=4
- 3*1=3 3*2=6 3*3=9
- 4*1=4 4*2=8 4*3=12 4*4=16
- 5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
- 6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
- 7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
- 8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
- 9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
程序分析:国际象棋棋盘由64个黑白相间的格子组成,分为8行*8列。用i控制行,j来控制列,根据i+j的和的变化来控制输出黑方格,还是白方格
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include<stdio.h>
-
- int main()
- {
- int i,j;
- for(i=0;i<8;i++)
- {
- for(j=0;j<8;j++)
- if((i+j)%2==0)
- printf("%c%c",219,219);
- else printf(" ");
- printf("\n");
- }
- return 0;
- }
输出结果:
程序分析:用 ASCII 1 来输出笑脸;用i控制行,j来控制列,j根据i的变化来控制输出黑方格的个数
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include<stdio.h>
-
- int main()
- {
- int i,j;
- printf("\1\1\n"); /*输出两个笑脸*/
- for(i=1;i<11;i++)
- {
- for(j=1;j<=i;j++)
- printf("%c%c",219,219);
- printf("\n");
- }
- return 0;
- }
输出结果:
题目:古典问题(兔子生崽):有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?(输出前40个月即可)
程序分析:兔子的规律为数列1,1,2,3,5,8,13,21....,即下个月是上两个月之和(从第三个月开始)。
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include<stdio.h>
-
- int main()
- {
- int f1=1,f2=1,i;
- for(i=1;i<=20;i++)
- {
- printf("%12d%12d",f1,f2);
- if(i%2==0) printf("\n");
- f1=f1+f2;
- f2=f1+f2;
- }
-
- 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
- 75025 121393 196418 317811
- 514229 832040 1346269 2178309
- 3524578 5702887 9227465 14930352
- 24157817 39088169 63245986 102334155
程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include <stdio.h>
-
- int main()
- {
- int i,j;
- int count=0;
-
- for (i=101; i<=200; i++)
- {
- for (j=2; j<i; j++)
- {
- // 如果j能被i整出在跳出循环
- if (i%j==0)
- break;
- }
- // 判断循环是否提前跳出,如果j<i说明在2~j之间,i有可整出的数
- if (j>=i)
- {
- count++;
- printf("%d ",i);
- // 换行,用count计数,每五个数换行
- if (count % 5 == 0)
- printf("\n");
- }
- }
- return 0;
- }
输出结果:
- 101 103 107 109 113
- 127 131 137 139 149
- 151 157 163 167 173
- 179 181 191 193 197
- 199
- C 语言经典100例 C 语言经典100例
题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数 本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include<stdio.h>
-
- int main()
- {
- int i,x,y,z;
- for(i=100;i<1000;i++)
- {
- x=i%10;
- y=i/10%10;
- z=i/100%10;
-
- if(i==(x*x*x+y*y*y+z*z*z))
- printf("%d\n",i);
-
- }
- return 0;
- }
输出结果:
- 153
- 370
- 371
- 407
题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
- (1)如果这个质数恰等于(小于的时候,继续执行循环)n,则说明分解质因数的过程已经结束,另外 打印出即可。
- (2)但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n.重复执行第二步。
- (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include<stdio.h>
- int main()
- {
- int n,i;
- printf("请输入整数:");
- scanf("%d",&n);
- printf("%d=",n);
- for(i=2;i<=n;i++)
- {
- while(n%i==0)
- {
- printf("%d",i);
- n/=i;
- if(n!=1) printf("*");
- }
- }
-
- printf("\n");
- return 0;
- }
输出结果:
- 请输入整数:90
- 90=2*3*3*5
程序分析:(a>b)?a:b这是条件运算符的基本例子。
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include<stdio.h>
- int main()
- {
- int score;
- char grade;
- printf("请输入分数: ");
- scanf("%d",&score);
- grade=(score>=90)?'A':((score>=60)?'B':'C');
- printf("%c\n",grade);
- return 0;
- }
输出结果:
- 请输入分数: 87
- B
题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
程序分析:
(1)最小公倍数=输入的两个数之积除于它们的最大公约数,关键是求出最大公约数;
(2)求最大公约数用辗转相除法(又名欧几里德算法)
1)证明:设c是a和b的最大公约数,记为c=gcd(a,b),a>=b,
令r=a mod b
设a=kc,b=jc,则k,j互素,否则c不是最大公约数
据上,r=a-mb=kc-mjc=(k-mj)c
可知r也是c的倍数,且k-mj与j互素,否则与前述k,j互素矛盾,
由此可知,b与r的最大公约数也是c,即gcd(a,b)=gcd(b,a mod b),得证。2)算法描述:
第一步:a ÷ b,令r为所得余数(0≤r 第二步:互换:置 a←b,b←r,并返回第一步。
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include<stdio.h>
- int main()
- {
- int a,b,t,r,n;
- printf("请输入两个数字:\n");
- scanf("%d %d",&a,&b);
- if(a<b)
- {t=b;b=a;a=t;}
- r=a%b;
- n=a*b;
- while(r!=0)
- {
- a=b;
- b=r;
- r=a%b;
- }
- printf("这两个数的最大公约数是%d,最小公倍数是%d\n",b,n/b);
-
- return 0;
- }
输出结果:
- 请输入两个数字:
- 12 26
- 这两个数的最大公约数是2,最小公倍数是156
程序分析:利用while语句,条件为输入的字符不为'\n'。
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include<stdio.h>
- int main()
- {
- char c;
- int letters=0,spaces=0,digits=0,others=0;
- printf("请输入一些字母:\n");
- while((c=getchar())!='\n')
- {
- if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
- letters++;
- else if(c>='0'&&c<='9')
- digits++;
- else if(c==' ')
- spaces++;
- else
- others++;
- }
- printf("字母=%d,数字=%d,空格=%d,其他=%d\n",letters,digits,spaces,others);
- return 0;
- }
输出结果:
- 请输入一些字母:
- www.runoob.com 123
- 字母=12,数字=3,空格=1,其他=2
题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
程序分析:关键是计算出每一项的值。
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include<stdio.h>
- int main()
- {
- int s=0,a,n,t;
- printf("请输入 a 和 n:\n");
- scanf("%d%d",&a,&n);
- t=a;
- while(n>0)
- {
- s+=t;
- a=a*10;
- t+=a;
- n--;
- }
- printf("a+aa+...=%d\n",s);
- return 0;
- }
输出结果:
- 请输入 a 和 n:
- 2 5
- a+aa+...=24690
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include<stdio.h>
- #define N 1000
- int main()
- {
- int i,j,k,n,sum;
- int a[256];
- for(i=2;i<=N;i++)
- {
- sum=a[0]=1;
- k=0;
- for(j=2;j<=(i/2);j++)
- {
- if(i%j==0)
- {
- sum+=j;
- a[++k]=j;
- }
-
- }
- if(i==sum)
- {
- printf("%d=%d",i,a[0]);
- for(n=1;n<=k;n++)
- printf("+%d",a[n]);
- printf("\n");
- }
-
- }
- return 0;
- }
输出结果:
- 6=1+2+3
- 28=1+2+4+7+14
- 496=1+2+4+8+16+31+62+124+248
题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
程序分析:见下面注释。
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include<stdio.h>
- int main()
- {
- float h,s;
- h=s=100;
- h=h/2; //第一次反弹高度
- for(int i=2;i<=10;i++)
- {
- s=s+2*h;
- h=h/2;
- }
- printf("第10次落地时,共经过%f米,第10次反弹高%f米\n",s,h);
- return 0;
- }
输出结果:
第10次落地时,共经过299.609375米,第10次反弹高0.097656米
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下 的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
程序分析:采取逆向思维的方法,从后往前推断。
1) 设x1为前一天桃子数,设x2为第二天桃子数, 则:
x2=x1/2-1, x1=(x2+1)*2
x3=x2/2-1, x2=(x3+1)*2
以此类推: x前=(x后+1)*2
2) 从第10天可以类推到第1天,是一个循环过程。
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include <stdio.h>
- #include <stdlib.h>
- int main(){
- int day, x1 = 0, x2;
- day=9;
- x2=1;
- while(day>0) {
- x1=(x2+1)*2; // 第一天的桃子数是第2天桃子数加1后的2倍
- x2=x1;
- day--;
- }
- printf("总数为 %d\n",x1);
-
- return 0;
- }
输出结果:
总数为 1534
题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include <stdio.h>
- #include <stdlib.h>
-
- int main()
- {
- char i,j,k;
- for(i='x';i<='z';i++) {
- for(j='x';j<='z';j++) {
- if(i!=j) {
- for(k='x';k<='z';k++) {
- if(i!=k&&j!=k) {
- if(i!='x'&&k!='x'&&k!='z') {
- printf("顺序为:a--%c\tb--%c\tc--%c\n",i,j,k);
- }
- }
- }
- }
- }
- }
- }
输出结果:
顺序为:a--z b--x c--y
程序分析:
先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重for循环,第一层控制行,第二层控制列。
* *** ***** ******* ***** *** *
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include <stdio.h>
- int main()
- {
- int i,j,k;
- for(i=0;i<=3;i++) {
- for(j=0;j<=2-i;j++) {
- printf(" ");
- }
- for(k=0;k<=2*i;k++) {
- printf("*");
- }
- printf("\n");
- }
- for(i=0;i<=2;i++) {
- for(j=0;j<=i;j++) {
- printf(" ");
- }
- for(k=0;k<=4-2*i;k++) {
- printf("*");
- }
- printf("\n");
- }
-
- }
输出结果:
- *
- ***
- *****
- *******
- *****
- ***
- *
程序分析:请抓住分子与分母的变化规律。
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include <stdio.h>
-
- int main()
- {
- int i,t;
- float sum=0;
- float a=2,b=1;
- for(i=1;i<=20;i++)
- {
- sum=sum+a/b;
- t=a;
- a=a+b;
- b=t;
- }
- printf("%9.6f\n",sum);
- }
输出结果:
32.660263
程序分析:此程序只是把累加变成了累乘。
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include <stdio.h>
-
- int main()
- {
- int i;
- long double sum,mix;
- sum=0,mix=1;
- for(i=1;i<=20;i++)
- {
- mix=mix*i;
- sum=sum+mix;
- }
- printf("%Lf\n",sum);
- }
输出结果:
2561327494111820313.000000
程序分析:递归公式:fn=fn_1*4!
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include <stdio.h>
-
- int main()
- {
- int i;
- int fact(int);
- for(i=0;i<6;i++){
- printf("%d!=%d\n",i,fact(i));
- }
- }
- int fact(int j)
- {
- int sum;
- if(j==0){
- sum=1;
- } else {
- sum=j*fact(j-1);
- }
- return sum;
- }
输出结果:
- 0!=1
- 1!=1
- 2!=2
- 3!=6
- 4!=24
- 5!=120
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include <stdio.h>
-
- int main()
- {
- int i=5;
- void palin(int n);
- printf("请输入5个字符\40:\40");
- palin(i);
- printf("\n");
- }
- void palin(n)
- int n;
- {
- char next;
- if(n<=1) {
- next=getchar();
- printf("相反顺序输出结果\40:\40");
- putchar(next);
- } else {
- next=getchar();
- palin(n-1);
- putchar(next);
- }
- }
输出结果:
- 请输入5个字符 : abcde
- 相反顺序输出结果 : edcba
题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include <stdio.h>
-
- int age(n)
- int n;
- {
- int c;
- if(n==1) c=10;
- else c=age(n-1)+2;
- return(c);
- }
- int main()
- {
- printf("%d\n",age(5));
- }
输出结果:
18
程序分析:学会分解出每一位数,如下解释。
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include <stdio.h>
-
- int main( )
- {
- long a,b,c,d,e,x;
- printf("请输入 5 位数字:");
- scanf("%ld",&x);
- a=x/10000; /*分解出万位*/
- b=x%10000/1000; /*分解出千位*/
- c=x%1000/100; /*分解出百位*/
- d=x%100/10; /*分解出十位*/
- e=x%10; /*分解出个位*/
- if (a!=0){
- printf("为 5 位数,逆序为: %ld %ld %ld %ld %ld\n",e,d,c,b,a);
- } else if(b!=0) {
- printf("为 4 位数,逆序为: %ld %ld %ld %ld\n",e,d,c,b);
- } else if(c!=0) {
- printf("为 3 位数,逆序为:%ld %ld %ld\n",e,d,c);
- } else if(d!=0) {
- printf("为 2 位数,逆序为: %ld %ld\n",e,d);
- } else if(e!=0) {
- printf("为 1 位数,逆序为:%ld\n",e);
- }
- }
输出结果:
- 请输入 5 位数字:12345
- 为 5 位数,逆序为: 5 4 3 2 1
题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
程序分析:学会分解出每一位数。
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include <stdio.h>
-
- int main( )
- {
- long ge,shi,qian,wan,x;
- printf("请输入 5 位数字:");
- scanf("%ld",&x);
- wan=x/10000; /*分解出万位*/
- qian=x%10000/1000; /*分解出千位*/
- shi=x%100/10; /*分解出十位*/
- ge=x%10; /*分解出个位*/
- if (ge==wan&&shi==qian) { /*个位等于万位并且十位等于千位*/
- printf("这是回文数\n");
- } else {
- printf("这不是回文数\n");
- }
- }
输出结果:
- 请输入 5 位数字:12321
- 这是回文数
-
- 请输入 5 位数字:12345
- 这不是回文数
程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include<stdio.h>
-
- int main()
- {
- char i,j;
- printf("请输入第一个字母:\n");
- scanf("%c",&i);
- getchar();//scanf("%c",&j);的问题,第二次是读入的一个换行符,而不是输入的字符,因此需要加一个getchar() 吃掉换行符
- switch(i)
- {
- case 'm':
- printf("monday\n");
- break;
- case 'w':
- printf("wednesday\n");
- break;
- case 'f':
- printf("friday\n");
- break;
- case 't':
- printf("请输入下一个字母\n");
- scanf("%c",&j);
- if (j=='u') {printf("tuesday\n");break;}
- if (j=='h') {printf("thursday\n");break;}
- case 's':
- printf("请输入下一个字母\n");
- scanf("%c",&j);
- if (j=='a') {printf("saturday\n");break;}
- if (j=='u') {printf("sunday\n"); break;}
- default :
- printf("error\n"); break;
- }
- return 0;
- }
输出结果:
- 请输入第一个字母:
- s
- 请输入下一个字母
- a
- saturday
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
-
- // 删除字符串中指定字母函数
- char* deleteCharacters(char * str, char * charSet)
- {
- int hash [256];
- if(NULL == charSet)
- return str;
- for(int i = 0; i < 256; i++)
- hash[i] = 0;
- for(int i = 0; i < strlen(charSet); i++)
- hash[charSet[i]] = 1;
- int currentIndex = 0;
- for(int i = 0; i < strlen(str); i++)
- {
- if(!hash[str[i]])
- str[currentIndex++] = str[i];
- }
- str[currentIndex] = '\0';
- return str;
- }
-
- int main()
- {
- char s[2] = "a"; // 要删除的字母
- char s2[5] = "aca"; // 目标字符串
- printf("%s\n", deleteCharacters(s2, s));
- return 0;
- }
输出结果:
c
程序分析:质数(prime number)又称素数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数整除。
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include<stdio.h>
- #include<math.h>
- #define MAX 1000
-
-
- int prime[MAX];
-
- int isPrimeNaive(int n)
- {
- if(n <= 1)
- return 0;
- for(int i = 2; i < n; i++)
- if(n % i == 0)
- return 0;
- return 1;
- }
-
- int isPrime(int n)
- {
- if(n<= 1)
- return 0;
- if(n == 2)
- return 1;
- if(n%2 == 0)
- return 0;
- int limit = (int)sqrt((double)n);
- for(int i = 3; i <= limit; i=i+2)
- {
- if(n % i == 0)
- return 0;
- }
- return 1;
- }
-
- void sieve()
- {
- prime[0] = 0;
- prime[1] = 0;
- for(int i = 2; i < MAX; i++)
- prime[i] = 1;
- int limit = (int)sqrt((double)MAX);
- for(int i = 2; i <= limit; i++)
- {
- if(prime[i])
- for(int j = i*i; j <= MAX; j+=i)
- prime[j] = 0;
- }
- }
-
- int isPrimeSieve(int n)
- {
- if(prime[n])
- return 1;
- else
- return 0;
- }
-
- int main()
- {
- sieve();
- printf("N=%d %d\n", 1, isPrime(1));
- printf("N=%d %d\n", 2, isPrime(2));
- printf("N=%d %d\n", 3, isPrime(3));
- printf("N=%d %d\n", 4, isPrime(4));
- printf("N=%d %d\n", 7, isPrime(7));
- printf("N=%d %d\n", 9, isPrime(9));
- printf("N=%d %d\n", 13, isPrime(13));
- printf("N=%d %d\n", 17, isPrime(17));
- printf("N=%d %d\n", 100, isPrime(100));
- printf("N=%d %d\n", 23, isPrime(23));
- printf("N=%d %d\n", 1, isPrime(1));
- return 0;
- }
输出结果:
- N=1 0
- N=2 1
- N=3 1
- N=4 0
- N=7 1
- N=9 0
- N=13 1
- N=17 1
- N=100 0
- N=23 1
- N=1 0
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include <stdio.h>
- void hello_world(void)
- {
- printf("Hello, world!\n");
- }
- void three_hellos(void)
- {
- int counter;
- for (counter = 1; counter <= 3; counter++)
- hello_world();/*调用此函数*/
- }
- int main(void)
- {
- three_hellos();/*调用此函数*/
- }
输出结果:
- Hello, world!
- Hello, world!
- Hello, world!
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include <stdio.h>
-
-
- void reverse(char* s)
- {
- // 获取字符串长度
- int len = 0;
- char* p = s;
- while (*p != 0)
- {
- len++;
- p++;
- }
-
- // 交换 ...
- int i = 0;
- char c;
- while (i <= len / 2 - 1)
- {
- c = *(s + i);
- *(s + i) = *(s + len - 1 - i);
- *(s + len - 1 - i) = c;
- i++;
- }
- }
-
- int main()
- {
- char s[] = "www.runoob.com";
- printf("'%s' =>\n", s);
- reverse(s); // 反转字符串
- printf("'%s'\n", s);
- return 0;
- }
输出结果:
- 'www.runoob.com' =>
- 'moc.boonur.www'
题目:求100之内的素数。
程序分析:质数(prime number)又称素数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数整除。
输出结果:
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include<stdio.h>
- #include<math.h>
- int main()
- {
- int i,j,k,n=0;
- for(i=2;i<=100;i++)
- {
- k=(int)sqrt(i);
- for(j=2;j<=k;j++)
- if(i%j==0) break;
- if(j>k)
- {
- printf("%d ",i);
- n++;
- if(n%5==0)
- printf("\n");
- }
- }
- return 0;
- }
输出结果:
- 2 3 5 7 11
- 13 17 19 23 29
- 31 37 41 43 47
- 53 59 61 67 71
- 73 79 83 89 97
程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换, 下次类推,即用第二个元素与后8个进行比较,并进行交换
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include<stdio.h>
- #define N 10
- int main()
- {
- int i,j,a[N],temp;
- printf("请输入 10 个数字:\n");
- for(i=0;i<N;i++)
- scanf("%d",&a[i]);
- for(i=0;i<N-1;i++)
- {
- int min=i;
- for(j=i+1;j<N;j++)
- if(a[min]>a[j]) min=j;
- if(min!=i)
- {
- temp=a[min];
- a[min]=a[i];
- a[i]=temp;
- }
- }
- printf("排序结果是:\n");
- for(i=0;i<N;i++)
- printf("%d ",a[i]);
- printf("\n");
- return 0;
- }
输出结果:
- 请输入 10 个数字:
- 23 2 27 98 234 1 4 90 88 34
- 排序结果是:
- 1 2 4 23 27 34 88 90 98 234
程序分析:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include<stdio.h>
- #define N 3
- int main()
- {
- int i,j,a[N][N],sum=0;
- printf("请输入矩阵(3*3):\n");
- for(i=0;i<N;i++)
- for(j=0;j<N;j++)
- scanf("%d",&a[i][j]);
- for(i=0;i<N;i++)
- sum+=a[i][i];
- printf("对角线之和为:%d\n",sum);
- return 0;
- }
输出结果:
- 请输入矩阵(3*3):
- 1 2 3
- 4 5 6
- 7 8 9
- 对角线之和为:15
程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include<stdio.h>
- int main()
- {
- int a[11]={1,4,6,9,13,16,19,28,40,100};
- int temp1,temp2,number,end,i,j;
- printf("原始数组是:\n");
- for(i=0;i<10;i++)
- printf("%4d",a[i]);
- printf("\n插入一个新的数字: ");
- scanf("%d",&number);
- end=a[9];
- if(number>end)
- a[10]=number;
- else
- {
- for(i=0;i<10;i++)
- {
- if(a[i]>number)
- {
- temp1=a[i];
- a[i]=number;
- for(j=i+1;j<11;j++)
- {
- temp2=a[j];
- a[j]=temp1;
- temp1=temp2;
- }
- break;
- }
- }
- }
- for(i=0;i<11;i++)
- printf("%4d",a[i]);
- printf("\n");
- return 0;
- }
输出结果:
- 原始数组是:
- 1 4 6 9 13 16 19 28 40 100
- 插入一个新的数字: 10
- 1 4 6 9 10 13 16 19 28 40 100
程序分析:用第一个与最后一个交换。
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include<stdio.h>
- #define N 10
- int main()
- {
- int a[N]={0,1,2,3,4,5,6,7,8,9};
- int i,t;
- printf("原始数组是:\n");
- for(i=0;i<N;i++)
- printf("%d ",a[i]);
- for(i=0;i<N/2;i++)
- {
- t=a[i];
- a[i]=a[N-1-i];
- a[N-1-i]=t;
- }
- printf("\n排序后的数组:\n");
- for(i=0;i<N;i++)
- printf("%d ",a[i]);
- printf("\n");
- return 0;
- }
输出结果:
- 原始数组是:
- 0 1 2 3 4 5 6 7 8 9
- 排序后的数组:
- 9 8 7 6 5 4 3 2 1 0
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #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
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #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
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #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
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #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
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #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
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #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
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #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
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #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
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include<stdio.h>
- #define MAX
- #define MAXIMUM(x,y)(x>y)?x:y
- #define MINIMUM(x,y) (x>y)?y:x
- int main()
- {
- int a=10,b=20;
- #ifdef MAX
- printf("更大的数字是 %d\n",MAXIMUM(a,b));
- #else
- printf("更小的数字是 %d\n",MINIMUM(a,b));
- #endif
- #ifndef MIN
- printf("更小的数字是 %d\n",MINIMUM(a,b));
- #else
- printf("更大的数字是 %d\n",MAXIMUM(a,b));
- #endif
- #undef MAX
- #ifdef MAX
- printf("更大的数字是 %d\n",MAXIMUM(a,b));
- #else
- printf("更小的数字是 %d\n",MINIMUM(a,b));
- #endif
- #define MIN
- #ifndef MIN
- printf("更小的数字是 %d\n",MINIMUM(a,b));
- #else
- printf("更大的数字是 %d\n",MAXIMUM(a,b));
- #endif
- return 0;
- }
输出结果:
- 更大的数字是 20
- 更小的数字是 10
- 更小的数字是 10
- 更大的数字是 20
test.h 文件代码如下:
#define LAG > #define SMA < #define EQ ==
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include "test.h"
- #include <stdio.h>
-
- int main()
- {
- int i=10;
- int j=20;
- 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;
- }
输出结果:
10 小于 20
程序分析:0&0=0; 0&1=0; 1&0=0; 1&1=1 。
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #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
程序分析:0|0=0; 0|1=1; 1|0=1; 1|1=1 。
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #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
程序分析:0^0=0; 0^1=1; 1^0=1; 1^1=0 。
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #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
程序分析:可以这样考虑:
(1)先使 a 右移 4 位。
(2)设置一个低 4 位全为 1,其余全为 0 的数,可用~(~0<<4)
(3)将上面二者进行 & 运算。
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include <stdio.h>
- int main()
- {
- unsigned a,b,c,d;
- printf("请输入整数:\n");
- scanf("%o",&a);
- b=a>>4;
- c=~(~0<<4);
- d=b&c;
- printf("%o\n%o\n",a,d);
- return 0;
- }
输出结果:
- 请输入整数:
- 36
- 36
- 1
程序分析:~0=1; ~1=0;
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #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
- #include <graphics.h> //VC6.0中是不能运行的,要在Turbo2.0/3.0中
- int main()
- {
- int driver,mode,i;
- float j=1,k=1;
- driver=VGA;
- mode=VGAHI;
- initgraph(&driver,&mode,"");
- setbkcolor(YELLOW);
- for(i=0;i<=25;i++)
- {
- setcolor(8);
- circle(310,250,k);
- k=k+j;
- j=j+0.3;
- }
- return 0;
- }
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include "graphics.h"
- int main()
- {
- int driver,mode,i;
- float x0,y0,y1,x1;
- float j=12,k;
- driver=VGA;mode=VGAHI;
- initgraph(&driver,&mode,"");
- setbkcolor(GREEN);
- x0=263;y0=263;y1=275;x1=275;
- for(i=0;i<=18;i++)
- {
- setcolor(5);
- line(x0,y0,x0,y1);
- x0=x0-5;
- y0=y0-5;
- x1=x1+5;
- y1=y1+5;
- j=j+10;
- }
- }
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include "graphics.h"
- int main()
- {
- int x0,y0,y1,x1,driver,mode,i;
- driver=VGA;mode=VGAHI;
- initgraph(&driver,&mode,"");
- setbkcolor(YELLOW);
- x0=263;y0=263;y1=275;x1=275;
- for(i=0;i<=18;i++)
- {
- setcolor(1);
- rectangle(x0,y0,x1,y1);
- x0=x0-5;
- y0=y0-5;
- x1=x1+5;
- y1=y1+5;
- }
- settextstyle(DEFAULT_FONT,HORIZ_DIR,2);
- outtextxy(150,40,"How beautiful it is!");
- line(130,60,480,60);
- setcolor(2);
- circle(269,269,137);
- }
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- # define PAI 3.1415926
- # define B 0.809
- # include "graphics.h"
- #include "math.h"
- int main()
- {
- int i,j,k,x0,y0,x,y,driver,mode;
- float a;
- driver=CGA;mode=CGAC0;
- initgraph(&driver,&mode,"");
- setcolor(3);
- setbkcolor(GREEN);
- x0=150;y0=100;
- circle(x0,y0,10);
- circle(x0,y0,20);
- circle(x0,y0,50);
- for(i=0;i<16;i++)
- {
- a=(2*PAI/16)*i;
- x=ceil(x0+48*cos(a));
- y=ceil(y0+48*sin(a)*B);
- setcolor(2); line(x0,y0,x,y);
- }
- setcolor(3);circle(x0,y0,60);
- /* Make 0 time normal size letters */
- settextstyle(DEFAULT_FONT,HORIZ_DIR,0);
- outtextxy(10,170,"press a key");
- getch();
- setfillstyle(HATCH_FILL,YELLOW);
- floodfill(202,100,WHITE);
- getch();
- for(k=0;k<=500;k++)
- {
- setcolor(3);
- for(i=0;i<=16;i++)
- {
- a=(2*PAI/16)*i+(2*PAI/180)*k;
- x=ceil(x0+48*cos(a));
- y=ceil(y0+48+sin(a)*B);
- setcolor(2); line(x0,y0,x,y);
- }
- for(j=1;j<=50;j++)
- {
- a=(2*PAI/16)*i+(2*PAI/180)*k-1;
- x=ceil(x0+48*cos(a));
- y=ceil(y0+48*sin(a)*B);
- line(x0,y0,x,y);
- }
- }
- restorecrtmode();
- }
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include "graphics.h"
- #define LEFT 0
- #define TOP 0
- #define RIGHT 639
- #define BOTTOM 479
- #define LINES 400
- #define MAXCOLOR 15
- int main()
- {
- int driver,mode,error;
- int x1,y1;
- int x2,y2;
- int dx1,dy1,dx2,dy2,i=1;
- int count=0;
- int color=0;
- driver=VGA;
- mode=VGAHI;
- initgraph(&driver,&mode,"");
- x1=x2=y1=y2=10;
- dx1=dy1=2;
- dx2=dy2=3;
- while(!kbhit())
- {
- line(x1,y1,x2,y2);
- x1+=dx1;y1+=dy1;
- x2+=dx2;y2+dy2;
- if(x1<=LEFT||x1>=RIGHT)
- dx1=-dx1;
- if(y1<=TOP||y1>=BOTTOM)
- dy1=-dy1;
- if(x2<=LEFT||x2>=RIGHT)
- dx2=-dx2;
- if(y2<=TOP||y2>=BOTTOM)
- dy2=-dy2;
- if(++count>LINES)
- {
- setcolor(color);
- color=(color>=MAXCOLOR)?0:++color;
- }
- }
- closegraph();
- }
题目:打印出杨辉三角形(要求打印出10行)。
程序分析:
结构如下所示:
1 1 1 1 2 1 1 3 3 1 1 4 6 4 1
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include <stdio.h>
-
- int main()
- {
- int i,j;
- int a[10][10];
- printf("\n");
- for(i=0;i<10;i++) {
- a[i][0]=1;
- a[i][i]=1;
- }
- for(i=2;i<10;i++)
- for(j=1;j<i;j++)
- a[i][j]=a[i-1][j-1]+a[i-1][j];
- for(i=0;i<10;i++) {
- for(j=0;j<=i;j++)
- printf("%5d",a[i][j]);
- printf("\n");
- }
- }
输出结果:
- 1
- 1 1
- 1 2 1
- 1 3 3 1
- 1 4 6 4 1
- 1 5 10 10 5 1
- 1 6 15 20 15 6 1
- 1 7 21 35 35 21 7 1
- 1 8 28 56 70 56 28 8 1
- 1 9 36 84 126 126 84 36 9 1
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include "stdio.h"
- #include "graphics.h"
- int main()
- {
- int i,j,driver=VGA,mode=VGAHI;
- initgraph(&driver,&mode,"");
- setbkcolor(YELLOW);
- for(i=50;i<=230;i+=20)
- for(j=50;j<=230;j++)
- putpixel(i,j,1);
- for(j=50;j<=230;j+=20)
- for(i=50;i<=230;i++)
- putpixel(i,j,1);
- }
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include "stdio.h"
- #include "graphics.h"
- #include "conio.h"
- int main()
- {
- int x=360,y=160,driver=VGA,mode=VGAHI;
- int num=20,i;
- int top,bottom;
- initgraph(&driver,&mode,"");
- top=y-30;
- bottom=y-30;
- for(i=0;i<num;i++)
- {
- ellipse(250,250,0,360,top,bottom);
- top-=5;
- bottom+=5;
- }
- getch();
- }
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include "stdio.h"
- #include "graphics.h"
- #include "conio.h"
- main()
- {
- int driver=VGA,mode=VGAHI;
- int i,num=15,top=50;
- int left=20,right=50;
- initgraph(&driver,&mode,"");
- for(i=0;i<num;i++)
- {
- ellipse(250,250,0,360,right,left);
- ellipse(250,250,0,360,20,top);
- rectangle(20-2*i,20-2*i,10*(i+2),10*(i+2));
- right+=5;
- left+=5;
- top+=10;
- }
- getch();
- }
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include "graphics.h"
- #include "math.h"
- #include "dos.h"
- #include "conio.h"
- #include "stdlib.h"
- #include "stdio.h"
- #include "stdarg.h"
- #define MAXPTS 15
- #define PI 3.1415926
- struct PTS {
- int x,y;
- };
- double AspectRatio=0.85;
- void LineToDemo(void)
- {
- struct viewporttype vp;
- struct PTS points[MAXPTS];
- int i, j, h, w, xcenter, ycenter;
- int radius, angle, step;
- double rads;
- printf(" MoveTo / LineTo Demonstration" );
- getviewsettings( &vp );
- h = vp.bottom - vp.top;
- w = vp.right - vp.left;
- xcenter = w / 2; /* Determine the center of circle */
- ycenter = h / 2;
- radius = (h - 30) / (AspectRatio * 2);
- step = 360 / MAXPTS; /* Determine # of increments */
- angle = 0; /* Begin at zero degrees */
- for( i=0 ; i<MAXPTS ; ++i ){ /* Determine circle intercepts */
- rads = (double)angle * PI / 180.0; /* Convert angle to radians */
- points[i].x = xcenter + (int)( cos(rads) * radius );
- points[i].y = ycenter - (int)( sin(rads) * radius * AspectRatio );
- angle += step; /* Move to next increment */
- }
- circle( xcenter, ycenter, radius ); /* Draw bounding circle */
- for( i=0 ; i<MAXPTS ; ++i ){ /* Draw the cords to the circle */
- for( j=i ; j<MAXPTS ; ++j ){ /* For each remaining intersect */
- moveto(points[i].x, points[i].y); /* Move to beginning of cord */
- lineto(points[j].x, points[j].y); /* Draw the cord */
- }
- }
- }
- int main()
- {
- int driver,mode;
- driver=CGA;mode=CGAC0;
- initgraph(&driver,&mode,"");
- setcolor(3);
- setbkcolor(GREEN);
- LineToDemo();
- }
程序分析:利用指针方法。
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- # include<stdio.h>
-
- void swap(int *, int *);
- int main(void)
- {
- int a, b, c;
- int *p1, *p2, *p3;
- printf("输入 a, b ,c:\n");
- scanf("%d %d %d", &a, &b, &c);
- p1 = &a;
- p2 = &b;
- p3 = &c;
- if(a>b)
- swap(p1, p2);
- if(a>c)
- swap(p1, p3);
- if(b>c)
- swap(p2, p3);
- printf("%d %d %d\n", a, b, c);
- }
- void swap(int *s1, int *s2)
- {
- int t;
- t = *s1; *s1 = *s2; *s2 = t;
- }
输出结果:
- 输入 a, b ,c:
- 1 3 2
- 1 2 3
- #include<stdio.h>
- #include<stdlib.h>
-
- void fun(int *s,int n)
- {
- int i;
- int max=s[0];
- int a=0;
- for(i=0;i<n;i++)
- {
- if(s[i]>max)
- {
- max=s[i];
- a=i;
- }
- }
- s[a]=s[0];
- s[0]=max;
- int j;
- int min=s[n-1];
- int b=n-1;
- for(j=0;j<n;j++)
- {
- if(s[j]<min)
- {
- min=s[j];
- b=j;
- }
- }
- s[b]=s[n-1];
- s[n-1]=min;
- }
-
- void printf_s(int *s,int n)
- {
- int i;
- for(i=0;i<n;i++)
- printf("%d ",s[i]);
- printf("\n");
- }
-
- int main()
- {
- int s[20];
- int i,n;
- printf("设置数组长度(<20):");
- scanf("%d",&n);
- printf("输入 %d 个元素:\n",n);
- for(i=0;i<n;i++)
- scanf("%d",&s[i]);
- fun(s,n);
- printf_s(s,n);
- return 0;
- }
输出结果:
- 设置数组长度(<20):5
- 输入 5 个元素:
- 12 123 4 65 21
- 123 12 21 65 4
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include <stdio.h>
- #include <stdlib.h>
- int main()
- {
- int arr[20];
- int i,n,offset;
- //输入数组大小和数组内容
- printf("Total numbers?\n");
- scanf("%d",&n);
- printf("Input %d numbers.\n",n);
- for(i=0;i<n;i++)
- scanf("%d",&arr[i]);
- //输入滚动偏移量
- printf("Set your offset.\n");
- scanf("%d",&offset);
- printf("Offset is %d.\n",offset);
- //打印滚动前数组
- print_arr(arr,n);
- //滚动数组并打印
- move(arr,n,offset);
- print_arr(arr,n);
- }
-
- //打印数组
- void print_arr(int array[],int n)
- {
- int i;
- for(i=0;i<n;++i)
- printf("%4d",array[i]);
- printf("\n");
- }
- //滚动数组
- void move(int array[],int n,int offset)
- {
- int *p,*arr_end;
- arr_end=array+n; //数组最后一个元素的下一个位置
- int last;
-
- //滚动直到偏移量为0
- while(offset)
- {
- last=*(arr_end-1);
- for(p=arr_end-1;p!=array;--p) //向右滚动一位
- *p=*(p-1);
- *array=last;
- --offset;
- }
- }
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include <stdio.h>
- void main()
- {
- int num[50],n,*p,j,loop,i,m,k;
- printf("请输入这一圈人的数量:\n");
- scanf("%d",&n);
- p=num;
- //开始给这些人编号
- for (j=0;j<n;j++)
- {
- *(p+j)=j+1;
- }
- i=0;//i用于计数,即让指针后移
- m=0;//m记录退出圈子的人数
- k=0;//k报数1,2,3
- while(m<n-1)//当退出的人数不大于总人数时,即留下的人数至少是一个人
- //这句不能写成m<n,因为假设有8人,当退出了6人时,此时还是进行人数退出,即m++,
- //这时是7<8,剩下的一个人自己喊1,2,3那么他也就退出了,将不会有输出
- {
- if (*(p+i)!=0)//如果这个人的头上编号不是0就开始报数加1,这里采用的方法是报数为3的人头上编号重置为0
- {
- k++;
- }
- if (k==3)
- { k=0; //报数清零,即下一个人从1开始报数
- *(p+i)=0;//将报数为3的人编号重置为0
- m++; //退出人数加1
- }
- i++; //指针后移
- if (i==n)//这句很关键,如果到了队尾,就要使指针重新指向对头
- //并且它只能放在i++后面,因为只有i++了才有可能i==n
- {
- i=0;
- }
-
-
- }
- printf("现在剩下的人是:");
- for (loop=0;loop<n;loop++)
- {
- if (num[loop]!=0)
- {
- printf("%2d号\n",num[loop]);
- }
- }
-
- }
输出结果:
- 请输入这一圈人的数量:
- 8
- 现在剩下的人是: 7号
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include <stdio.h>
- #include <stdlib.h>
- int main()
- {
- int len;
- char str[20];
- printf("请输入字符串:\n");
- scanf("%s",str);
- len=length(str);
- printf("字符串有 %d 个字符。",len);
- }
- //求字符串长度
- int length(char *s)
- {
- int i=0;
- while(*s!='\0')
- {
- i++;
- s++;
- }
- return i;
- }
输出结果:
- 请输入字符串:
- www.runoob.com
- 字符串有 14 个字符。
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include<stdio.h>
- #include<stdlib.h>
- typedef struct{
- char name[20];
- char sex[5];
- int age;
- }Stu;
- void input(Stu*stu);
- void output(Stu*stu);
- int main()
- {
- Stu stu[5];
- printf("请输入5个学生的信息:姓名 性别 年龄:\n");
- input(stu);
- printf("5个学生的信息如下:\n姓名 性别 年龄\n");
- output(stu);
-
- system("pause");
- return 0;
- }
- void input(Stu*stu)
- {
- int i;
- for(i=0;i<5;i++)
- scanf("%s%s%d",stu[i].name,stu[i].sex,&(stu[i].age));
- }
- void output(Stu*stu)
- {
- int i;
- for(i=0;i<5;i++)
- printf("%s %s %d\n",stu[i].name,stu[i].sex,stu[i].age);
- }
输出结果:
- 请输入5个学生的信息:姓名 性别 年龄:
- aaa m 15
- bbb m 16
- ccc m 15
- ddd m 17
- eee m 16
- 5个学生的信息如下:
- 姓名 性别 年龄
- aaa m 15
- bbb m 16
- ccc m 15
- ddd m 17
- eee m 16
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include<stdio.h>
- #include<stdlib.h>
- #include<malloc.h>
- typedef struct LNode{
- int data;
- struct LNode *next;
- }LNode,*LinkList;
-
- LinkList CreateList(int n);
- void print(LinkList h);
- int main()
- {
- LinkList Head=NULL;
- int n;
-
- scanf("%d",&n);
- Head=CreateList(n);
-
- printf("刚刚建立的各个链表元素的值为:\n");
- print(Head);
-
- printf("\n\n");
- system("pause");
- return 0;
- }
- LinkList CreateList(int n)
- {
- LinkList L,p,q;
- int i;
- L=(LNode*)malloc(sizeof(LNode));
- if(!L)return 0;
- L->next=NULL;
- q=L;
- for(i=1;i<=n;i++)
- {
- p=(LinkList)malloc(sizeof(LNode));
- printf("请输入第%d个元素的值:",i);
- scanf("%d",&(p->data));
- p->next=NULL;
- q->next=p;
- q=p;
- }
- return L;
- }
- void print(LinkList h)
- {
- LinkList p=h->next;
- while(p!=NULL){
- printf("%d ",p->data);
- p=p->next;
- }
- }
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include<stdio.h>
- #include<stdlib.h>
- #include<malloc.h>
- typedef struct LNode{
- int data;
- struct LNode *next;
- }LNode,*LinkList;
-
- LinkList CreateList(int n);
- void print(LinkList h);
- int main()
- {
- LinkList Head=NULL;
- int n;
-
- scanf("%d",&n);
- Head=CreateList(n);
-
- printf("刚刚建立的各个链表元素的值为:\n");
- print(Head);
-
- printf("\n\n");
- system("pause");
- return 0;
- }
- LinkList CreateList(int n)
- {
- LinkList L,p,q;
- int i;
- L=(LNode*)malloc(sizeof(LNode));
- if(!L)return 0;
- L->next=NULL;
- q=L;
- for(i=1;i<=n;i++)
- {
- p=(LinkList)malloc(sizeof(LNode));
- printf("请输入第%d个元素的值:",i);
- scanf("%d",&(p->data));
- p->next=NULL;
- q->next=p;
- q=p;
- }
- return L;
- }
- void print(LinkList h)
- {
- LinkList p=h->next;
- while(p!=NULL){
- printf("%d ",p->data);
- p=p->next;
- }
- }
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include <stdlib.h>
- #include <stdio.h>
- struct list
- {
- int data;
- struct list *next;
- };
- typedef struct list node;
- typedef node *link;
- link delete_node(link pointer,link tmp)
- {
- if (tmp==NULL) /*delete first node*/
- return pointer->next;
- else
- {
- if(tmp->next->next==NULL)/*delete last node*/
- tmp->next=NULL;
- else /*delete the other node*/
- tmp->next=tmp->next->next;
- return pointer;
- }
- }
- void selection_sort(link pointer,int num)
- {
- link tmp,btmp;
- int i,min;
- for(i=0;i<num;i++)
- {
- tmp=pointer;
- min=tmp->data;
- btmp=NULL;
- while(tmp->next)
- {
- if(min>tmp->next->data)
- {
- min=tmp->next->data;
- btmp=tmp;
- }
- tmp=tmp->next;
- }
- printf("\40: %d\n",min);
- pointer=delete_node(pointer,btmp);
- }
- }
- link create_list(int array[],int num)
- {
- link tmp1,tmp2,pointer;
- int i;
- pointer=(link)malloc(sizeof(node));
- pointer->data=array[0];
- tmp1=pointer;
- for(i=1;i<num;i++)
- {
- tmp2=(link)malloc(sizeof(node));
- tmp2->next=NULL;
- tmp2->data=array[i];
- tmp1->next=tmp2;
- tmp1=tmp1->next;
- }
- return pointer;
- }
- link concatenate(link pointer1,link pointer2)
- {
- link tmp;
- tmp=pointer1;
- while(tmp->next)
- tmp=tmp->next;
- tmp->next=pointer2;
- return pointer1;
- }
- int main(void)
- {
- int arr1[]={3,12,8,9,11};
- link ptr;
- ptr=create_list(arr1,5);
- selection_sort(ptr,5);
- }
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include <stdio.h>
- int main()
- {
- int n, reversedNumber = 0, remainder;
-
- printf("输入一个整数: ");
- scanf("%d", &n);
-
- while(n != 0)
- {
- remainder = n%10;
- reversedNumber = reversedNumber*10 + remainder;
- n /= 10;
- }
-
- printf("反转后的整数: %d", reversedNumber);
-
- return 0;
- }
输出结果:
- 输入一个整数: 12345
- 反转后的整数: 54321
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include<stdio.h>
- #include<stdlib.h>
- double evenumber(int n);
- double oddnumber(int n);
-
- int main()
- {
- int n;
- double r;
- double (*pfunc)(int);
- printf("请输入一个数字:");
- scanf("%d",&n);
- if(n%2==0) pfunc=evenumber;
- else pfunc=oddnumber;
-
- r=(*pfunc)(n);
- printf("%lf\n",r);
-
- system("pause");
- return 0;
- }
- double evenumber(int n)
- {
- double s=0,a=0;
- int i;
- for(i=2;i<=n;i+=2)
- {
- a=(double)1/i;
- s+=a;
- }
- return s;
- }
- double oddnumber(int n)
- {
- double s=0,a=0;
- int i;
- for(i=1;i<=n;i+=2)
- {
- a=(double)1/i;
- s+=a;
- }
- return s;
- }
输出结果:
- 请输入一个数字:2
- 0.500000
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include<stdio.h>
- #include<stdlib.h>
- int main()
- {
- const char *s[]={"man","woman","girl","boy","sister"};
- const char **q;
- int k;
- for(k=0;k<5;k++)
- {
- q=&s[k]; /*在这里填入内容*/
- printf("%s\n",*q);
- }
- return 0;
- }
输出结果:
- man
- woman
- girl
- boy
- sister
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include<stdio.h>
- #include<stdlib.h>
- struct man{
- char name[20];
- int age;
- }
- person[3]={"li",18,"wang",25,"sun",22};
- int main()
- {
- struct man *q,*p;
- int i,m=0;
- p=person;
- for(i=0;i<3;i++)
- {
- if(m<p->age)
- {
- m=p->age;
- q=p;
- }
- p++;
- }
- printf("%s %d\n",q->name,q->age);
- return 0;
- }
输出结果:
wang 25
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
-
- #include<stdio.h>
- #include<stdlib.h>
- #include <string.h>
-
- void swap(char*str1,char*str2);
- int main()
- {
- char str1[20],str2[20],str3[20];
- printf("请输入3个字符串,每个字符串以回车结束!:\n");
- fgets(str1, (sizeof str1 / sizeof str1[0]), stdin);
- fgets(str2, (sizeof str2 / sizeof str2[0]), stdin);
- fgets(str3, (sizeof str3 / sizeof str3[0]), stdin);
- if(strcmp(str1,str2)>0)swap(str1,str2);
- if(strcmp(str2,str3)>0)swap(str2,str3);
- if(strcmp(str1,str2)>0)swap(str1,str2);
- printf("排序后的结果为:\n");
- printf("%s\n%s\n%s\n",str1,str2,str3);
- return 0;
- }
- void swap(char*str1,char*str2)
- {
- char tem[20];
- strcpy(tem,str1);
- strcpy(str1,str2);
- strcpy(str2,tem);
- }
输出结果:
- 请输入3个字符串,每个字符串以回车结束!:
- b
- a
- t
- 排序后的结果为:
- a
- b
- t
题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只 猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了 一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的, 问海滩上原来最少有多少个桃子?
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include<stdio.h>
- #include<stdlib.h>
- int main()
- {
- int x
- ,i=0,j=1;
- while(i<5){
- x=4*j;
- for(i=0;i<5;i++)
- {
- if(x%4!=0){break;}
- x=(x/4)*5+1;
- }
- j++;
- }
- printf("%d\n",x);
-
- return 0;
- }
输出结果:
3121
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
-
- #include <stdio.h>
-
- void output(long int b, long int i){
- printf("\n%ld = 800 * %ld + 9 * %ld\n", b,i,i);
- }
-
-
- int main(){
-
- void output(long int b, long int i);
- long int a,b,i;
- a = 809;
- for(i = 10; i < 100; i++){
- b = i * a;
- if (b >= 1000 && b <= 10000 && 8 * i < 100 && 9 * i >= 100){
- output(b, i);
- }
- }
- return 0;
- }
输出结果:
9708 = 800 * 12 + 9 * 12
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include<stdio.h>
- #include<stdlib.h>
- int main()
- {
- int n=0,i=0;
- char s[20];
- printf("请输入一个8进制数:\n");
- gets(s);
- while(s[i]!='\0'){
- n=n*8+s[i]-'0';
- i++;
- }
- printf("刚输入的8进制数转化为十进制为\n%d\n",n);
-
- return 0;
- }
输出结果:
- 请输入一个8进制数:
- 16
- 刚输入的8进制数转化为十进制为
- 14
题目:求0—7所能组成的奇数个数。
程序分析:
这个问题其实是一个排列组合的问题,设这个数为 sun=a1a2a3a4a5a6a7a8,a1-a8 表示这个数的某位的数值,当一个数的最后一位为奇数时,那么这个数一定为奇数,不管前面几位是什么数字。如果最后一位数为偶数,则这个数一定为偶数。
a1-a8可以取 0-7 这个八个数字,首位数字不为 0。
从该数为一位数到该数为8位数开始统计奇数的个数:
- 1.当只有一位数时也就是该数的最后一位,奇数个数为4
- 2.当该数为两位数时,奇数个数为4*7=28
- 3.当该数为三位数时,奇数个数为:4*8*7=224
- ...
- 8.当该数为八位数时,奇数个数为:4*8*8*8*8*8*8*7(依次为最后一位到第一位)
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include<stdio.h>
- int main(int agrc, char*agrv[])
- {
- long sum = 4, s = 4;//sum的初始值为4表示,只有一位数字组成的奇数个数为4个
- int j;
- for (j = 2; j <= 8; j++)
- {
- printf("%d位数为奇数的个数%ld\n", j-1, s);
- if (j <= 2)
- s *= 7;
- else
- s *= 8;
- sum += s;
- }
- printf("%d位数为奇数的个数%ld\n", j-1, s);
- printf("奇数的总个数为:%ld\n", sum);
- // system("pause");
- return 0;
- }
输出结果:
- 1位数为奇数的个数4
- 2位数为奇数的个数28
- 3位数为奇数的个数224
- 4位数为奇数的个数1792
- 5位数为奇数的个数14336
- 6位数为奇数的个数114688
- 7位数为奇数的个数917504
- 8位数为奇数的个数7340032
- 奇数的总个数为:8388608
程序分析:我去,这是什么题目,要我证明这个问题吗?真不知道怎么证明。那就把一个偶数分解成两个素数吧。
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include<stdio.h>
- #include<stdlib.h>
- int Isprimer(unsigned int n);
- int main()
- {
- unsigned int n,i;
- do{
- printf("请输入一个偶数:\n");
- scanf("%d",&n);
- }while(n%2!=0);
- for(i=1;i<n;i++)
- if(Isprimer(i)&&Isprimer(n-i))
- break;
- printf("偶数%d可以分解成%d和%d两个素数的和\n",n,i,n-i);
-
- return 0;
- }
- int Isprimer(unsigned int n)
- {
- int i;
- if(n<4)return 1;
- else if(n%2==0)return 0;
- else
- for(i=3;i<sqrt(n)+1;i++)
- if(n%i==0)return 0;
-
- return 1;
- }
输出结果:
- 请输入一个偶数:
- 4
- 偶数4可以分解成1和3两个素数的和
程序分析:丫的!这题目的意思是判断一个素数能整除几个9组成的数吧?我就这么理解吧。素数是不 能被除1和自身之外的数整除的
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include<stdio.h>
- #include<stdlib.h>
- int main()
- {
- int p,i;
- long int sum=9;
- printf("请输入一个素数:\n");
- scanf("%d",&p);
- for(i=1;;i++)
- if(sum%p==0)break;
- else sum=sum*10+9;
-
- printf("素数%d能整除%d个9组成的数%ld\n",p,i,sum);
- return 0;
- }
输出结果:
- 请输入一个素数:
- 13
- 素数13能整除6个9组成的数999999
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include <stdio.h>
- #include<stdlib.h>
- #include<string.h>
-
- char* strconnect(char *str1,char *str2);
-
- int main()
- {
- char str1[20],str2[20];
- char *str;
- puts("请输入两个字符串,用回车分开:");
- scanf("%s%s", str1, str2);
- str=strconnect(str1,str2);
- puts("连接后的字符串为:");
- puts(str);
- return 0;
- }
- char* strconnect(char *str1,char *str2)
- {
- char*str;
- str=(char*)malloc(strlen(str1)+strlen(str2)+1);
- str[0]='\0';
- strcat(str,str1);
- strcat(str,str2);
- return str;
- }
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include<stdio.h>
-
- struct student
- {
- int x;
- char c;
- } a;
-
- int main()
- {
- a.x=3;
- a.c='a';
- f(a);
- printf("%d,%c",a.x,a.c);
- }
- f(struct student b)
- {
- b.x=20;
- b.c='y';
- }
输出结果:
3,a
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include<stdio.h>
- #include<stdlib.h>
- int main()
- {
- int n,i,j;
- printf("请输入数字:\n");i--;
- for(i=0;i<7;i++)
- {
- scanf("%d",&n);
- if(n>50){
- printf("请重新输入:\n");i--;
- }
- else
- {
- for(j=0;j<n;j++)
- printf("*");
- }
- printf("\n");
- }
- return 0;
- }
输出结果:
- 请输入数字:
- 5
- *****
题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下: 每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include <stdio.h>
-
- int main()
- {
- int a,i,aa[4],t;
- printf("请输入四位数字:");
- scanf("%d",&a);
- aa[0]=a%10;
- aa[1]=a%100/10;
- aa[2]=a%1000/100;
- aa[3]=a/1000;
- for(i=0;i<=3;i++)
- {
- aa[i]+=5;
- aa[i]%=10;
- }
- for(i=0;i<=3/2;i++)
- {
- t=aa[i];
- aa[i]=aa[3-i];
- aa[3-i]=t;
- }
- printf("加密后的数字:");
- for(i=3;i>=0;i--)
- printf("%d",aa[i]);
- printf("\n");
- }
输出结果:
- 请输入四位数字:1234
- 加密后的数字:9876
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include<stdio.h>
- #include<stdlib.h>
-
- #define M 5
- int main()
- {
- int a[M]={1,2,3,4,5};
- int i,j,t;
- i=0;j=M-1;
- while(i<j)
- {
- t=*(a+i);
- *(a+i)=*(a+j);
- *(a+j)=t;
- i++;j--;
- }
- for(i=0;i<M;i++) {
- printf("%d\n",*(a+i));
- }
-
- }
输出结果:
- 5
- 4
- 3
- 2
- 1
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include <stdio.h>
- #include <time.h>
-
- int main ()
- {
- time_t rawtime;
- struct tm * timeinfo;
-
- time ( &rawtime );
- timeinfo = localtime ( &rawtime );
- printf ( "当前本地时间为: %s", asctime (timeinfo) );
-
- return 0;
- }
输出结果:
当前本地时间为: Tue Nov 10 16:28:49 2015
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include <stdio.h>
- #include <time.h>
-
- int main()
- {
- time_t start,end;
- int i;
- start=time(NULL);
- for(i=0;i<300000;i++)
- {
- printf("\n"); // 返回两个time_t型变量之间的时间间隔
- }
- end=time(NULL);
-
- // 输出执行时间
- printf("时间间隔为 %6.3f\n",difftime(end,start));
- }
输出结果:
时间间隔为 1.000
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
-
- int main()
- {
- long i=10000000L;
- clock_t start,finish;
- double TheTimes;
- printf("做%ld次空循环需要的时间为",i);
- start=clock();
- while(i--);
- finish=clock();
- TheTimes=(double)(finish-start)/CLOCKS_PER_SEC;
- printf("%f秒。\n",TheTimes);
- return 0;
- }
输出结果:
做10000000次空循环需要的时间为0.025367秒。
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
-
- void caizi(void)
- {
- int n;
- char begin;
- int count = 1;
- srand((int)time(NULL));
- int m = (rand() % 100) + 1;
- puts("游戏开始,请输入数字:");
- while (1)
- {
- scanf("%d", &n);
- if (n == m)
- {
- printf("猜中了,使用了 %d 次!\n", count);
- if (count == 1)
- {
- printf("你是神级人物了!膜拜\n");
- getchar();
- printf("你已经达到最高级别,还需要玩吗?Y/N \n");
- scanf("%c", &begin);
- if (begin == 'Y' || begin == 'y') //重复玩的一个嵌套循环
- {
- caizi();
- }
- else
- {
- printf("谢谢,再见!\n");
- }
- }
- else if (count <= 5)
- {
- printf("你是王级人物了!非常赞\n");
- getchar();
- printf("需要挑战最高级别不?Y/N \n");
- scanf("%c", &begin);
- if (begin == 'Y' || begin == 'y')
- {
- caizi();
- }
- else
- {
- printf("谢谢,再见!\n");
- }
- }
- else if (count <= 10)
- {
- printf("你是大师级人物了!狂赞\n");
- getchar();
- printf("需要挑战最高级别不?Y/N \n");
- scanf("%c", &begin);
- if (begin == 'Y' || begin == 'y')
- {
- caizi();
- }
- else
- {
- printf("谢谢,再见!\n");
- }
- }
- else if (count <= 15)
- {
- printf("你是钻石级人物了!怒赞\n");
- getchar();
- printf("需要挑战最高级别不?Y/N \n");
- scanf("%c", &begin);
- if (begin == 'Y' || begin == 'y')
- {
- caizi();
- }
- else
- {
- printf("谢谢,再见!\n");
- }
- }
- else
- {
- getchar();
- printf("你的技术还有待提高哦!重玩? Y/N\n");
- scanf("%c",&begin);
- if (begin == 'Y' || begin == 'y')
- {
- caizi();
- }
- else
- {
- printf("谢谢,再见!\n");
- }
- }
- break;
- }
- else if (n < m)
- {
- puts("太小了!");
- puts("重新输入:");
- }
- else
- {
- puts("太大了!");
- puts("重新输入:");
- }
- count++;//计数器
-
-
- }
- }
-
-
- int main(void)
- {
-
- caizi();
- system("pause");
- return 0;
- }
输出结果:
- 游戏开始,请输入数字:
- 50
- 太大了!
- 重新输入:
- 25
- 太小了!
- 重新输入:
- 40
- 太大了!
- 重新输入:
- 30
- 太大了!
- 重新输入:
- 27
- 太小了!
- 重新输入:
- 28
- 猜中了,使用了 6 次!
- 你是大师级人物了!狂赞
- 需要挑战最高级别不?Y/N
- N
- 谢谢,再见!
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include <stdio.h>
-
- struct programming
- {
- float constant;
- char *pointer;
- };
-
- int main()
- {
- struct programming variable;
- char string[] = "菜鸟教程:http://www.runoob.com";
-
- variable.constant = 1.23;
- variable.pointer = string;
-
- printf("%f\n", variable.constant);
- printf("%s\n", variable.pointer);
-
- return 0;
- }
输出结果:
- 1.230000
- 菜鸟教程:http://www.runoob.com
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- int main()
- {
- int i,j,k,TLen,PLen,count=0;
- char T[50],P[10];
- printf("请输入两个字符串,以回车隔开,母串在前,子串在后:\n");
- gets(T);
- gets(P);
- TLen=strlen(T);
- PLen=strlen(P);
- for(i=0;i<=TLen-PLen;i++)
- {
- for(j=0,k=i;j<PLen&&P[j]==T[k];j++,k++)
- ;
- if(j==PLen)count++;
- }
- printf("%d\n",count);
- system("pause");
- return 0;
- }
输出结果:
- 请输入两个字符串,以回车隔开,母串在前,子串在后:
- abca
- a
- 2
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include<stdio.h>
- #include<stdlib.h>
- int main()
- {
- FILE*fp=NULL;
- char filename[25];
- char ch;
- printf("输入你要保存到的文件的名称:\n");
- gets(filename);
- if((fp=fopen(filename,"w"))==NULL)
- {
- printf("error: cannot open file!\n");
- exit(0);
- }
- printf("现在你可以输入你要保存的一些字符,以#结束:\n");
- getchar();
- while((ch=getchar())!='#'){
- fputc(ch,fp);
- }
- fclose(fp);
- system("pause");
- return 0;
- }
输出结果:
- 输入你要保存到的文件的名称:
- test.txt
- 现在你可以输入你要保存的一些字符,以#结束:
- www.runoob.com
- #
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
-
- int main()
- {
- FILE*fp=NULL;
- char str[50];
- int i,len;
- printf("输入一个字符串:\n");
- gets(str);
- len=strlen(str);
- for(i=0;i<len;i++)
- {
- if(str[i]<='z'&&str[i]>='a')
- str[i]-=32;
- }
- if((fp=fopen("test","w"))==NULL)
- {
- printf("error: cannot open file!\n");
- exit(0);
- }
- fprintf(fp,"%s",str);
- fclose(fp);
-
- system("pause");
- return 0;
- }
输出结果:
- 输入一个字符串:
- www.runoob.com
程序分析:你需要先创建 A.txt 与 B.txt。
A.txt文件内容:
123
B.txt文件内容:
456
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- int main()
- {
- FILE*fa,*fb,*fc;
- int i,j,k;
- char str[100],str1[100];
- char tem;
- if((fa=fopen("A.txt","r"))==NULL) // A.txt 文件需要存在
- {
- printf("error: cannot open A file!\n");
- exit(0);
- }
- fgets(str,99,fa);
- fclose(fa);
- if((fb=fopen("B.txt","r"))==NULL) // B.txt 文件需要存在
- {
- printf("error: cannot open B file!\n");
- exit(0);
- }
- fgets(str1,100,fb);
- fclose(fb);
- strcat(str,str1);
- for(i=strlen(str)-1;i>1;i--)
- for(j=0;j<i;j++)
- if(str[j]>str[j+1])
- {
- tem=str[j];
- str[j]=str[j+1];
- str[j+1]=tem;
- }
-
- if((fc=fopen("C.txt","w"))==NULL) // 合并为 C.txt
- {
- printf("error: cannot open C file!\n");
- exit(0);
- }
- fputs(str,fc);
- fclose(fc);
- system("pause");
- return 0;
- }
输出结果:
123456
题目:有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩,况原有的数据和计算出的平均分数存放在磁盘文件"stud"中。
- // Created by www.runoob.com on 15/11/9.
- // Copyright © 2015年 菜鸟教程. All rights reserved.
- //
-
- #include<stdio.h>
- #include<stdlib.h>
- typedef struct{
- int ID;
- int math;
- int English;
- int C;
- int avargrade;
- char name[20];
- }Stu;
- int main()
- {
- FILE*fp;
- Stu stu[5];
- int i,avargrade=0;
- printf("请输入5个同学的信息:学生号,姓名,3门成绩:\n");
- for(i=0;i<5;i++)
- {
- scanf("%d %s %d %d %d",&(stu[i].ID),stu[i].name,&(stu[i].math),&(stu[i].English),&(stu[i].C));
- stu[i].avargrade=(stu[i].math+stu[i].English+stu[i].C)/3;
- }
-
- if((fp=fopen("stud","w"))==NULL)
- {
- printf("error :cannot open file!\n");
- exit(0);
- }
- for(i=0;i<5;i++)
- fprintf(fp,"%d %s %d %d %d %d\n",stu[i].ID,stu[i].name,stu[i].math,stu[i].English,
- stu[i].C,stu[i].avargrade);
-
- fclose(fp);
- // system("pause");
- return 0;
- }
输出结果:
- 请输入5个同学的信息:学生号,姓名,3门成绩:
- 1 a 60 70 80
- 2 b 60 80 90
- 3 c 59 39 89
- 4 e 56 88 98
- 5 d 43 88 78
打开 stud文件,内容如下
- 1 a 60 70 80 70
- 2 b 60 80 90 76
- 3 c 59 39 89 62
- 4 e 56 88 98 80
- 5 d 43 88 78 69
给定一个 5*5 的矩阵(数学上,一个 r×c 的矩阵是一个由 r 行 c 列元素排列成的矩形阵列),将第 n 行和第 m 行交换,输出交换后的结果。
输入输入共 6 行,前 5 行为矩阵的每一行元素, 元素与元素之间以一个空格分开。
第 6 行包含两个整数 m、n,以一个空格分开。(1 <= m,n <= 5)输出输出交换之后的矩阵,矩阵的每一行元素占一行,元素之间以一个空格分开。样例输入:
1 2 2 1 2 5 6 7 8 3 9 3 0 5 3 7 2 1 4 6 3 0 8 2 4 1 5样例输出:
3 0 8 2 4 5 6 7 8 3 9 3 0 5 3 7 2 1 4 6 1 2 2 1 2
- #include <iostream>
- using namespace std;
- int main()
- {
- int a[5][5], m, n, i, j;
- for (i=0; i<5; i++)
- for (j=0; j<5; j++)
- cin >> a[i][j];
- cin >> m >> n;
- for (j=0; j<5; j++){
- i = a[m-1][j];
- a[m-1][j] = a[n-1][j];
- a[n-1][j] = i;
- }
- for (i=0; i<5; i++){
- for (j=0; j<5; j++){
- cout << a[i][j] << " ";
- }
- cout << endl;
- }
- return 0;
- }
一只小猴子一天摘了许多桃子,第一天吃了一半,然后忍不住又吃了一个;第二天又吃了一半,再加上一个;后面每天都是这样吃。到第10天的时候,小猴子发现只有一个桃子了。问小猴子第一天共摘了多少个桃子。
- #include<stdio.h>
-
- int main()
- {
- int i = 1;
- int j = 1;
- for (j = 10; j > 1;j --)
- {
- i++;
- i = 2 * i;
- }
- printf("第一天摘了 %d 个桃子。", i);
- }
输出结果:
第一天摘了 1534 个桃子。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。