6.13作业

1.使用二维数组计算杨辉三角

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

1 5 10 10 5 1

.....

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	int m;
	printf("please enter m:");
	scanf("%d",&m);
	int arr[m][m],i,j;
	for(i=0;i<m;i++)
	{
		for(j=0;j<=i;j++)
		{
			if(j==0||i==j)
			arr[i][j]=1;
			else
			arr[i][j]=arr[i-1][j-1]+arr[i-1][j];
			printf("%-4d",arr[i][j]);
		}
		putchar(10);
	}
	return 0;
}

2.输入一个n个元素的一维数组,计算最大的和,最大差(不允许使用排序)

最大和:第一大值+第二大值

最大差:第一大值-最小值

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	int n;
	printf("please enter n:");
	scanf("%d",&n);
	int arr[n],i;
	for(i=0;i<n;i++)
	scanf("%d",&arr[i]);
	int max=arr[0],min=arr[0],maxi=0;
	for(i=0;i<n;i++)
	{
		if(max<arr[i])
		{
			max=arr[i];
			maxi=i;
		}
		if(min>arr[i])
			min=arr[i];
	}
	int second=min;
	for(i=0;i<n;i++)
	{
		if(i==maxi)
			continue;
		if(second<arr[i])
			second=arr[i];
	}
	printf("最大和为%d,最大差为%d\n",second+max,max-min);
	return 0;
}

3.输入一个m行n列的二维数组,计算第二小值

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	int m,n;
	printf("please enter m and n:");
	scanf("%d%d",&m,&n);
	int arr[m][n],i,j;
	for(i=0;i<m;i++)
	{
		for(j=0;j<n;j++)
		scanf("%d",&arr[i][j]);
	}
	int min=arr[0][0],max=arr[0][0];
	for(i=0;i<m;i++)
	{
		for(j=0;j<n;j++)
		{
			if(max<arr[i][j])
				max=arr[i][j];
			if(min>arr[i][j])
				min=arr[i][j];
		}
	}
	int second_min=max;
	for(i=0;i<m;i++)
	{
		for(j=0;j<n;j++)
		{
			if(min==arr[i][j])
				continue;
			if(second_min>arr[i][j])
				second_min=arr[i][j];
		}
	}
	printf("second_min=%d\n",second_min);
	return 0;
}

4.输入n个元素的一维数组,输入查找的key值

如果key出现一次,则输出对应的下表

如果key没有出现,则提示不存在

如果key出现多次,则提示出现的次数

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	int n;
	printf("请输入元素个数:");
	scanf("%d",&n);
	int arr[n],i;
	for(i=0;i<n;i++)
    scanf("%d",&arr[i]);
	int key;
	printf("请输入查找元素key:");
	scanf("%d",&key);
    int count=0,sub;
	for(i=0;i<n;i++)
	{
		if(arr[i]==key)
		{
			count++;
			sub=i;
		}
	}
	if(count==0)  
	printf("%d不存在\n",key);
	else if(count==1)
	printf("%d的位置在数组的第%d个\n",key,sub+1);
	else 
	printf("%d在数组中出现了%d次\n",key,count);
    return 0;
}

5.输入一个m行n列的二维数组,输出每一行的和,以及每一列的和

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	int m,n;
	printf("请输入行和列:");
	scanf("%d%d",&m,&n);
	int arr[m][n],i,j,sum=0;
	for(i=0;i<m;i++)
	{
		for(j=0;j<n;j++)
		scanf("%d",&arr[i][j]);
	}
	for(i=0;i<m;i++)
	{
		for(j=0;j<n;j++)
		sum+=arr[i][j];
		printf("第%d行的和为%d\n",i+1,sum);
        sum=0;
	}
	for(j=0;j<n;j++)
	{
		for(i=0;i<m;i++)
		sum+=arr[i][j];
		printf("第%d列的和为%d\n",j+1,sum);
        sum=0;
	}
	return 0;
}

6.输入一个m行m列的二维数组,输出正对角线和反对角线的差

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	int n;
	printf("please enter n:");
	scanf("%d",&n);
	int arr[n][n];
	int i,j,sum1=0,sum2=0;
	for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)
		{
			scanf("%d",&arr[i][j]);
			if(i==j)
			sum1+=arr[i][j];
			if(i+j==n-1)
			sum2+=arr[i][j];
		}
	}
	printf("正负对角线的差为%d\n",sum1-sum2);
	return 0;
}

7.输入一个2行3列的二维数组,请实现转置(行列转换)

1 2 3

4 5 6 ----》 1 4

2 5

3 6

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
   int m,n;
   printf("请输入行和列:");
   scanf("%d%d",&m,&n);
   int a[m][n],b[n][m],i,j;
   for(i=0;i<m;i++)
   {
       for(j=0;j<n;j++)
	   {
		   scanf("%d",&a[i][j]);
           b[j][i]=a[i][j];
	   }
   }
   for(j=0;j<n;j++)
   {
	   for(i=0;i<m;i++)
	   printf("%d",b[j][i]);
	   putchar(10);
   }
	return 0;
}

8. 设float a=2, b=4, c=3;,C语言表达式(1/2)+(a+b)*c的计算结果是:

18

9. 下述程序执行后的输出结果是:

main()

{

int x='f';

printf("%c\n",'a'+(x-'a'+1));

}

g

10. 执行语句“ k=7>>1; ”后,变量 k 的当前值是:

3

11. 若有宏定义:#define MOD(x,y) x%y

则执行以下语句后的输出结果是:

int a=10,b=94;

printf(″%d\n″,MOD(b,a+4));

8

12. 下列程序段运行后, x 的值是:

int a=1;b=2;x=0;

if(!( --a))x-- ;

if(!b)x=7;else ++x;

0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值