打码100例

1.输出"Hello,World!"

#include<stdio.h>
int main()
{
	printf("Hello,World!");
	return 0;
	
}

2.输出整数

#include<stdio.h>
int main()
{
	int number;
	
	printf("请输入一个整数:");
	
	scanf("%d",&number);
	
	printf("你输入的整数是:%d",number);
	
	return 0;
 } 

请输入一个整数:12

你输入的整数是:12

 注:

①scanf("%d",&   ) 格式化输入。&不要漏了

②注意" "框起来的内容,不要框错了

3.输出单个字符

使用printf()和%c格式化输出一个字符

#include<stdio.h>
int main()
{
	char c;
	c='A';
	printf("c的值是%c",c);
	
	return 0;
 } 

 c的值是A

 注:

①char占1个字节,是一个整数类型。

②字符型常量:用单引号括起来,只保存一个字符;

   字符串常量:用双引号括起来,可以保存多个字符。

③如果printf("c的值为%d",c);

输出结果是: c的值是65

 4.输出浮点数

使用 printf() 与 %f 输出浮点数。

#include<stdio.h>
int main()
{
	float f;
	
	f=12.001234;
	printf("f的值为%f",f);
	
	return 0;
 } 

 f的值为12.001234

 5.输出双精度数

使用 printf() 与 %e 输出双精度数。

#include <stdio.h>
 
int main() 
{
   double d;            
   
   d = 12.001234;       
   
   printf("d 的值为 %le", d);//此例中%e和%le没有区别都输出科学计数法
                            //%f和%lf没有区别都输出12.001234
                            //但还是要double就用%lf或者%le不然做其他题可能出错   
   return 0;
}
d 的值为 1.200123e+001

 若d换成其他数字,有以下结果:

 d = 12.001235;d 的值为 1.200123e+001

  d = 12.0012345;  d 的值为 1.200123e+001

 d = 12.0012352;  d 的值为 1.200124e+001

 d = 120.001234; d 的值为 1.200012e+002

 d = 120.001254;  d 的值为 1.200013e+002

注:

①float是单精度浮点值。四个字节(32位)。1位符号+8位指数+23位小数。六位有效位。 

 double是双精度浮点值。八个字节(64位)。1位符号+11位指数+52位小数。十五位有效位。

②float用%f ; double用%lf

6.输入两个浮点数,计算乘积。

#include <stdio.h>
int main()
{
    double firstNumber, secondNumber, product;
    printf("输入两个浮点数: ");
 
    scanf("%lf %lf", &firstNumber, &secondNumber);  
 
    product = firstNumber * secondNumber;  
 
    printf("结果 = %.2lf", product);//  %.2lf 保留两个小数点
    
    return 0;
}

输入两个浮点数:1.2 2.345

结果=2.81

1、%c:单个字符

2、%d:十进制整数(int)

3、%ld:十进制整数(long)

4、%lf:十进制浮点数(double)

5、%o:八进制数 

6、%s:字符串(char)

7、%u:无符号十进制数(DWORD)

8、%x:十六进制数(0x00000)

9.%le意思是用科学计数法输出的double数据。

10.%.100f用来输出实数,保留小数点100位。

7.两个整数相加

#include<stdio.h>
int main()
{
	int num1,num2,sum;
	
	printf("请输入两个数:");
	scanf("%d %d",&num1,&num2);//中间用空格隔开 //不要忘记&
	
	sum=num1+num2;
	
	printf("%d+%d=%d",num1,num2,sum);
   //注意输出内容是 num1+num2=sum,而不是sum 
	
	return 0;
}

8.字符转 ASCII 码

#include <stdio.h>
int main()
{
    char c;
    printf("输入一个字符: ");
    scanf("%c", &c);  
    
    printf("%c 的 ASCII 为 %d", c, c);
    return 0;
}

或者下式也是可以的

#include <stdio.h>
int main()
{
    char w;
    printf("输入一个字符: ");
    scanf("%c", &w);  
    
    printf("%c 的 ASCII 为 %d", w, w);
    return 0;
}

输入一个字符: a

a 的 ASCII 为 97

输入一个字符:NUT

a 的 ASCII 为 78

//实际上输入的是N

注:

ASCII 定义了 128 个字符。

分类:

  • 一:0-31、127(删除键)是控制字符
  • 二:空白字符:空格(32)、 制表符、 垂直制表符、 换行、 回车。
  • 三:可显示字符:a-z、A-Z、0-9、~、!、@、、%、^、&、#、$、*、(、)、-、+、{、}、[、]、'、"、<、>、,、?、/、|、\、_、:、;、.,还有顿号、。②


9.两数相除,如果有余数,输出余数。

#include<stdio.h>
int main()
{
	int dividend,divisor,quotient,remainder;
	
	printf("请输入被除数:");
	scanf("%d",&dividend);
	printf("请输入除数:");
	scanf("%d",&divisor);
	
	quotient=dividend/divisor;
	remainder=dividend%divisor;
	
	printf("商=%d\n",quotient);//学习计算商的办法/
	printf("余数=%d",remainder);//学习计算余数的办法%
	
	return 0;
	
}

输入被除数: 5

输入除数: 2

商 = 2

余数 = 1


10.比较大小

10.(1)比较两个数

#include <stdio.h>
 
int main()
{
	int a,b;
	
	printf("请输入第一个值:");
	scanf("%d",&a);
	printf("请输入第二个值:");
	scanf("%d",&b);
	
	if(a>b)
	printf("%d大于%d",a,b);
  //这里的a和b前面不用加%,不然的话打出来乱七八糟的东西
  //请输入第一个值:11
  //请输入第二个值:12
  //6487580小于等于6487576

	if(a<b)
	printf("%d小于%d",a,b); 
	else
	printf("%d等于%d",a,b); 
  
   return 0;
}

请输入第一个值:
12
请输入第二个值:
11
a大于b


10.(2) 比较三个数

#include <stdio.h>
 
