week6编程作业

week6编程作业

1数组之和

尝试自己写的,但不对,调试没出来

#include<stdio.h>
int ArraySum (int n, int m,int a[n][m]);//函数申明
//功能函数 
int ArraySum ( int n,int m,int a[n][m]) 
{	

	for( int i = 0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			int sum+=a[i][j];
		}
	}
	return sum;
}

int main()
{
	int n,m,i,j;
	scanf("%d%d",&n,&m);
	//输入二维数组的值
	for( i = 0;i<n;i++)
	{
		for(j=0;j<m;j++){
			scanf("%d",&a[i][j]);
		}
	 } 
	ArraySum();
	return 0;
}

10分

#include <stdio.h>
//int fun(int a[][],int n,int m);
int main()
{ 
	int a[100][100],n,m,sum=0;
	int i,j;
	int ArraySum(int a[100][100],int n,int m);
	//printf("Input the row and col number of array:");
	scanf("%d%d",&n,&m);
	//printf("Input the number of array:");
	for(i=0;i<n;i++)
	{
		for(j=0;j<m;j++)
		{
			scanf("%d",&a[i][j]);
			sum=ArraySum(a,n,m);
		}
	}
	printf("%d\n",sum);
}

int ArraySum(int a[100][100],int n,int m)
{ 
	int sum=0;
	int i,j;
	for(i=0;i<n;i++)
	{
		//int sum =0;
		for(j=0;j<m;j++)
		sum+=a[i][j];
	}
	return sum;
}

注意的点

在main函数中要将sum初始化,不然会有警告消息提示
在功能函数中,int sum的初始化要放在for循环的外面,不能放在for循环里面
函数声明可以放在mian函数的外面或者里面都行,只要放在调用的前面就可以
2.欧氏距离

​ 使用函数计算两点间的距离:给定平面任意两点坐标(x1,y1)和(x2,y2),求这两点之间的距离(保留2位小数)。

要求定义和调用函数dist(x1,y1,x2,y2)计算两点间距离

#include <stdio.h>
#include <math.h>
//函数声明 
double dist( double x1, double y1, double x2, double y2 );
//主函数 
int main()
{    
    double x1, y1, x2, y2;
    scanf("%lf %lf %lf %lf", &x1, &y1, &x2, &y2);
    printf("Distance=%.2f\n", dist(x1, y1, x2, y2));
    return 0;
}
//功能函数 
double dist( double x1, double y1, double x2, double y2 )
{
    double d = pow( (x1-x2), 2) + pow( (y1-y2), 2);
    double f = sqrt( d );
    return f;
}

3.判断素数(主要是这个算法没搞明白,自己编2小时,满分)

编写一个判素数的函数,在主函数中输入一个整数,输出是否为素数的信息。主函数中循环输入整数,当输入小于3的整数结束程序。

判断素数的基本函数,运用一个数来记录下这个数除以比这个数小的数的所有能除的次数

#include <stdio.h>
int main() 
{
	int n;
	printf("请输入一个1-100之间的整数:\n");
	scanf("%d", &n);
	int m = 0,i;
	for (i = 2; i < n; i++ ) 
	{	
		if(n % i  == 0) 
		{
			m++;
		}
	}	
	if (m == 0) 
	{
		printf("%d是素数\n", n);
	} else 
	{
		printf("%d不是素数\n", n);
	} 
	return 0;
}

用函数模块来写,带函数判断质数的代码

成功:有一个连续输入的要求(编了将近2小时)

#include <stdio.h>
int Prime( int n);//函数声明 
int main() 
{
	int n;
	while(1)//连续输入的一个需求 
	{
		scanf("%d", &n);
		printf("m=\n");	
		if ( n<3 )
		{		
			printf("The end.\n");
			break;
		}
		else
		{
			Prime(n);
		}
	}
	return 0;
}

int Prime ( int n )
{
		int m = 0,i;
		for( i = 2 ; i< n ; i++)
		{
			if( n%i == 0)
			{
				m++;
			}
		}    
	//进行总的一个判断,把关 
		if(m == 0)
		{
			printf("%d is prime.\n",n);
		}
		else
		{
			printf("%d is not prime.\n",n);
		}
		return 0;
	}	
4.逆序字符串(速度很快,代码编的很快,通过了)

编写一个可以将字符串逆序的函数,在主函数中调用该函数将输入字符串逆序输出。

思路

让字符串数组从末尾输出,即可,最后再i--
字符串的长度等于strlen(str),要加入一个头文件include<string.h>
#include <stdio.h>
#include<string.h>
void Str(char str[])
{	
		int i;
		printf("the reverse string:");
		for(i=strlen(str);i>=0;i--)
		{
			printf("%c",str[i]);
		}
}

