C语言实验报告程序

1)请输出[1,300]的所有素数,要求每行只输出6个数。


#include<stdio.h>
main()
{
	int i,j;
	int count=0;
	for(i=1;i<=300;i++)
		{
			for(j=2;j<i;j++)
			{
				if(i%j==0)
				break;			 /*如果j能被i整除,则跳出循环*/
			}	
			if(j>=i)   /*判断循环是否提前跳出,如果j<i说明在2~j之间,i有可整除的数字*/
			{
				count++;
				printf("%d\t",i);
				if(count%6==0)
				printf("\n");
			}
		}
		 return 0;
} 

(2)打印[1,1000]以内的所有完数(完数即该数的所有真因子之和等于它本身,如6=1+2+3)。



#include <stdio.h>   
int main()   
{   
	int n=1000;   
	int r,j,i;   
	for(i=1;i<=n; i++)
	{   
	r = 0;   
		for(j=1;j<i;j++)
		{   
			if(i%j == 0)
			{   
				r = r + j;   					/*完数,即完美数等于因子之和*/ 
			}   
		}   
			if(r == i)
			{   
				printf("the result is:%d\n",r);   /*输出完美数结果*/
			}   
	}   return 0;  
}

(3)打印[100,999]之间的所有水仙花数(水仙花数即该数的各位数字的立方和等于该数本身,如153)


#include<stdio.h>
main()
{
	int n,a,b,c;
	for(n=100;n<=999;n++)
	{
		a=n%10;						/*个位数*/ 
		b=n/10%10;					/*十位数*/ 
		c=n/100%10;					/*百位数*/ 
		
		if(n==(a*a*a+b*b*b+c*c*c)) 	/*仙花数即该数的各位数字的立方和等于该数本身*/
			printf("%d\n",n); 	
	}return 0;
} 

