1、编写一个程序。输出以下形式的前五行杨辉三角图案
#include<stdio.h>
int main(int argc, const char *argv[])
{
int n;
//输入杨辉三角阶数
printf("请输入阶数:");
scanf("%d",&n);
int arr[n][n];
printf("%d阶杨辉三角为:\n",n);
//控制行
for(int i=0;i<n;i++)
{
//每一行前输出空格
for(int j=0;j<n-i;j++)
{
printf(" ");
}
//控制列数
for(int j=0;j<=i;j++)
{
//每一行第一个和最后一个赋值1
if(j==0||i==j)
{
arr[i][j]=1;
}
else{
//其余等上一行相邻两个数之和
arr[i][j]=arr[i-1][j-1]+arr[i-1][j];
}
printf("%d ",arr[i][j]);
}
//输出一行数字后换行
printf("\n");
}
return 0;
}
运行结果:
2、编写一个程序。请用 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};
int n=sizeof(a)/sizeof(int); //计算元素个数
int i ,j,t;
//排序
for(i=1;i<n;i++) //排序趟数
{
for(j=0;j<n-i;j++) //相邻元素比较,逆序,交换
{
if(a[j]>a[j+1])
{
t=a[j],a[j]=a[j+1],a[j+1]=t;
}
}
}
//输出
printf("排序后的元素是:");
for(i=0;i<n;i++)
{
printf("%4d",a[i]);
}
printf("\n");
return 0;
}
选择排序:
#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};
int n=sizeof(a)/sizeof(int); //计算元素个数
int i ,j,t;
for(i=0;i<n-1;i++)
{
int min=i;
for(j=i+1;j<n;j++)
{
if(a[j]<a[min])
{
min=j;
}
}
if(i!=min)
{
t=a[i],a[i]=a[min],a[min]=t;
}
}
printf("排序后的元素是:");
for(i=0;i<n;i++)
{
printf("%4d" ,a[i]);
}
return 0;
}
运行结果:
3、编写一个程序。假设你有一只刚出生的母兔,母兔第3年开始生小兔,以后每年生一只。如果生出的都是母兔,请代码实现:输入你拥有该母兔后的第几年,输出该年你拥有的兔子数。
思路提示:1 1 2 3 5 8 13 21
#include <stdio.h>
int main()
{
int n;
int i;
printf("拥有该母兔后的第几年:");
scanf("%d", &n);
int a[n];
for(i=0;i<n;i++)
{
if(i==0||i==1)
{
a[i] =1;
}
else
{
a[i] = a[i-1]+a[i-2];
}
printf("兔子数:%5d\n", a[i]);
}
return 0;
}
运行结果:
运行结果未到达预期,代码还需要优化
4、编写一个程序。输入两个n行m列的矩阵A和B,输出他们的和A+B(小孩哥)
思路提示:定义两个二维数组 int a[10][10] , b[10][10];输入行数列数;然后对a数组元素和b数组元素对应求和【可以赋值给c数组】。最后输出求和后的结果
#include <stdio.h>
int main(int argc, const char *argv[])
{
int n,m;
scanf("%d %d",&n,&m);
int arr[n][m],brr[n][m],crr[n][m];
//输入arr数组
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
scanf("%d",&arr[i][j]);
}
}
//输入brr数组
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
scanf("%d",&brr[i][j]);
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
//先初始化crr各项的值,再求和
crr[i][j]=0;
crr[i][j]=arr[i][j]+brr[i][j];
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
printf("%3d",crr[i][j]);
}
}
return 0;
}
运行结果:
5、编写一个程序。一个长度为10的数组中重复数据,现要求相同数据只保留一份,其他的用0来代替,被替换的数据移到数组末尾。(数组内容自定)
a[ ]={3, 2, 10, 17, 23, 15, 82 , 17, 2, 78};
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int a[]={3, 2, 10, 17, 23, 15, 82 , 17, 2, 78};
int n=sizeof(a)/sizeof(int); //计算元素个数
int i ,j,t;
for(i=0; i<n; i++)
{
for(j=i+1; j<n; j++)
{
if(a[i]==a[j]) //重复数组用0代替
{
a[j] = 0;
}
}
}
//排序
for(i=1;i<n;i++) //排序趟数
{
for(j=0;j<n-i;j++) //相邻元素比较,逆序,交换
{
if(a[j]<a[j+1]) //从大到小排序
{
t=a[j],a[j]=a[j+1],a[j+1]=t;
}
}
}
//输出
printf("排序后的元素是:");
for(i=0;i<n;i++)
{
printf("%4d",a[i]);
}
printf("\n");
return 0;
}
运行结果:
6、【选做题】编写一个程序。给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值的那两个整数,并输出它们的数组下标。输入: nums = [3,2,4],target = 6 输出:[1,2]。
有空在补充!!!