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