【C语言上机练习题目-代码+运行结果】

C语言题目练习

一、 前言

  文章的所有题目为大一下学期的上机练习,为了记录之前做的内容,同时也能对在学C语言的朋友有所帮助,所以写了这篇文章。文章的部分程序总体偏长,因为在实现功能的基础上考虑了连续输入以及通过手动输入参数进行多种结果输出。因为我个人的想法觉得这是一个思维的培养,如果每一个程序都能这么去思考,后面写程序就会有不少新的想法,功能会得到扩展。程序98%为个人独自完成,期间加入C语言交流群与群友探讨交流过相关语法。转载需要注明文章出处!

  

二、 顺序程序结构程序设计


2.1 在屏幕中输出一行文字“Hello,Welcome!”

  • 源代码
# include <stdio.h>
int main ( )
{	printf("Hello, Welcome!\n");
	return 0;
}

  • 运行结果


2.2 输入一个华氏温度,要求输出摄氏温度。公式为:c = 5/9(F-32)

  • 源代码
# include <stdio.h>
# include <math.h>
int main ( )
{
	float c,F;
	printf("请输入华氏温度:");
	scanf("%f",&F);
	c=5*(F-32)/9;
	printf("华氏温度为:%7.2f\n摄氏温度为%7.2f",F,c);
	return 0;

}

  • 运行结果


2.3 输入三角形三边长 ,求三角形周长和 面积 。用scanf输入数据,输出计算结果,输出时要求有文字说明,取消书店后两位小数。

  • 源代码
# include <stdio.h>
# include <math.h>

int main ()
{
	float a,b,c,l,s,p;
	printf("请输入三角形三边:");
	scanf ( "%f%f%f",&a,&b,&c);
	if (a+b>c&&a+c>b&&b+c>a&&a-b<c&&a-c<b&&b-c<a)//三角形成立的条件是 任意两边和大于第三边,任意两边差小于第三边
	{
	l=a+b+c;
	p=l/2;
	s=sqrt(p*(p-a)*(p-b)*(p-c));
	printf("\n三角形三边分别为:\n \na=%7.2f\tb=%7.2f\tc=%7.2f\n\n",a,b,c);
	printf("三角形的边长为:%7.2f\n\n三角形的面积为:%7.2f\n\n",l,s);

	}
	else
		printf("三边不能构成三角形\n");
	return 0;
}

  • 运行结果
    构成三角形的情况
    在这里插入图片描述

不能构成三角形的情况
在这里插入图片描述


2.4 设圆的半径r = 1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据,输出计算结果,输出时要求有文字说明,取小数点后两位小数。

  • 源代码
# include <stdio.h>
# include <math.h>
# define PI 3.1415926 
int main ( )//求圆周长、圆面积、球积、圆体积、圆柱体体积
{
	
	float r, h, l, s_of_c, s_of_b, v_of_b, v_of_c;// Cricle 圆、 Ball 球、Cylinder圆柱
	printf("请输入半径r和高度h:");
	scanf("%f%f",&r,&h);
	l = 2*PI*r;                      //圆周长
	s_of_c = PI*pow(r,2);           //  圆面积        pow(r,n)表示r^n;
	s_of_b = 4*PI*pow(r,2);         //球表面积
	v_of_b = 4*PI*pow(r,3)/4;       //球体积
	v_of_c = PI*pow(r,2)*h;         //圆柱体积
	printf("\n以参数半径r=%f,高度为%f的几何值为:\n\n",r,h);
	printf("圆的周长:\t%7.2f\n\n圆的面积:\t%7.2f\n\n球的表面积:\t%7.2f\n\n球的体积:\t%7.2f\n\n圆柱体的体积:\t%7.2f\n\n",l,s_of_c,s_of_b,v_of_b,v_of_c);
	return 0;


}


  • 运行结果
    在这里插入图片描述


2.5 输出如下金字塔层图形(代码改进可以实现1-26层的输出)

在这里插入图片描述

  • 源代码
# include <stdio.h>
# include <math.h>
int main ( )
{
	int l,i,j,k;
	char a=' ',b='A',re = 'Y';
	while(re=='Y')
	{
	printf("请输入想要的行数:");
	fflush(stdin);
	scanf("%d",&l);
	for (i=1;i<=l;i++)       //行数的控制
	{
	for (j=1;j<=l-i;j++)     //字母左边空格的控制
		printf("%c",a);

	for(k=1;k<=2*i-1;k++)      //字母的个数控制
		printf("%c",b+i-1);
	for (j=1;j<=l-i;j++)      //字母右边的个数控制
		printf("%c",a);
	printf("\n");
	}

	printf("\n============================================================================================================\n\n");
	printf("是否继续输入,是请输入(Y),否请输入(N):\t");
	fflush(stdin);
	scanf("%c",&re);

	}
return 0;
}


  • 运行结果
    在这里插入图片描述

三、 选择结构程序设计


3.1 设计如下分段函数的设计

在这里插入图片描述

  • 源代码
# include <stdio.h>
# include <math.h>
# include <stdlib.h>
int main ( )
{
	float x,y;
	char a='Y';

	while (a=='Y')
	{
	printf("请输入x的值:");
	scanf("%f",&x);
	
	if(x<1) y=x;
	else 
		if (x<10) y=2*x-1;
		else y=3*x-11;


		printf("y = %7.2f\n",y);
		printf("Please enter the 'Y'or'N:\t");  //进行判断是否继续进行
		fflush(stdin);                           //进行缓存的清除
		scanf("%c",&a);

	}
	system("pause");
return 0;
}

  • 运行结果

在这里插入图片描述


3.2 从键盘输入一个字符,可以是数字、字母、或是标点符号,对输入的字符进行判断,如果是数字则输出“* is a number!”,如果是字母则输出“* is a letter!”,如果是其他的字符怎输出“* is the other!”(*为输入的字符)

  • 源代码
# include <stdio.h>
# include <stdlib.h>

int main ( )
{
	char ch,a='Y';

	while (a=='Y')
	{
	printf("请输入一个字符:");
	fflush(stdin);
	scanf("%c",&ch);
	if (ch>=48&&ch<=57)           //0~9 在ASCII的数值为48~57
		printf("ch is a number!\n\n");
	else 
		if(ch>=65&&ch<=90||ch>=97&&ch<=122)
		printf("ch is the letter!\n\n");
		else 
		printf("ch is the other!\n\n");

	printf("Please enter 'Y' or 'N':\t");
	fflush(stdin);
	scanf("%c",&a);
	}
	return 0;
}

  • 运行结果

在这里插入图片描述


3.3  输入两个实数a、b ,保证变量 a中存储的是较大的数,b变量 中存储的实较小的数,并按照由大到小的顺序输出。

  • 源代码
# include <stdio.h>

int main ( )
{
	double a,b,temp;
	int i;
	char ch='Y';

	while (ch=='Y')
	{
	printf("Please enter 'a' and 'b':\t");
	//fflush(stdin);
	scanf("%lf%lf",&a,&b);
	getchar ( );
	
	if (a>b)
		printf("a = %lf\tb = %lf\n\n",a,b);
	else 

		temp = a,
		a = b,
		b = temp, //多个表达式用,来连接 可以来代替一个语句
		printf("a = %lf\tb = %lf\n\n",a,b);

		printf("contibue(Y)or break(N):\t");
			//fflush(stdin);
			scanf("%c",&ch);	
			getchar ( );
	}


return 0;

}


  • 运行结果

在这里插入图片描述


3.4 输入一年份,判断该年是否是闰年。

# include <stdio.h>
# include <math.h>
int main ( )
{
	int a,b,c,year;
	char ch ='Y';
	while(ch == 'Y')
	{
	printf("请输入年份:\t");
	fflush (stdin);
	scanf("%d",&year);
	
	a = year%4;
	b = year%100;
	c = year %400;
	if (a==0&&b!=0||c==0)
		printf("%d是闰年\n",year);
	else 
		printf("%d不是闰年\n",year);

	printf("Wheather continue or not!('Y'or'N'):\t");
	fflush (stdin);
	scanf("%c",&ch);
	}
return 0;


}


  • 运行结果

在这里插入图片描述


3.5 从键盘输入一个月号,显示输出该月号的英文名称

  • 源代码
