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;
}
结果如下: