C语言编程练习——数组(一)

帮一个 c语言小白 盆友撸代码,改进的空间还有很大,希望大神多多指教!

一、组合数的和

给定 N 个非 0 的个位数字,用其中任意 2 个数字都可以组合成 1 个 2 位的数字。要求所有可能组合出来的 2 位数字的和。例如给定 2、5、8,则可以组合出:25、28、52、58、82、85,它们的和为330。
输入格式:
输入在一行中先给出 N(1 < N < 10),随后给出 N 个不同的非 0 个位数字。数字间以空格分隔。
输出格式:
输出所有可能组合出来的2位数字的和。
输入样例:

3 2 8 5

输出样例:

330

代码如下:

#include<stdio.h>
int main()
{
	int N,arr[10],i,j,sum = 0;
	scanf("%d",&N);
	for(i = 0; i < N; i++){
		scanf("%d",&arr[i]);
	}
	for(i = 0; i < N; i++){
		for(j = 0; j < N; j++){
			if(i != j){
				sum = sum + (arr[i] * 10 + arr[j]);
			}
		}
	}
	printf("%d",sum);
	return 0;
}

二、数字加密

输入一个四位数,将其加密后输出。方法是将该数每一位上的数字加9,然后除以10取余,做为该位上的新数字,最后将千位和十位上的数字互换,百位和个位上的数字互换,组成加密后的新四位数。例如输入1257,经过加9取余后得到新数字0146,再经过两次换位后得到4601。
输入格式:
输入在一行中给出一个四位的整数x,即要求被加密的数。
输出格式:
在一行中按照格式“The encrypted number is V”输出加密后得到的新数V。
输入样例:

1257

输出样例:

The encrypted number is 4601

代码如下:

#include<stdio.h>
void reverseNum(int n);
int main()
{
	int x;
	scanf("%d",&x);
	reverseNum(x);
	return 0;
}
void reverseNum(int n){
	int arr[30],i = 0, count = 0,temp;
	while(1){
		arr[i] = ((n % 10) + 9) % 10;
		count++;
		n /= 10;
		i++;
		if(count == 4){
			break;
		}
	}
	for(i = 0; i < count; i++){
		if(i == 0 || i == 2){
			temp = arr[i];
			arr[i] = arr[i + 1];
			arr[i + 1] = temp;
		}
	}
	printf("The encrypted number is ");
	for(i = 0; i < count; i++){	
		printf("%d",arr[i]);
	}	
}

三、求矩阵各行元素之和

本题要求编写程序,求一个给定的m×n矩阵各行元素之和。

输入格式:
输入第一行给出两个正整数m和n(1≤m,n≤6)。随后m行,每行给出n个整数,其间
以空格分隔。
输出格式:
每行输出对应矩阵行元素之和。
输入样例:

3 2
6 3
1 -8
3 12

输出样例:

9
-7
15

代码如下:

#include<stdio.h>
int main()
{
	int m,n,i,j;
	scanf("%d %d",&m,&n);
	int a[100][6];
	for(i = 0; i < m; i++){
		for(j = 0; j < n; j++){
			scanf("%d",&a[i][j]);
		}
	} 
	for(i = 0; i < m; i++){
		for(j = 1; j < n; j++){
			a[i][0] += a[i][j];
		}
	} 
	for(i = 0; i < m; i++){
			printf("%d",a[i][0]);
		
		printf("\n");
	} 
	return 0;
}

四、求二维数组中的最大值和最小值

编写程序,输入一个3×3的二维整数数组,输出其中最大值、最小值。
输入格式:
输入9个整型数到二维数组a[3][3],数据之间用一个空格分隔。
输出格式:
输出数组a的最大值和最小值
输入样例:
在这里给出一组输入。例如:

1 2 3 4 5 6 7 8 9

输出样例:
在这里给出相应的输出。例如:

max=9 min=1

代码如下:

#include<stdio.h>
int main()
{
	int arr[3][3],i,j,max,min;
	for(i = 0; i < 3; i++){
		for(j = 0; j < 3; j++){
			scanf("%d",&arr[i][j]);
		}
	}
  max = arr[0][0];
	min = arr[0][0];
	for(i = 0; i < 3; i++){
		for(j = 0; j < 3; j++){
			if(max < arr[i][j]){
				max = arr[i][j];
			}
			if(min > arr[i][j]){
				min = arr[i][j];
			}
		}
	}	
	printf("max=%d min=%d",max,min);
	return 0;
}

五、字符串排序

本题要求编写程序,读入5个字符串,按由小到大的顺序输出。

输入格式:
输入为由空格分隔的5个非空字符串,每个字符串不包括空格、制表符、换行符等空白字符,长度小于80。

输出格式:
按照以下格式输出排序后的结果:

After sorted:
每行一个字符串

输入样例:

red yellow blue green white

输出样例:

After sorted:
blue
green
red
white
yellow

代码如下:

#include<stdio.h>
#include<string.h>
int main()
{
	char str[5][80],temp[80];
	int i,j;
	for(i = 0; i < 5; i++){
		scanf("%s",str[i]);
	}
	for(i = 0; i < 5; i++){
		for(j = i + 1; j < 5; j++){
			if(strcmp(str[i],str[j]) > 0){
				strcpy(temp,str[i]);
				strcpy(str[i],str[j]);
				strcpy(str[j],temp);
			}
		}
	}
	printf("After sorted:\n");
	for(i = 0; i < 5; i++){
		puts(str[i]);
	}
	return 0;
}

六、评委打分

班级里要搞智力竞赛啦!同学们都踊跃参加。进入最后决赛的是10个同学,随着一道道题目的出示,有时是1号选手得分,有时是5号选手得分,每次答对者得10分,最后结果如何呢?
输入格式:
第一行有十个整数,表示十位同学的初始分。第二行一个整数n,表示有n道题竞赛。 接下去有n行,每行有一个数字x,x表示本次可以加分的选手序号(每次答对者得10分)。
输出格式:
10个同学最终的得分值,每两位同学之间有一个空格。
输入样例:

10 0 0 0 10 10 0 0 0 10
3
1
10
1

输出样例:

30 0 0 0 10 10 0 0 0 20

代码如下:

#include<stdio.h>
int main()
{
	int n,arr[10],arr2[10],i;	
	for(i = 0; i < 10; i++){
		scanf("%d",&arr[i]);
	}
	scanf("%d",&n);
	for(i = 0; i < n; i++){
		scanf("%d",&arr2[i]);
	}
	for(i = 0; i < n; i++){
		switch(arr2[i]){
			case 1:
				arr[0] += 10;
				break;
			case 2:
				arr[1] += 10;
				break;
			case 3:
				arr[2] += 10;
				break;
			case 4:
				arr[3] += 10;
				break;
			case 5:
				arr[4] += 10;
				break;
			case 6:
				arr[5] += 10;
				break;
			case 7:
				arr[6] += 10;
				break;
			case 8:
				arr[7] += 10;
				break;
			case 9:
				arr[8] += 10;
				break;
			case 10:
				arr[9] += 10;
				break;
		}
	}
	
	for(i = 0; i < 10; i++){
		printf("%d",arr[i]);
        if(i != 9){
            printf(" ");
        }
	}
	return 0;
}

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值