# include <stdio.h>
int main ( )
{

int month; 
char ch = 'Y';
printf("**********************************************\n");
printf("*************将中文月份转化为英文*************\n");
printf("**********************************************\n");

do {

printf("请输入输入月份:");
fflush(stdin);
scanf("%d",&month);
	switch (month)
	{
	case 1:printf("January\n");break;
	case 2:printf("February\n");break;
	case 3:printf("March\n");break;
	case 4:printf("April\n");break;
	case 5:printf("May\n");break;
	case 6:printf("June\n");break;
	case 7:printf("July\n");break;
	case 8:printf("August\n");break;
	case 9:printf("September\n");break;
	case 10:printf("October\n");break;
	case 11:printf("Novembern");break;
	case 12:printf("December\n");break;
	}


	printf("\n是否继续('Y' or 'N'):\t");
	fflush(stdin);
	scanf("%c",&ch);
} while(ch=='Y');


return 0;
}


  • 运行结果
    在这里插入图片描述


  3.6 给一个不多于5位的正整数,要求:(1)求出它是几位数;(2)分别打印出每一位数字。

  • 源代码
# include <stdio.h>
# include <math.h>

int main( )
{
	int b,i,n,l=0;
	int a[10] = {0,0};
char ch='Y';


printf("***********************************************************************************\n");
printf("给一个不多于5位的正整数\n(1)求出它是几位数;\n(2)分别打印出每一位数字。\n");
printf("***********************************************************************************\n");

while (ch=='Y')
{
printf("\n***********************************************************************************\n");
printf("请输入一个五位数以内的整数:\t");
while (l==0)
{
fflush(stdin);
scanf("%d",&n);
if (n>=0&&n<10) l=1,printf("\n%d这是个一位数\n",n);
else if (n>=10&&n<100) l=2, printf("\n%d这是个两位数\n",n);
else if (n>=100&&n<1000) l =3,printf("\n%d这是个三位数\n",n);
else if(n>=1000&&n<10000) l=4,printf("\n%d这是个四位数\n",n);
else if(n>=10000&&n<99999)l=5,printf("\n%d这是个五位数\n",n);
else l = 0, printf("\n\n输入的不是0-99999的范围请重新输入:\t");
}



for (i=0;i<l;i++)  //对位数的值赋值给 数组
	a[i] = n%10,
	n/=10;

printf("\n位数分别为:\n"); //逆序打印数组
//for (i=l*2;i>0;i--)
//	printf("%c\t",w);
//for (i=0;i<l;i++)
//printf("%d\t",a[i-1]);


for (i=l;i>0;i--)
	printf("%d\t",a[i-1]);


printf("\n\nWheather to continue('Y' or 'N'):\t\t");
fflush (stdin);
scanf("%c",&ch);
l=0;
}
}



  • 运行结果

在这里插入图片描述


 3.7 运输公司对用户计算运费。路程(s)越远,每公里运费越低。标准如下:

公里数打折情况
s = 250km没有折扣
250km ≤ s < 500km2%折扣
500km ≤ s < 1000km5%折扣
1000km ≤ s < 2000km8%折扣
2000km ≤ s < 3000km10%折扣
  **设每公里每吨货物的基本运费为p,货物重为w,距离为s,折扣为d,则总运费的计算公式为:f = p * w * s * ( 1 – d )
请编程实现:从键盘输入基本运费p,货物重w,距离s,计算输出用户最终需要支付的运费。**
  • 源代码
# include <stdio.h>
# include <math.h>
int main ( )
{


//	s = 250km       没有折扣;
//250km ≤ s < 500km 2%折扣;
//500km ≤ s < 1000km 5%折扣;
//1000km ≤ s < 2000km 8%折扣;
//2000km ≤ s < 3000km 10%折扣;
//3000km ≤ s 15%折扣;
//设每公里每吨货物的基本运费为p,货物重为w,距离为s,折扣为d,则总运费的计算公式为:f = p * w * s * ( 1 – d )


	float  p,w,s,d,f;             //基本运费为p,货物重为w,距离为s,折扣为d,总运费f
	int i=1;
	printf(" ************************************************************************\n\n");
	printf("*************************        运费问题        *************************\n\n");
    printf(" ************************************************************************\n\n\n");
	

	while (i==1)   //进行循环
	{
	printf("请输入基本运费p:\t");
	scanf("%f",&p);
	printf("\n请输入货物重量w:\t");
	scanf("%f",&w);
	printf("\n请输入行驶路程s:\t");
	scanf("%f",&s);
	if (s<0||p<0||w<0)			printf("\n您输入的数值有出现都不是正数的情况,请重新输入\n");
	else	if (s<250) printf("没有折扣\n");    //条件判断,对总运费进行计算
	else  if (s>=250&&s<500)	d = 2/100,printf("\n总运费为\t%7.2f\t\n",p * w * s * ( 1 - d ));
	else if (s>=500&&s<1000)	d = 5/100,printf("\n总运费为\t%7.2f\t\n",p * w * s * ( 1 - d ));
	else if (s>=1000&&s<2000)	d = 8/100,printf("\n总运费为\t%7.2f\t\n",p * w * s * ( 1 - d ));
	else if (s>=2000&&s<3000)	d = 10/100,printf("\n总运费为\t%7.2f\t\n",p * w * s * ( 1 - d ));
	printf("************************************************************************************\n\n\n");
	printf("break(0) continue(1):\t");
	scanf("%d",&i);
	}


return 0;


}




  • 运行结果

在这里插入图片描述


 3.8 输入a、b、c三个整数,求最小值。

  • 源代码
# include <stdio.h>
# include <math.h>
 int main ( )
 {
	 int i,l,min,k=1;
	 int n[200]={0};
 
 printf("***************************************************************\n\n");
 printf("              输入a、b、c三个整数,求最小值                     \n");
 printf("***************************************************************\n\n");



 while (k == 1)
 {
 printf("请您输入即将比较的数字个数(200以内):");
 scanf("%d",&l);
 printf("请输入你的数值:\n");
 for(i=0;i<l;i++)
	 scanf("%d",&n[i]);
 min = n[0];

 for(i=1;i<l;i++)//寻找最小值
	 if (min>n[i])
		 min = n[i];

 printf("输入的值为:");//将输入的值进行打印
  for(i=0;i<l;i++)
	 printf("%d\t",n[i]);

 printf("\n最小值为%d\n",min);//打印最小值

 printf("BREAK(0) CONTINUE(1):\t");
 scanf("%d",&k);
  printf("***************************************************************\n\n");
 }
 
 return 0;
 }


  • 运行结果

在这里插入图片描述


四、  循环结构程序设计


4.1 求20的阶乘n!

在这里插入图片描述

  • 源代码
# include <stdio.h>
# include <math.h>

int main ( )
{
	int i,a=1,n;
	double sum=1,h=0;
	//double sum[200]={0},s=0;
	printf("****************************************************************************************************\n");
	printf("                                            阶乘求和                            \n");
	printf("****************************************************************************************************\n");

	while( a == 1)
	{
	printf("请您入阶乘n的值:\t");
	scanf("%d",&n);

	for (i=1;i<=n;i++)            //(1!+2!+……+20!)
	{
	sum *=i;
	h +=sum;
	printf("sum[%d] = %.lf\n",i,sum);
	}



	printf("\n\n1!+2!+……+%d:\t%.lf\n",n,h);

	printf("\n****************************************************************************************************\n");
	printf("\nBREAK(0) CONTINUE (1):\t");
	scanf("%d",&a);

}


return 0;
}

  • 运行结果
    在这里插入图片描述


4.2  求出100到200以内最大的素数和最小的素数,并求出两者的差值。

  • 源代码
# include <stdio.h>
# include <math.h>