int main()
{
	char str[100];
	scanf("%s",str);
	printf("the original string:%s\n",str);
	Str(str);
	return 0;
}
5.替换字符串中字符(速度很快,代码编的很快,通过了)

编写一个字符串替换函数,可以将所给字符串中与指定字符相同的所有字符替换成要求的字符,并在主函数中调用该函数实现字符串替换操作。(10分)

#include<stdio.h>
#include<string.h> 
void replace(char str[], char c, char s)//函数块 
{
	int i=0;
	for(i=0;i<=strlen(str);i++)
	{
		if(str[i]==c)
		{
			str[i]=s;
		}
	}
}

int main()
{
    char str[100]="ABCDECCFGC";
    replace(str, 'C', '5');
    printf("%s\n", str);
}
6.函数——将字符串插入(知识点总结,数组串,指针函数)

编写一个将一个字符串插入到另一个字符串中的函数,在主函数中调用该函数实现字符串的插入操作。插入函数包含三个参数,即将str2插入到str1的pos位置。

思路

//char * change(char s1[],char s2[],int n)一个指针函数, 根据传入的参数`,来计算函数功能,其结果通过指针的形式返回给调用方

1.先把str1的值放到str{2个字符串的长度}末尾,str1字符串中有足够的空间存放str2字符串
2.然后将s2的值和插入的位置建立起来,s2[i]和插入值n的联系为s1[i+n]

知识点:字符串数组

char ch[N] 和char *str = (char*)malloc(N*sizeof(char))
char ch[N] :当数组中个数成为自变量的时候,不能使用这种定义方式,应该申请动态数组
char *s1 = (char*)malloc(20 * sizeof(char));///申请20个连续字节的空间,定义*ch,指向该连续空间的首地址sizeof(char)=1)

动态数组

当函数的返回值为指针的时候,倘若指针指向的是局部变量:ch[6]为存储的是局部变量,当返回指针str时,函数外,该变量生命周期结束,所以要使用动态数组

void*   func(int N)
{
    char *str = (char*)malloc(N*sizeof(char));
    return str;
}
 
void*   func(int N)
{
    char ch[6]="hello";
    char *str = ch;
    return str;
}

写出来了10分

#include<stdio.h>
#include<string.h>
#include<malloc.h>
#include<stdlib.h>
 char  *change(char s1[],char s2[],int n)
 {
     int len1=strlen(s1);
     int len2=strlen(s2);
    int i;
    char N[]="error";
    char *P=N;
    //char *P="error";
    if(n<0||n>len1)
    {
    	return P;
	}
	else
	{
     for(i=len1;i>=n-1;i--)
	 {
	 	  s1[i+len2]=s1[i];
	  } 
	  for(i=0;i<len2;i++)
	   s1[n+i]=s2[i]; 
    	return s1;
	}
 } 
 int main()
 {
 	char *s1 = (char*)malloc(20 * sizeof(char));
	char *s2 = (char*)malloc(20 * sizeof(char));
	int n;
	char s3[30];
	char *newstr = s3;//作为函数调用方的地方
	printf("Please input two strings:\n");
	scanf("%s%s", s1,s2);//不需要加&,指针就是指向地址
	printf("Please input the position of insert:\n");
	scanf("%d", &n);
	newstr = change(s1, s2, n);
	printf("%s\n", newstr);
 
 }

原因:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UKmPDq7H-1650845695467)(E:\Coding\typora\C语言编程photo\image-20220418105422727.png)]

调试过程:(6.67分)

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
 char  *change(char s1[],char s2[],int n)
 {
     int len1=strlen(s1);
     int len2=strlen(s2);
    int i;
    int j=0;
    int k=0;
     for(i=len1;i>=n-1;i--)
	 {
	 	  s1[i+len2]=s1[i];
	  } 
	  for(i=0;i<len2;i++)
	   s1[n+i]=s2[i]; 
    return s1;
 } 
 int main()
 {
 	char *s1 = (char*)malloc(20 * sizeof(char));
	char *s2 = (char*)malloc(20 * sizeof(char));
	int n;
	char s3[30];
	char *newstr = s3;
	printf("Please input two strings:\n");
	scanf("%s%s", s1,s2);
//	printf("请输入第二个字符串:");
//	scanf("%s", s2);
	printf("Please input the position of insert:\n");
	scanf("%d", &n);
	newstr = change(s1, s2, n);
	printf("%s\n", newstr);
 
 }
7. 函数——多函数综合题

10分

