兩道C語言經典編程

  一、編寫程序,該程序的功能是輸出大於整數m且緊靠m的k個素數以及素數之和。程序編寫要求如下:

(1) 編寫函數,該函數的功能是將大於整數m且緊靠m的k個素數存入數組中,並返回滿足條件的素數之和;

(2)在main函數中,由鍵盤輸入 m 和 k 值;

(3)在main函數中輸出結果,按一行輸出5個數的格式輸出素數。

例如:鍵盤上輸入m和k爲17和5,則輸出素數:19, 23, 29, 31, 37以及素數之和139。

二、編寫程序,該程序的功能是將字符串中所有字母字符按升序排列後,移到串的首部;其他字符按升序排列後,移到串的尾部。程序編寫要求如下:

(1)編寫函數 void fun(char *p),實現程序功能;

(2)在main函數中,由鍵盤輸入一個字符串。

(3)在main函數中,輸出移動後的字符串。

例如:鍵盤上輸入:***C##b@A##a@B***,則輸出結果:ABCab####******@@。

 

  main()

{

int m,k,i,j,n;

n=0;

scanf("%d %d",&m,&k);

for(i=1;k>0;i++)

for(j=2;j<m+i;j++)

if((m+i)%j==0)break;

else if(m+i-1==j){

printf("%d ",m+i);

n+=(m+i);k--;}



printf("sum=%d",n);

getch();

}/*第一題*/

void fun(char *p)

{

int i,n=0,j,bo1=0,bo2=0;

char temp,a,b;

while(!(*(p+n)=='/0'))

n++;

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

for(j=i+1;j<n;j++)

{ a=*(p+i);

b=*(p+j);

if((65<=a&&a<=90)||(97<=a&&a<=122)) bo1=1; else bo1=0;

if((65<=b&&b<=90)||(97<=b&&b<=122)) bo2=1;else bo2=0;

if(((!bo1)&&bo2)||(bo1&&bo2&&a>b)||(a>b&&(!bo1)&&(!bo2)))

{

temp=*(p+i);

*(p+i)=*(p+j);

*(p+j)=temp;

}

}

}

main()

{

void fun();

char str[30];

scanf("%s",str);

fun(str);

printf("%s",str);

getch();

}/*第二題*/

偶也是菜鳥了

跟你說下第二題的算法

用的是和冒泡算法了差不多,就是加了幾個限制條件。

其實關鍵就是這步了if(((!bo1)&&bo2)||(bo1&&bo2&&a>b)||(a>b&&(!bo1)&&(!bo2)))

(!bo1)&&bo2)這一步是判斷。如果比較的兩個數第一個不是字母。第二個是。那就交換兩數

(bo1&&bo2&&a>b)這一步是判斷。如果比較的兩個數都是字母。並且第一個的ASCLL值大於第二個。那兩數也交換。

(a>b&&(!bo1)&&(!bo2))這一步是。如果比較的兩個數都不是字母。並且第一個的ASCLL值大於第二個。那兩數也交換。

也就是說三個條件若有一個符合。就交換兩數。其實三個條件也只會有一個符合。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章