算法设计实验2----[算法与数据结构](C语言)

Posted 小智RE0

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法设计实验2----[算法与数据结构](C语言)相关的知识,希望对你有一定的参考价值。


实验目的:掌握数组在算法设计中的应用技巧,能够使用数组等数据结构来进行进行算法设计的优化。

选票问题

#include<stdio.h>
int main(){
	int i,xp,a[6]={0,0,0,0,0,0};
	printf("输入数据直到输入-1\\n");
	scanf("%d",&xp);
	while(xp!=-1)
	{
		if(xp>=1&&xp<=5)
			a[xp]=a[xp]+1;
		else
			printf("%d,输入错误! !\\n");
		scanf("%d",&xp);
	}
	for(i=1;i<=5;i++)
		printf("%d得到%d票\\n",i,a[i]);
}

在这里插入图片描述

统计身高问题

#include<stdio.h>
void main()
{
	int i,sg,a[8]={0,0,0,0,0,0,0,0};
	printf("输入数据直到输入-1\\n");
	scanf("%d",&sg);
	while(sg!=-1)
	{
		if(sg>179)
			a[7]+=1;
		else
			if(sg<150)
				a[0]+=1;
			else 
				a[sg/5-29]+=1;
	scanf("%d",&sg);
	}
	for(i=0;i<=7;i++)
		printf("%d区间身高的人有%d个\\n",i+1,a[i]);
}

在这里插入图片描述

求三门课都不及格的学生。
(1)

#include<stdio.h>
void main()
{
	int a[7],b[6],c[8],i,j,k,v;
	for(i=0;i<7;i++)
		scanf("%d",&a[i]);
	for(i=0;i<6;i++)
		scanf("%d",&b[i]);
	for(i=0;i<8;i++)
		scanf("%d",&c[i]);
	for(i=0;i<7;i++)
	{	v=a[i];
	for(j=0;j<6;j++)
		if(b[j]==v)
			for(k=0;k<8;k++)
				if(c[k]==v)
				{
					printf("%d\\n",v);
					break;
				}
	   	}
}

在这里插入图片描述

(2)

#include<stdio.h>
int main(){
	int i,xh,a[10]={0,0,0,0,0,0,0,0,0,0};
	for(i=1;i<=21;i++)
	{
		scanf("%d",&xh);
		a[xh]=a[xh]+1;
	}
	for(i=1;i<=9;i++)
		if(a[i]==3)
			printf("%d\\n",i);
	return 0;
}

在这里插入图片描述

数字翻译英文。
(1)

#include<stdio.h>
void main()
{
	int i,a[10],ind;
	long num1,num2;
	char eng[10][6]={"zero","one","two","three","four","five","six","seven","eight","nine"};
	printf("put a number");
	scanf("%ld",&num1);
	num2=num1;
	ind=0;
	while(num2!=0)
	{
		a[ind]=num2%10;
		ind++;
		num2=num2/10;
	}
	printf("%ld English_exp: ",num1);
		for(i=ind-1;i>=0;i--)
			printf("%s--",eng[a[i]]);
		    printf("\\n");
		
}

在这里插入图片描述

(2)

#include<stdio.h>
int main()
{
	int i=0,n;
	char num[40];
    char eng[10][6]={"zero","one","two","three","four","five","six","seven","eight","nine"};
	printf("Input a number\\n");
	scanf("%s",&num);
	n=strlen(num);  
	if(n==0)
		printf("input eror!");
	else
	{
		printf("%s English_exp:  ",num);
		for(i=0;i<=n-1;i++)
			printf("%s--",eng[num[i]-48]);
		    printf("\\n");
	}
}

在这里插入图片描述

一个顾客买了价值x元的商品,并将y元的钱交给售货员。

#include <stdio.h>
#include <stdlib.h>
main( ){
   int x,y;
   while(scanf("%d %d", &x,&y)!=EOF){
    int i,j,z,a,b[7]={0,50,20,10,5,2,1},s[7];
   for(i=0;i<7;i++) s[i]=0;
    z=y-x;
   for(i=1;i<=6;i++){
        a=z/b[i];    s[i]=s[i]+a;      z=z-a*b[i];
   }
   for(i=1;i<=6;i=i+1)
        if (s[i]!=0)
             printf("%d yuan: %d\\n", b[i], s[i]);
    printf("\\n");
   }
}