#include<stdio.h>
//以下为全局变量
int price[5]={100,50,35,150,200};//产品报价
int item_n[100][5];//用来表示不同销售员对应产品销售数量的数组,如 item_n[1][3]表示销售员1
//销售的3号产品的数量。销售员编号从0开始
int n=0;
int maximum (int values[],int n)
{
//找出谁是销售冠军,返回为数组最大值的索引
int top_nu=0,i;
for(i=0;i<n;i++)
{
	if(values[i]>values[top_nu]) top_nu=i;
}
return top_nu;
}
void total_sales(int n,int arr[][5])
{
	int i,j;
	int values[100]={0};
	for(i=0;i<n;i++)
	{
		for(j=0;j<5;j++)
		{
			values[i] +=arr[i][j]*price[j];
		}
	}
	for(i=0;i<n;i++)
	{
		printf("total sales of salesman %d is %d\n",i,values[i],values[i]*0.1);
		printf("income of salesman %d is %.4lf\n",i,values[i]*0.1);
	}
	int max=maximum(values,n);
	printf("sales-champion is salesman %d\n",max);
/*
计算每个销售人员的总销售额并输出。
销售佣金为10%,请计算每个销售员的收入并输出
调用 maximum() 输出谁是销售冠军
*/
}

int main()
{
//数据读入
int i,j;
printf("please input the number of salesman\n");
scanf("%d",&n);
printf("please input the number of  items sold for each product of %d salesman\n",n);
for(i=0;i<n;i++)
{
	for(j=0;j<5;j++)
	scanf("%d",&item_n[i][j]);
}
total_sales(n,item_n);
}
8. 函数——递归将整数转为二进制
#include <stdio.h>
void binary(int num);
int main() 
{
	//实现十进制转换成二进制
	int num = 0;
	scanf("%d",&num); 
	binary(num);
	return 0;
}
 
void binary(int num) {
	int i = num % 2;
	if (num > 0) {
		binary(num / 2);
		printf("%d", i); //递归的后序输出,实现输出的倒置
	}
}
9. 实验 6 函数:整数分解为素因子乘积
#include <math.h>
#include <stdio.h>
#include <string.h>

int isPrime(int para)//函数isPrime用来判断质数
{
    int result=1;
    if(para%2==0||para<2){
        result = 0;
    }else{
        int i=3;
        for(i=3;i<para;i=i+2)
        {
            if(para%i==0)
            {
                result = 0;
                break;
            }
        }
    }
    return result;
}

int main()
{
    int input;
    scanf("%d",&input);
    printf("%d=",input);

    int i=2;
    if(isPrime(input)){
        printf("%d",input);
    }else{
        for(i=2;i<input;i++)
        {
            while(input%i==0)
            {
                input=input/i;
                if(isPrime(input)||input==2)//此处是最后一次除法
                {
                    printf("%d*%d",i,input);
                    break;   
                }else//每找到一个质因数就输出i*
                {
                    printf("%d*",i);
                }
            }

        }


    }
    return 0;
}

10. 函数——哥德巴赫猜想之偶数分解

10分

#include <stdio.h>
#include <math.h>
int isPrime(long x){
	int i;
	for(i=2;i<(int)sqrt(x)+1;i++)
	{
		if(x%i==0)return 1;
	}
return 0;
}
void getPrimePair(long m)
{
	int i;
	int num1;
	int num2;
	int count=0;
	for(i=2;i<=m/2;i++)
	{
		num1 =i;
		if(isPrime(num1)) num1=0;
		num2=m-i;
		if(isPrime(num2)) num2=0;
		if(num1&&num2)
		{
			printf("%ld = %d + %d\r\n",m,num1,num2);
			count++;
			
		}
	}
	printf("The number %ld has %d prime number decomposition methods\n",m,count);
}
 int  main()
{
	long number;
	scanf("%ld",&number);
	if(number%2!=0||number<4) printf("The end");
	else  getPrimePair(number);	
	return 0;
}

<(int)sqrt(x)+1;i++)
{
if(x%i==0)return 1;
}
return 0;
}
void getPrimePair(long m)
{
int i;
int num1;
int num2;
int count=0;
for(i=2;i<=m/2;i++)
{
num1 =i;
if(isPrime(num1)) num1=0;
num2=m-i;
if(isPrime(num2)) num2=0;
if(num1&&num2)
{
printf(“%ld = %d + %d\r\n”,m,num1,num2);
count++;

	}
}
printf("The number %ld has %d prime number decomposition methods\n",m,count);

}
int main()
{
long number;
scanf(“%ld”,&number);
if(number%2!=0||number<4) printf(“The end”);
else getPrimePair(number);
return 0;
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值