详解经典c程序100例(1~50)

目录

1.三位数字

2.企业发奖金

3.完全平方数

4.这是一年的第几天?

5.从小到大输出三个整数

6.输出c的图案

7.输出特殊图案

8.九九乘法表

9.输出国际象棋棋盘

10.打印楼梯

11.生兔子

12.判断素数(素数筛)

13.水仙花数

14.分解质因数

15.成绩等级

16.最大公约数和最小公倍数

17.统计字符个数

18.求s=a+aa+aaa+aaaa+aa...a

19.完数

20.坠球求反弹高度

21.猴子吃桃

22.乒乓球比赛选手名单

23.打印菱形

24.分数数列求和

25.阶乘和

26.递归法求阶乘

27.逆序打印字符

28.第五个人几岁啦?

29.打印逆序数

30.回文数

31.字母判断星期几

32.change color

33.清屏函数

34~36略

37.对10个数进行排序

38.矩阵对角线元素和

39.插入一个数

40.逆序输出数组 

41.static定义静态变量

42.auto定义变量

43.static另一种

46.宏#define命令练习(1)

47.宏#define命令练习(2)

49.#if #ifdef和#ifndef的综合应用

50.头文件练习


1.三位数字

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

——依次遍历三位数字,如果三位数字都不相同就打印出来并递增总个数;

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

    return 0;
 } 

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,求应发放奖金总数?

——多个if else,把奖金总数定义为长整型避免溢出

#include<stdio.h>
int main()
{
  long int i;
  int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
  scanf("%ld",&i); 
  bonus1=100000*0.1;
  bonus2=bonus1+100000*0.75;
  bonus4=bonus2+200000*0.5;
  bonus6=bonus4+200000*0.3;
  bonus10=bonus6+400000*0.15;
  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
                      bonus=bonus10+(i-1000000)*0.01;
  printf("bonus=%d",bonus);
  return 0;
}

3.完全平方数

题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?(在十万以内判断)

——整数n,sqrt(n+100)*sqrt(n+100)==100+n,sqrt(n+268)*sqrt(n+268)==268+n

#include<stdio.h>
#include<math.h>
int main()
{
	for(int i=1;i<=100000;i++)
	{
		int x=sqrt(i+100);
		int y=sqrt(i+100+168);
		if(x*x==i+100&&y*y==i+268) /*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/
		printf("%d is a perfect square!\n",i);
	}
    return 0;
}

4.这是一年的第几天?

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

——正常加上各月份天数和当前天数就好了,只是要判断是否为闰年,闰年的二月会多一天

#include<stdio.h>
int LeapyearJudge(int year)
{
	if(year%4==0&&year%100!=0||year%400==0)
	return 1;
	else
	return 0;
}
int main()
{
	int year,month,day;
	int months[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//为了使一月对应months[1],所以把第一个数字设为0,其实是摆设 
	printf("\nplease input year,month,day\n");
	scanf("%d%d%d",&year,&month,&day);
	int answer=0;
	for(int i=0;i<month;i++)
	{
		answer+=months[i];
	}
	answer+=( day+LeapyearJudge(year) );
	
	printf("It is the %dth day.",answer);
    return 0;
}

5.从小到大输出三个整数

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

#include<stdio.h>
int main()
{
	int x,y,z;
	int t;
	scanf("%d%d%d",&x,&y,&z);
	if(x>y)
	{
		t=x;x=y;y=t;	
	}
	if(y>z)
	{
		t=y;y=z;z=t;
	}
	if(x>z)
	{
		t=x;x=z;z=t;	
	}	
	printf("%d %d %d",x,y,z);
	return 0;
 } 

6.输出c的图案

题目:用*号输出字母C的图案。

——这......那就直接打印呗

#include<stdio.h>
int main()
{
	printf(" ****\n");
  	printf(" *\n");
  	printf(" * \n");
 	printf(" ****\n");
	return 0;
 } 

7.输出特殊图案

题目:输出特殊图案,请在c环境中运行,看一看,Very Beautiful!

——我是不太懂他想怎么样,可能是我没调字体的问题吧,打印出来是乱码,看看就过去了。

下面放的是给的答案(雨我无瓜)

#include "stdio.h"
#include "conio.h"
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);
  getch(); 
}

8.九九乘法表

题目:输出9*9口诀。

——%-3d表示左对齐,占三位;

#include<stdio.h>
int main()
{
	for(int i=1;i<=9;i++)
	{
		for(int j=1;j<=9;j++)
		{
			printf("%d*%d=%-3d",i,j,i*j);/*-3d表示左对齐,占3位*/
		}
		printf("\n");/*每一行后换行*/
	}
	
	return 0;
 } 

