#Linux中的GCC程式設計# 課堂練習1
阿新 • • 發佈:2018-12-29
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;
}
也可以參考圖片中所示