(4)输入若干个字符(以输入’#’ 作为结束条件),分别统计出其中字母、空格、数 字和其它字符的个数。


#include <stdio.h>
main()
{
	char c;
	int letters=0,spaces=0,digits=0,others=0;
	printf("请输入若干字符:\n") ;
	while ((c = getchar()) != '#')
	{
		if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
		letters++;
		else if((c==' '))
		spaces++;
		else if((c>='0'&&c<='9'))
		digits++;
		else
		others++;
	}
	printf("字母=%d\n空格=%d\n数字=%d\n其他=%d\n",letters,spaces,digits,others);
 
	return 0;
}

(5)打印九九乘法表

#include<stdio.h>
int main()
{
    //打印九九乘法表
    printf("九九乘法表:\n"); 
    int x, y; //初始化打印的两个方向
    for (y = 1; y < 10; y++) //两层循环嵌套打印输出
    {
        for (x = 1; x <= y; x++)
        {
            printf("%d*%d=%2d ", y, x, x * y); //%2d表示固定输出两位
        }
        printf("\n"); //打印到行尾,换行
    }
    printf("This is the end.\n");
}

(1)编写程序计算级数ex=1+x+x2/2!+x3/3!+…+xn/n!的值。要求:要采用函数调用,一个函数实现n!,另一个函数实现xn。

#include <stdio.h>
#include<math.h>
int main()
{  
	int i,j;
    int x,n;
	double sum=1,powerfunction=1,factorial=1 ; /*定义幂函数,阶乘以及函数和*/
  printf("计算级数ex=1+x+x2/2!+x3/3!+...+xn/n!的值\n"); 
  printf("input x:\n");
	  printf("input n:\n");
 		 scanf("%d %d",&x,&n);
  	for(i=1;i<=n;i++)							/*给i赋初值,用for循环控制语句*/ 
    {
     powerfunction=pow(x,i);
     for(j=1;j<=i;j++)
       factorial=factorial*j;
     sum=sum+powerfunction/factorial;				/*求函数和*/ 
     factorial=1;
    } 
  printf("%lf",sum);
printf("\n");
}

(2)利用递归函数调用:求Fibonacci数列(f(1)=f(2)=1; f(n)=f(n-1)+f(n-2) 当(n>=3) 的第n项的值。

#include <stdio.h>
int f (int n); 
main()
{
        int m;
        printf("input a number:\n");
        scanf("%d",&m);
        printf("%d\n",f(m));            //函数f的调用
}

/*利用递归函数调用:求Fibonacci数列(f(1)=f(2)=1; f(n)=f(n-1)+f(n-2) 当(n>=3) 的第n项的值*/

int f (int n)                            //函数f的定义
{
        int i;
        if( n==0 )
		{
                return 0;
        }
        if( n== 1 )
		{
                return 1;
        }
         if( n== 2 )
		{
                return 1;
        }
        else if(n >= 3)
		{
           for(i = 1 ; i < n ;i++)
		   {
           return (f(n-1) + f(n-2));      //函数f的递归调用,
           } 
       }
}

(3)编一函数fun,功能是判断一个整数m是否是素数,若是返回1,否则返回0。在main()函数中,若fun返回1输出YES并打印该素数,若fun返回0输出NO。

#include <stdio.h>
int fun(int a);
main()
{
    int InputNumber;
    int ReturnNumber;
    printf("Please input a number:");
    scanf("%d",&InputNumber);
    ReturnNumber =fun(InputNumber);
    if(ReturnNumber == 1)
    	{
       		printf("YES"); 
       		printf("\n");
		   	printf("The number is a prime\n");
       	
   	    }
    else if(ReturnNumber == 0)
    	{
    		printf("NO");
    		printf("\n");
    		printf("The number is not a prime\n");
    		
    	} return 0;
}
/*编一函数fun,功能是判断一个整数m是否是素数,若是返回1,否则返回0。*/
int fun(int a)		
{
    int divisor;		/*定义除数*/
    int remainder;		/*定义余数*/ 
    for(divisor = 2; divisor < a; divisor ++)
    {
        remainder = a%divisor;
        if(remainder == 0 )
        {
            break;
        }
    }
    if(divisor == a)
        return 1;
    if(divisor != a || a == 1)
        return 0;
}

(1)编一程序,将两个2×3二维数组中的对应元素的值相加,输出其结果。

#include<stdio.h>
main()
{   
 int i,j,N,M;   
  printf("两个二维数组的加法运算\n");   
  printf("你要输入几行的矩阵");
	scanf("%d",&N);    
printf("\n你要输入几列的矩阵");    
scanf("%d",&M);    
printf("\n请你输入矩阵A(%d行%d列)\n",N,M);
	int A_1[N][M],B_1[N][M];  
  for(i=0;i<N;i++)   
 {    
 	for(j=0;j<M;j++)      
  scanf("%d",&A_1[i][j]);
 }	
printf("\n请你输入矩阵B(%d行%d列)\n",N,M);
	for(i=0;i<N;i++)  
  {    	
  	for(j=0;j<M;j++) 
   	scanf("%d",&B_1[i][j]);   
  } 
   printf("矩阵A和矩阵B之和为:\n");
	for(i=0;i<N;i++)       
 { 
 	for(j=0;j<M;j++)    	  
  	{ 
  	A_1[i][j]+=B_1[i][j];    		    
			printf("% -2d",A_1[i][j]);
  	}			
		printf("\n"); 
  }
}

(2)编一程序,将一个二维矩阵的行列互换,并输出结果。

#include<stdio.h>
main()
{
  int i,j,N,M;
   printf("二维矩阵行列式互换,并输出结果:\n");   
   printf("\n你要输入几行的矩阵");
   scanf("%d",&N); 
   printf("\n你要输入几列的矩阵");    
   scanf("%d",&M);    
   printf("\n请你输入矩阵(%d行%d列)\n",N,M);
   int a[N][M];
  for(i=0; i<N; i++)
     for(j=0; j<M; j++)
       scanf("%d",&a[i][j]);
  printf("二维矩阵的转置结果为:\n"); 
  for(i=0; i<N; i++)
  {
     for(j=0; j<M; j++)
    
        printf("%d ",a[j][i]);
     printf("\n");
  }return 0;

}

(3)比较任意输入的两个字符串s1和s2的大小,若s1>s2,输出正数1;若s1=s2,输出0;若s1<s2输出-1。(要求:不调用系统提供的字符串处理函数strlen(),strcmp()等,自己编写函数实现该功能。)

#include<stdio.h>

#define N 100									
int compare(char s1[N],char s2[N]); 
int main ()
{
	char s1[100];
	char s2[100];
	printf("input string1:");
	gets(s1);
	printf("\n");
	printf("input string2:");
	gets(s2);
	//调用函数compare 
 	if(compare(s1,s2)==0)
	printf("0\n");
	else if(compare(s1,s2)>0)
	printf("1\n");
	else 
	printf("-1\n");
	
}
int compare(char s1[N],char s2[N])
{
	int	i=0;
	for(i=0;(s1[i] == s2[i]);i++)
	{
		if(s1[i]=='\0')
		return 0;
	}
		//返回差值,与0作比较 
		return s1[i]-s2[i];
	
}

(4)从键盘上输入一个整数n(1<=n<=65535),判断其是否为回文数。

#include <stdio.h>
main()
{
	int num,s,y=0;
	// 从键盘上输入一个整数n(1<=n<=65535),判断其是否为回文数。
	printf("Please input numbers(1~65535): ");
	scanf("%d",&num);
	s=num;
	while(s>0)
	{
		y=y*10+s%10;//组合新数,新数=新数*10+余数 
		s=s/10;//分离最后一位数 
	}
	if(y==num)
	{
		printf("%d是一个回文数!\n", num);
	}
	else
	{
		printf("%d不是一个回文数!\n", num);
	}
}

题目:编写程序,输入三个字符串,比较它们的大小,并将它们按由小到大的顺序输出。要求用函数、指针实现。

#include <stdio.h>
#include <string.h>
void sort(char *x[], int n);//定义排序函数
void print(char *x[], int n);//定义输出函数
int main()
{
    char *s[3], st[3][10];
    int i;
    for (i=0, printf("=== Start:===\n");
	i<3; s[i]=st[i], scanf("%s", s[i++]));  //输入3个字符串	
//指向函数的指针
	char (*p)(char *x[], int n);
	char sort(char *x[], int n);
	p=sort;
	p(s,3);	
    print(s, 3);  //调用输出函数
    return 0;
}
//排序函数
void sort(char *x[], int n)
{
    int i, j;
    char *t;
    for (i=0; i<n; i++)
    for (j=i+1; j<n; strcmp(x[i], x[j])>0 ? t=x[i], x[i]=x[j], x[j]=t, j++ : j++);
}
//输出函数
void print(char *x[], int n)
{
    char **p;
     printf("=== After:===\n");
    for (p=x; p<x+n; printf("%s\n", *p++));
    printf("\n");
}
  • 11
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值