int main()
{
	int a,b,c;
	
	printf("请输入第一个值:");
	scanf("%d",&a);
	printf("请输入第二个值:");
	scanf("%d",&b);
	printf("请输入第三个值:");
	scanf("%d",&b);
	
	if(a>b&&a>c)
	printf("%d最大",a);
	if(a<b&&c<b)
	printf("%d最大",b); 
	if(a<c&&b<c)
	printf("%d最大",c);
	else
	printf("有两个或者三个数大小相等"); 
  
   return 0;
}

输出结果错误:
请输入第一个值:1
请输入第二个值:2
请输入第三个值:3
3最大有两个或者三个数大小相等
#include <stdio.h>
 
int main()
{
	int a,b,c;
	
	printf("请输入第一个值:");
	scanf("%d",&a);
	printf("请输入第二个值:");
	scanf("%d",&b);
	printf("请输入第三个值:");
	scanf("%d",&b);
	
	if(a>b&&a>c)
	printf("%d最大",a);
	else if(a<b&&c<b)
	printf("%d最大",b); 
	else if(a<c&&b<c)
	printf("%d最大",c);
	else
	printf("有两个或者三个数大小相等"); 
  
   return 0;
}

//如果不写else,会出错
    if(a>b&&a>c)
	printf("%d最大",a);
	if(a<b&&c<b)
	printf("%d最大",b); 
	if(a<c&&b<c)
	printf("%d最大",c);
	else
	printf("有两个或者三个数大小相等"); 

//错误的输出为
输出结果错误:
请输入第一个值:1
请输入第二个值:2
请输入第三个值:3
3最大有两个或者三个数大小相等

  

10.(3)四个数比较大小

#include <stdio.h>

int main()

{
    int a=5,b=4,c=3,d=6,min;
    min=(((c<d)?c:d)<((a<b)?a:b))?((c<d)?c:d):((a<b)?a:b);
    printf("最小的数字为:%d",min);
    return 0;
}

运算符

 一、算术运算符

  • /分子除以分母
  • %整除后的余数
  • ++自增,整数值加1
  • --自减,整数值-1

※区别a++和a--

#include <stdio.h>
 
int main()
{
   int c;
   int a = 10;
   c = a++; 
   printf("先赋值后运算:\n");
   printf("c 的值是 %d\n", c );//10
   printf("a 的值是 %d\n", a );//11
   a = 10;
   c = a--; 
   printf("c 的值是 %d\n", c );//10
   printf("a 的值是 %d\n", a );//9
 
   printf("先运算后赋值:\n");
   a = 10;
   c = ++a; 
   printf("c 的值是 %d\n", c );//11
   printf("a 的值是 %d\n", a );//11
   a = 10;
   c = --a; 
   printf("c的值是 %d\n", c );//9
   printf("a 的值是 %d\n", a );//9
 
}

先赋值后运算:
c 的值是 10
c 的值是 11
c 的值是 10
a 的值是 9
先运算后赋值:
c 的值是 11
a 的值是 11
c的值是 9
a 的值是 9

形象的理解可以是i++先做别的事,再自己加1,++i先自己加1,再做别的事情。

二、关系运算符

  • ==相等
  • !=不相等
  • >=大于等于
  • <=小于等于

※不要写成=>

三、逻辑运算符

  • &&和
  • ||或
  • !非

四、位运算符

  • p&q(都是真为1,否则为0)
  • p|q(有一个是真就为1,否则为0)
  • p ^ q(取异:相同就为0,不同就为1)
  • p~q将二进制取反
  • <<二进制左移:左边位丢弃。右边补0。
  • >>二进制右移:正数左边补0;负数左边补1。右边丢弃。
pqp & qp | qp ^ q
00000
01011
11110
10011

假设变量 A 的值为 60,变量 B 的值为 13,则:

A=0011 1100;B=0000 1101

(A & B) 将得到 12,即为 0000 1100

(A | B) 将得到 61,即为 0011 1101

(A ^ B) 将得到 49,即为 0011 0001

(~A ) 将得到 -61,即为 1100 0011

A << 2 将得到 240,即为 1111 0000

A >> 2 将得到 15,即为 0000 1111

五、赋值运算符

  • =

※要区别=和==

  • +=     C+=A相当于C=C+A

-=      <<=    >>=    &=   ^=    |=都是一样

六、杂项运算符

  • sizeof()返回变量的大小
  • &返回变量的地址
  • *指向一个变量
  • ?:条件表达式
    #include <stdio.h>
     
    int main()
    {
       int a = 4;
       short b;
       double c;
       int* ptr;
     
       //sizeof 运算符实例
       printf("Line 1 - 变量 a 的大小 = %lu\n", sizeof(a) );
       printf("Line 2 - 变量 b 的大小 = %lu\n", sizeof(b) );
       printf("Line 3 - 变量 c 的大小 = %lu\n", sizeof(c) );
    //c语言中%lu的含义:long unsigned数据类型无符号长整数或无符号长浮点数.
    //就比如int型是%d一样
     
       //&和*运算符实例 
       ptr = &a;                        // 'ptr' 现在包含 'a' 的地址 
       printf("a 的值是 %d\n", a);
       printf("*ptr 是 %d\n", *ptr);    //*ptr指向一个变量
     
       //三元运算符实例 
       a = 10;
       b = (a == 1) ? 20: 30;
       printf( "b 的值是 %d\n", b );
     
       b = (a == 10) ? 20: 30;
       printf( "b 的值是 %d\n", b );
    }
    Line 1 - 变量 a 的大小 = 4
    Line 2 - 变量 b 的大小 = 2
    Line 3 - 变量 c 的大小 = 8
    a 的值是 4
    *ptr 是 4
    b 的值是 30
    b 的值是 20

七、运算符优先级

具有较高优先级的运算符出现在表格的上面,具有较低优先级的运算符出现在表格的下面。

