第1关:数存到一个一维数组中
任务:将1-200中所有能被6整除、但不能被4整除的数存到一个一维数组中,并输出。
#include <stdio.h>
int main(void)
{
/*********Begin*********/
int numbers[200];
int i, j = 0;
for (i = 1; i <= 200; i++)
{
if (i % 6 == 0 && i % 4 != 0)
{
numbers[j] = i;
j++; // 这里多加了一个数,所以在后面需要剪掉一个数
}
}
for (i = 0; i < j; i++) // 所以i<j
{
printf("%d ", numbers[i]);
}
/*********End**********/
return 0;
}
第2关:求矩阵对角线上的元素之和
任务:从键盘输入一个M×M的矩阵,分别求该矩阵主对角线上的元素之和、以及副对角线上的元素之和。要求M的值从键盘输入,且M的值小于10。
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int m;//m乘m的矩阵
scanf("%d",&m);
int matrix[m][m];
int i,j;
int sum1=0,sum2=0;
for(i=0;i<m;i++)//输入m乘m的矩阵
{
for(j=0;j<m;j++)
{
scanf("%d",&matrix[i][j]);
}
}
//求主对角线上的元素之和
for(i=0;i<m;i++)
{
sum1=sum1+matrix[i][i];
}
//求副对角线上的元素之和
for(i=0;i<m;i++)
{
sum2=sum2+matrix[i][m-1-i];
}
printf("%d\n",sum1);
printf("%d",sum2);
/*********End**********/
return 0;
}
第3关:逆序存放数组
任务:从键盘输入n的值(n<10),再输入n个整数到一维数组中,将这n个整数逆序存放到该数组中,并输出。
#include <stdio.h>
int main(void)
{
/*********Begin*********/
int n;
scanf("%d", &n);
int arr[n];
for (int i = 0; i < n; i++)
{
scanf("%d", &arr[i]);
}
// for (int i = 0; i < n; i++)
// {
// printf("%d ", arr[i]);
//}
for (int i = n - 1; i >= 0; i--)
{
printf("%d ", arr[i]);
}
return 0;
/*********End**********/
return 0;
}
第4关:找出ASCII码值最小的字符
任务:从键盘输入一个字符串,找出其中ASCII码值最小的字符,并输出该字符。
#include <stdio.h>
int main(void)
{
/*********Begin*********/
char str[100];
scanf("%s", str);
char min = str[0];
for (int i = 1; str[i] != '\0'; i++)
{
if (str[i] < min)
{
min = str[i];
}
}
printf("%c\n", min);
return 0;
/*********End**********/
return 0;
}
第5关:将小写英文字母复制到数组中
任务:从键盘输入一个字符串到字符数组中,将其中的小写英文字母复制到另外一个字符数组中并输出。
#include<stdio.h>
int main(void)
{
/*********Begin*********/
char input[20];
char output[20];
int i,j;
scanf("%s",input);
j=0;
for(i=0;input[i]!='\0';i++)
{
if(input[i]>='a' && input[i]<='z')
{
output[j]=input[i];
j++;
}
}
output[j]='\0';
printf("%s\n",output);
/*********End**********/
return 0;
}
第6关:查找整数
任务:给出一个包含 n个整数的数列,问整数 a在数列中出现的次数,以及第一次出现的位置(位置从1开始编号)。
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int n;//数组的长度
scanf("%d",&n);
int numbers[n];
int a;//待查找的数
int count=0;//记录出现的次数
int index=-1;//记录第一册出现的下标
int i,j;
for(i=0;i<n;i++)//输入数组
{
scanf("%d",&numbers[i]);
}
scanf("%d",&a);//
for(i=0;i<n;i++)
{
if(numbers[i]==a)//如果找到了,记录出现的次数
{
count++;
if(index==-1)//如果第一次找到啊a,记录位置
{
index=i+1;//因为要求是从一开始编号,所以i+1
}
}
}
printf("%d\n",count);
printf("%d\n",index);
/*********End**********/
return 0;
}
第7关:冒泡法排序
任务:采用冒泡法将十个数按从大到小的顺序进行排列,要求数组的大小采用#define命令设置。
#include <stdio.h>
/*********Begin*********/
#define SIZE 10
/*********End**********/
int main(void)
{
/*********Begin*********/
int numbers[SIZE];
int i, j;
int temp;
// 输入数组
for (i = 0; i < SIZE; i++)
{
scanf("%d", &numbers[i]);
}
// 冒泡法比较
for (i = 1; i <= SIZE - 1; i++) // 一共进行(数组长度-1次)
{
for (j = 0; j < SIZE - i; j++)
{
if (numbers[j] < numbers[j + 1])
{
temp = numbers[j + 1];
numbers[j + 1] = numbers[j];
numbers[j] = temp;
}
}
}
for (i = 0; i < SIZE; i++)
{
printf("%d ", numbers[i]);
}
/*********End**********/
return 0;
}
第8关:选择法排序
任务:从键盘输入一个字符串,用选择法对该字符串中的字符由小到大进行排序,并输出结果。
#include<stdio.h>
/*********Begin*********/
#include<string.h>
/*********End**********/
int main(void)
{
/*********Begin*********/
int i,j;
int temp;
char str[20];
int len;
scanf("%s",str);
len=strlen(str);
for(i=0;i<len-1;i++)
{
for(j=i+1;j<len;j++)
{
if(str[i]>str[j])
{
temp=str[i];
str[i]=str[j];
str[j]=temp;
}
}
}
printf("%s",str);
/*********End**********/
return 0;
}
第9关:二分查找
任务:输入n(n<100)的值,以及n个从小到大排序的整数序列,再输入一个待查找的整数m,使用二分法进行查找该数的序号。
#include <stdio.h>
int main(void)
{
/*********Begin*********/
int n; // 数组的大小
int m; // 待查找的数
int i;
scanf("%d", &n);
int numbers[n];
int left = 0, right = n - 1, mid;
for (i = 0; i < n; i++)
{
scanf("%d", &numbers[i]);
}
scanf("%d", &m);
while (left < right)
{
mid = (left + right) / 2;
if (numbers[mid] == m)
{
printf("%d\n", mid + 1);
return 0;
}
else if (m > mid)
{
left = mid + 1;
}
else
{
right = mid - 1;
}
}
printf("None\n");
return 0;
/*********End**********/
return 0;
}
第10关:删除最大值
任务:输入10个互不相同的整数并保存到数组中,找到最大元素并删除它,输出删除后的数组。
#include <stdio.h>
int main(void)
{
/*********Begin*********/
int arr[10];
int max = 0;
int maxIndex = 0; // 输入10个整数
for (int i = 0; i < 10; i++)
{
scanf("%d", &arr[i]); // 找到最大元素
if (arr[i] > max)
{
max = arr[i];
maxIndex = i;
}
} // 删除最大元素
for (int i = maxIndex; i < 9; i++)
{
arr[i] = arr[i + 1];
} // 输出删除后的数组
for (int i = 0; i < 9; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
return 0;
/*********End**********/
return 0;
}
第11关:数组元素交换
任务:输入n和m的值(n<10,m<10),以及一个 n×m的矩阵,找出每行中最大的元素并与该行第 1列的元素进行交换,输出交换后的矩阵。
#include <stdio.h>
int main(void)
{
/*********Begin*********/
int n, m, i, j, max, max_index;
int matrix[10][10]; // 定义矩阵,最大为10*10
scanf("%d %d", &n, &m); // 输入矩阵的行数n和列数m // 输入矩阵
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
scanf("%d", &matrix[i][j]);
}
} // 找出每行中最大的元素并与该行第1列的元素进行交换
for (i = 0; i < n; i++)
{
// 找出该行最大的元素及其索引
max = matrix[i][0];
max_index = 0;
for (j = 1; j < m; j++)
{
if (matrix[i][j] > max)
{
max = matrix[i][j];
max_index = j;
}
} // 与第1列进行交换
int temp = matrix[i][0];
matrix[i][0] = matrix[i][max_index];
matrix[i][max_index] = temp;
} // 输出交换后的矩阵
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
printf("%d ", matrix[i][j]);
}
printf("\n");
}
return 0;
/*********End**********/
return 0;
}
第12关:用冒泡法对字符串排序
任务:从键盘输入一个字符串,用冒泡法对该字符串中的字符由大到小进行排序,并输出结果。
#include <stdio.h>
#include<string.h>
//*****begin********
void bubbleSort(char str[], int len) {
int i, j;
char temp;
for(i = 0; i < len - 1; i++) {
for(j = 0; j < len - i - 1; j++) {
if(str[j] < str[j+1]) {
temp = str[j];
str[j] = str[j+1];
str[j+1] = temp;
}
}
}
}
int main() {
char str[100];
scanf("%s", str);
int len = strlen(str);
bubbleSort(str, len);
printf("%s\n", str);
return 0;
}
//*****end********