int main ( )
{
	int b=1,i,k,j,m,n,r,r1,len,min =1000,max=0;
	int a[200]={0},s[200]={0};
	
	printf("*******************************************************************************\n\n");
	printf("题目:求出100到200以内最大的素数和最小的素数,并求出两者的差值\n\n");
	printf("算法:利用素数的性质,只有1和本身作为公因数,利用循环对其判断,存值到数数组里面,再利用循环求最大最小值,最后求差值。\n\n\n");
	printf("*******************************************************************************\n\n");

	while( b== 1)
	{
	printf("请输入区间端点值:\t");  
	scanf("%d%d",&m,&n);
	len = n-m+1;             //求出区间包含的个数



	for(i=0;i<len;i++)       //对区间的数值赋值给数组
		a[i]=m+i;			
	
	printf("打印所有素数:\n");
	for(i=0;i<len;i++)		//逐个检测
	{ 

   for (k=2;k<a[i];k++)
   {

   r = a[i]%k;
   if(r==0) break;       
   else r1 =1; 

    if(r1==1&&k==a[i]-1)    //除到2~a[i]-1都不整除,就是质数。
	printf("%d\t",a[i]);
	s[i] = a[i];           //将素数赋值给数组

   }


	}



	
   for(i=0;i<len;i++)
	   if(s[i]!=0)
	   if(min>s[i]) min = s[i];    //求最小素数
 
   for(i=0;i<len;i++)  
	   if(s[i]!=0)//求最大素数
	   if(max<s[i]) max = s[i];
   printf("\n\n最大素数-最小素数=%d\n\n",max-min);

 

   printf("\n*******************************************************************************\n\n");


   printf("\nBREAK(0) CONTINUE (1):\t");
	scanf("%d",&a);


	}

return 0;
}


  • 运行结果

在这里插入图片描述


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

  • 源代码
# include <stdio.h>
# include <math.h>

int main ( )
{

	int a,b,t,n,r;
	char re='Y';
	printf("\n*******************************************************************\n");
	printf("\t\t利用辗转相除法 进行求最大公因数和最小公倍数\n");
	printf("\n*******************************************************************\n");
	
	while (re == 'Y')			//进行多次输入判断最大公因数和最小公倍数的总循环
	{
	printf("\n请输入两个数:\t");
	scanf("%d%d",&a,&b);

	printf("\n%d  %d的最大公因数和最小公倍数是:\t",a,b);
	if(a<b)
	{
	t = a;				//交换值,使得第一个数为大值
	a = b;
	b = t;
	}
	r = a%b;			//判断是否整除
	n = a*b;			//最小公倍数就是,两个数都出于最大公因数,最后的商再*最大公因数

	while(r!=0)
	{
	a = b;				
	b = r;
	r = a%b;
	
	}

	printf("%d\t%d\t",b,n/b);

	printf("\n\n是否继续计算,是(Y),否(N):\t");
	fflush (stdin);
	scanf("%c",&re);
	printf("\n=================================\n");
	}

return 0;
}


  • 运行结果
    在这里插入图片描述


4.4  已知xyz + yzz = 532,其中x、y、z 都是数字(0~9),编写一个程序求出x、y、z 分别代表什么数字。

  • 源代码
# include <stdio.h>
# include <math.h>
 
int main( )
{

	int a,i,j,k,x[10]={0},y[10] = {0},z[10] = {0};

	
	printf("\n\t******************************************************************************************************\n");
	printf("\t*                                                                                                    *\n");
	printf("\t*    已知xyz + yzz = 532,其中x、y、z 都是数字(0~9),编写一个程序求出x、y、z 分别代表什么数字。    *\n");
	printf("\t*                                                                                                    *\n");
	printf("\t*                    注意:   xyz、yzz表示的是两个三位数                                             *\n");
	printf("\t*                                                                                                    *\n");
	printf("\t******************************************************************************************************\n");


	for( i = 0;i<10;i++)    //对x y z 进行赋值,(也可以采用初始化)
	x[i]=i,
	y[i]=i,
	z[i] = i;

	
 for( i = 0;i<10;i++)
 {
	
	 
		 for( j = 0;j<10;j++)
			{ 
		
				
					for (k = 0;k<10;k++)
					{
						
					
						if(x[i]*100+y[j]*10+z[k]+y[j]*100+z[k]*10+z[k]==532) 
							printf("\n符合条件的值粉分别为:x = %d\ty = %d\t z = %d\n\n",x[i],y[j],z[k]);
					}
			}

 }





return 0;
}


  • 运行结果
    在这里插入图片描述


4.5 打印出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本书。例如,153是一水仙花数,因为

在这里插入图片描述

  • 源代码
# include <stdio.h>
# include <math.h>
 int main ( )
 {

int m,n,i,a,b,c,l,j=1;
int w[900] = {0};

 printf("******************************************************************************\n\n");
 printf("                           打印出所有的“水仙花数”\n");
 printf("******************************************************************************\n\n");


 while (j==1)
 {

 printf("\n请输入检录是否水仙花的区间的值:\t");
 scanf("%d%d",&m,&n);

 for (i = m;i<=n;i++) //对数组进行赋值
	 w[i-m] = i;
 l = n-m+1;

 for(i=0;i<l;i++)
 {
	 a = w[i]/100;     //取百位
	 b = w[i]%100/10;   //取十位
	 c  =w[i]%10;       //取个位
	 if(w[i]==a*a*a+b*b*b+c*c*c )
	 printf("%d\t",w[i]);
	
 }


  printf("\n\n******************************************************************************\n\n");
 
 printf("\nBREAK(0) CONTINUE (1):\t");
	scanf("%d",&j);
 }


 return 0;



 }


  • 运行结果
    在这里插入图片描述


4.6  编写一个程序打印如下对称图形(行数由键盘输入1~9 范围的值),例如下面是输入的数字4 时的情形:

在这里插入图片描述

  • 源代码
#define _CRT_SRCURE_NO_WARNINGS
# include <stdio.h>
# include <math.h>
int main( )
{
	int i,j,n;
	char a = 1,ch = ' ';
  printf("\n\t                  利用循环语句打印下列图形                    \n");
printf("\n\t*******************************************************************************\n");
  printf("\t**                               *********                                   **\n");
  printf("\t**                                4444444                                    **\n");
  printf("\t**                                 33333                                     **\n");
  printf("\t**                                  222                                      **\n");
  printf("\t**                                   1                                       **\n");
  printf("\t**                                  222                                      **\n");
  printf("\t**                                 33333                                     **\n");
  printf("\t**                                4444444                                    **\n");
  printf("\t**                               *********                                   **\n");
  printf("\t*******************************************************************************\n\n\n");
  
  while(a ==1)
  {
  printf("请输入1~9范围的数字n:");           //提示输入i = 2*n-1;i>0;i--
  scanf("%d",&n);
   printf("\n");
  for( i=1;i<n;i++)  //完成逆序金字塔
  {
	  for (j=1;j<i;j++)//完成空格打印
	  printf("%c",ch);
	
	  for(j=1;j<2*n-2*i+2;j++)//完成数字打印
	   printf("%d",n+1-i);
	
		 printf("\n"); //实时换行
  }


  for ( i=1;i<=n;i++)  //正序打印金字塔
  {
  
	for(j=1;j<=n-i;j++)    //完成空格
	printf("%c",ch);
	for(j=1;j<=2*i-1;j++)  //完成数字
	printf("%d",i);
	printf("\n");    //实时换行
  }

  printf("\n****************************************************************************************************\n\n");
	printf("\nBREAK(0) CONTINUE (1):\t");
	scanf("%d",&a);


  }

  
return 0;
}


  • 运行结果
    在这里插入图片描述


4.7  学校有近千名学生,在操场上排队,5 人一行余2 人,7 人一行余3 人,3 人一行余1 人。

编写一个程序求该校的学生人数。

  • 源代码
# include <stdio.h>
# include <math.h>

int main ( )
{

	int a,b,c,i,r,num;
	printf("\n\t**********************************************************************************************************\n\n");
  printf("\t学校有近千名学生,在操场上排队,5 人一行余2 人,7 人一行余3人,3 人一行余1 人,编写一个程序求该校的学生人数。\n");
  printf("\t***************************************************************************************************************\n\n\n");

  for (i=900;i<1100;i++)
  {
  
  a = i%5;
  b = i%7;
  c = i%3;
  if ( a==2&&b==3&&c==1)
	  printf("该学校有%d学生\n",i);

  }


return 0;
}


  • 运行结果
    在这里插入图片描述


4.8   学校某班A、B、C、D 四位同学中的一位做了好事不留名,表扬信来了之后,班主任问这四位是谁做了好事,四位回答如下:

A 说:不是我。
B 说:是C。
C 说:是D。
D 说:他胡说。
已知三个人说的是真话,一个人说的是假话。请根据这些信息,找出做了好事的人

  • 源代码
