高级语言讲义2011软专(仅高级语言部分)

1.某公司采用公用电话传递敷据,数据是四位的整数,为了安全,在传递过程中数据是加密的。加密规则如下,每位数字加5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换,编程序,请将输入的数据加密并输出加密结果。例如,输入的传递数据为3726, 输出的加密数据为1728.

#include <stdio.h>
 
int main() {
	int a[1000];
	int count = 0;
	int dat;
	scanf("%d",&dat);
	while(dat>0) {
		a[count++]=(dat%10+5)%10;
		dat/=10;
	}
	swap(&a[0],&a[3]);
	swap(&a[1],&a[2]);
	for(int i=count-1; i>=0; i--)
		printf("%d",a[i]);
	return 0;
}
 
void swap(int *a,int *b) {
	int temp=*a;
	*a=*b;
	*b=temp;
}

2.对于一个自然敬,若为偶数,则把它除以2,若为奇数,则把它乘以3加1,经过如此有限次运算后,总可以得到自然数值1.编写程序,输入一个自然敷,求经过多少次变换可得到自然数1.例如:输入22, 输出STEP=16.

#include <stdio.h>
 
int main() {
	int  dat;
	int step=0;
	scanf("%d",&dat);
	while(dat!=1) {
		if(dat%2==0)
			dat/=2;
		else
			dat=dat*3+1;
		step+=1;
	}
	printf("%d",step);
	return 0;
}

3.平面有10个点,任意两点可以构成个钱段.编写个程序:输出在构成的的所有线段中,长度最长的线段长度

#include <stdio.h>
#include <math.h>
 
double fun(int a[100][2]) {
	double max=-1;
	double d;
	for(int i=0; i<100; i++)
		for(int j=i; j<100; j++) {
			d=sqrt(pow(a[i][1]-a[j][1],2)+pow(a[i][2]-a[j][2],2));
			if(max==-1&&d>0)
				max=d;
			else if(d>max)
				max=d;
		}
	return max;
}

4.排序问题,给定一个10*10的矩阵,编一程序,对a进行排序。要求:

●a[i1][j1]<=a[i1][j2],若j1<j2

●a[i1][j1]<=a[i2][j2],若i1<i2

#include <stdio.h>
#include <stdlib.h>
 
void sort(int *arr,int n) {
	for(int i=0; i<n-1; i++)
		for(int j=0; j<n-i-1; j++)
			if(arr[j]>arr[j+1]) {
				int temp=arr[j];
				arr[j]=arr[j+1];
				arr[j+1]=temp;
			}
}
 
int finsort(int **arr,int m,int n) {
	int *finarr=(int *)malloc(sizeof(int)*m*n);
	int k=0;
	for(int i=0; i<m; i++)
		for(int j=0; j<n; j++)
			finarr[k++]=arr[i][j];
	sort(finarr,m*n);
	k=0;
	for(int i=0; i<m; i++)
		for(int j=0; j<n; j++)
			arr[i][j]=finarr[k++];
}
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值