在这里插入图片描述

求x,使得x^2为一个各位数字互不相同的9位数。

#include<stdio.h> 
int main() 
{ 
 long x,y1,y2; 
 int p[10],i,t,k,num=0; 
 for(x=10000;x<=32000;x++) 
 { 
 for(i=0;i<=9;i++) 
 p[i]=1; 
 y1=x*x; 
 y2=y1; 
 k=0; 
 for(i=1;i<=9;i++) 
 { 
 t=y2%10;//拆分y2 
 y2=y2/10; 
 if(p[t]==1) 
 { 
 k=k+1; 
 p[t]=0; 
 } 
 else 
 break; 
 } 
 if(k==9) 
 { 
 num=num+1; 
 printf("num = %d ,  x = %ld ,  y1 = %ld\\n",num,x,y1); }
}
}

在这里插入图片描述

游戏问题。12个小朋友手拉手站成一个圈,从某一个小朋友开始报数,报到7的小朋友退出到圈外,然后他的下一位重新上报“1”,继续下去,直到剩下最后一个小朋友。

#include <stdio.h>
main()
{
    int n,i,k,p,x,m;
    int a[100];
    printf("输入游戏总人数:");
    scanf("%d",&n);
    printf("输入开始报数人的编号:");
    scanf("%d",&k);
    printf("退出圈外人的报数点:");
    scanf("%d",&m);
    for(i=1;i<=n;i++)
       a[i]=1;  //初始状态表示都在圈内
    p=0;         //p表示退出圈外的人数
    k--;
    printf("在圈中的编号:");
    for(i=1;i<=n;i++)
       if(a[i]=1)
           printf("i=%d\\t",i);
       printf("\\n");
    printf("出圈次序:");
    while(p<n-1)
    {
       x=0;
       while(x<m)
       {
           k=k+1;
           if(k>n)
              k=1;
           x=x+a[k];
       }
       printf("%d\\t",k);
       a[k]=0;
       p=p+1;
    }
    printf("\\n");
}

在这里插入图片描述

高精度数据X长整数。

#include<stdio.h>
#include<string.h>
int main()
{
    long b,c,d;
    int a[256],i,j,n;
    char s1[256];
    printf("Input a great number:");
    scanf("%s",s1);//作为乘数
    printf("Input a long Intiger:");
    scanf("%d",&c);//作为被乘数
    n=strlen(s1);
    d=0;//表示进位,从0开始(一开始还没有进位)
    //取出所有中间计算结果的个位
    for(i=0,j=n-1;i<n;i++,j--){
        b=(s1[j]-'0')*c+d;
        a[i]=b%10;
        d=b/10;
    }
    //排除所有中间乘法个位后的整数
    while(d!=0){
        a[n]=d%10;
        d/=10;
        n++;
    }
    //逆序输出
    for(i=n-1;i>=0;i--){
        printf("%d",a[i]);
    }
    return 0;
}

在这里插入图片描述

编程求当n<=100时候,n!的精准值。

#include<stdio.h>
int main()
{
    int a[256],b,d;//数组存储中间乘法结果
    int m,n,i,j,cnt=1,flag=0;
    scanf("%d",&n);//求n的阶乘
    m=1;//表示占用格子数
    a[1]=1;
    for(i=2;i<=n;i++){//每次循环将2到n依次累乘到结果中
        d=0;//表示进位
        for(j=1;j<=m;j++){
            b=a[j]*i+d;
            a[j]=b%1000000;//保存每次结果的低六位
            d=b/1000000;
        }
        if(d!=0){//如果进位不为0
            a[j]=d;//将进位存在高位里面
            m++;
        }
    }
    printf("%d!\\t=%d\\t",n,a[m]);
    for(i=m-1;i>=m-4;i--){
        printf("%06d\\t",a[i]);
    }
    printf("\\n");
    for(i=m-5;i>=1;i--){
        printf("%06d\\t",a[i]);
        if(cnt%6==0)
            printf("\\n");
        cnt++;
    }
    return 0;
}

在这里插入图片描述

编程打印nxn的方阵。

#include<stdio.h> 
int main() 
{ 
 int i,j,a[100][100],n算法设计实验1----(循环与递归)[C语言]

c语言程序设计实验报告

C程序设计实验报告二

C程序设计第二次实验

C语言循环结构实验报告

C程序设计实验报告