9.输出国际象棋棋盘

题目:要求输出国际象棋棋盘。
——根据i+j的变化来控制输出黑方格,还是白方格。比如设置(1,1)就是白方格,(1,2)是黑方格;

#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;
 } 

10.打印楼梯

题目:打印楼梯,同时在楼梯上方打印两个笑脸;

#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;
}

11.生兔子

题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

——每个月兔子数的数列是1 1 2 3 5 8 13....,实际上就是一个斐波那契数列。除了第一项和第二项,目前项是前一项和前前一项的加和,也

#include<stdio.h>
int main()
{
	long f1=1,f2=1;
	for(int i=1;i<=20;i++)
	{
	printf("%12ld %12ld",f1,f2);
		if(i%2==0) printf("\n");//换行
	f1=f1+f2;//前两个月加起来赋给第三个月 
	f2=f1+f2; 
	}
    return 0;
}

就是f(n) = f(n-1) + f(n-2)

12.判断素数(素数筛)

常规的方法就是遍历2~n-1,如果都不能整除,说明没有因数,n就是素数。不过时间复杂度很高,超过1e9就寄了(bushi)。

可以优化到2~根方n,算是一点点进步。另外还有埃氏筛可以得到2~n内所有的素数。

WWW关门,放图!!

 欧拉筛就是更优化了,不过埃氏筛很不错了(太伟大了呜呜呜),没有写欧拉筛主要是我不会。

下面是埃氏筛的代码。

#include<stdio.h>
#include<math.h>
const int N=1e7+5;
int isPrime[N],prime[N],primeNum;
//分别用于记录一个数字是否为素数,所有素数,素数个数

void getPrime(int n)
{
	primeNum=0;
	for(int i=1;i<=n;i++)
		isPrime[i]=1,prime[i]=0;//isPrime[N]全部初始化为1,全都标记为是素数。prime[N]初始化为0,暂时没有素数填充
	for(int i=2;i<=n;i++)
	{
		if(isPrime[i])//如果标记为是素数,就进行接下来的筛选
		{
			prime[++primeNum]=i;//写入素数集合! 
			for(int j=i*i;j<=n;j+=i)
				isPrime[j]=0;//把该素数的倍数全部划掉掉 	
		 } 
	 } 
	 
 } 
int main()
{
	getPrime(100);
	for(int i=1;i<=primeNum;i++)
	{
		if(i%5==0)
		printf("\n");
		printf("%d\t",prime[i]);
	}
	 return 0;
 } 

13.水仙花数

题目:打印出所有的“水仙花数”,水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。

——手写一个mypow代替pow,防止LT.

(用pow的版本在第二个,这个只计算了三位数的水仙花数)

#include<stdio.h>
#include<math.h>
#define N 7
//水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。
int mypow(int n,int ci);
int main()
{
	int n;
	scanf("%d",&n);
	int a[N];
	int sum;
	for(int i=mypow(10,n-1);i<mypow(10,n);i++)
	{
		int t=i;
		sum=0;
		for(int j=0;j<n;j++)
		{
			a[j]=t%10;
			t/=10;
		}
		
		for(int j=0;j<n;j++)
		{
			sum+=mypow(a[j],n);
		}
		
		if(sum==i)
		printf("%d\n",i);
	}
 } 
 
 int mypow(int n,int ci)
 {
 	int back=1;
 	for(int i=0;i<ci;i++)
 	{
 		back*=n;
	 }
	 return back;
 }