# include <stdio.h>
# include <math.h>
# include <stdlib.h>
int main ( )
{
	
	char A;
	printf("\n\n\t***************************************************************************************************************************\n");
	printf("\t****   学校某班A、B、C、D 四位同学中的一位做了好事不留名,表扬信来了之后,班主任问这四位是谁做了好事,四位回答如下:   ****\n");                                                               
	printf("\t****           A 说:不是我。B 说:是C。 C 说:是D。D 说:他胡说。                                                     ****\n");                                                                                   
	printf("\t****          已知三个人说的是真话,一个人说的是假话。请根据这些信息,找出做了好事的人。                               ****\n");                                        
	printf("\t***************************************************************************************************************************\n");

	for(A='A';A<'D';A++)
		if((A!='A')+(A=='C')+(A=='D')+(A!='D')==3)
		
			printf("做好事的人是 %c\n\n",A);



return 0;

}


  • 运行结果
    在这里插入图片描述

五、  数组


5.1  从键盘输入10个整数,对这个十个数进行排序,并输出。

  • 源代码
# include<stdio.h>
# include <math.h>
int main ()
{
	/*从键盘输入10个整数,对这个十个数进行排序,并输出。*/
	int a[500];
	int b=1,i,j,n,temp;
	printf("\n*************************************************************\n");
	printf("        从键盘输入10个整数,对这个十个数进行排序,并输出。      \n");
	printf("\n*************************************************************\n");
	 
	
	while (b==1)                        //进行循环输入分数
	{
	printf("请输入将要排序的个数n:\t");  //提示输入排序个数
	scanf("%d",&n);

	printf("\n请输入需要排序的内容(从小到大):\t");

	for (i=0;i<n;i++)                   //数组进行赋值
	{
		scanf("%d",&a[i]);}

	for(i=0;i<n-1;i++)                      //排序
		for(j=0;j<n-i-1;j++)
		{
			if (a[j]>a[j+1])
			temp = a[j],
			a[j] = a[j+1],
			a[j+1] = temp;
		}


		for(i=0;i<n;i++)	                //表格打印
		{
		if(i%5==0) printf("\n");
		printf("%d\t",a[i]);
		}
		

printf("\n_________________________________________________________________________\n");

printf("\nBRAEK(0) or CONTINUE (1):\t");       //确认是否循环
		scanf("%d",&b);
	}


return 0;
}


  • 运行结果
    在这里插入图片描述


5.2  从键盘输入一串字符串,统计字符串中特定字符的个数(特定字符也需要从键盘输入),并输出个数。

  • 源代码
# include <stdio.h>
# include <string.h>

int main ( )
{
	int b=1,i,k;
	char str[800],ch;


	printf("-------------------------------------------------------------------------------------------------------\n");
	printf("\n\n       从键盘输入一串字符串,统计字符串中特定字符的个数(特定字符也需要从键盘输入),并输出个数。        \n");
	printf("-------------------------------------------------------------------------------------------------------\n");

	while (b==1)                        //进行循环输入分数
	{
	printf("\n请输入需要统计某个单词字符的单词或者句子\t");//提示输入
	fflush(stdin);
	
	gets(str);
	printf("\n请输入需要统计的字符:\t");
	scanf("%c",&ch);


	
	i = 0;
	k = 0;
	while(str[i]!=0)        //进行统计字符个数
	{
	if(str[i]==ch)
		k++;
	i++;
	}


	printf("\n您输入的单词或者句子为:\t %s\n\n想要检索个数的字符是:\tch = %c\n",str,ch);

	printf("\n\n检索到的字符个数为\t%d",k++);



	printf("\n_________________________________________________________________________\n");

printf("\nBRAEK(0) or CONTINUE (1):\t");       //确认是否循环
		scanf("%d",&b);
printf("\n_________________________________________________________________________\n");
	/*memset(str,0,sizeof(str));清除数组内容*/ 

	}



return 0;
}


  • 运行结果
    在这里插入图片描述


5.3  青年歌手参加歌曲大奖赛,有10个评委进行打分,试编程求这位选手的平均得分(去掉一个最高分和一个最低分)。

  • 源代码
//青年歌手参加歌曲大奖赛,有10个评委进行打分,试编程求这位选手的平均得分(去掉一个最高分和一个最低分)。
# include<stdio.h>
# include <math.h>
void main ( )
{
	int b=1,i,j,temp,sum=0,aver,n;
	int a[500];

	printf("\n****************************************************************************************************\n\n");
	printf("\t\t青年歌手参加歌曲大奖赛,有10个评委进行打分,\n\t\t试编程求这位选手的平均得分(去掉一个最高分和一个最低分)\n ");
	printf("\n******************************************************************************************************\n\n");
	

	while (b==1)          //进行循环输入分数
	{
	printf("请输入分数的个数(小于500个):\t");         //提示输入分数
	scanf("%d",&n);

	printf("\n请输入分数:\t");  //录入分数
	for(i=0;i<n;i++)
	{scanf("%d",&a[i]);	}

	for (i=0;i<n-1;i++)      //对分数进行排序
		for(j=0;j<n-1-i;j++)
		{
			if(a[j]>a[j+1])
			{temp = a[j];
			a[j]=a[j+1];
			a[j+1]=temp;}
		}


		for(i=1;i<n-1;i++)  //对去最大最小值的分数进行求和
		sum+=a[i];	

		aver = sum/(n-2);      //求平均值

		for(i=1;i<n-1;i++)  //打印有效的值
		{printf("a[%d] = %d\t",i,a[i]);
		if (i%4==0) printf("\n");} //换行
		printf("\nThe aver is : %d\n",aver);//求平均值
		printf("\n---------------------------------------------------------------------------------------------------------------------");
		
		/*aver -= aver; */
		sum = 0;
		aver = 0;
		printf("\nBRAEK(0) or CONTINUE (1):\t");  //确认是否循环
		scanf("%d",&b);

	}

}


  • 运行结果

在这里插入图片描述


5.4  将两个字符串连接起来,不要使用strcat函数。

  • 源代码
# include <stdio.h>
# include <string.h>

int main()
{
	int i,j,len1,len2,b = 1;
	char str1[100],str2[100],str3[200];
	printf("\n*******************************************************************************************\n");//标题提示语
	printf("                     将两个字符串连接起来,不要使用strcat函数                              \n");
	printf("*******************************************************************************************\n");


	while (b==1)                        //进行循环输入分数
	{

	printf("请输入原字符串(长度小于100):\t");              //提示输入字符串
	scanf("%s",str1);
	printf("\n请输入要追加的字符串(长度小于100):\t");  
	scanf("%s",str2);

	len1 = strlen(str1);               //对输入的字符串进行读取有效位数
	len2 = strlen(str2);
	



		i = 0;
	while(str1[i]!=0)
	{
	str3[i] = str1[i];
	i++;
	}

	j = 0;
	while (str2[j]!=0)
	{
	str3[i+j] = str2[j];
	j++;
	}

	str3[i+j] = 0;

	printf("\nstr1 = %s\tstr2 = %s\n",str1,str2);
	printf("\n您输入的第一个数组的有效长度为\tlen1 = %d\n\n您输入的第一个数组的有效长度为\tlen2 = %d\n",len1+1,len2+1);
	printf("\n追加后的数组三为:\t%s",str3);





	
printf("\n_________________________________________________________________________\n");

printf("\nBRAEK(0) or CONTINUE (1):\t");       //确认是否循环
		scanf("%d",&b);
printf("\n_________________________________________________________________________\n");
	}


return 0;

}


  • 运行结果

在这里插入图片描述


5.5  已有一个已排好序的数组,从键盘输入一个数,要求按原来排序的规律将它插入数组中。

  • 源代码
# include <stdio.h>
# include <time.h>
# include <string.h>

