一、編寫程序,該程序的功能是輸出大於整數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值大於第二個。那兩數也交換。
也就是說三個條件若有一個符合。就交換兩數。其實三個條件也只會有一個符合。