#include<stdio.h>
#include<math.h>
int main()
{
	int a,b,c,i; 
	for(i=100;i<=999;i++)//遍历三位数
	{
		a=i/100;/*分解出百位*/
    	b=i/10%10;/*分解出十位*/
    	c=i%10;/*分解出个位*/
		if(pow(a,3)+pow(b,3)+pow(c,3)==i)
		printf("%d	",i); 
		
	 } 
}

14.分解质因数

题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5

——不用素数筛的办法比较简单,第二个给出素数筛我就想麻烦一下自己,对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: 
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印~
(2)如果n能整除k,则应打印出k的值,并用n/k作为新的正整数n,重复执行1。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

——先写一个素数筛,然后找到最小的质数x,如果x==n,就输出,否则接着找n/x的最小因数.....以此类推;

#include<stdio.h>
int main()
{
	int n,i;
	scanf("%d",&n);
	printf("%d=",n);
	for(i=2;i<=n;i++)
	{
		while(n!=i)//只要没有达到目的,i可以一直为最小值因数,如果不是就break然后i++; 
		{
			if(n%i==0)
			{
				printf("%d*",i);
				n/=i;
			}
			else
			break;
		 } 
	}
	printf("%d",n);
}
#include<stdio.h>
const int N=1e7+5;
int isPrime[N],prime[N],primenum;
//分别用于记录一个数字是否为素数,所有素数,素数个数

void getPrime(int n)
{
	primenum=0;
	for(int i=1;i<=n;i++)
		isPrime[i]=1,prime[i]=0;//isPrime[N]全部初始化为1,全都标记为是素数。prime[N]初始化为0,暂时没有素数填充
	for(int i=2;i<=n;i++)
	{
		if(isPrime[i])//如果标记为是素数,就进行接下来的筛选
		{
			prime[++primenum]=i;//写入素数集合! 
			for(int j=i*i;j<=n;j+=i)
				isPrime[j]=0;//把该素数的倍数全部划掉掉 	
		 } 
	 } 
 } 
int main()
{
	int num,smallprime=1;
	scanf("%d",&num);
	printf("%d=",num);
	getPrime(num);
	int t=num;
	for(int i=1;i!=num;)
	{
		for(int j=1;j<=primenum;j++)
		{
			if(t%prime[j]==0)
			{
				printf("%d",prime[j]);
				t/=prime[j];
				i*=prime[j];
				break;
			}
		}
		if(i!=num)
		printf("*");
	 } 
}

15.成绩等级

题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示

#include<stdio.h>
int main()
{
	int score;
	char c;
	scanf("%d",&score);
	(score>=90)?c='A':((score>=60)?c='B':c='C');
	//或者c=score>=90?'A':(score>=60?'B':'C');
 
	printf("%c",c);
 } 

16.最大公约数和最小公倍数

题目:输入两个正整数m和n,求其最大公约数和最小公倍数。

两个自然数的乘积等于这两个自然数的最大公约数和最小公倍数的乘积】,所以计算最大公约数就好了。有辗转相除法和辗转相减法,就不写穷举法了。

#include<stdio.h>
//辗转相除法
int measure1(int x,int y)
{
	int z=y;
	while(x%y!=0)
	{
		z=x%y;
		x=y;
		y=z;
	}
	return z; 
 } 
 //辗转相减法 
 int measure2(int x,int y)
{
	
	while(x!=y)
	{
		if(x>y)
		x=x-y;
		if(y>x)
		y=y-x;
	}
	return y; 
 } 
int main()
{
	int m,n;
	scanf("%d%d",&m,&n);
	if(m<n)//把较大数放在m上面 
	{
		int t=m;m=n;n=t;
	}
	printf("%d",measure1(m,n));
}

17.统计字符个数

题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
ps:这题真的很无聊Ozzzzzz.

#include<stdio.h>
int main()
{
	char c;
  	int letters=0,space=0,digit=0,others=0;
  	printf("please input some characters\n");
  	while((c=getchar())!='\n')//逐字符读取,逐字符处理 
  	{
   	 	if(c>='a'&&c<='z'||c>='A'&&c<='Z')
      		letters++;
      	else if(c==' ')
        	space++;
        else if(c>='0'&&c<='9')
          	digit++;
        else
          	others++;
  }
  printf("all in all:char=%d space=%d digit=%d others=%d\n",letters,space,digit,others);

 } 