void fun01_in ( );
void fun02_un ( );

 int main( )
 {
	 int a,x1=1,x2=1;//a 进行状态确认			x1 实现选择状态的循环 x2 实现整体的循环

 printf("\n------------------------------------------------------------------------------------------------\n\n\n");
 printf("\t 已有一个已排好序的数组,从键盘输入一个数,要求按原来排序的规律将它插入数组中。");
 printf("\n\n--------------------------------------------------------------------------------------------------\n\n");


 while (x2==1)                        //进行整体循环
{

 while(x1==1)   // 根据输入1 或者2 进行选择不同路径实现功能
 {
 printf("\n运行状态一(数组已经初始化)请输入1,运行状态二(从键盘输入数组)请输入 2:\t\t");
 scanf("%d",&a);

 if(a==1) 
	x1 = 0, fun01_in ( );
 else if(a==2) 
	x1 = 0, fun02_un( );
 else  x1 = 1,printf("\n\n输入的不是1或者2,请重新输入确保为1或2:\n");
 }


 printf("\n***********************************************************************************\n");

printf("\nBRAEK(0) or CONTINUE (1):\t");       //确认是否循环
		scanf("%d",&x2);
		x1 = 1;
printf("\n***********************************************************************************\n");

 }



 return 0 ;

 }



void fun01_in ( )                   //状态一,数组已初始化
{
	int a[11] = {0,11,22,33,44,55,66,77,88,99};
	int i,j,t=0,number;              //t,记录出入位置


	printf("初始化的数组为:\t");   //打印初始化数组 方便比较
	for(i=0;i<10;i++)
		printf("%d\t",a[i]);


	printf("\n\n请输入插入的数字(状态一):\t");   //要出入的数字
	scanf("%d",&number);



	for(i = 0;i<10;i++)
	{
	if(a[i]>number)               //当输入数字在数组内,确定插入的位置
	{t = i;
	break;}
	
	}
	if(i==10) t = 10;			 //当输入的数值最大时,获取位置

	for(  j= 10;j>t;j-- )     //进行替换值,将每个值从插入位置往后退一位
	a[j] = a[j-1];
	 a[t] = number;	

	 printf("重新排序后的数值为:\t");      //打印新的顺序
	 for(j = 0;j<11;j++)
		 printf("%d\t",a[j]);


 
 }


void fun02_un ( )
{
 
 int a[100];
 int i,j,k,l,n,number,temp,t=0;
 printf("\n请输入数组的个数n(状态二):\t");             //输入n给定循环参数
 //fflush(stdin);
 scanf("%d",&n);

 printf("请输入一串数字(会自动进行排序):\t");
 //fflush(stdin);
 for(i = 0;i<n;i++)
	 scanf("%d",&a[i]);
 //getchar( );

 for (i=0;i<n-1;i++)         //冒泡排序进行输入数据进行排序
 {
 for(j=0;j<n-1-i;j++)
	 if(a[j]>a[j+1])
		 {temp  = a[j];
		 a[j] = a[j+1];
		 a[j+1] = temp;}
 }


  //for (i=0;i<n;i++)         //排序后打印
  //
  //printf("排序后的值为:\t%d\t",a[i]);
  //


 printf("\nPlease insert a number:\t");
 scanf("%d",&number);

 for(i = 0;i<n;i++)
 if (a[i]>number )
 {
 t=i;
 break;
 }
 

 if (i==n) t=n;

for(j=n;j>t;j--)
a[j] = a[j-1];

a[t] = number;


printf("排序以及插入后的序列为:\t");
for(i = 0;i<=n;i++ )
	printf("%d\t",a[i]);
 }










  • 运行结果
    在这里插入图片描述


5.6  将一个数组中的值按逆序重新存放。例如:原来顺序为8,6,5,4,1,要求改为1,4,5,6,8。

  • 源代码
# include <stdio.h>
# include <string.h>

int main ( )
{

	int a[100];
	int i,j,k,n,b=1,temp;


	printf("******************************************************************************\n");
	printf("\t将一个数组中的值按逆序重新存放。\n\t例如:原来顺序为8,6,5,4,1,要求改为1,4,5,6,8。\n");
	printf("*******************************************************************************");
	while (b==1)
	{

	printf("\n请输入你将要逆序数组的个数(100个以内):\t");	//提示输入数组的个数
	scanf("%d",&n);

	printf("请输入数组的内容:\t\t");
	for(i=0;i<n;i++)		//	输入数组
		scanf("%d",&a[i]);
	k = n-1;
	for(j=0;j<k;j++)    //逆序
	{temp = a[j];
	a[j] = a[k];
	a[k] = temp;
	k--;
	}

	
	for(i=0;i<n;i++)		//打印
	printf("%d\t",a[i]);


	printf("\nBRAEK(0) or CONTINUE (1):\t");  //确认是否循环
	scanf("%d",&b);
	printf("-----------------------------------------------------------------------------------------");



	}


return 0;

}


  • 运行结果

在这里插入图片描述


5.7  求一个3×3矩阵的对角线元素之和。

  • 源代码
# include <stdio.h>
# include <string.h>
int main ( )
{
	int i,j,m,n,b=1,sum1=0,sum2=0;
	int a[20][20];

	printf("******************************************************************************************\n");
	printf("\n\t               求一个n×n矩阵的对角线元素之和\n\t\t\t\t本题以3×3为例\n\n");
	printf("*******************************************************************************************\n");

	while(b==1)
	{
	printf("请输入你将形成的二维数组的行数(m)和列数(n):\t");
	scanf("%d%d",&m,&n);

	//printf("m = %d\nm= %d\n",m,n);  //调试是否接收值正确
	
	printf("请输入a[m][n]的全部值:\t");
	for(i=0;i<m;i++)
	{
	for(j=0;j<n;j++)
		scanf("%d",&a[i][j]);
	}


	for(i=0;i<m;i++)       //  打印进行验证是否接收正确
	{
	for(j=0;j<n;j++)
		printf("\t%d",a[i][j]);
	printf("\n");
	}



	for(i=0;i<m;i++)
	{
	sum1 += a[i][i];			//求右下对角线
	for(j=0;j<n;j++)
		if(i+j==n-1)
			sum2 +=a[i][j];			// 右上角对角线
	}

	printf("对角线和为:%d\n",sum1+sum2);



	printf("\nBRAEK(0) or CONTINUE (1):\t");  //确认是否循环
		scanf("%d",&b);
printf("-------------------------------------------------------------------------------------------\n");


	}



	return 0;
}


  • 运行结果

在这里插入图片描述


5.8  设计一个较为复杂的一维数组操作程序,实现对一维数组的基本操作

(本函数包括三个功能 插入 删除 寻找,其中删除中可以用)

  • 源代码
# include <stdio.h>
# include<math.h>

void fun_ins ( );
void fun_del ( );
void fun_loa ( );





int main( )
{
	int  ins,del,loa;
	int number,c,re_1,re_2=1;


	printf("***************************************************************************************************************\n\n");
	printf("          设计一个较为复杂的一维数组操作程序,实现对一维数组的基本操作\n\n");
	printf("            To achieve the funcition of insert,delete  and location         \n");
	printf("***************************************************************************************************************\n\n");


	

	while (re_2==1 )
	{
	printf("Please input the number to choose the appropriate function:\n\ninsert(1)\tdelete(2)\tposition(3):\t" );
	scanf("%d",&c);
	printf("------------------------------------------------------------------------------------------------------------------\n");

	re_1= 1;			//	保证能够进入条件判断中的循环
	while (re_1==1)
	{
	     if(c==1) re_1=0, fun_ins ( );
	else if (c==2) re_1=0,fun_del ( );
	else if (c==3) re_1 =0, fun_loa ( );
	else printf("Please reenter a number which is '1'、'2' or '3'\t ");
	}



	printf("\nBRAEK(0) or CONTINUE (1):\t");  //确认是否循环
		scanf("%d",&re_2);
		
		printf("***********************************************************************************************************************\n");

	}

}





