#Linux中的GCC编程# 课堂练习1

本文精选C语言实现的等差数列求和、水仙花数查找、完数判断、字符串处理等经典算法,深入解析代码逻辑,演示从输入到输出的完整过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C

201707XX

1、等差数列求和,通项是3n-2,a1=1,公差d=3。

/*****************头文件(库函数)**********************/
#include"stdio.h"
/*****************函数原型声明**************************/
unsigned int Beauty(unsigned int n);
/*****************主函数********************************/
int main(void)
{
 	unsigned int Sum=0,n=1;            //变量定义与初始化
	printf("请输入你期望的项数:\n");   //显示输入的提示信息
	scanf("%d",&n);                     //读取输入的值,传给指定变量
	if(getchar()!='\n')
   	 {
       		printf("输入的不是数字!!!\n");
       		return 0;
    	}
	Sum=Beauty(n);                     //调用函数,进行公示计算
    	printf("1+4+7+10+13+...+(3n-2)=%d\n",Sum);  //输出结果  
    	return 0;
    }
/*****************子函数*******************************/
unsigned int Beauty(unsigned int n)
{
	 /*等差数列,通项是3n-2,a1=1,公差d=3*/
 	return (unsigned int)(n*1+n*(n-1)*1.5); 
 }

运行结果:

kshine@kshine-virtual-machine:~/桌面/GCC$ gcc test2.c  -o main -Wall
kshine@kshine-virtual-machine:~/桌面/GCC$ ./main
请输入你期望的项数:
5
1+4+7+10+13+...+(3n-2)=35

2、字母金字塔

/*****************头文件(库函数)**********************/
#include"stdio.h"
/*****************函数原型声明**************************/
void  Draw_picture(unsigned int num);
/*****************主函数********************************/
int main(void)
{   
    	unsigned int num=0;                    //变量定义与初始化
	printf("请输入你期望的层数:\n");     //显示输入的提示信息
    	scanf("%d",&num);                     //读取输入的值,传给指定变量
    	if(num>26)
      	{
         		num=26;                           //限制最多26行。
         		printf("根据要求最多只能显示26行!!!\n");
      	}
      	if(getchar()!='\n')                    //防止输入错误!
       	{
            	printf("请输入数字!!!\n");
            	return 0;
       	}
       	Draw_picture(num);                     //调用函数,进行绘图
       	printf("Thanks!\n");                   //The END 
    	return 0;
}
/*****************子函数******************************/
void  Draw_picture(unsigned int num)
{
  	unsigned int i=1,j=1;
  	for(i=1;i<=num;i++)
  	{
      		for(j=1;j<=2*num-1;j++)
      		{
          		if(j<=num-i)printf(" ");
        	  		else if(j<=num+i-1)  printf("%c",('A'+i-1));
          		else ;
		}
      		printf("\n");
 	 }
 }

运行结果
字母金字塔

3、水仙花数(各位数字立方之和等于数本身的三位整数)

/*****************头文件(库函数)**********************/
#include"stdio.h"
/*****************函数原型声明***********************/
void Flower_in_water(void);
/*****************主函数********************************/
int main(void)
{   
    	printf("求出所有的水仙花数(各位数字立方之和等于数本身的三位整数)并输出?\n");        //显示输入的提示信息
    	Flower_in_water();                                                                       //开始解题并输出结果
    	printf("Thanks!!!\n\n");                                                                //the end  
    	return 0;
}
/*****************子函数*******************************/
void Flower_in_water(void)
{
	unsigned   int The_num=100,temp_save=0,temp_num=0,bitt=0;
	unsigned   int i=0,counter=0; 
	/*首先考虑100~999之间的数字*/
    	for(The_num=100;The_num<=999;The_num++)
    	{
        		temp_num=The_num;                                   //传值,由temp_num参与计算
        		temp_save=0;                                         //这个地方一定要记得清零。
       		 for(i=1;i<=3;i++)
          	{
              		bitt=(temp_num%10);
              		temp_save+=bitt*bitt*bitt;  //计入三次方后的数
           		 //  printf("Yu%d_temp_save%d\t",bitt,temp_save);       //@@这里用于调试程序时,辅助显示,程序完成后,已被注释!
              		temp_num/=10;                                       //去除低位 
          	} 
       	 	if(temp_save==The_num)
          	{
              		printf("数字:%d是水仙花数\n",The_num);
              		counter++;
          	}
        		else  ;  // printf("%d\t%d\n",The_num,temp_save);      //@@用于调试,已经被注释!
        }
    printf("\n共计%d个数\n",counter);
}

运行结果

kshine@kshine-virtual-machine:~/桌面/GCC$ gcc test4.c  -o main -Wall
kshine@kshine-virtual-machine:~/桌面/GCC$ ./main
求出所有的水仙花数(各位数字立方之和等于数本身的三位整数)并输出?
数字:153是水仙花数
数字:370是水仙花数
数字:371是水仙花数
数字:407是水仙花数

共计4个数
Thanks!!!

4、计算圆环的面积

#include"stdio.h"
#define PI 3.14
/*
  	函数原型声明
*/
float area(int r);
/*
  	主函数
*/
void go();
int main()
{
    	/*写求圆的面积的函数,并调用该函数求出圆环的面积 */
    	go();
    	return 0;
}
/*
   	子函数1   总运行
*/
void go()
{
    	int R=0,r=0;
   	float S=0;
    	printf("请输入圆环的内外半径\n");
    	scanf("%d%d",&r,&R);
    	if(r>R)
    	{
       		r=r^R;
       		R=r^R;
       		r=r^R;
    	}
    	S=area(R)-area(r);
    	printf("圆环面积是:%f\n",S);
}
/*
  	子函数 计算面积
*/
float area(int r)
{
   	return r*r*PI;
}