18.求s=a+aa+aaa+aaaa+aa...a

题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。

#include<stdio.h>
int main()
{
	int a,n;
	printf("please input a and n\n");
  	scanf("%d%d",&a,&n);
  	printf("a=%d,n=%d\n",a,n);
  	long int answer=0,t=a;
  	for(int i=0;i<n;i++)
  	{
	  	answer+=t;
  		t=t*10+a;
	}
	printf("a+aa+...=%ld\n",answer);
 } 

19.完数

题目:一个数如果恰好等于所有的真因子(即除了自身以外的约数)的和,这个数就称为“完数”。例如6=1+2+3.编程找出1000以内的所有完数。

——暴力枚举累加每一个因子(每个因子只算一次,而且也不只是质因数,这也是不用前面分解质因数那题改编的原因)

完全数:
6=1+2+3

28=1+2+4+7+14

496=1+2+4+8+16+31+62+124+248

后面还有:8128、33550336………

#include<stdio.h>
int main()
{
	for(int t=2;t<=1000;t++)
	{
		int sum=0;
		for(int i=1;i<t;i++)
		{
			if(t%i==0)
				sum+=i;//因子累加 
		}
		if(sum==t)
		printf("%d\n",t);
	}
}

20.坠球求反弹高度

题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

//题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
#include<stdio.h>
int main()
{
	float height=100,answer=100;
	for(int i=0;i<10;i++)
	{
		height/=2;
		answer+=2*height;
	}
	printf("the total of road is %f meter\n",answer);
  	printf("the tenth is %f meter\n",height);
	
	return 0;
 } 

21.猴子吃桃

题目:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。

——倒着算就行,后一天的桃子数加一就是前一天桃子数的一半

#include<stdio.h>
int main()
{
	int answer=1;
	for(int i=1;i<10;i++)
	{
		answer=(answer+1)*2;
	}
	printf("%d peach",answer);
	return 0;
}

22.乒乓球比赛选手名单

题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。 

——这这这,属实给我整迷糊了,有什么趣味呢Ozzzz

#include<stdio.h>
int main()
{
	char i,j,k;/*i是a的对手,j是b的对手,k是c的对手*/
  	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')//a说他不和x比,c说他不和x,z比
            printf("order is a--%c\tb--%c\tc--%c\n",i,j,k);
         }
      }
    }

	return 0;
}

23.打印菱形

题目:打印出如下图案(菱形)

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

#include<stdio.h>
int main()
{
	int i,j;
	for(i=1;i<=4;i++)
	{
		for(j=4-i;j>0;j--)
			printf(" ");
		for(j=2*i-1;j>0;j--)
			printf("*");
			
		printf("\n");
	}
	for(i=3;i>=1;i--)
	{
		for(j=4-i;j>0;j--)
			printf(" ");
		for(j=2*i-1;j>0;j--)
			printf("*");
		printf("\n");
	}
 } 

24.分数数列求和

题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。

——它没有要求结果表示为分数,我们就用float吧,省点事,主要是分子分母有规律; 

#include<stdio.h>
int main()
{
	float a=1,b=2;
	float num=b/a,t,answer=0;
	for(int i=0;i<20;i++)
	{
		answer+=num;
		t=b;
		b=a+b;
		a=t;
		num=b/a;
	}
	printf("%f",answer);
}

25.阶乘和

题目:求1+2!+3!+...+20!的和

#include<stdio.h>
int main()
{
	float n,s=0,t=1;
  for(n=1;n<=20;n++)
  {
    t*=n;
    s+=t;
  }
  printf("1+2!+3!...+20!=%e\n",s);//结果用科学计数法表示 
}

26.递归法求阶乘

计算n的阶乘,n从键盘输入

#include<stdio.h>
long JieChengN(int n);
//计算n的阶乘
int main()
{
	int m;
	scanf("%d",&m);
	long result;
	printf("the result is:%ld",JieChengN(m));
	return 0;
 } 
 long JieChengN(int n)
 {
 	if(n==1)
 		return 1;
	else
		return n*JieChengN(n-1); 	
 }