类别 运算符 结合性 
后缀 () [] -> . ++ - -  从左到右 
一元 + - ! ~ ++ - - (type)* & sizeof 从右到左 
乘除 * / % 从左到右 
加减 + - 从左到右 
移位 << >> 从左到右 
关系 < <= > >= 从左到右 
相等 == != 从左到右 
位与 AND 从左到右 
位异或 XOR 从左到右 
位或 OR 从左到右 
逻辑与 AND && 从左到右 
逻辑或 OR || 从左到右 
条件 ?: 从右到左 
赋值 = += -= *= /= %=>>= <<= &= ^= |= 从右到左 
逗号 从左到右 

例:a = 20; b = 10; c = 15;  d = 5;

(a + b) * c / d=90

((a + b) * c) / d=90

(a + b) * (c / d)=90

a + (b * c) / d=50

11.计算 int, float, double 和 char 字节大小

使用 sizeof 操作符计算int, float, double 和 char四种变量字节大小。

sizeof 是 C 语言的一种单目操作符,如C语言的其他操作符++、--等,它并不是函数。

sizeof 操作符以字节形式给出了其操作数的存储大小。

#include<stdio.h>

int main()
{
	int a;
	float b;
	double c;
	char d;
	long e;
	long long f;
	long double g;
	
	printf("int的字节大小是%ld\n",sizeof(a));
	printf("float的字节大小是%ld\n",sizeof(b));
	printf("double的字节大小是%ld\n",sizeof(c));
	printf("char的字节大小是%ld\n",sizeof(d));
	printf("long的字节大小是%ld\n",sizeof(e));
	printf("long long的字节大小是%ld\n",sizeof(f));
	printf("long double的字节大小是%ld\n",sizeof(g));
	
	return 0;
}

int的字节大小是4
float的字节大小是4
double的字节大小是8
char的字节大小是1
long的字节大小是4
long long的字节大小是8
long double的字节大小是16

12.使用临时变量交换两个浮点数的值

#include<stdio.h>

int main()
{
	double num1,num2,temp;
	
	printf("输入第一个数字");
	scanf("%lf",&num1);
	
	printf("输入第二个数字");
	scanf("%lf",&num2);
	
	temp=num1;
	num1=num2;
	num2=temp;
	
	printf("交换后,第一个数字为%.2lf\n",num1);
	printf("交换后,第二个数字为%.2lf\n",num2);//在%之后加上.2输出小数点后两位的数字 
	
	return 0;
}

13.判断奇偶

#include<stdio.h>

int main()
{
	int num;
	printf("输入一个整数");
	scanf("%d",&num);
	
	if(num%2==0)//是==不是= 
	printf("%d是偶数",num);
	
	else
	printf("%d是奇数",num);
	
	return 0;
}

14.循环区间里判断奇偶

#include<stdio.h>

int main()
{
	int i;
	for(i=1;i<=10;i++)
	{
		if(i%2==0)
		printf("%2d是偶数\n",i);//%后面加个2,表示占两个字节 
	}
	return 0;
}

  2是偶数
  4是偶数
  6是偶数
  8是偶数
10是偶数
 

15.判断元音还是辅音

#include<stdio.h>
#include<stdio.h>

int main()
{
	char c;
	printf("请输入一个字母");
	scanf("%c",&c);
	
	if((c>='A'&&c<='Z')||(c>='a'&&c<='z'))
	   if((c=='A')||c=='E'||c=='I'||c=='O'||c=='U'||c=='a'||c=='e'||c=='i'||c =='o'||c=='u')
	       printf("%c是元音",c);
	       
	    else
	       printf("%c是辅音",c);
	       
	else
	printf("输入错误");
	
	return 0;
}

16.判断三个数中最大的数

#include<stdio.h>

int main()
{
	int a,b,c,max;
	printf("输入三个数");
	scanf("%d %d %d",&a,&b,&c);
	
	max=a>b?(a>c?a:c):(b>c?b:c);
	printf("最大值为%d",max);
	return 0;
	 
}
#include<stdio.h>

int main()
{
	double n1,n2,n3;
	
	printf("请输入三个数");
	scanf("%lf %lf %lf",&n1,&n2,&n3);
	
	if(n1>=n2&&n1>=n3)
	printf("%.2lf是最大数",n1);
	
	if(n2>=n1&&n2>=n3)
	printf("%.2lf是最大数",n2);
	
	if(n3>=n2&&n3>=n1)
	printf("%.2lf是最大数",n3);
	
	return 0;
}

17.一元二次方程

#include<stdio.h>
#include<math.h>
int main()
{
	double disc,a,b,c,p,q,x1,x2;
	
	printf("输入a,b,c");
	scanf("%lf %lf %lf",&a,&b,&c);
	
	disc=b*b-4*a*c;
	
	if(disc<0)
	printf("方程没有实数根\n");
	
	else
	{
		p=(-b)/(2*a);//注意分清/和\。
		q=sqrt(disc)/(2*a);
		
		x1=p+q;
		x2=p-q;
		
		printf("方程的解为%.2lf\t%.2lf",x1,x2);
		 
	 } 
	 
	 return 0;
}

18.判断闰年

#include<stdio.h>

int main()
{
	int year;
	printf("输入年份");
	scanf("%d",&year);
	
	if((year%4==0&&year%100!=0)||year%400==0)//是!=不是!== 
	//四年一闰,百年不闰;四百年再闰 
	{
		printf("是闰年\n"); 
	 } 
	 
	 else
	 {
	 	printf("不是闰年");
	 }
	 
	 return 0;
}

19.判断正数|负数|0

#include<stdio.h>

int main()
{
	int num;
	printf("输入一个整数");
	scanf("%d",&num);
	
	if(num%2==0)//是==不是= 
	printf("%d是偶数",num);
	
	else
	printf("%d是奇数",num);
	
	return 0;
}

20.判断字母

#include<stdio.h>

