第1关:求正数的个数及正数的平均值
任务:从键盘输入10个整数到数组中,求其中正数的个数及正数的平均值,并输出结果。(平均值精确到小数点后两位)。
#include <stdio.h>
void main()
{
//*****begin********
int a[10], i, sum = 0;
double ping, k = 0;
for (i = 0; i < 10; i++)
{
scanf("%d", &a[i]);
}
for (i = 0; i < 10; i++)
{
if (a[i] > 0)
{
sum = sum + a[i];
k++;
}
}
ping = sum / k;
printf("正数的个数为%.0lf、平均值为%.2lf\n", k, ping);
//*****end********
}
第2关:求平均成绩和低于平均分的学生成绩
任务:编程从键盘输入若干个学生的成绩,输入负数时表示输入结束,输出平均成绩和低于平均分的学生成绩,其中平均值精确到小数点后两位。
#include <stdio.h>
void main()
{
//*****begin********
int a[100]={0};
int i,k=0;
double ping,zong=0;
for(i=0;i<100;i++)
{
scanf("%d",&a[i]);
if(a[i]<0)
break;
zong=zong+a[i];
k++;
}
ping=zong/k;
printf("平均分为%.2lf\n",ping);
printf("低于平均分的分数为\n");
for(i=0;i<k;i++)
{
if(a[i]<ping && a[i]>0 )
printf("%d\n",a[i]);
}
//*****end********
}
第3关:求方差
任务:编程从键盘输入10个数,求他们的方差, 精确到小数点后两位。求方差的公式如下:
#include <stdio.h>
#include <math.h>
void main()
{
//*****begin********
double a[10];
double x, s = 0, zong = 0;
int i;
for (i = 0; i < 10; i++) {
scanf("%lf", &a[i]);
zong = zong + a[i];
}
x = zong / 10;
for (i = 0; i < 10; i++) {
s = s + pow((a[i] - x), 2);
}
s = s / 10;
s=sqrt(s);
printf("方差为%.2lf\n", s);
return 0;
//*****end********
}
第4关:求数组各行的平均值
任务:从键盘上输入一个M×N的二维数组,求该数组各行的平均值,将结果放到一个一维数组中,并输出,要求M和N的值用#define命令设置,平均值精确到小数点后两位。
#include <stdio.h>
//*****begin********
#define M 3
#define N 4
//*****end********
void main()
{
//*****begin********
double nums[M][N];
double sum;
double num[M];
int i,j;
for(i=0;i<M;i++)
{
sum=0;
for (j = 0; j < N; j++) {
scanf("%lf", &nums[i][j]);
sum = sum + nums[i][j];
}
num[i]=sum/N;
}
for(i=0;i<M;i++)
printf("%.2lf ",num[i]);
//*****end********
}
第5关:求矩阵
任务:编程从键盘输入一个N×N的矩阵A,求矩阵B(B=A+A'),即将矩阵A与其转置矩阵A'相加,结果存放到矩阵B中,并输出。要求N的值用#define命令设置,输出时每个数占7位。
#include <stdio.h>
//*****begin********
#define N 3
//*****end********
void main()
{
//*****begin********
int A[N][N], A1[N][N], B[N][N];
int i, j, k;
// 读入矩阵A,并计算其转置矩阵A1
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
scanf("%d", &A[i][j]);
A1[j][i] = A[i][j];
}
}
// 计算矩阵B = A + A1,并输出结果
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
B[i][j] = A[i][j] + A1[i][j];
printf("%7d", B[i][j]);
}
printf("\n");
}
return 0;
//*****end********
}
第6关:求方阵“右上三角”的元素之和
任务:编程从键盘输入一个方阵的行数及所有元素,求该方阵“右上三角”的元素之和。提示:可将数组定义大一点,如定义为10行10列。
#include <stdio.h>
void main()
{
//*****begin********
int n,i,j;
int arr[10][10]={0};
int sum=0;
scanf("%d", &n);
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
scanf("%d", &arr[i][j]);
}
}
// 计算右上三角的元素之和
for (i = 0; i < n; i++) {
for (j = i; j < n; j++) {
sum += arr[i][j]; // 右上三角的元素
}
}
printf("%d\n", sum);
//*****end********
}
第7关:逆序输出
任务:从键盘输入一个字符串,将其按逆序输出。
#include <stdio.h>
//*****begin(可选填)********
#include <string.h>
//*****end********
void main()
{
char str[100];
int i,len=0;
scanf("%s",str);
while(str[len]!='\0')
{
len++;
}
for(i=len-1;i>=0;i--)
{
printf("%c",str[i]);
}
printf("\n");
//*****end********
}
第8关:字符串连接
任务:从键盘输入两个字符串,将第二个字符串连接到第一个字符串的后面,并输出连接后的结果。要求:不能调用字符串库函数strcat()。
#include <stdio.h>
void main()
{
//*****begin********
char str1[100], str2[50];
int i, j;
gets(str1);
gets(str2);
i = 0;
while (str1[i] != '\0')
{
i++;
}
j = 0;
while (str2[j] != '\0')
{
str1[i] = str2[j];
i++;
j++;
}
str1[i] = '\0';
printf("连接后的字符串为%s\n", str1);
return 0;
//*****end********
}
第9关:求数组中最外圈元素的平均值
任务:编程从键盘输入一个M×N的二维数组,求该数组中最外圈元素的平均值,并输出结果。 要求M和N的值用#define命令设置,平均值精确到小数点后两位。
#include <stdio.h>
//*****begin********
#define M 3
#define N 4
//*****end********
void main()
{
int matrix[M][N];
int i,j;
double sum=0,count=0;
double ave;
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
scanf("%d",&matrix[i][j]);
}
}
for(j=0;j<N;j++)
{
sum=sum+matrix[0][j];//第一行
count++;
sum=sum+matrix[M-1][j];//最后一行
count++;
}
for(i=1;i<M-1;i++)
{
sum=sum+matrix[i][0];//第一列
count++;
sum=sum+matrix[i][N-1];//最后一列
count++;
}
ave=sum/count;
printf("外围元素的平均值为%.2lf\n",ave);
//*****end********
}
第10关:求方阵
任务:编程产生一个N×N的方阵,要求该方阵副对角线上的元素均为2,其余元素均为0,输出该方阵,N的大小从键盘输入。
#include <stdio.h>
void main()
{
//*****begin********
int n;
scanf("%d", &n);
int matrix[n][n];
// 遍历数组,根据副对角线上的元素为2的规律进行赋值
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (i + j == n - 1)
{ // 副对角线上的元素
matrix[i][j] = 2;
}
else
{
matrix[i][j] = 0;
}
printf("%d ", matrix[i][j]); // 输出每个元素
}
printf("\n");
}
return 0;
//*****end********
}
第11关:移字符串
任务:从键盘输入一个字符串和一个整数(m),编程移动字符串中的字符,移动规则如下:把第1到第m个字符,平移到字符串的后部,把第m+1到字符串末尾的字符平移到字符串的前部。提示:可借助其他字符数组。
#include <stdio.h>
void main()
{
//*****begin********
char str[100];
char temp[100];
int m;
int len=0,i;
scanf("%s",str);
scanf("%d",&m);
while(str[len]!='\0')
{
len++;
}
for(i=0;i<m;i++)
temp[i]=str[i];
for(i=0;i<len-m;i++)
str[i]=str[i+m];
for(i=0;i<m;i++)
str[len-m+i]=temp[i];
printf("移动后的结果为%s",str);
return 0;
//*****end********
}
第12关:计算平均成绩
任务:假设某班级人数不超过100人,每位同学有3门课程的考试成绩,采用二维数组编程实现从键盘输入班级人数和每个同学的3门课程的成绩,并计算其平均成绩后输出。要求平均成绩保留1位小数,数据之间用键分开。
#include <stdio.h>
void main()
{
//*****begin********
int n;//学生人数
scanf("%d",&n);
double matrix[n][n];
int i,j;
double avg[n];//存储学生的平均成绩
for(i=0;i<n;i++)//输入学生成绩
{
for(j=0;j<n;j++)
{
scanf("%lf",&matrix[i][j]);
}
avg[i]=(matrix[i][0]+matrix[i][1]+matrix[i][2])/3.0;
}
for(i=0;i<n;i++)
{
printf("%d ",i+1);
for(j=0;j<n;j++)
{
printf("%.1lf ",matrix[i][j]);
}
printf("%.1lf\n",avg[i]);
}
return 0;
//*****end********
}
第13关:删除字符串中的前导空格
任务:编程从键盘输入一个字符串,删除字符串中的前导空格,中间和尾部的空格不删除。
#include <stdio.h>
//*****begin(可选填)********
//*****end********
void main()
{
char str[100];
int i,j;
scanf("%[^\n]",str);//[^\n]的意思是,接受除了\n换行符以外的所有符号
//删除字符串签到空格符
i=0;
while(str[i]==' ')
{
i++;
}
if(i>0)
{
j=0;
while(str[i]!='\0')
{
str[j]=str[i];
i++;
j++;
}
str[j]='\0';
}
printf("%s\n",str);
//*****end********
}