27.逆序打印字符

题目:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。

——写在递归前面的是正序进行的,写在递归后面的是倒序进行的,注意结束递归的条件要写出来,也要写上最后一步的操作(比如本题就是打印,如果不写,他就不会打印最后一个输入的字符)

#include<stdio.h>
void reverse(int n)
{
	char c=getchar();//正序读取字符 
	if(n==1)
	putchar(c);
	else
	{
		reverse(n-1);
		putchar(c);//逆序打印 
	}
}

int main()
{
	reverse(5);
	return 0;
}

28.第五个人几岁啦?

题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后 问第一个人,他说是10岁。请问第五个人多大?

—— funny啊。直接说不好吗,非要写一个程序。用递归写一下。

#include<stdio.h>
int cal(int n)
{
	if(n==1)
	return 10;
	else
	return cal(n-1)+2;
}
int main()
{
	printf("%d",cal(5));
}

 29.打印逆序数

题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

#include<stdio.h>
int main()
{
	int num,n=0,i,j;
	int a[5]={0,0,0,0,0};
	scanf("%d",&num);
	for(i=0;i<5;i++)
	{
		a[i]=num%10;
		num/=10;
	}
	for(i=0;i<5;i++)
	{
		if(a[i]!=0)
		{
			n++;
		 	printf("%d ",a[i]);
		}
	}
	printf("\n%d",n);
}

 30.回文数

题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。

#include<stdio.h>
int main()
{
	int num,n=0,i,j;
	int a[5]={0,0,0,0,0};
	scanf("%d",&num);
	for(i=0;i<5;i++)
	{
		a[i]=num%10;
		num/=10;
	}
	if(a[0]==a[4]&&a[1]==a[3])
		printf("huiwen number");
	else
	printf("nono");
}

31.字母判断星期几

题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。

#include<stdio.h>
int main()
{
	int flag=0;
		char c=getchar();
		getchar();
		if(flag==0)
		{
			switch (c)
			{
			case 'm':printf("monday");break;
			case 'w':printf("wednesday");break;
			case 'f':printf("friday");break;
			case 't':
				{
					flag=1;
					break;
				}
			case 's':
				{
					flag=2;
					break;
				}	
			}
		}
		if(flag==1)
		{
			printf("please input second letter\n");
			c=getchar();
			if(c=='h')
			printf("thursday");
			else
			printf("tuesday");
		}
		if(flag==2)
		{
			printf("please input second letter\n");
			c=getchar();
			if(c=='a')
			printf("saturday");
			else
			printf("sunday");
		}
}

32.change color

Press any key to change color, do you want to try it. Please hurry up!

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

void color(int x) 
{
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x);
}
int main()
{
  int colors;
  for (colors = 0; colors < 8; colors++)
  { 
    color(colors);/*设置文本的背景颜色*/
    printf("This is color %d\r\n", colors);
    printf("Press any key to continue\r\n");
    getch();/*输入字符看不见*/
  }
}

33.清屏函数

头文件:stdlib.h 函数:system(“cls”);

34~36略

37.对10个数进行排序

#include<stdio.h>
int main()
{
	int a[10]={7,9,2,3,1,4,10,8,5,6};
	for(int i=0;i<10;i++)
	for(int j=i;j<10;j++)
	{
		if(a[i]>a[j])
		{
			int t=a[i];
			a[i]=a[j];
			a[j]=t;
		}
	}
	for(int i=0;i<10;i++)
	printf("%d ",a[i]);
}

38.矩阵对角线元素和

题目:求一个3*3矩阵对角线元素之和

#include<stdio.h>
int main()
{
	float a[3][3],sum=0;
  	int i,j;
  	printf("please input rectangle element:\n");
  	for(i=0;i<3;i++)
    	for(j=0;j<3;j++)
      		scanf("%f",&a[i][j]);
  	for(i=0;i<3;i++)
    	sum=sum+a[i][i];
  	printf("duijiaoxian he is %6.2f",sum);

}

39.插入一个数

题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。