int main()
{
	char c;
	printf("输入一个字符");
	scanf("%c",&c);
	
	if(c>='a'&&c<='z'||(c>='A'&&c<='Z'))
	printf("%c是字母",c);
	
	else
	printf("%c不是字母",c);
	
	return 0;
}

21.计算自然数的和

//运用for语句

#include<stdio.h>
int main()
{
	int n,i,sum=0;
	
	printf("输入一个正整数:");
	scanf("%d",&n);
	
	for(i=1;i<=n;++i)
	{
		sum+=i;
	}
	
	printf("从1到%d所有自然数的和为%d",n,sum);
	
	return 0;
}
//运用while语句

#include<stdio.h>
int main()
{
	int n,i,sum=0;
	
	printf("输入一个正整数:");
	scanf("%d",&n);
	
	i=1;
	while(i<=n)
	{
		sum+=i;
		++i;
	 } 
	
	printf("从1到%d所有自然数之和为%d",n,sum);
	
	return 0;
}

补充:大奖赛评分程序

在唱歌比赛中,一般有若干个评委,记分规则:去掉一个最高分和最低分,再计算平均分。

试编写一个在百分制记分的情况下的程序(穷举法)

#include <stdio.h>
int main()
{  
    int iScore, i, max = 0, min = 100; 
    float Sum = 0;
    for(i = 1; i <= 7; i ++)  
    { 
	   printf("输入第 %d 个得分:", i);
       scanf("%d", &iScore);
       Sum += iScore;
       if(iScore > max)  max = iScore;
       if(iScore < min)   min = iScore;
    }
    printf("最后得分:%.2f\n",  
     //注意是%.2f或者%f也可以,但是不能用%d,因为前面是float Sum.
            (Sum-max-min)/5);
}   

22.输出九九乘法表


#include<stdio.h> 
 
int main()
{  
    
    printf("1\t2\t3\t4\t5\t6\t7\t8\t9\t\n");
    printf("-----------------------------------------------------------------\n");
    int i = 0;  
    int j = 0;   
    for(i=1;i<=9;i++)
	{  
        for(j=1;j<=i;j++)
		{  
            printf("%d\t",i*j);  
        }  
      
        printf("\n");     
    }  
}

23.斐波那契数列??

斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368........

这个数列从第3项开始,每一项都等于前两项之和。

(1)输出指定数量的斐波那契数列

#include<stdio.h>
int main()
{
    int i, n , t1=0, t2=1, x;
    
    printf("输出的斐波那契数列的项数为:");
    scanf("%d",&n);
    
    printf("斐波那契数列:");
    
    for(i=1;i<=n;++i)
    
    {
        printf("%d,",t1);
        x=t1+t2;
        t1=t2;
        t2=x;
        
    }
    
    return 0;
}

(2)输出指定数字前的斐波那契数列

24.求两个数的最大公约数

25.求两个数的最小公倍数

26.阶乘

#include<stdio.h>

int main()
{
    int n,i;
    unsigned long long f=1;
    printf("输入一个整数:");
    scanf("%d",&n);
    
    if(n<0)
    printf("负数没有阶乘!");
    
    else
    {
        for(i=1;i<=n;++i)
        {
            f*=i;
        }
        printf("%d!=%llu",n,f);
    }
    return 0;
}

 补充:输入 n 值,计算 1+1/1!+1/2!+…+1/n! 


#include<stdio.h>
int main()
{
	int i,n,k;
	float sum=1;
	printf("输入n:");
	scanf("%d",&n);
	k=1;
	for(i=1;i<=n;i++)
	{
		k=k*i;
		sum=sum+1.0/k;
		 
	 } 
	 
	 printf("sum=%f\n",sum);
	 return 0;
}

27.循环输出26个字母 

#include<stdio.h>

int main()
{
	char c;
	
	for(c='A';c<='Z'; ++c)
	printf("%c",c);
	
	return 0;
	
}

28.判断数字为几位数

#include<stdio.h>
int main()
{
	long long n;
	int count=0;
	
	printf("输入一个整数:");
	scanf("%lld",&n);
	
	while(n!=0)
	{
		n/=10;
		++count;
	}
	
	printf("数字是%d位数",count);
	
}

29.计算一个数的 n 次方

#include<stdio.h>
int main()
{
	int i,a,b;
	unsigned long c=1;
	
    printf("请输入基数:");
    scanf("%d",&a);
    printf("请输入指数");
    scanf("%d",&b);
    
	for(i=1;i<=b;i++)
	{
		
		c*=a;
		
	}
	printf("%lu",c);
	return 0;
}
#include<stdio.h>
int main()
{
	int b,e;
	long long result=1;
	
	printf("输入基数:");
	scanf("%d",&b);
	
	printf("输入指数:");
	scanf("%d",&e);
	
	while(e!=0)
	{
		result*=b;
		--e;
	}
	printf("结果是%lld",result);
	
	return 0;
}

30.判断回文数

#include<stdio.h>

int main()
{
	int n,a=0,b,c;
	
	printf("请输入一个整数:");
	scanf("%d",&n);
	
	b=n;
	
	while(n!=0)
	{
		c=n%10;   //%表示除后的余数
		a=a*10+c;
		n/=10; 
		 
	 } 
	 
	 if(b==a)//如果打成=,则一直是回文数,如输入1234,输出的b为4321 
	   printf("%d是回文数",b);
	 else
	   printf("%d不是回文数",b);
	   
	return 0;
}

补充:输入一个非负的整数,将其反向后输出。

例如     输入 24789,变成 98742 输出。

#include <stdio.h>  
int main()
{   long n; 
    printf("输入一个非负整数:");
    scanf("%ld", &n);
    
    while(n > 0) 
    {  
	    printf("%d", n % 10);
        n = n/10;
    }
    
    return 0;
}

31.判断素数

#include<stdio.h>

