『壹』 c語言演算法

#include <stdio.h>
int main()
{
int i, j;
int res = 0;
for (i = 3; i <= 200; i += 2)
{
for (j = 2; j < i; j++)
{
if (i % j == 0)
{
res += i;
break;
}
}
}
printf("%d\n", res);
return 0;
}

『貳』 利用c語言編寫演算法!一定是c語言。求大神

#include<stdio.h>

#define N 10

typedef struct {
int num;
float score;
} RecType;

void select_sort(RecType Rectype[],int n )
{
int i,j,k;
int iNo = 0;
RecType tmpRec;
for( i = 0;i < n;i++ )
{
iNo = -1;
tmpRec = Rectype[i];
for(j = i+1;j < n;j++)
{
// if( Rectype[j].score < tmpMax.score ) /* 升序排序 */
if( Rectype[j].score > tmpRec.score ) /* 降序排序 */
{ /* 找到待排序列中的最小值,若找到,則flag標記為 1 */
tmpRec = Rectype[j];
iNo = j; /* 標記找到比tmpMin還小的值的序號 */
}
}
if (iNo > 0)
{ /* 找到最小(大)值,與tmp位置交換 */
Rectype[iNo] = Rectype[i];
Rectype[i] = tmpRec;
}
}
}
void print_info(RecType Rectype[],int n)
{
int i;
for(i = 0; i < N; i++)
{
printf("%5d %3.2f\n",Rectype[i].num, Rectype[i].score);
}
}

int main()
{
int i = 0;
RecType Rectype[N];
printf("請輸入num,score,兩數間空格分開\n");
for (i = 0; i < N; i++)
{
scanf("%d%f", &Rectype[i].num, &Rectype[i].score);
}

printf("排序前:\n");
print_info(Rectype, N);
printf("\n");

select_sort(Rectype,N);

printf("\n排序後:\n");
print_info(Rectype, N);
printf("\n");
return 0;
}

『叄』 C語言基本演算法

計算機中,運算中數都是整型的,結果就取整型的。例如 你定義 int a=12
計算a/24它的結果會顯示為0,如果你計算a/24.0那麼它的結果會顯示為0.5.
計算結果的精度取運算的兩個數中精度最高的那個。例如上面的那個a/24.0中24.0為浮點型,精度高於整形,計算結果就自動取為浮點型了。這時你如果想讓結果再取為整型就在它的前面加一個強制類型轉換符 (int)a/24.0這樣結果就又為0了。

『肆』 用C語言編寫一個演算法

#include <stdio.h>
#include<stdlib.h>
#include<time.h>

int InArray(int a[],int N,int data)/*判斷data是否在數組a[N]中.是則返回1,否則返回0*/
{
int i;
for(i=0;i<N;i++)
if(data==a[i])
return 1;
return 0;
}