#include<stdio.h>
int main()
{
	int a[10]={1,3,8,19,40,67,99,899,999,0};
	printf("original array is:\n");
  	for(int i=0;i<9;i++)
    	printf("%5d",a[i]);

	int n;
	scanf("%d",&n);
	if(n>a[8])
	{
		a[10]=n;
	}
	else
	{
		int i,j;
		for(i=0;i<10;i++)
		{
			if(n<a[i])
			break;
		}
		for(j=9;j!=i;j--)
		{
			a[j]=a[j-1];
		}
		a[i]=n;
	}
	printf("\nnow array is:\n");
	for(int i=0;i<10;i++)
    	printf("%5d",a[i]);
}

40.逆序输出数组 

——把第一位和最后一位交换,这样不停的对称着交换,然后重现输出;

#include<stdio.h>
const int  N=5;
int main()
{
	int a[N]={9,6,5,4,1},i,temp;
  printf("\n original array:\n");
  for(i=0;i<N;i++)
    printf("%4d",a[i]);
  for(i=0;i<N/2;i++)
  {
    temp=a[i];
    a[i]=a[N-i-1];
    a[N-i-1]=temp;
  }
  printf("\n sorted array:\n");
  for(i=0;i<N;i++)
    printf("%4d",a[i]);

}

41.static定义静态变量

题目:学习static定义静态变量的用法,运行结果在代码后面。

#include<stdio.h>
void varfunc()
{
  int var=0;
  static int static_var=0;
  printf("var = %d \n",var);
  printf("static_var = %d \n",static_var);
  printf("\n");
  var++;
  static_var++;
}
int  main()
{
  int i;
  for(i=0;i<3;i++)
    varfunc();
}

  

42.auto定义变量

题目:学习使用auto定义变量的用法

#include<stdio.h>
int main()
{
  int i,num;
  num=2;
  for(i=0;i<3;i++)
  {
    printf(" The num = %d \n",num);
    num++;
    {
      auto int num=1;
      printf(" The internal block num = %d \n",num);
      num++;
    }
  }
}

 43.static另一种

#include<stdio.h>
int main()
{
  int i,num;
  num=2;
  for(i=0;i<3;i++)
  {
    printf("The num equal %d \n",num);
    num++;
    {
      static int num=1;
      printf("The internal block num equal %d\n",num);
      num++;
    }
  }
}

46.宏#define命令练习(1)

#include<stdio.h>
#define TRUE 1
#define FALSE 0
#define SQ(x) (x)*(x)
int main()
{
  int num;
  int again=1;
  printf("\40: Program will stop if input value less than 50.\n");
  while(again)
  {
    printf("\40:Please input number==>");
    scanf("%d",&num);
    printf("\40:The square for this number is %d \n",SQ(num));
    if(num>=50)
      again=TRUE;
    else
      again=FALSE;
  }
}

47.宏#define命令练习(2)

——宏定义中允许包含两道衣裳命令的情形,此时必须在最右边加上"\";

#include<stdio.h>
/* 宏定义中允许包含两道以上命令的情形,此时必须在最右边加上"\" */
#define exchange(a,b) { \
                        int t;\
                        t=a;\
                        a=b;\
                        b=t;\
                      }
int main()
{
  int x=10;
  int y=20;
  printf("x=%d; y=%d\n",x,y);
  exchange(x,y);
  printf("x=%d; y=%d\n",x,y);
}

49.#if #ifdef和#ifndef的综合应用

#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("\40: The larger one is %d\n",MAXIMUM(a,b));
#else
  printf("\40: The lower one is %d\n",MINIMUM(a,b));
#endif
#ifndef MIN
  printf("\40: The lower one is %d\n",MINIMUM(a,b));
#else
  printf("\40: The larger one is %d\n",MAXIMUM(a,b));
#endif
#undef MAX
#ifdef MAX
  printf("\40: The larger one is %d\n",MAXIMUM(a,b));
#else
  printf("\40: The lower one is %d\n",MINIMUM(a,b));
#endif
#define MIN
#ifndef MIN
  printf("\40: The lower one is %d\n",MINIMUM(a,b));
#else
  printf("\40: The larger one is %d\n",MAXIMUM(a,b));
#endif
}

50.头文件练习

略略略。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序和三三总有一个能跑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值