int main()
{
	int n,i,f=0;
	
	printf("输入一个正整数:");
	scanf("%d",&n);
	
	for(i=2;i<=n/2; ++i)
	{
		if(n%i==0)
		{
			f=1;
			break;
		}
	}
	
	if(f==0)
	  printf("%d是素数",n);
	else
	  printf("%d不是素数",n);
	  
	  return 0;
}

#include<stdio.h>
#include<math.h>
int main()
{
	int m,i,k;
	k=sqrt(m);           //()不能省略
	
	printf("输入整数m:");
	scanf("%d",&m);
	
	if(m==2)
	printf("2是素数\n");
	
	else
	{

	for(i=2;i<=k;i++)
	if(m%i==0)
	break;
	
	if(i>k)
	printf("%d是素数\n",m);
	
	else printf("%d不是素数\n",m);
    }

}

补充:两个数之间的所有素数

#include<stdio.h>

int main()
{
	int a,b,i,f;
	printf("输入两个正整数:");
	scanf("%d %d",&a,&b);        //%d与%d之间要有空格 
	
	
	printf("%d与%d之间的素数有:\n",a,b);
	
	while(a<b)
	{
		f=0;
		
		for(i=2;i<=a/2;++i)
		{
			if(a%i==0)
			{
				f=1;
				break;
			}
			
		}
		if(f==0)
		printf("%d\n",a); 
		
		++a;
	}
	return 0;
}

使用函数,不懂

#include <stdio.h>
 
int checkPrimeNumber(int n);
int main()
{
    int n1, n2, i, flag;
 
    printf("输入两个正整数: ");
    scanf("%d %d", &n1, &n2);
    printf("%d 和 %d 间的素数为: ", n1, n2);
 
    for(i=n1+1; i<n2; ++i)
    {
        // 判断是否为素数
        flag = checkPrimeNumber(i);
 
        if(flag == 1)
            printf("%d ",i);
    }
    return 0;
}
 
// 函数定义
int checkPrimeNumber(int n)
{
    int j, flag = 1;
 
    for(j=2; j <= n/2; ++j)
    {
        if (n%j == 0)
        {
            flag =0;
            break;
        }
    }
    return flag;
}

32.判断Armstrong数(阿姆斯壮数)

// 判断C(阿姆斯壮数)
//Armstrong数:n位数的各位数的n次方之和等于该数
#include<stdio.h>
 int main()
 {
 	int n,o,i,result=0;
 	
 	printf("输入一个三位数:");
 	scanf("%d",&n);
 	
 	o=n;
 	
 	while(o!=0)
 	{
 		i=o%10;
 		result+=i*i*i;
 		o/=10;
	 }
	 
	 if(result==n)
	 printf("%d是Armstrong数",n);
	 else
	 printf("%d不是Armstrong数",n);
	 
	 
 }

补充:求1000以内的完数

完数:指一个数恰好等于它的包括 1 在内的所有因子之和。如 6=1+2+3

#include<stdio.h>
int main()
{
 int i,j,sum;
 for(i=1;i<=1000;i++)
 {
  sum=0;
  for(j=1;j<i;j++)
  {
     if(i%j==0)
	 {
    sum+=j; 
     }
 
  }
  
  if(sum==i)
  {
  printf("%d\n",i);
   }
   
 }
 
 return 0;
 
} 

33. 求一个整数的所有因数

#include<stdio.h>

int main()
{
	int number,i;
	
	printf("请输入一个整数:");
	scanf("%d",&number);
	
	printf("%d的因数有\n",number);
	
	for(i=1;i<=number; ++i)
	
	{
		if(number%i==0)
		{
			printf("%d\n",i);
		}
	}
	return 0;
}

补充:求两个数之间的所有公因数

#include<stdio.h>

int main()
{
	int n1,n2,i;
	printf("输入两个数:");
	scanf("%d %d",&n1,&n2);
	
	printf("这两个数的所有公因数有\n",i);
	
	for(i=1;i<=(n1>n2 ? n2:n1); ++i)
	{
		if(n1%i==0&&n2%i==0)
		{
			printf("%d\n",i);
		}
		
	 } 
	 
	return 0;
}

34.输出各种三角形图案

*
* *
* * *
* * * *
* * * * *

#include<stdio.h>

int main()
{
	int i,j,rows;
	
	printf("行数:");
	scanf("%d",&rows);
	
	for(i=1;i<=rows;++i)
	{
		for(j=1;j<=i;++j)
		{
			printf("*");
		}
		printf("\n");
	}
}


A
B B
C C C
D D D D
E E E E E
#include<stdio.h>
int main()

{ char i='A',  j='G';
     for( ;i<=j;i++,j--)  
         printf("%c%c", i, j);
}





        *
      * * *
    * * * * *
  * * * * * * *
* * * * * * * * *
#include <stdio.h>
int main()
{
    int i, space, rows, k=0;
 
    printf("Enter number of rows: ");
    scanf("%d",&rows);
 
    for(i=1; i<=rows; ++i, k=0)
    {
        for(space=1; space<=rows-i; ++space)
        {
            printf("  ");
        }
 
        while(k != 2*i-1)
        {
            printf("* ");
            ++k;
        }
 
        printf("\n");
    }
    
    return 0;
}

        *    

      * * *  

    * * * * *  

  * * * * * * *

* * * * * * * * *

  * * * * * * *    

    * * * * *  

      * * *      

         *

#include <stdio.h>
int main()
{
    int i, space, k=0;
 
    for(i=1; i<=5; ++i, k=0)
    {
        for(space=1; space<=5-i; ++space)
        {
            printf("  ");
        }
 
        while(k != 2*i-1)
        {
            printf("* ");
            ++k;
        }
 
        printf("\n");
    }
    
     for(i=6; i<=9; ++i, k=0)
    {
        for(space=1; space<=i-5; ++space)
        {
            printf("  ");
        }
 
        while(k != (19-2*i))
        {
            printf("* ");
            ++k;
        }
 
        printf("\n");
    }
    
    return 0;
}

35.表格形式输出数据

36.实现简单的计算器

