1. 程式人生 > >#Linux中的GCC程式設計# 課堂練習1

#Linux中的GCC程式設計# 課堂練習1

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

執行結果:

[email protected]:~/桌面/GCC$ gcc test2.c  -o main -Wall
[email protected]:~/桌面/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);
}

執行結果

[email protected]:~/桌面/GCC$ gcc test4.c  -o main -Wall
[email protected]:~/桌面/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;
}

執行結果

[email protected]:~/桌面/GCC$ gcc test5.c  -o main -Wall
[email protected]:~/桌面/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));
}

執行結果

[email protected]:~/桌面/GCC$ gcc test6.c  -o main -Wall
[email protected]:~/桌面/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;
  }

執行結果

[email protected]:~/桌面/GCC$ gcc test7.c  -o main -Wall
[email protected]:~/桌面/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++;
	}
}

執行結果

[email protected]:~/桌面/GCC$ gcc test12.c  -o main -Wall
[email protected]:~/桌面/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++;
    	}
}

執行結果

[email protected]:~/桌面/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;
}

也可以參考圖片中所示
迴文陣列