void fun_ins ( )
{
	int str[100];
	int len,i,j,number,t,temp;
	printf("-------------------------------------------------------------------------------------------------------------------\n");
	printf("\nThe function of insert\n");						// 对进入的子函数功能进行说明
	printf("Please enter the length of your array:\t");			//提示输入数组的长度将用来做循环
	scanf("%d",&len);
	printf("Please enter the arry(It can be random):\n");		//提示输入数组
	for (i=0;i<len;i++)
	scanf("%d",&str[i]);
																//增加排序功能
	for(i=0;i<len-1;i++)
	{
		for(j=0;j<len-1-i;j++)
			if(str[j]>str[j+1])
			{
			temp  =  str[j];
			str[j] =  str[j+1];
			str[j+1] = temp;
		}
	}



	printf("Please enter the insert numner:\t");				//提示插入的数字
	scanf("%d",&number);
	printf("The original array is:\t");							//打印原来的数组,可以与后面进行比较
	for(i=0;i<len;i++)
		{if(i%5==0) printf("\n");								//指表换行
	printf("%d\t",str[i]);}

	printf("\nThe changed array is :\n");							//提示将输出新的序列

	for(i=0;i<len;i++)											//对插入的位置进行定位
	if(number<str[i])
	{
	t=i;
	break;
	}
	
	if( i==len) t = len;											//从插入位置开始往后退一位
	for(j=len;j>t;j--)
	str[j]=str[j-1];
	str[t] = number;											//插入数字




	for(j=0;j<=len;j++)
		printf("%d\t",str[j]);					     			//打印新的序列			



}

void fun_del ( )
{	int str[100];
	int len,i,j,k=0,del,temp,s;

  // printf("\nThe function of delete:\n");
	printf("--------------------------------------------------------------------------------------------------------------------\n");

	printf("\nThe function of delete\n");						// 对进入的子函数功能进行说明
	printf("Please enter the length of your array:\t");			//提示输入数组的长度将用来做循环
	scanf("%d",&len);
	printf("Please enter the arry(It can be random):\n");		//提示输入数组
	for (i=0;i<len;i++)
	scanf("%d",&str[i]);
																//增加排序功能
	for(i=0;i<len-1;i++)
	{
		for(j=0;j<len-1-i;j++)
			if(str[j]>str[j+1])
			{
			temp  =  str[j];
			str[j] =  str[j+1];
			str[j+1] = temp;
		}
	}



	printf("Please enter the deleted numner:\t");				//提示插入的数字
	scanf("%d",&del);
	printf("The original array is:\t");							//打印原来的数组,可以与后面进行比较
	for(i=0;i<len;i++)
		{if(i%5==0) printf("\n");								//指表换行
	printf("%d\t",str[i]);}

	//for (s=0;s<100;s++)          //
	//{
	for(i=0;i<len;i++)
	{
	if( del==str[i])
		{
			k++;
			for( j=i;j<len;j++)
		    str[j] = str[j+1];
			//continue;
	}
	}
	if(k==0) printf("Not find the number you want to find:\t");
//	}
	printf("\nThe changed array is :\n");							//提示将输出新的序列
	for (i=0;i<len-k;i++)

	printf("%d\t",str[i]);





}
void fun_loa ( )
{
	int str[100];
	int len,i,k=0,find,temp,s;
	//printf("\nThe function of find the number position\n");
	printf("-----------------------------------------------------------------------------------------------------------------------------------------------------------\n");

	printf("\nThe function of find the number position\n");		// 对进入的子函数功能进行说明
	printf("Please enter the length of your array:\t");			//提示输入数组的长度将用来做循环
	scanf("%d",&len);
	printf("Please enter the arry(It can be random):\n");		//提示输入数组
	for (i=0;i<len;i++)
	scanf("%d",&str[i]);
	//															//增加排序功能
	//for(i=0;i<len-1;i++)
	//{
	//	for(j=0;j<len-1-i;j++)
	//		if(str[j]>str[j+1])
	//		{
	//		temp  =  str[j];
	//		str[j] =  str[j+1];
	//		str[j+1] = temp;
	//	    }
	//}

	printf("Please enter the numner: you will find \t");
	scanf("%d",&find);
	printf("The original array is:\t");							//打印原来的数组,可以与后面进行比较
	for(i=0;i<len;i++)
		{if(i%5==0) printf("\n");								//指表换行
	printf("%d\t",str[i]);}

	printf("\nThe position of the number you want to find  is :\n");							//提示将输出新的序列


	for(i=0;i<len;i++)
	if(str[i]==find)
		printf("%d\t",i+1);
	


}


  • 运行结果

在这里插入图片描述


六、  函数


6.1  写一个判断素数的函数,在主函数输入一个整数,输出是否素数的信息。

  • 源代码
# include <stdio.h>
# include <math.h>

void prime (int x );

int main ( )

{
		int s,re_1=1;

	printf("******************************************************************************\n\n");
		printf("\t写一个判断素数的函数,在主函数输入一个整数,输出是否素数的信息。\n\n");
	printf("******************************************************************************\n\n");

	while (re_1==1)
	{
	printf("\n请输入一个数,用来判断是否为素数(大于2):\t");
	scanf("%d",&s);

	prime ( s );
	
	printf("BREAK(0) or CONTINUE (1):\t");
	scanf("%d",&re_1);
	printf("----------------------------------------------------------------------------\n");
	}

}

void prime (int x )
{

	int i;
	for (i=2;i<x;i++)
	
	if(x%i==0) {printf("\nThe number isn't a prime number !\n\n");break;}
	if(i == x) printf("\nThe number is a prime number!\n\n");


}


  • 运行结果

在这里插入图片描述


6.2  写一个函数,用“冒泡法”对输入的10个数字由小到大顺序排列,并输出。

  • 源代码
# include <stdio.h>
# include <math.h>

void bobble ( );
int main ( )
{
	int re_1=1;
	printf("\n***********************************************************************\n\n");
	printf("\t写一个函数,用“冒泡法”对输入的10个数字由小到大顺序排列,并输出。");
	printf("\n***********************************************************************\n\n");

	while (re_1==1)
	{
	bobble ( );
	printf("\n\nBREAK(0) or CONTINUE (1):\t");
	scanf("%d",&re_1);
	printf("----------------------------------------------------------------------------\n");
	
	}
return 0;
}
void bobble ( )
{
	int str[100],len,i,j,temp;
	printf("\nPlease enter the length of array:\t");	//提示输入数组长度
	scanf("%d",&len);

	printf("\nPlease enter the array:\n");
	for(i=0;i<len;i++)
		scanf("%d",&str[i]);		//给数组赋值
	for(i=0;i<len-1;i++)
		for(j=0;j<len-j-i;j++)
		
		
		if(str[j]>str[j+1])		//对数组进行排序
		{
			temp = str[j];
			str[j] =str[j+1];
			str[j+1] =temp;
		}	


				for (i=0;i<len;i++)		      //打印数组
				{	if(i%5==0) printf("\n");	//实时换行
				printf("%d\t",str[i]);}



}


  • 运行结果

在这里插入图片描述


6.3  写一函数,使给定的一个二维数组(5×5)转置,即行列互换。

  • 源代码
# include <stdio.h>
# include <math.h>


void re_or ( );		//声明

int main ( )
{



	int re=1;
	
	printf("*******************************************************************\n\n");
	printf("\n\n矩阵转换  n×n. 本题以5×5为例\n\n");
	printf("*******************************************************************\n\n");

	while (re==1)
	{
	 re_or ( );			//数组逆序子函数


		printf("\n\nBREAK(0) or CONTINUE (1):\t");
	scanf("%d",&re);
	printf("----------------------------------------------------------------------------\n");
	return 0;

}
}
void re_or ( )

{

	
	int i,j,m,n,temp,a=0,re=1;
	int str[100][100];
	
	printf("Please enter the a matrix of 'm' times 'n':\t ");		//提示输入矩阵的规格
	scanf("%d%d",&m,&n);

	printf("Please enter the array:\n");
	for(i=0;i<m;i++)			//数组赋值
		for(j=0;j<n;j++)
	scanf("%d",&str[i][j]);	

	printf("The original array is:\n");
	for(i=0;i<m;i++)				//原来数组打印
	{
			for(j=0;j<n;j++)
		printf("%d\t",str[i][j]);
			printf("\n");
	}

		
	for(i=0;i<m;i++)			//数组转换
	for(j=i;j<n;j++)
		{temp = str[i][j];
		str[i][j]=str[j][i];
		str[j][i]=temp;
		}

	
	printf("The changed array is:\n");
	for(i=0;i<m;i++)			//数组打印
	{
			for(j=0;j<n;j++)
		printf("%d\t",str[i][j]);
			printf("\n");
	}


	


}







  • 运行结果

在这里插入图片描述


6.4  写一函数,求字符串的长度,并编写主函数。

  • 源代码