37.判断一个数是否可以为两个素数之和

38.二进制与十进制相互转换

39.八进制与十进制相互转换

40.八进制与二进制相互转换

42.输出数组并计算数组元素平均值

#include <stdio.h>
 
int main() 
{
   int array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
   int sum, loop;
   float avg;
 
   sum = avg = 0;
   
   for(loop = 0; loop < 10; loop++)
   {
      sum = sum + array[loop];
      printf("%d ", array[loop]);
   }
   
   avg = (float)sum / loop;     //如果不加(float),输出不为4.5,而是4
   
   printf("\n平均值为 %.2f", avg);   
   
   return 0;
}

1 2 3 4 5 6 7 8 9 0
平均值为 4.50

补充:自定义输入计算平均值

#include<stdio.h>
int main()
{
	int n,i;
	float num[100],sum=0.0,average;
	
	printf("输入元素个数(不大于100):");
	scanf("%d",&n);
	
	for(i=0;i<n;++i)
	{
		printf("%d.输入数字",i+1);
		scanf("%f",&num[i]);
		sum+=num[i];
		
	}
	average=sum/n;
	printf("平均值为%.2f",average);
	
	return 0;	
}

 43.逆向输出数组

#include<stdio.h>
int main()
{

		int array[5]={1,2,3,4,5};
		int loop;
		
		for(loop=4;loop>=0;loop--)//loop=4而不是5
		printf("%d",array[loop]); 
		
		return 0;
	
}

44.计算数组元素之和

#include <stdio.h>
 
int main() 
{
   int array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
   int sum, loop;
 
   sum = 0;
   
   for(loop = 9; loop >= 0; loop--)
 {
      sum = sum + array[loop];      
   }
 
   printf("元素和为:%d", sum);   
 
   return 0;
}

45.找出数组的最大元素值

#include<stdio.h>
int main()
{
	int array[5]={1,2,3,4,5};
	int loop,max;
	
	max=array[0];
	
	for(loop=1;loop<5;loop++)
	{
		if(max<array[loop])
		{
			max=array[loop];
		}
	
    }
		printf("最大元素为%d",max);
		
		return 0;
	
}

补充:用户自定义输出

#include<stdio.h>
int main()
{
	int i,n;
	float array[100];
	
	printf("输入元素个数");
	scanf("%d",&n);
	
	for(i=0;i<n;++i)
	{
		printf("输入数字%d:",i+1);
		scanf("%f",&array[i]);
		
	}
	
	for(i=1;i<n;++i)
	{
		if(array[0]<array[i])
		array[0]=array[i];
    }
    printf("最大元素为%.2f",array[0]);
}

46.查找数组中最小的元素

使用 for 循环迭代出输出元素,从第一元素开始逐个比较,获取最小的元素

#include<stdio.h>

int main()
{
	int array[5]={7,6,3,4,9};
	int loop,min;
	
	min=array[0];
	
	for(loop=1;loop<5;loop++)
	{
		if(min>array[loop])
		min=array[loop];
		
	}
	printf("最小元素为%d",min);
	
}

补充:冒泡法排序

#include<stdio.h>
int main()
{
	int i = 0;
	int j = 0;
	int temp;
	int a[10] = {1,0,2,4,3,6,7,9,8,5};
	int len = sizeof(a)/sizeof(a[0]);
	for(i = 0;i<len-1;i++)
	{
		for(j = 0;j< len-1-i;j++)
		{
			if(a[j+1]>a[j])
			{
				temp = a[j+1];
				a[j+1] = a[j];
				a[j] = temp;
			
			}
		}
	}
	for(i = 0;i<len;i++)
	{
		printf("%d ",a[i]);
	}
	return 0;
}
//冒泡法 
#include <stdio.h>
int main()
{
	int i,j,t,a[10];                   //定义变量数组基本类型
	printf("Please input numbers: ");
	for(i=0;i<10;i++)
	{
		scanf("%d",&a[i]);             //从键盘输入要排序的数组
	}	
	
	printf("Please output numbers: ");
	
	for(i=0;i<10;i++)
	{
		for(j=i+1;j<=9;j++)
		{
			if(a[i]>a[j])
			{            //如果后一个数比前一个数大利用中间变量t实现俩值互换
				t=a[i];
				a[i]=a[j];
				a[j]=t;
			}
		}
		
		printf("%-5d",a[i]);
	}

}

补充:选择法排序

#include<stdio.h>
int main()
{
	int i = 0;         //定义一个i并且赋初值为0,i作为数组的下标
	int j = 0;      //定义j并且赋初值为0,j作为找到最大值时所对应的下标
	int k;            //定义一个k,用来保存此次循环中最大值的下标
	int temp;         //定义一个中间变量temp,供以后交换值的时候使用
	int a[]={4,5,6,72,1,7,9,3,};    //定义了一个9个数的数组,并且初始化
	int len = sizeof(a)/sizeof(a[0]);  //len是数组的大小
	for(i = 0;i<len;i++)        //判断i是否小于len,执行下面的语句
	{
		k = i;           //假设此次循环中的最大值就是当前的值   
		for(j = i+1;j<len;j++)
		{
			if(a[j]>a[k])    //将假设的当前最大值与后面的值比较
			{
				k = j;     //若后面的值更大,则交换下标
			}
		}
		if(k != i)       //比较之后如果此次循环中最大值并非当前值
		{ 
			temp = a[i];   //将此次循环中的最大值与a[i]交换
			a[i] = a[k];
			a[k] = temp;
		}
	}
	for(i=0;i<len;i++)       //利用for循环将结果依次输出
	{
		printf("%d ",a[i]);
	}
}

