C语言数组练习

1、编写一个程序。输出以下形式的前五行杨辉三角图案 (石峰)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 5
int main(int argc, const char *argv[])
{
	int a[N][N] = {0}; 	//定义一个5行5列的数组
	int i,j;
	
	for(i=0; i<N; i++){ 	//行数
		for(j=0; j<=N-i; j++){ 	//列数,在第N-i列输入空格
			printf(" ");
		}

		for(j=0; j<=i; j++){ 	//列数
			if(j==0 || j==i){ 	//每行的第一列和最后一列输出1
				a[i][j] = 1; 	
			}else{ 				//否则输出第i行第j列的数 等于 上一行的第j-1和第j列数之和
				a[i][j] = a[i-1][j-1] + a[i-1][j];
			}
			printf("%d ",a[i][j]);
		}
		printf("\n");
	}
	return 0;
}

结果如下:

2、编写一个程序。请用 C、JAVA、C# 任一种语言,对数组 {3, 2, 10, 1, 23, 15, 82} 进行由小到大的排序。(安在软件)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	int a[]={3,2,10,1,23,15,82}; 	//定义一个长度为7的数组
	int i,k=0; 						//定义下标和中间变量
	//冒泡排序,共6趟,每趟确定一个数
	for(int ts=1; ts<7-1; ts++){ 	//趟数
		for(i=0; i<7-ts; i++){ 		//相邻两个数的下标
			if(a[i] > a[i+1]){ 		//判断相邻两个数的大小,逆序交换
				k = a[i];
				a[i] = a[i+1];
				a[i+1] = k;
			}
		}
	}
	//输出
	for(i=0; i<7; i++){
		printf("a[%d]=%d ",i ,a[i]);
	}
	putchar('\n');
	return 0;
}

结果如下:

3、编写一个程序。假设你有一只刚出生的母兔,母兔第3年开始生小兔,以后每年生一只。如果生出的都是母兔,请代码实现:输入你拥有该母兔后的第几年,输出该年你拥有的兔子数。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	//定义年份并输出
	int year;

	printf("请输入年份:");
	scanf("%d",&year);
	
	//定义一个很大的数组,使year在这个数组大小范围内
	int a[10000];
	if(year<0 || year>10000){ 	//超出范围结束程序,重新输入年份
		printf("请重新输入年份:\n");
		return 0;
	}
	
	//计算第n年兔子数量
	int i; 	//下标
	for(i=0; i<year; i++){
		if(i==0 || i==1){ 	//第一年和第二年只有1只
			a[i] = 1;
		}else{ 			//第三年开始计算兔子数量
			a[i] = a[i-1] +a[i-2];
		}
	}
	printf("第%d年兔子的数量是%d\n",i,a[i-1]);
	return 0;
}

结果如下:

4、编写一个程序。输入两个n行m列的矩阵A和B,输出他们的和A+B

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	//定义三个数组,都为3行3列
	int a[3][3]={1,2,3,1,2,3,1,2,3}, b[3][3]={1,2,3,4,5,6,7,8,9}, c[3][3]={0};
	//下标
	int i,j;

	for(i=0; i<3; i++){ // 行数
		for(j=0; j<3; j++){ //列数
			//c的第i行第j列数 = a的第i行第j列数 + b的第i行第j列数
			c[i][j] = a[i][j] + b[i][j]; 
			printf("c[%d][%d]=%2d ",i,j,c[i][j]);
			if( (j+1)%3==0){
				printf("\n");
			}
		}
	}
	return 0;
}

结果如下:

5、编写一个程序。一个长度为10的数组中重复数据,现要求相同数据只保留一份,其他的用0来代替,被替换的数据移到数组末尾。(数组内容自定)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	//定义一个长度为10的数组
	int a[]={9,5,1,4,7,5,3,6,9,5};
	int i,j; //下标

	//比较每一位数,有相等的,第二次出现的数置为0
	for(i=0; i<10; i++){
		for(j=i+1; j<10; j++){
			if(a[i]==a[j]){
				a[j]=0;
			}
		}
	}
	
	//比较每个数的大小,从大到小进行排序
	int k;
	for(i=1; i<10-1; i++){
		for(j=1; j<10-i; j++){
			if(a[j]<a[j+1]){
				k = a[j];
				a[j] = a[j+1];
				a[j+1] = k;
			}
		}
	}

	for(j=0; j<10; j++){
		printf("a[%d]=%d ",j,a[j]);
	}
	putchar('\n');
	return 0;
}

结果如下:

6、编写一个程序。给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值的那两个整数,并输出它们的数组下标。输入: nums = [3,2,4],target = 6 输出:[1,2]。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	int nums[]={3,2,4};
	int j,target=6,i;
	
	for(i=0; i<3; i++){
		for(j=i+1; j<3; j++){
			if( target == nums[i] + nums[j]){
				printf("[%d %d]",i,j);
			}
		}
	}
	putchar('\n');
	return 0;
}

结果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值