int main(void)
{
int i,j=1,temp,a[8]={0};
srand( (unsigned)time( NULL ) ); /*保證每次生成的隨機數不相同*/

a[0]=rand()%8+1; /*數組第一項*/
for(i=1;i<8;i++)
{
temp=rand()%8+1;
if(InArray(a,8,temp))//當產生的隨機數已存在
{i--;continue;}
else
a[j++]=temp;
}

for(i=0;i<8;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}

『伍』 如何改進這個c語言演算法

您好,您這樣:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SWAP(a,b) { a ^= b; b ^= a; a ^= b; }
unsigned long int karatsuba(unsigned long int a, unsigned long int b);
int main () {
unsigned long int a, b;
srand(time(NULL));
#ifndef TEST
a=rand(); b=rand();
printf("%ld*%ld=%ld\n",a,b,karatsuba(a,b));
#endif
#ifdef TEST
for(int i=0; i< 1000000; i++) {
a=rand(); b=rand();
if(karatsuba(a,b)!=a*b) {
fprintf(stderr,"Error: a=%ld, b=%ld\n",a,b);
exit(-1);
}
}
#endif
}
unsigned long int karatsuba(unsigned long int a, unsigned long int b) {
int i, n, N;
unsigned long int x0, y0;
unsigned long int z0, z1, z2;
if(a<b) SWAP(a,b);
if(b==0) return 0;
for(n=-1, i = 1; i <= b; i<<=1, n++); /* not optimal */
for(N=n; i <= a; i<<=1, N++);
y0=b&((1<<n)-1);
x0=a&((1<<N)-1);
z2=1<<(N-n);
z1=karatsuba(z2,y0)+x0;
z0=karatsuba(x0,y0);
return (z2<<(2*n))+(z1<<n)+z0;
}

『陸』 C語言 演算法題 (自己改過的)

其實這個題不難,就是要自己在草稿紙上畫一下,找出數列的遞推公式,下面是我編的,只輸入前20個月的兔子數,樓主想要輸出更多隻要將M的值改下就行了,在VC6.0編譯通過,有不明白的隨時問我!

#include<stdio.h>
#define M 20

void main()
{
int N;
int a[M];
int i;
printf("請輸入第幾個月開始生小兔子:\n");
scanf("%d",&N);
for(i=0;i<N-1;i++)
a[i]=1; /*前N-1個月兔子總數只有1隻*/
for(i=N-1;i<M;i++)
a[i]=a[i-N+1]+a[i-1];
printf("兔子數為:\n");
for(i=0;i<M;i++)
{
printf("%5d",a[i]);
if((i+1)%10==0)
printf("\n");/*每10個換行一次*/
}
}

『柒』 C語言演算法

冒泡法 5 4 3 2 1
比如上面這5個數字我們把它按照由小到大的順序排列,
從前往後相臨兩位比較大小,如果前一位比後一位大就把它倆
換位,5比4大就把5和4換位,得到45321
5又比3大 5和3換位 得到43521 依次類推最後得到
43215 這樣就把最大的一個數字移到最後面了
然後不看5 ,剩下4321 再用上面的方法把4移動到最後
得到 32145 在不看45 剩下321 把3移動到
最後,依此類推。
最終得到12345
這就是冒泡法,是計算機編程排序中最簡單快捷的方法。
除此以外我還能寫出許多排序方法,但是效率上都不如冒泡法
至於為什麼叫冒泡法呢,你把這幾個數字豎起來看
1
2
3
4
5
把最大的數字5看成最大的泡泡,浮到最上,然後4又浮上去,依此類推
得到
5
4
3
2
1
所以形象的稱為冒泡法
——————————————————————————————————
以下是C語言中十個數的冒泡法排序的代碼
#include<stdio.h>
#include<conio.h>
int main(void)
{
long array[10],
box=0;
int i1=0,
i2=0;
for(i1=0;i1<9;i1++)
array[i1]=0;
printf("輸入數組元素:\n");
for(i1=0;i1<=9;i1++)
{
printf("%3d>",i1+1);
scanf("%d",&array[i1]);
}
for(i1=0;i1<=9;i1++)
for(i2=0;i2<=9-i1;i2++)
{
if(arrary[i2]<array[i2+1])
{
box=array[i2+1];
array[i2+1]=array[i2];
array[i2]=box;
}
}
printf("\n排序後為:\n");
for(i1=0;i1<=9;i1++)
printf("%3d>%d\n",i1+1,array[i1]);
getch();
return 0;
}
選擇排序法 選擇排序法 是對 定位比較交換法 的一種改進。在講選擇排序法之前我們先來了解一下定位比較交換法。為了便於理解,設有10個數分別存在數組元素a[0]~a[9]中。定位比較交換法是由大到小依次定位a[0]~a[9]中恰當的值(和武林大會中的比武差不多),a[9]中放的自然是最小的數。如定位a[0],先假定a[0]中當前值是最大數,a[0]與後面的元素一一比較,如果a[4]更大,則將a[0]、a[4]交換,a[0]已更新再與後面的a[5]~a[9]比較,如果a[8]還要大,則將a[0]、a[8]交換,a[0]又是新數,再與a[9]比較。一輪比完以後,a[0]就是最大的數了,本次比武的武狀元誕生了,接下來從a[1]開始,因為狀元要休息了,再來一輪a[1]就是次大的數,也就是榜眼,然後從a[2]開始,比出探花,真成比武大會了,當比到a[8]以後,排序就完成了。
下面給大家一個例子:
main()
{
int a[10];
int i,j,t;
for ( i = 0; i < 10; i ++ ) scanf("%d",&a[ i ]); /*輸入10個數,比武報名,報名費用10000¥ ^_^*/
for ( i = 0; i < 9; i ++ )
for ( j = i + 1; j < 10; j ++)
if ( a[ i ] < a[ j ] ) { t = a[ i ]; a[ i ] = a[ j ]; a[ j ] = t; } /*打不過就要讓出頭把交椅,不過a[ i ]比較愛面子,不好意思見 a[ j ],讓t幫忙*/
for( i = 0; i < 10; i ++) printf("%4d",a[ i ]); /*顯示排序後的結果*/
}
好啦,啰嗦了半天總算把定位比較排序法講完了,這個方法不錯,容易理解,就是有點麻煩,一把椅子換來換去,哎~
所以就有了下面的選擇排序法,開始的時候椅子誰也不給,放在一邊讓大家看著,找個人k記錄比賽結果,然後發椅子。具體來講呢就是,改進定位比較排序法,但是這個改進只是一部分,比較的次數沒變,該怎麼打還是怎麼打,就是不用換椅子了。每次外循環先將定位元素的小標i值記錄到K,認為a[k]是最大元素其實i=k還是a[ i ]最大,a[k]與後面的元素一一比較,該交換的也是也不換,就是把K的值改變一下就完了,最後在把a[k]與a[ i ]交換,這樣a就是最大的元素了。然後進入下一輪的比較。選擇排序法與定位比較排序法相比較,比的次數沒變,交換的次數減少了。
下面也寫個例子:
由大到小時:
main()
{
int a[10];
int i,j,t,k;
for ( i = 0; i < 10; i ++ ) scanf("%d",&a[ i ]); /*輸入10個數,比武報名,報名費用10000¥ ^_^*/
for ( i = 0; i < 9; i ++ )
{ k = i; /*裁判AND記者實時追蹤報道比賽情況*/
for ( j = i + 1; j < 10; j ++)
if ( a[ k ] < a[ j ] ) k = j;
if (k!=i)
t = a[ i ]; a[ i ] = a[ k ]; a[ k ] = t; /* t 發放獎品*/
}
for( i = 0; i < 10; i ++) printf("%4d",a[ i ]); /*顯示排序後的結果*/
}
由小到大時:
main()
{
int a[10];
int i,j,t,k;
for ( i = 0; i < 10; i ++ ) scanf("%d",&a[ i ]); /*輸入10個數,比武報名,報名費用10000¥ ^_^*/
for ( i = 0; i < 9; i ++ )
{ k = i; /*裁判AND記者實時追蹤報道比賽情況*/
for ( j = i + 1; j < 10; j ++)
if ( a[ k ] < a[ j ] ) k = j;
if (k!=i)
t = a[ i ]; a[ i ] = a[ k ]; a[ k ] = t; /* t 發放獎品*/
}
for( i = 9; i >= 0; i --) printf("%4d",a[ i ]); /*顯示排序後的結果*/
}

『捌』 C語言大小寫字母轉換演算法

樓主的程序是要求輸入的字母大小寫轉換嗎?如果是這樣,為什麼你這句:
if(n>='A' && n<='Z');
return n;
要這樣寫?
你這里明顯是指:當輸入大寫時,不進行轉換