#include<stdio.h>
int main()
{
	int a[10],i,j,k,t;
	printf("输入十个数字:\n");
	
	for(i=0;i<=9;i++)
	scanf("%d",&a[i]);
	printf("\n");
	
	for(i=0;i<9;i++)
	{
		k=i;
		
		for(j=i+1;j<10;j++)
		if(a[j]<a[k])
		k=j;
		
		if(k!=i)
		{
			t=a[i];
			a[i]=a[k];
			a[k]=t;
		}

			}		
    printf("从小到大排列:\n");
    for(i=0;i<=9;i++)
    printf("%d ",a[i]);
}

例题:猴子选大王

例子:     n 只猴子要选大王,选举方法如下:所有猴子按 1、2、3…n 编号围坐成一圈,从第1号开始,顺时针,按照 1、2…m 报数,凡是报到 m 的猴子退出圈外,如此循环报数,直到圈内剩下最后一只猴子,该猴子就是大王,编写程序实现上述过程,n,m 由键盘输入。

分析:     用一个含 n 个元素的数组 a,初始化时,a[i]的值为 i+1,存放猴子的编号1、2…n,计数器 count 清零,从 a[0] 开始循环报数(测试),每报一次,count 加 1,当 count 等于 m 时,这只猴子 a[i] 就出局,打印 a[i] 值,并将 a[i] 清零,count 也清零重新继续报数,如此反复,最后退出的猴子就是大王。

47.数组的拆分与合并

48.数组拷贝

50.两矩阵相加

51.矩阵转换

52.用指针访问数组元素

53.引用循环替换数值

54.判断最大值

55.删除字符串中的特殊字符

56.连接字符串

57.计算字符串的长度

58.查找字符在字符串中出现的次数

59.字符串中各种字符的计算

60.字符串复制

61.字符串排序

62.使用结构体

函数

例一、输入两个数 m,n 求 m!/n! 的值

#include<stdio.h>

int calu(int x)
{
	int i,z=1;
	for(i=1;i<=x;i++)   //是<=不是< 
	z=z*i;
	return(z);
	
}

int main()
{
	int m,n;
	printf("请输入m,n");
	scanf("%d%d",&m,&n);
	printf("m!/n! 的值为 %f\n",(float)calu(m)/(float)calu(n));
	
}

例二、


void f(int a, int b)
{  a += 2;
   b -= 3;
   printf("%d %d\n", a, b);   //输出12 2 
}


int main()  // exp73.cpp
{   int x, y; 
    void f(int, int);
    x = 10;
    y = 5;
    f(x, y);
    printf("%d %d\n", x, y);    //输出10 5 
}

//输出 12 2
//     10 5

例三、

计算 s = 1^k + 2^k + 3^k + …… + n^k   

#include <stdio.h>   
int main( )
{
    int sum(int,int);         
   
    int k = 4, n = 6;
    printf("Sum of 1^k+2^k+3^k+……+n^k =");
    
	printf("%d\n", sum(k,n)); // 调用 sum 函数
 }	
 
int sum(int k,int n)  // 计算 1 到 n 的 k 次方之累加和
{  
    int s=0;
    int power(int,int);        // 求幂的函数说明
    for(int i=1;i<=n;i++)  
        s += power(i, k);      // 累加
    return s;                  
 }

int power(int m,int n)	       // 计算 m 的 n 次方
{   
  int p=1, i;
  for(i=0;i<n;i++)  p *= m;   // 累乘算法
  return p;
 }

例四、

计算x^y

#include<stdio.h>
int ch(int a,int b)
{
	int m,n;
	n=1;
	for(m=1;m<=b;m++)
	n=n*a;
	return n;
}

int main()
{
	int x,y;
	printf("请输入x,y");
	scanf("%d%d",&x,&y);
	printf("%d",ch(x,y));
}

例五、

1.组成不重复的数字

有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

#include<stdio.h>
int main()
{
	int i,j,k;
	printf("\n");
	
	for(i=1;i<=4;i++)
	{
		for(j=1;j<=4;j++)
		{
			for(k=1;k<=4;k++)
			{
				if(i!=k&&i!=j&&j!=k)
				{
					printf("%d%d%d\n",i,j,k);
				}
			}
		}
	}
	return 0;
}


123
124
132
134
142
143
213
214
231
234
241
243
312
314
321
324
341
342
412
413
421
423
431
432

2.企业发放的奖金根据利润提成

3.求解一个数x

一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

程序分析:

假设该数为 x。

1、则:x + 100 = n^2, x + 100 + 168 = m^2

2、计算等式:m^2 - n^2 = (m + n)(m - n) = 168

3、设置: m + n = i,m - n = j,i * j =168,i 和 j 至少一个是偶数

4、可得: m = (i + j) / 2, n = (i - j) / 2,i 和 j 要么都是偶数,要么都是奇数。

5、从 3 和 4 推导可知道,i 与 j 均是大于等于 2 的偶数。

6、由于 i * j = 168, j>=2,则 1< i < 168 / 2 + 1。

7、接下来将 i 的所有数字循环计算即可。

#include<stdio.h>
int main()
{
	int i,j,m,n,x;
	for(i=1;i<168/2+1;i++)
	
	{
		if(168%i==0)
		{
			j=168/i;
			if(i>j&&i%2==0&&j%2==0)
			{
				m=(i+j)/2;
				n=(i-j)/2;
				
				x=n*n-100;
				
				printf("%d+100=%d*%d\n",x,n,n);
				printf("%d+268=%d*%d\n",x,m,m);
				
			}
		}
	}
	

	return 0;
}

-99+100=1*1
-99+268=13*13
21+100=11*11
21+268=17*17
261+100=19*19
261+268=23*23
1581+100=41*41
1581+268=43*43

4.判断某天是这一年的第几天

输入某年某月某日,判断这一天是这一年的第几天?

思路:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。

不同的方法

5.从小到大排序

输入三个整数x,y,z,请把这三个数由小到大输出。