# include <stdio.h>
# include <math.h>
# include <stdlib.h>
void fun_len ( );

 int main ( )
 {
	 int re_1=1;
	 printf("\n***********************************************************************\n\n");
	printf("\t\t写一函数,求字符串的长度,并编写主函数。\n");
	printf("\n***********************************************************************\n\n");

 while (re_1==1)
	{
		fun_len ( );

		printf("\n\nBREAK(0) or CONTINUE (1):\t");
	scanf("%d",&re_1);
	printf("----------------------------------------------------------------------------\n");
	
	}
 
 
 
 return 0;
 }


 void fun_len ( )
 {
	 int i,k=0,len;
 char str[100];
 printf("Please enter a array:\n");
 fflush(stdin);
 gets(str);
 len =strlen(str);
 for(i=0;i<len;i++)
 if(str[i]!=0) k++;
 printf("\nThe length of the array is :\t%d",k);

 
 
 }


  • 运行结果

在这里插入图片描述


七、  指针


7.1  使用指针作为函数参数,写一交换两个数的函数。

  • 源代码
# include <stdio.h>

void swap ( );		//声明函数
int main ( )
{


	int a,b;
	char re = 'Y';

	printf("************************************************************************************************\n\n");
	printf("\t\t使用指针作为函数参数,写一交换两个数的函数。\n");
	printf("************************************************************************************************\n\n");

	while(re =='Y')
{
	printf("\nPlease enter two values to exchange:\t");
	scanf("%d%d",&a,&b);
	printf("\nThe original order are :\n%d\t%d\t",a,b);
	swap(&a,&b);									//调用函数
	printf("\nThe changed number order are :\n%d\t%d\t",a,b);
	printf("\nWheather to continue ( Enter'Y' or 'N'):\t");
	fflush(stdin);
	scanf("%c",&re);			//确认是否循环
	printf("-----------------------------------------------------------------------------\n\n");
	}

return 0;
}

void swap ( int*a,int*b)		//定义函数
{
	int temp;			//定义中间值

	temp = *a;			//进行顺序的改变
	*a = *b;
	*b = temp;


}


  • 运行结果

在这里插入图片描述


7.2  使用指针作为函数参数,写一求数组中最大值和最小值的函数。

  • 源代码
# include <stdio.h>
# include <math.h>


void bubble_sort( int*str,int len);
int main ( )
{
	int i, len,str[200];
	char re = 'Y';
	printf("************************************************************************************\n\n");
	printf("\t\t使用指针作为函数参数,写一求数组中最大值和最小值的函数。\n");
	printf("************************************************************************************\n\n");

	while (re=='Y')
	{
	printf("\nPlease enter the length of the Array:\t");			//输入插入数字的长度
	scanf("%d",&len);
	printf("\nPlease enter the sorted Array:\n\n");
	for(i=0;i<len;i++)											//进行录取数组内容
		scanf("%d",&str[i]);

	printf("\nThe original Array order is:\n ");				//打印原来的数组
	for(i=0;i<len;i++)
	{
		if(i%5==0) printf("\n\n");
		printf("%d\t",str[i]);
	}

	bubble_sort (str,len);									//调用函数

	
	printf("\n\nThe sorted nubmber is \t");						//打印排序后的数组
	for(i=0;i<len;i++)
	{
		if(i%5==0) printf("\n\n");
		printf("%d\t",str[i]);
	}

	printf("\n\nThe max and min number in the Array are:\t%d\t%d\n\n",str[len-1],str[0]);

	printf("\n\nWheather to continue ( Enter'Y' or 'N'):\t");
	fflush(stdin);
	scanf("%c",&re);			//确认是否循环
	printf("-----------------------------------------------------------------------------\n\n");
	}

	return 0;
}


void bubble_sort( int*str,int len)
{
	int i,j, temp;

	for(i=0;i<len-1;i++)
		for(j=0;j<len-i-1;j++)
			if(str[j]>str[j+1])
			{
			temp = str [j];
			str[j] = str[j+1];
			str[j+1] = temp;
			
			}
}



  • 运行结果
    在这里插入图片描述


八、  结构体


8.1  1.有一学生信息包含学号、姓名、性别、年龄、电话等信息,要求设以一个结构体用于存储该学生信息,实现学生信息的输入和显示

  • 源代码
//1.有一学生信息包含学号、姓名、性别、年龄、电话等信息,要求设以一个结构体用于存储该学生信息,实现学生信息的输入和显示
# include <stdio.h>
# include <math.h>
# include <string.h>


struct stu 
	{
	char ID[20];
	char name [20];
	char sex [10];
	char age [10];
	char number [20];
	};


void main ( )
{
	int n,i,re=0;
	char ch ='Y',ch_1='Y';
	char  m[20];
	
	struct stu s[100];		//定义100个学生信息
	printf("****************************************************************************************************\n\n");
	printf("\t\t功能  (1)记录:学生学号、姓名、性别、年龄、联系方式\n");
	printf("\n\t\t      (2)查找:输入学生有关的信息,检索所有关于符合条件的信息内容\n");
	printf("*****************************************************************************************************\n\n");
	

	while (ch  == 'Y')		//总循环
	{
	printf("您将记录多少个学生的信息:\t");		//进行个数的录入
	scanf("%d",&n);
	printf("===================================================================\n");
	for (i=0;i<n;i++)
	{
		printf("请输入第 %d 位学生ID、姓名、性别、年龄、联系方式(两者之间用空格隔开)\n\n",i+1);	//提示输入学生信息

		fflush(stdin);
		scanf("%s %s %s %s %s",s[i].ID,s[i].name,s[i].sex,s[i].age,s[i].number);
		//s[i].n = i+1;
		/*printf("\nInput the ID:\t");
		fflush(stdin);
		gets(s[i].ID);

		printf("\nInput the name:\t");
		gets(s[i].name);

		printf("\nInput the sex:\t");
		gets(s[i].sex);

		printf("\nInput the age:\t");
		gets(s[i].age);

		printf("\nInput the number:\t");
		fflush(stdin);
		gets(s[i].number)*/;

		printf("\n===================================================================\n");

	
	}

	
	while(ch_1=='Y')
	{

	printf("您将通过什么方式来寻找学生的个人全部信息:\n");		//通过以下方式找到学生信息
	printf("(1)序号\t(2)ID\t(3)姓名\t(4)性别 \t(5)年龄\t(6)联系方式\t请直接输入学生的相关信息即可:\t");
	fflush(stdin);
	scanf("%s",m);
	printf("_________________________________________________________________________________________________\n");
	printf("_____________________\n");
	for (i=0;i<n;i++)			//通过循环找出所有相关的值
	{
		if(strcmp(s[i].ID,m)==0||strcmp(s[i].name,m)==0||strcmp(s[i].number,m)==0||strcmp(s[i].sex,m)==0||strcmp(s[i].age,m)==0		)											
		{
			re++;
			printf("ID:\t%s\nname:\t%s\nsex:\t%s\nage\t%s\nnumber:\t%s\n",s[i].ID,s[i].name,s[i].sex,s[i].age,s[i].number);
			/*printf("\nID:\t%s\n",s[i].ID);
			printf("\nname:\t%s\n",s[i].name);
			printf("\nsex:\t%s\n",s[i].sex);
			printf("\nage:\t%s\n",s[i].age);							
			printf("\nnumber:\t%s\n",s[i].number);}
*/

	
	printf("_____________________\n");

	}

	

	
		
	}
	if(re==0)printf("\n没有找到该信息\n");			//提示没有找到学生信息
	printf("_________________________________________________________________________________________________\n");
	printf("是否继续查找学生信息,是(Y),否(N):\t");
	ch = 'Y';
	fflush(stdin);
	scanf("%c",&ch_1);

	}

	printf("是否继续录入学生信息并查找,是(Y) 否(N):\t");
	fflush(stdin);
	scanf("%c",&ch);
	ch_1 = 'Y';
	
	printf("\n*************************************************************************************************************\n");
	if(ch=='N') printf("谢谢您的使用,下次再来:\n\n\n");


	}
}


  • 运行结果
    在这里插入图片描述
    在这里插入图片描述


