1. 选择排序法应用
题目:用选择排序法对10个整数进行升序排序[1,12,4,9,10,22,-7,0,99,8]
知识点:用一维数组存储数据,再进行处理
方法1:
#include<stdio.h>
int main() {
int i, j, t;
int a[10] = {1, 12, 4, 9, 10, 22, -7, 0, 99,8};
for(i = 0; i < 10; i++) {
for(j = i + 1; j < 10; j++) {
if(a[i] > a[j]) {
t = a[i];
a[i] = a[j];
a[j] = t; }
}
}
for(i = 0; i < 10; i++)
printf("%d ", a[i]);
return 0;
}
方法2:
#include <iostream>
using namespace std;
int main()
{
int i,j,min,temp,a[11]={1000,1,12,4,9,10,22,-7,0,99,8};
for (i=1; i <=9; i++) {
min=i;
for (j=i+1; j <=10; j++)
if (a[min]>a[j]) min=j;
temp=a[i];
a[i]=a[min];
a[min]=temp;
}
for (i=1; i <=10; i++)
cout<<a[i]<<" ";
return 0;
}
2. 键盘输入长度为10的数组,统计其中有多少不相同的数据
题目:键盘输入长度为10的数组,统计其中有多少不相同的数据
知识点:用一维数组存储数据,再进行处理
方法1:
#include <stdio.h>
int main() {
int arr[10], count = 1;
for (int i = 0; i < 10; i++) {
scanf("%d", &arr[i]);
}
for (int i = 1; i < 10; i++) {
int j;
for (j = 0; j < i; j++) {
if (arr[i] == arr[j]) {
break;
}
}
if (i == j) {
count++;
}
}
printf("%d", count);
return 0;
}
方法2:
#include <iostream>
using namespace std;
int main()
{
int a[10],i,j,count=1;
for(i=0;i <10;i++){
cin>>a[i];
}
for(i=1;i <10;i++){
for(j=0;j< i;j++)
if(a[i]==a[j])
break;
if(j==i) count++;
}
cout<<count<<endl;
return 0;
}
3. 输入一行字符,统计其中有多少个单词,单词之间用空格分隔开
题目:输入一行字符,统计其中有多少个单词,单词之间用空格分隔开
知识点:用字符数组存储数据,再进行处理
方法1:
#include <stdio.h>
int main() {
char a[80];
int i, num = 0, word = 0;
gets(a);
for (i = 0; a[i] != '\0'; i++) {
if (a[i] == ' ') {
word = 0;
} else if (word == 0) {
num++;
word = 1;
}
}
printf("%d", num);
}
方法2:
#include <iostream>
using namespace std;
int main()
{
char string[81];
int i,num=0,word=0;
char c;
gets(string);
for (i=0; (c=string[i])!='\0'; i++)
if(c==' ') word=0;
else if(word==0) {
word=1;
num++;
}
cout<<num<<endl;
return 0;
}
4. 输入3个字符串,要求找出其中最大者
题目:输入3个字符串,要求找出其中最大者
知识点:用字符数组存储数据,再进行处理
方法1:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char a[100],b[100],c[100],max[100];
scanf("%s %s %s",&a,&b,&c);
if(strcmp(a,b)>0) strcpy(max,a);
else strcpy(max,b);
if(strcmp(max,c)<0) strcpy(max,c);
puts(max);
return 0;
}
方法2:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char str[3][20];
char string[20];
int i;
for (i=0; i <3; i++)
cin>>str[i];
if (strcmp(str[0],str[1])>0)
strcpy(string,str[0]);
else
strcpy(string,str[1]);
if (strcmp(str[2],string)>0)
strcpy(string,str[2]);
cout<<string<<endl;
return 0;
}
5. 输入8个整数放入一维数组w中,找出其中最小和最大数,然后输出
题目:输入8个整数放入一维数组w中,找出其中最小和最大数,然后输出。
知识点:用一维数组存储数据,再进行处理
方法1:
#include <iostream>
using namespace std;
int max(int b[], int n) {
int max = b[0];
for (int i = 0; i < n; i++) {
if (b[i] > max) {
max = b[i];
}
}
return max;
}
int min(int b[], int n) {
int min = b[0];
for (int i = 0; i < n; i++) {
if (b[i] < min) {
min = b[i];
}
}
return min;
}
int main() {
int w[8];
for (int i = 0; i < 8; i++) {
cin >> w[i];
}
cout << "最小值是:" << min(w, 8) << "\n最大值是:" << max(w, 8) << endl;
return 0;
}
方法2:
#include <iostream>
using namespace std;
int main()
{
int w[8],i,j=0,k=0;
for(i=0; i <8; i++) {
cin>>w[i];
}
for(i=0; i <8; i++) {
if(w[i] <w[k])k=i;
if(w[i]>w[j])j=i;
}
cout<<"最小值是:"<<w[k]<<endl;
cout<<"最大值是:"<<w[j]<<endl;
return 0;
}
6. 将一个二维数组行和列元素互换
题目:将一个二维数组行和列元素互换,存到另一个二维数组中并输出这两个矩阵。 原始矩阵如下: 1 4 5 6 3 2 7 8 7 9 0 3
知识点:用二维数组存储数据,再进行处理
方法1:
#include <stdio.h>
int main() {
int i, j;
int a[3][4] = {{1, 4, 5, 6}, {3, 2, 7, 8}, {7, 9, 0, 3}};
int b[4][3];
// 将二维数组行和列的元素互换,并存到数组b中
for (i = 0; i < 3; i++) {
for (j = 0; j < 4; j++) {
b[j][i] = a[i][j];
}
}
// 输出互换后的矩阵b
for (i = 0; i < 4; i++) {
for (j = 0; j < 3; j++) {
printf("%d ", b[i][j]);
}
printf("\n");
}
return 0;
}
方法2:
#include <iostream>
using namespace std;
int main()
{
int a[3][4]= {{1,4,5,6},{3,2,7,8},{7,9,0,3}};
int i,j,b[4][3];
for(i=0; i <3; i++)
for(j=0; j <4; j++)
b[j][i]=a[i][j];
for(i=0; i <4; i++) {
for(j=0; j <3; j++)
cout<<b[i][j]<<" ";
cout<<endl;
}
}
7. 求矩阵对角线元素之和
题目:求一个3*3的整数矩阵对角线元素之和,元素由键盘输入。
知识点:无
方法1:
#include <stdio.h>
int main() {
int a[3][3] = {0}, sum = 0;
// 输入矩阵元素
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
scanf("%d", &a[i][j]);
}
}
// 求对角线元素之和
for (int i = 0; i < 3; i++) {
sum += a[i][i];
}
printf("对角线之和是%d\n", sum);
return 0;
}
方法2:
#include<iostream>
#define N 3
#define M 3
using namespace std;
int main()
{
float a[N][M],sum=0;
int i,j;
for(i=0;i<N;i++)
for(j=0;j<M;j++)
cin>>a[i][j];
for(i=0;i<N;i++)
sum=sum+a[i][i];
cout<<"对角线之和是"<<sum<<endl;
return 0;
}
8. 链接字符串
题目:编写程序,将两个字符串连接起来,不要用strcat函数。
方法1:
#include <stdio.h>
int main() {
char str1[100], str2[100];
int i, n;
i = n = 0;
gets(str1);
gets(str2);
// 使用循环将第二个字符串的字符逐个拼接到第一个字符串的末尾
while (str1[n] != '\0') {
n++;
}
while (str2[i] != '\0') {
str1[n++] = str2[i++];
}
str1[n] = '\0'; // 添加字符串结束符
printf("%s\n", str1);
return 0;
}
方法2:
#include <iostream>
#define N 80
#define M 40
using namespace std;
int main()
{
char s1[N],s2[M];
int i=0,j=0;
cin>>s1;
cin>>s2;
while(s1[i]!='\0')
i++;
while(s2[j]!='\0')
s1[i++]=s2[j++];
s1[i]='\0';
cout<<s1<<endl;
return 0;
}
9. 复制字符串数组
题目:编写程序,将字符数组s2中的全部字符复制到字符数组s1中,不用strcpy函数,复制时,“\0”也要复制过去。“\0”后面的字符不用复制。
方法1:
#include <stdio.h>
void copyString(char s1[], char s2[]) {
int i = 0;
while (s2[i] != '\0') {
s1[i] = s2[i];
i++;
}
s1[i] = '\0';
}
int main() {
char s1[100];
char s2[] = "teacher";
copyString(s1, s2);
printf("%s\n", s1);
return 0;
}
方法2:
#include<iostream>
#include<cstring>
#define N 80
using namespace std;
int main()
{
char from[N],to[N];
int i;
cin>>to;
cin>>from;
for(i=0;i<=strlen(from);i++)
to[i]=from[i];
cout<<to<<endl;
return 0;
}
10. 用冒泡法对一组数排序
题目:用冒泡法对一组数(假设5个数90 80 60 70 40)按由小到大的顺序排序并输出排序后的数。
方法1:
#include <stdio.h>
void bubbleSort(int arr[], int n) {
int i, j, temp;
for (i = 0; i < n-1; i++) {
for (j = 0; j < n-i-1; j++) {
if (arr[j] > arr[j+1]) {
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
int main() {
int arr[] = {90, 80, 60, 70, 40};
int n = sizeof(arr) / sizeof(arr[0]);
bubbleSort(arr, n);
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
方法2:
#include <iostream>
#define N 5
using namespace std;
int main()
{ int a[N];
int i,j,t;
for (i=0;i<N;i++)
cin>>a[i];
for(i=0;i<N-1;i++)
for(j=N-1;j>i;j--)
if (a[j]< a[j-1])
{t=a[j];a[j]=a[j-1];a[j-1]=t;}
for(i=0;i<N;i++)
cout<<a[i]<<" ";
cout<<endl;
return 0;
}
11. 调换数字顺序
题目:从键盘输入10个整数,将其中最小的数与第一个数对换,然后输出对换后的10个数。
方法1:
#include <stdio.h>
void inputNumbers(int arr[], int size) {
for (int i = 0; i < size; i++) {
scanf("%d", &arr[i]);
}
}
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
void processNumbers(int arr[], int size) {
int minIndex = 0;
for (int i = 1; i < size; i++) {
if (arr[i] < arr[minIndex]) {
minIndex = i;
}
}
swap(&arr[0], &arr[minIndex]);
}
void outputNumbers(int arr[], int size) {
printf("");
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int numbers[10];
inputNumbers(numbers, 10);
processNumbers(numbers, 10);
outputNumbers(numbers, 10);
return 0;
}
方法2:
#include <iostream>
using namespace std;
int main()
{
int i,number[10];
int min,k=0,temp;
for (i=0;i<10;i++)
cin>>number[i]; //输入10个数
min=number[0];
for (i=1;i<10;i++)
if (number[i]<min)
{ min=number[i];k=i;} // 查找最小值并记下下标
temp=number[0];
number[0]=number[k];
number[k]=temp; //交换
//输出
for (i=0;i<10;i++)
cout<<number[i]<<" ";
cout<<endl;
return 0;
}