运行结果

kshine@kshine-virtual-machine:~/桌面/GCC$ gcc test5.c  -o main -Wall
kshine@kshine-virtual-machine:~/桌面/GCC$ ./main
请输入圆环的内外半径
5 10
圆环面积是:235.500000

5、计算 m ~ n 之和

#include"stdio.h"
int fun(int m,int n);
void go();
int main()
{
    	/* 编写函数 fun 计算 m ~ n 之和? */
    	go();
    	return 0;
}
int fun(int m,int n)
{
   	if(m>n)
   	{
      		m=m^n;
      		n=m^n;
      		m=m^n;
  	}
  	return (m+n)*(n-m+1)/2;
  }
void go()
{
   	int num_m=0,num_n=0;
   	printf("please insert two number\n");
   	scanf("%d%d",&num_m,&num_n);
   	printf("%d~%d之间的数字之和为%d\n",num_m,num_n,fun(num_m,num_n));
}

运行结果

kshine@kshine-virtual-machine:~/桌面/GCC$ gcc test6.c  -o main -Wall
kshine@kshine-virtual-machine:~/桌面/GCC$ ./main
please insert two number
23 88
23~88之间的数字之和为3663

6、求出1000以内所有的完数

一个数如果恰好等于它的因子之和,这个数就称为“完数”,例如6的因子为1、2、3,而6=1+2+3,因此6是“完数”。
#include"stdio.h"
void go();
int perfect(int num);
int main()
{
	go();
   	return 0;
}
void go()
{   
	int i=1;
    	for(i=1;i<=1000;i++)
    	{   
       		if(perfect(i)==1)printf("%d\t",i);
    	}
    	printf("\n");
}
int perfect(int num)
{
   	int i=0,sum=0;
   	if(num==1)return 1;
   	for(i=num-1;i>=1;i--)
   	{
      		if(num%i==0)sum+=i;
   	}
  	if(sum==num)return 1;
  	return 0;
  }

运行结果

kshine@kshine-virtual-machine:~/桌面/GCC$ gcc test7.c  -o main -Wall
kshine@kshine-virtual-machine:~/桌面/GCC$ ./main
1 6 28 496

7、字符串操作,大写变小写,小写变大写,数字变#,0不变

/*----------------------------------------------------------
    	功能:输入一个字符串(有大小写,数字和0),调用功能函数,大写变小写,小写变大写,数字变#,0不变。
-----------------------------------------------------------*/
#include"stdio.h"
/*
  	主函数
*/
void change_string(char str[]);
int main(void)
{
    	char str[1024]="";//定义并初始化
    	printf("please input string:");
    	scanf("%s",str);
    	puts(str);
    	change_string(str);
    	puts(str);
    	return 0;
}
void change_string(char str[])
{
    	int i=0;
    	while(str[i]!='\0')
    	{
		if(str[i]>='A'&&str[i]<='Z')
		{
             		str[i]=str[i]+'a'-'A';
		}
		else if(str[i]>='a'&&str[i]<='z')
		{
             		str[i]=str[i]+'A'-'a';
		}
		else if(str[i]=='0')
		{
             		;
		}
		else
		{
             		str[i]='#';
		}
		i++;
	}
}

运行结果

kshine@kshine-virtual-machine:~/桌面/GCC$ gcc test12.c  -o main -Wall
kshine@kshine-virtual-machine:~/桌面/GCC$ ./main
please input string:Kshine2017_20181218
Kshine2017_20181218
kSHINE#0####0######

8、剔除字符串中的字母‘a’,后面的字符向前补位。

如abcd\0变为bcd\0,happy\0变为hppy\0,切记该方法虽然巧妙,但后面的补位对象一定不能超过范围
#include"stdio.h"
void dealing_num(char *str);
int main()
{
   	char str[30]="";
   	scanf("%s",str);
   	puts(str);
   	dealing_num(str);
   	puts(str);
   	return 0;
}
void dealing_num(char *str)
{
    	int i=0,counter=0;
    	while(str[i]!='\0'||i<30)
    	{
        		if(str[i]=='a')  
        		{
             		i++;
             		counter++;  //已发现counter个a;  
             		continue;   //跳过本次的移位;
        		}   
        		str[i-counter]=str[i]; 
        		i++;
    	}
}

运行结果

kshine@kshine-virtual-machine:~/桌面/GCC$ ./main
kasahaianaea2a0a1a7a
kasahaianaea2a0a1a7a
kshine2017

9、找到整型数组中只出现一次的数字

10、手动输入一串字符,包括大写字母和小写字母,还有数字以及其他字符,将这些字母存入dig[100]数组中,将小写字母存入low[]数组中,将数字存入num[100]中,其他字符存入another[100];

11、回文数组,通过指针判断

这里只给出关键代码

int judge_palindrome_array(int *array,int k)
{
    	int *p1=array,*p2=array+k-1;
    	while(p1<p2)
    	{
        		if(*p1!=*p2)
        		{
            		return 0;
	       	 }	
	        	p1++;
        		p2--;
    	}
    	return 1;
}

也可以参考图片中所示
回文数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值