8.2  编写一个建立单链表的函数,设链表的表元素信息包含学号、姓名、一门课的成绩;写一个按照学号查学生成绩的函数;最后写一个主函数,它先调用建立函数,再调用查询函数,显示查到学生的姓名和成绩。

  • 源代码

//编写一个建立单链表的函数,设链表的表元素信息包含学号、姓名、一门课的成绩;
//写一个按照学号查学生成绩的函数;最后写一个主函数,它先调用建立函数,再调用查询函数,显示查到学生的姓名和成绩。
# include <stdio.h>
# include <math.h>
# include <string.h>

void fun_ini( );
void fun_unini( );

struct  stu				//定义方式一的结构体 
{
	char ID[20];
	char name [20];
	char sex [10];
	int  age[10];
	float gardes[30];

};


//struct stu_un				//定义方式二的结构体
//{	char ID[20];
//	char name [20];
//	char sex [10];
//	int  age[10];
//	float gardes[30];
//};

int main()
{
	int c;
	char re='Y';
	
	printf("******************************************************************************************\n\n");
	printf("\t\t方式一:通过输入学号找出已经初始化的学生信息:\n\t\t方式二:通过键盘输入学生的信息(包括ID、姓名、性别、年龄、分数):\n");
	printf("\n******************************************************************************************\n\n");
	while(re=='Y')		//功能:(1)在输入不是‘1’或者‘2’是进行提醒并提醒用户重新输入 (2)整个程序体是否退出的控制开关
	{
	printf("方式一请输入'1',方式二请输入'2':\t\t");		//提示用户选择方式
	fflush(stdin);
	scanf("%d",&c);
	if (  c==1)  re = 'N',fun_ini( );											//方式一
	if(c==2)	re = 'N', fun_unini( );											//方式二	
	else	re ='Y', printf("请重新'1'或者‘2’进行选择方式:\n");			//输入错误,即将提醒用户重新输入
	
		if(re=='N')														//输入正确情况,已经进入子函数一或者二,重新判断是否重新开始程序
		printf("\n========================================================\n");
		printf("是否从头开始运行,运行请输入‘Y’,否请输入‘N’\t"),
		fflush(stdin),
		scanf("%c",&re),
		printf("\n========================================================\n");
	}


}


void fun_ini( )
{

char number [20];
int i,m=1;
struct stu s[100];
//逐个定义学生的信息
strcpy(s[0].ID,"201920834101");strcpy(s[0].name,"张三");strcpy(s[0].sex,"男");
s[0] .age[0] = 18; s[0].gardes[0]=80;s[0].gardes[1]=90;s[0].gardes[2]=95;

strcpy(s[1].ID,"201920834102");strcpy(s[1].name,"李四");strcpy(s[1].sex,"女");
s[1].gardes[0] = 19; s[1] .gardes[0] = 83;s[1].gardes[1] = 87; s[1].gardes[2] = 80;

strcpy(s[2].ID,"201920834103");strcpy(s[2].name,"三六九");strcpy(s[2].sex,"男");
s[2].age[0] = 20;s[2].gardes[0]= 90; s[2].gardes[1] = 94;s[2].gardes[2] = 97;

printf("\n**************************************** 方式一 **************************************\n\n");


while(m==1)
{
printf("\n___________________________________________________________________________________________________\n");
printf("\n请输入学生的学号:(201920834101或者201920834102或者201920834103)\t");
fflush(stdin);
gets(number);
printf("__________________________________________________\n");
printf("\n\n你查找的学生信息如下:\n");

for (i=0;i<3;i++)

	{	if( strcmp(s[i].ID,number)==0)
		m++,
		printf("\nname:\t%s\n\nscores:\t%7.2f\t%7.2f\t%7.2f\n",s[i].name,s[i].gardes[0],s[i].gardes[1],s[i].gardes[2]);
	
	}	

		if(m==1) printf("输入学号有误,请重新输入:\n");
		printf("_________________________________________________\n");
		printf("\n是否继续查找学生信息:是请输入'1',否请输入‘0’:\t");
		fflush(stdin);
		scanf("%d",&m);
		printf("\n_________________________________________________\n");
		


}



}


void fun_unini ( )
{
	int len,i,n,j;			//n表示科目的数目,len表示的是学生的个数
	struct stu a[100];		//结构体个数代表学生个数
	float sum[100]={0.0};			//进行储存总分
	char ID[20];			//进行储存学号
	char re ='Y';
printf("********************************欢迎使用方式二:**************************************\n\n");
printf("\n你将为多少学生和多少科目录入信息:请输入学生的位数和成科目成绩的位数:\t\t");
fflush(stdin);
scanf("%d%d",&len,&n);
printf("\n========================================================\n");
printf("请输入各位学生的信息:(1)ID、(2)姓名、(3)年龄、(4)性别、(5)各科成绩");
printf("\n========================================================\n");

for(i=0;i<len;i++)
{printf("\n请输入第%d位同学的ID、姓名、年龄、性别:\t",i+1);
	fflush(stdin);													//清楚缓存
	scanf("%s %s %d %s",a[i].ID,a[i].name,a[i].age,a[i].sex);		//输入信息
	
	for(j=0;j<n;j++) 
	{	printf("\n请输入第%d位同学的第%d科成绩:\t",i+1,j+1),		//输入成绩
		fflush(stdin),
		scanf("%f",&a[i].gardes[j]);}
	printf("=================================================================\n\n");
}


	for(i=0;i<len;i++)				//求总分
	for(j=0;j<n;j++)
	{sum[i]+=a[i].gardes[j];}


	while(re=='Y')
	{
	printf("通过学号查找学生信息,请输入学号:\t");		//提示输入学号进行查找学生信息
	fflush(stdin);
	gets(ID);

    for(i=0;i<len;i++)
	{
		if(strcmp(a[i].ID,ID)==0)				//进行学号检索
		{printf("\n姓名:\t%s\n",a[i].name);			//打印学生姓名
		printf("各科成绩:\t");						
		for(j=0;j<n;j++)							//打印学生各科成绩
			printf("\t%7.2f",a[i].gardes[j]);
		printf("\n总成绩:\t%7.2f\n",sum[i]);				//打印出总成绩
		}

	}
	printf("是否继续学号查找学生信息,是(Y),否(N):\t");		//提示是否继续进行查找学生的成绩
	fflush(stdin);													//清楚缓存
	scanf("%c",&re);
	printf("\n==================================================================\n\n");



	}

}




  • 运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


九、  综合编程


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

  • 源代码
# include <stdio.h>
# include <math.h>
int main ( )

{
	int i,x=1;

	printf("________________________________________________________________________________\n\n");
	printf("\t\t猴子吃桃问题\n");
	printf("________________________________________________________________________________\n\n");

	for(i=10;i>0;i--)
	{
		printf("day[%d] = %d\n",i,x);
		x=(x+1)*2;
	
	}



return 0;

}


  • 运行结果
    在这里插入图片描述


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

  • 源代码
# include <stdio.h>
# include <math.h>

int main ( ) 
{

	int a,len,i;
	double str[200],sum=0,gt=0,count=0;
	char ch[]  = " + ",re='Y';

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

	while (re=='Y')
	{


printf("-------------------------------------------------------------------------------------\n\n");
	printf("\n\nInput  the value  of 'a' and the length of sum(len<17):\t");
	fflush(stdin);
	scanf("%d%d",&a,&len);
	for(i=0;i<len;i++)
	{
	gt = pow(10,i);
	sum = sum+gt;		//通项
	str[i] =a*sum;		//把通项值赋值到数组
	count +=str[i];
	}

	printf("\na = %d\tlen = %d\n\n",a,len);
	printf("s = %.lf = ",count);
	for(i=0;i<len;i++)
	{
	printf("%.lf",str[i]);
	if (i<len-1)
	printf("%s",ch);
	}
	
	printf("\n\nWeather to continue('Y' or 'N'):\t");
	fflush(stdin);
	scanf("%c",&re);
	printf("\n-------------------------------------------------------------------------------------\n\n");


	sum =count=gt=0;
	}

return 0;

}


  • 运行结果

在这里插入图片描述


十、  个人总结

  文章因为时间关系部分细节还不够完善,还有不少调试图片以及对应得bug没有放上来,如需要源文件可以私聊我发pdf电子版。希望本文章对在学C语言的朋友有所帮助。

  • 21
    点赞
  • 88
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值