#include<stdio.h>
int main()
{
	int x,y,z,t;
	 printf("输入三个数字\n");
	 scanf("%d%d%d",&x,&y,&z);
	 
	if(x>y)
	{
		t=x;x=y;y=t;
		
	}
	
	if(x>z)
	{
		t=z;z=x;x=t;
		
	}
	
	if(y>z)
	{
		t=y;y=z;z=t;
	}
	printf("从小到大排序:%d %d %d\n",x,y,z);
	
}
#include <stdio.h>
int main()
{
	int a,b,c,p,q,r,s,t;
	printf("输入三个数字:");
	scanf("%d%d%d",&a,&b,&c);
	
	p=(a<b)?a:b;
	q=(a>b)?a:b;
	r=(p>c)?p:c;
	s=(q>c)?q:c;
	t=(p<c)?p:c;
	
	printf("%d %d %d",t,r,s);
	
	return 0; 
}

设计程序输出 Fibonacii 数列的前 20 项

要求每行输出5个数据   

Fibonacii 数列定义如下:


#include <stdio.h>
int main()
{  
   int f0=0,f1=1,f2;
   printf("%-5d%-5d", f0,f1);//%-5d表示按五位的固定位宽输入整数型数值,如果不足五位,就在前面补空格 
   
   for(int n=2;n<20;n++)
   {  
      f2=f0+f1;
      
      if(n%5==0) 
          printf("\n");    
          
      printf("%-5d", f2);
      
      f0=f1;  
      f1=f2;
   }
}

“百鸡问题”

鸡翁一,值钱          五,鸡母一,值钱三,鸡雏三,值钱一。百钱买百          鸡,问鸡翁、母、雏各几何?

#include <stdio.h>  
int main()
{ int i,j,k;
  printf("   公鸡    母鸡    小鸡\n");
  for(i=0;i<=20;i++)
    for(j=0;j<=33;j++)
    {  k=100-i-j;
	     if((5*i+3*j+k/3==100)&&(k%3==0))			         
                     // 注意(k%3==0)非常重要,想一想为什么   	       
          printf("%6d%8d%8d\n", i, j, k); 
    }
}

26.

#include<stdio.h>
int fact(int n)
{
	if (n==0||n==1)
	return 1;
	
	else
	return n*fact(n-1);
	
}

int main(void)
{
	int i;
	for(i=1;i<=5;i++)
	{
		printf("%d!=%d\n",i,fact(i));
	}
	
	return 0;
}

28.

#include<stdio.h>
int age(int n)
{
	if(n==1)
	return 10;
	
	else 
	return age(n-1)+2;
	
	
}

int main(void)
{
	int n;
	n=age(5);
	printf("%d\n",n);
	return 0;
}

补充

#include<stdio.h>

int Max(int a,int b,int c)
{
	int max=a;
	if(b>max)
	{
		max=b;
		if(c>max)
		{
			max=c;
		}
	}
	else
	{
		if(c>max)
		{
			max=c;
		}
	}
	return max;
}

int main()
{
	int x,y,z,maxOne;
	
	printf("请输入三个数字");
	scanf("%d%d%d",&x,&y,&z);
	
	maxOne=Max(x,y,z);

	printf("最大数为%d\n",maxOne);
	return 0;
}
#include<stdio.h>

float Max(float a,float b,float c)
{
	return a>=b?(a>=c?a:c):(b>=c?b:c);
	
}


int main()
{
	float x,y,z,max;
	printf("输入三个数\n");
	scanf("%f%f%f",&x,&y,&z);
	
	max=Max(x,y,z);
	printf("最大值为:%f\n",max);
	
	
	return 0;
}

递推

1.汉诺塔问题(hanoi)

有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小.要求按下列规则将所有圆盘移至C杆:
1.每次只能移动一个圆盘;
2.大盘不能叠在小盘上面.
可将圆盘临时置于B杆,也可将从A杆移出的圆盘重新移回A杆,但都必须尊循上述两条规则。求移动的过程。

A柱子上的(n-1)个圆环通过C移动到了B柱子上,且在B柱子从下往上,从大到小放着)此时当我们将最大的圆环从A移到C上后,A柱子已经空了,我们就需要将B柱子上剩下的(n-1)圆环通过A移动到C即可。是不是有点熟悉,这一步和上一步是类似的

#include <stdio.h>

int m;

void Hanoi(int n, char A, char B, char C)
{
	if (n == 1)
		printf("step %d: 塔%c --> 塔%c\n", m++, A, C);
	else
	{
		Hanoi(n - 1, A, C, B);
		printf("step %d: 塔%c --> 塔%c\n", m++, A, C);
		Hanoi(n - 1, B, A, C);
	}
}

int main()
{
	int n;
	m = 1;
	printf("请输入汉诺塔圆盘数量>:");
	scanf("%d", &n);
	Hanoi(n, 'A', 'B', 'C'); //圆盘数量 塔A, 塔B, 塔C
	return 0;
}

请输入汉诺塔圆盘数量>:4
step 1: 塔A --> 塔B
step 2: 塔A --> 塔C
step 3: 塔B --> 塔C
step 4: 塔A --> 塔B
step 5: 塔C --> 塔A
step 6: 塔C --> 塔B
step 7: 塔A --> 塔B
step 8: 塔A --> 塔C
step 9: 塔B --> 塔C
step 10: 塔B --> 塔A
step 11: 塔C --> 塔A
step 12: 塔B --> 塔C
step 13: 塔A --> 塔B
step 14: 塔A --> 塔C
step 15: 塔B --> 塔C
 

 2.Fibonacii 数列

 

#include<stdio.h>

int fib(int n)
{  
    if(n==1 || n==2) 
	return 1;
    else 
	return fib(n-1) + fib(n-2);
}
int main()

{

int a=0,sum;
printf("请输入正整数n:");
scanf("%d",&a);

for(int i=a;i>0;i--)
{
sum=fib(i);
printf("fibonacci数列第%d个数:%d\n",i,sum);}

}

请输入正整数n:4
fibonacci数列第4个数:3
fibonacci数列第3个数:2
fibonacci数列第2个数:1
fibonacci数列第1个数:1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值