C语言基础编程练习5

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

#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[100][100];
	int i,j;
	for(i=0;i<n;i++)
	{
		for(j=0;j<=i;j++)
		{
			if(i>1 && j>0)
			{
				arr[i][j]=arr[i-1][j]+arr[i-1][j-1];
			}
			else
			{
				arr[i][j]=1;
			}
		}
	}
	printf("打印杨辉三角:\n");
	for(i=0;i<n;i++)
	{
		for(j=0;j<=i;j++)//打印数
		{
			printf("%d ",arr[i][j]);
		}
		putchar(10);
	}
	return 0;
}

⒉.输入一个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);//注意:一定要先确定元素的个数(即n的值),不然定义数组长度时,n是个变量
	int arr[n];
	int i;
	for(i=0;i<n;i++)
	{
		printf("please enter arr value:");
		scanf("%d",&arr[i]);
	}
	int max=arr[0];
	int min=arr[0];
	for(i=1;i<n;i++)
	{
		if(max<arr[i])
		{
			max=arr[i];
		}
		if(min>arr[i])
		{
			min=arr[i];
		}
	}
	int second_max=min;
	for(i=0;i<n;i++)
	{
		if(second_max<arr[i] && arr[i]!=max)
		{
			second_max=arr[i];
		}
	}
	printf("second_max=%d\n",second_max);
	int max_sum=max+second_max;
	int max_difference=max-min;
	printf("max_sum=%d  max_difference=%d\n",max_sum,max_difference);
	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 row:");
	scanf("%d",&m);
	printf("please enter n column:");
	scanf("%d",&n);
	int arr[m][n];
	int i,j;
	for(i=0;i<m;i++)
	{
		for(j=0;j<n;j++)
		{
			printf("please enter arr value:");
			scanf("%d",&arr[i][j]);
		}
	}
	int max=arr[0][0];
	int min=arr[0][0];
	int second_min;
	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];
			}
		}
	}
	second_min=max;
	for(i=0;i<m;i++)
	{
		for(j=0;j<n;j++)
		{
			if(second_min>arr[i][j] && arr[i][j]!=min)
			{
				second_min=arr[i][j];
			}
		}
	}
	printf("数组中的第二小值为:%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("please enter n:");
	scanf("%d",&n);
	int arr[n];
	int i;
	int key,index,count = 0;
	for(i=0;i<n;i++)
	{
		printf("please enter arr value:");
		scanf("%d",&arr[i]);
	}
	printf("您想要需要查找的key是:");
	scanf("%d",&key);
	for(int i=0;i<n;i++)
	{
		if(key==arr[i])                        
		{
			index=i;
			count ++;
		}
	}
	if(count==0)
	{
		printf("key不存在\n");
	}else if(count==1)
	{
		printf("key的下标为:%d\n",index);
	}else
	{
		printf("key出现了%d次\n",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("please enter m row && n column:");
	scanf("%d%d",&m,&n);
	int arr[m][n];
	int i,j,row_sum=0,column_sum=0;
	for(i=0;i<m;i++)
	{
		for(j=0;j<n;j++)
		{
			printf("please enter arr value:");
			scanf("%d",&arr[i][j]);
		}
	}
	for(i=0;i<m;i++)
	{
		row_sum=0;//输出完一行的和之后要进行清零操作,不然后面行的和会累加
		for(j=0;j<n;j++)
		{
			row_sum+=arr[i][j];
		}
		printf("第%d行的和为:%d\n",i+1,row_sum);
	}
	for(i=0;i<n;i++)
	{
		column_sum=0;//输出完一列的和之后要进行清零操作,不然后面列的和会累加
		for(j=0;j<m;j++)
		{
			column_sum+=arr[j][i];
		}
		printf("第%d列的和为:%d\n",i+1,column_sum);
	}
	return 0;
}

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

#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];
	int i,j;
	int Diagonal_sum=0,back_Diagonal_sum=0;
	int difference;
	for(i=0;i<m;i++)
	{
		for(j=0;j<m;j++)
		{
			printf("please enter arr value:");
			scanf("%d",&arr[i][j]);
		}
	}
	for(i=0;i<m;i++)
	{
		for(j=0;j<m;j++)
		{
			if(i==j)
			{
				Diagonal_sum+=arr[i][j];
			}
			if(i+j==m-1)
			{
				back_Diagonal_sum+=arr[i][j];
			}
		}
	}
	difference=Diagonal_sum-back_Diagonal_sum;
	printf("正对角线和反对角线的差为:%d\n",difference);
	return 0;
}

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

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
    int x,y;//定义几行几列
	printf("please enter x row && y column:");
	scanf("%d%d",&x,&y);
	int arr[x][y];
	int i,j;
	for(i=0;i<x;i++)
	{
		for(j=0;j<y;j++)
		{
			printf("please enter arr value:");
			scanf("%d",&arr[i][j]);
		}
	}
	for(i=0;i<y;i++)
	{
		for(j=0;j<x;j++)
		{
			printf("%d ",arr[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("%cIn",'a'+(x-'a'+1));}

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

答:3

11.若有宏定义:#define MOD(x,y)x%y
则执行以下语句后的输出结果是:
int a=10,b=94;
printf("%dIn",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、付费专栏及课程。

余额充值