『壹』 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;
要这样写?
你这里明显是指:当输入大写时,不进行转换