1
矩阵重复元素检测(10分)
问题描述:编写程序判断任意给定3*3的两维整型数组中是否有相同元素。
输入:从键盘随机输入九个整数,作为数组的元素。
输出:如果数组中有相同元素,则输出“yes”;否则,输出“no”。
提示:OJ所用编译器,不支持bool类型。
样例1 输入 0 1 2 3 4 5 6 7 8 输出 no
样例2 输入 0 0 2 3 4 5 6 7 8 输出 yes
#include<stdio.h>
int main(void)
{
int a[3][3],b[3][3],i,j,m,n,flag=0;//此题用一维数组表示更简单,但可以练习使用二维数组
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
scanf("%d",*(a+i)+j);
b[i][j]=a[i][j];
}
for(i=0;i<3;i++)
for(j=0;j<3;j++)
for(m=0;m<3;m++)
for(n=0;n<3;n++)
if(b[i][j]==a[m][n]&&(m!=i||n!=j))
flag=1;
if(flag)
printf("yes");
else
printf("no");
}
2
索引数组排序(10分)
问题描述:已知5个元素的整型数组 A 未排序,一个索引数组 B 保存 A 的下标。编写程序,在不改变数组A的情况下,只改变数组 B完成对A的排序,如下图所示。
输入:从键盘随机输入五个整数,作为数组A的元素。
输出:第一行输出排序后数组A的五个元素,各元素间无间隔字符;第二行输出数组B排序后的五个元素,各元素间无间隔字符。
样例 输入 10 7 5 8 4
输出 107584
42130
#include <stdio.h>
int main(void)
{
int a[5],b[5],i,j,k,r,flag=1;
for(i=0;i<5;i++)
{
scanf("%d",a+i);
b[i]=i;
}
while(flag)//冒泡法将a的下标用b数组表示
{
flag=0;
for(i=0;i<4;i++)
{
if(a[b[i]]>a[b[i+1]])
{
r=b[i];
b[i]=b[i+1];
b[i+1]=r;
flag=1;
}
}
}
for(i=0;i<5;i++)
printf("%d",a[i]);
printf("\n");
for(i=0;i<5;i++)
printf("%d",b[i]);
return 0;
}
3
统计学生成绩(10分)
题目内容:编写一个程序统计某班(人数不超过50人)3门课程的成绩,它们是语文、数学和英语。先输入学生人数, 然后按编号从小到大的顺序依次输入学生成绩, 最后统计每门课程全班的总成绩和平均成绩。
输入:学生人数及每个学生各科成绩(每个学生的成绩占1行)
输出:每门课程全班的总成绩和平均成绩(第1行为各科总成绩,相邻2个数据之间间隔1个空格;第2行为各科平均成绩,相邻2个数据之间间隔1个空格)。
样例:
输入:
3
65 76 70
82 79 85
92 82 95
输出:
239 237 250
79 79 83
#include<stdio.h>
int main(void)//此题做法比较像打表,但由于题目只有三科,所以打表可能反而是最简单的
{
int n,i,j,sum1=0,sum2=0,sum3=0,avg1,avg2,avg3;//avg为average的缩写
scanf("%d",&n);//事实上此题用一维数组也不难做
int a[n][3];//注意二维数组,左面的是行右面是列
for(i=0;i<n;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
for(j=0;j<n;j++)
{
sum1+=a[j][0];
sum2+=a[j][1];
sum3+=a[j][2];
}
avg1=sum1/n;
avg2=sum2/n;
avg3=sum3/n;
printf("%d %d %d\n",sum1,sum2,sum3);
printf("%d %d %d",avg1,avg2,avg3);
return 0;
}
4
回文数(10分)
题目内容:编写一个程序判定用户输入的一个小于
的非负整数是否为“回文数”,所谓回文数是指正读反读都相同的数。
输入:一个非负整数
输出:YES或NO
样例1: 输入:125521 输出:YES
样例2: 输入:1 输出:YES
#include <stdio.h>
#include <string.h>
int main(void)
{
char num[100];
int i,n,flag=1;
scanf("%s",num);
n=strlen(num);//strlen为得到字符串的长度
for(i=n-1;i>=0;i--)
if(num[i]!=num[n-1-i])
flag=0;
if(flag)
printf("YES");
else
printf("NO");
return 0;
}
5
逆序存放(10分)
题目内容:将一个由10个元素构成的int数组中的元素按逆序重新存放。
输入:10个整数
输出:按逆序重新存放后的数组元素(相邻元素之间用一个空格隔开)
样例 输入:6 8 12 11 3 5 9 16 19 24 输出:24 19 16 9 5 3 11 12 8 6
#include <stdio.h>
int main(void)
{
int a[10],b[10],i,j,flag=0;
for(i=0;i<10;i++)//事实上直接scanf("%d",&a[9-i])即可但应该不是本意
scanf("%d",a+i);
for(i=0;i<10;i++)
b[9-i]=a[i];//注意是9-i
for(i=0;i<10;i++)
{
if(flag)//控制空格
printf(" ");
printf("%d",b[i]);
flag=1;
}
return 0;
}