一、堂前习题
1.由键盘输入10个整数,倒序输出。
输入样例
70
5
14
20
19
2
99
67
13
66
输出样例
66
13
67
99
2
19
20
14
5
70
代码如下(示例):
#include <stdio.h>
int main()
{
int arr[10]={0},i = 0;
int sz = sizeof(arr)/sizeof(arr[0]);
for(i=0;i<10;i++)
{
scanf("%d",&arr[i]);
}
for(i=0;i<sz/2;i++)
{
while(i<sz-1)
{
int temp = 0;
temp = arr[i];
arr[i] = arr[sz-1];
arr[sz-1] = temp;
i++;
sz--;
}
}
for(i=0;i<10;i++)
{
printf("%d\n",arr[i]);
}
return 0;
}
上面是正经解法,下面我们看看不太正经的解法:你会发现下面的解法根本就没有涉及任何交换之类的操作,只是输入了10个数,然后倒着输出来。可以理解成这是从题目的结果思考解题方法,作为答案提交上去是不会有任何问题的,因为你确实得到了答案,并且采用了特别简单的方法。但是话说回来我不觉得这对形成良好的编程逻辑有什么帮助。(比赛或者考试真的可以用这种的,只要能得到答案就好了,平时练习还是不太建议,个人观点)
#include<stdio.h>
int main ()
{
int a[10],i;
for(i=0;i<10;i++)//循环输入
scanf("%d",&a[i]);
for(i=9;i>=0;i--)//循环输出
printf("%d\n",a[i]);
return 0;
}
2.由键盘输入一个3*4的矩阵,要求输出它的转置矩阵。
输入格式 3行4列的矩阵,数与数之间由一个空格分隔
输出格式 4行3列的矩阵,数与数之间由一个空格分隔
输入样例
1 6 9 3
1 1 0 2
1 9 8 9
输出样例
1 1 1
6 1 9
9 0 8
3 2 9
代码如下(示例):
#include<stdio.h>
int main()
{
int i = 0,j = 0,arr1[3][4],arr2[4][3];//再开一个数组
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
scanf("%d",&arr1[i][j]);
}
}
for(i=0;i<4;i++)
{
for(j=0;j<3;j++)
{
arr2[i][j] = arr1[j][i];//转置矩阵就是行都变成列
printf("%d ",arr2[i][j]);
}
printf("\n");
}
return 0;
}
二、堂上练习
1.由键盘输入10个数,用“冒泡法”对10个数从小到大排序,代码如下,请填充完整。
#include “stdio.h”
main()
{ int a[10], i, j, t;
for(i=0;i<10;i++)
scanf(“%d”,) ;
for()
{ for(j=0;j<;j++)
if ()
{_______________________}
}
for(i=0;i<10;i++)
printf("%d ",a[i]);
}
输入样例
70 5 14 20 19 2 99 67 13 66
输出样例
2 5 13 14 19 20 66 67 70 99
代码如下(示例):
#include "stdio.h"
main(){
int a[10], i, j, t;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<9;i++)
{
for(j=0;j<9-i;j++)
//小的数放最前
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
for(i=0;i<10;i++)
printf("%d ",a[i]);
}
2.由键盘输入20个整数,统计不同数字的个数。
输入样例
70 5 14 22 19 2 99 67 13 66 5 93 44 38 22 11 39 22 33 11
输出样例
16(因为5有1个重复数字,11有1个重复数字,22有2个重复数字)
代码如下(示例):
#include<stdio.h>
int main()
{
int a[20],i,t,p=0;
for(i=0;i<20;i++)
{
scanf("%d",&a[i]);
//输入数与它前面前面的数一一对比
for(t=0;t<i;t++)//划重点!!!
{
if(a[t] == a[i])//发现有相同的就跳出
break;
}
if(t == i)//若上面跳出了,t是不等于i的。
//若没有跳出,则上面的t++已经等于i了
p++;
}
printf("%d\n",p);
return 0;
}
或者
#include <stdio.h>
int main()
{
int arr[20] = {0};
int i = 0,j = 0,n = 20;
for(i = 0;i<20;i++)
{
scanf("%d",&arr[i]);
}
for(i = 0;i<19;i++)
{
for(j = i + 1;j<20;j++)
{
if(arr[i] == arr[j])
{
n--;
break;//记得哦
}
}
}
printf("%d",n);
return 0;
}
3.由键盘输入一个3*4(3行4列)的数字矩阵,其中任意两个数字均不相同。要求输出该数字矩阵中的鞍点(即在矩阵行中最大,列中最小的数)。
若没有鞍点,输出“NO”字样。
输入样例
87 90 110 98
70 97 210 65
99 45 120 30
输出样例
110
代码如下(示例):
#include <stdio.h>
int main()
{
int arr[3][4] = {0},i = 0,j = 0,t = 0,x = 0,m = 0;
for(i = 0;i<3;i++)
{
for(j = 0;j<4;j++)
{
scanf("%d",&arr[i][j]);
}
}
for(i = 0;i<3;i++)
{
m = arr[i][0];
for(j = 1;j<4;j++)
{
if(arr[i][j]>m)
{
m = arr[i][j];
t = j;
}
}
for(x = 0;x<3;x++)
{
if(m > arr[x][t])
{
break;
}
}
if(x == 3)
{
printf("%d",arr[i][t]);
return 0;
}
}
if(i == 3 && j == 4)
{
printf("NO");
}
return 0;
}
高精度加法在下一篇