(高分)请C语言高手帮忙写一下这个几个小程序
1、编程找出VAR无符号数据区中的最大值放于MAX单元中。2、编程统计TABLE数据区中正数、负数和零的个数分别保存于PLUS、NEGA和ZERO单元中。3、编程将存于X...
1、编程找出VAR无符号数据区中的最大值放于MAX单元中。
2、编程统计TABLE数据区中正数、负数和零的个数分别保存于PLUS、NEGA和ZERO单元中。
3、编程将存于XDATA单元中的一个字节二进制数转换成十六进制数并在屏幕上显示出来。
4、将一个字符串中的所有小写字母转换为大写字母后放回原位置。
5、将一组无(带)符号数按升(降)序排序。 展开
2、编程统计TABLE数据区中正数、负数和零的个数分别保存于PLUS、NEGA和ZERO单元中。
3、编程将存于XDATA单元中的一个字节二进制数转换成十六进制数并在屏幕上显示出来。
4、将一个字符串中的所有小写字母转换为大写字母后放回原位置。
5、将一组无(带)符号数按升(降)序排序。 展开
3个回答
展开全部
简单的C程序
部分已经验证,仅供参考 简单的小程序 自己捉摸下不难的~~~
1、
程序如下:
MOV R0, #21H ;起始地址.
MOV MAX,#00H ;先用0当做最大值.
MOV R2, #20H ;数据长度.
LOOP:
MOV A, @R0 ;取来一个数据.
CLR C
SUBB A, MAX ;减“最大值”.
JNC rel1 ;不够减就算了.
MOV A, @R0 ;够减,就把这个数据.
MOV MAX,A ;当做最大值.
rel1:
INC R0 ;转向下一个.
DJNZ R2, LOOP ;循环.
SJMP $ ;结束.
END
2、
DATA SEGMENT
NUM EQU 100
DATASTR DB NUM DUP(?)
MINUS DB 100 DUP(?)
PLUS DB 100 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV SI,0
MOV CX,NUM
L1: MOV AL,DATASTR[SI]
TEST AL,10000000B
JZ NEXT1
MOV MINUS[SI],AL
JMP PASS1
NEXT1: MOV PLUS[SI],AL
PASS1: INC SI
LOOP L1
MOV AH,4CH
INT 21H
CODE ENDS
END START
3、
#include<math.h>
#include <stdio.h>
void main()
{int a,b=1,c,d,e;
int i,j=0,num[8],s[8];
char zh[8];
int shuju(int x);
scanf("%d",&a);
/*实现二进制的分解输入,把二进制的每一位数值导入到数组当中*/
if(-1<a&&a<11111112)
{for(i=0;i<8;i++)
{b=10*b;
c=b/10;
d=a/c;
num[i]=d%10;
if(num[i]>1)
{printf("输入错误,不符合二进制\n");
e=1;
break;}}}
else{printf("输入错误,超出范围\n");
e=1;}
/*对数组中的值进行重组,每4位编成一个四位数与子函数实现对比调用*/
if(e!=1)
{for(i=0;i<8;i=i+4,j++)
{s[j]=num[i]+num[i+1]*10+num[i+2]*100+num[i+3]*1000;
zh[j]=shuju(s[j]);
}
for(;j-1>=0;j--)
{if(zh[j-1]<10) printf("%d",zh[j-1]);
else printf("%c",zh[j-1]);}
printf("\n");
};
}
/*对比调用*/
int shuju(int x)
{char y;
switch(x)
{case 0: y=0;break;
case 1: y=1;break;
case 10: y=2;break;
case 11: y=3;break;
case 100: y=4;break;
case 101: y=5;break;
case 110: y=6;break;
case 111: y=7;break;
case 1000: y=8;break;
case 1001: y=9;break;
case 1010: y='A';break;
case 1011: y='B';break;
case 1100: y='C';break;
case 1101: y='D';break;
case 1110: y='E';break;
case 1111: y='F';break;
}
return(y);}
4、
#include <conio.h>
#include <stdio.h>
void nono(char str1[]);
void fun(char str1[])
{
int i;
i=0;
for(i=0;str1[i]!='\0';i++)
{
if(str1[i]>='a' && str1[i]<='z')
str[i] = str[i]-('a'-'A');
}
}
main()
{ char str1[80]="This Is a c Program";
printf("String is: %s\n",str1);
fun(str1);
printf("Result is: %s\n",str1);
nono(str1);
}
void nono(char str1[])
{FILE *f;
f=fopen("out1.dat","w");
fprintf(f,"%s\n",str1);
fclose(f);
}
5、
#include <stdio.h>
void main()
{
//用指针实现10个数的冒泡排序(从小到大)
int i,j,*p,temp,arr[10];
p=arr;
printf("请输入10个数字:");
for(i=0;i<=9;i++)
scanf("%d",p+i);
printf("你输入的数字为:");
for(i=0;i<=9;i++)
printf("%d ",*(p+i));
printf("\n");
for(i=0;i<=9;i++)
for(j=0;j<=9-i;j++)
if(*(p+j)>*(p+j+1))
{
temp=*(p+j+1);
*(p+j+1)=*(p+j);
*(p+j)=temp;
}
printf("排序后的数字为:");
for(i=0;i<=9;i++)
printf("%d ",*(p+i));
printf("\n");
}
部分已经验证,仅供参考 简单的小程序 自己捉摸下不难的~~~
1、
程序如下:
MOV R0, #21H ;起始地址.
MOV MAX,#00H ;先用0当做最大值.
MOV R2, #20H ;数据长度.
LOOP:
MOV A, @R0 ;取来一个数据.
CLR C
SUBB A, MAX ;减“最大值”.
JNC rel1 ;不够减就算了.
MOV A, @R0 ;够减,就把这个数据.
MOV MAX,A ;当做最大值.
rel1:
INC R0 ;转向下一个.
DJNZ R2, LOOP ;循环.
SJMP $ ;结束.
END
2、
DATA SEGMENT
NUM EQU 100
DATASTR DB NUM DUP(?)
MINUS DB 100 DUP(?)
PLUS DB 100 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV SI,0
MOV CX,NUM
L1: MOV AL,DATASTR[SI]
TEST AL,10000000B
JZ NEXT1
MOV MINUS[SI],AL
JMP PASS1
NEXT1: MOV PLUS[SI],AL
PASS1: INC SI
LOOP L1
MOV AH,4CH
INT 21H
CODE ENDS
END START
3、
#include<math.h>
#include <stdio.h>
void main()
{int a,b=1,c,d,e;
int i,j=0,num[8],s[8];
char zh[8];
int shuju(int x);
scanf("%d",&a);
/*实现二进制的分解输入,把二进制的每一位数值导入到数组当中*/
if(-1<a&&a<11111112)
{for(i=0;i<8;i++)
{b=10*b;
c=b/10;
d=a/c;
num[i]=d%10;
if(num[i]>1)
{printf("输入错误,不符合二进制\n");
e=1;
break;}}}
else{printf("输入错误,超出范围\n");
e=1;}
/*对数组中的值进行重组,每4位编成一个四位数与子函数实现对比调用*/
if(e!=1)
{for(i=0;i<8;i=i+4,j++)
{s[j]=num[i]+num[i+1]*10+num[i+2]*100+num[i+3]*1000;
zh[j]=shuju(s[j]);
}
for(;j-1>=0;j--)
{if(zh[j-1]<10) printf("%d",zh[j-1]);
else printf("%c",zh[j-1]);}
printf("\n");
};
}
/*对比调用*/
int shuju(int x)
{char y;
switch(x)
{case 0: y=0;break;
case 1: y=1;break;
case 10: y=2;break;
case 11: y=3;break;
case 100: y=4;break;
case 101: y=5;break;
case 110: y=6;break;
case 111: y=7;break;
case 1000: y=8;break;
case 1001: y=9;break;
case 1010: y='A';break;
case 1011: y='B';break;
case 1100: y='C';break;
case 1101: y='D';break;
case 1110: y='E';break;
case 1111: y='F';break;
}
return(y);}
4、
#include <conio.h>
#include <stdio.h>
void nono(char str1[]);
void fun(char str1[])
{
int i;
i=0;
for(i=0;str1[i]!='\0';i++)
{
if(str1[i]>='a' && str1[i]<='z')
str[i] = str[i]-('a'-'A');
}
}
main()
{ char str1[80]="This Is a c Program";
printf("String is: %s\n",str1);
fun(str1);
printf("Result is: %s\n",str1);
nono(str1);
}
void nono(char str1[])
{FILE *f;
f=fopen("out1.dat","w");
fprintf(f,"%s\n",str1);
fclose(f);
}
5、
#include <stdio.h>
void main()
{
//用指针实现10个数的冒泡排序(从小到大)
int i,j,*p,temp,arr[10];
p=arr;
printf("请输入10个数字:");
for(i=0;i<=9;i++)
scanf("%d",p+i);
printf("你输入的数字为:");
for(i=0;i<=9;i++)
printf("%d ",*(p+i));
printf("\n");
for(i=0;i<=9;i++)
for(j=0;j<=9-i;j++)
if(*(p+j)>*(p+j+1))
{
temp=*(p+j+1);
*(p+j+1)=*(p+j);
*(p+j)=temp;
}
printf("排序后的数字为:");
for(i=0;i<=9;i++)
printf("%d ",*(p+i));
printf("\n");
}
展开全部
5、将一组无(带)符号数按升(降)序排序。
// bsort, 冒泡排序. bubble sorting ...... template, T=char, int,float,double ...
template <class T> void bsort(void*po, int num){
if(num<=1) return;
int iw=sizeof(T); T c;
char*p=(char*)po,*q=(char*)po; q+=iw;
for(int i=0; i<num;i++){
if( *(T*)p > *(T*)q ) { c=*(T*)p; *(T*)p =*(T*)q; *(T*)q=c; }
p+=iw; q+=iw;
} // for
bsort<T>(po,--num);}
//bsort, 测试冒泡排序
void t_bsort(){
int ns[]={58,-20,43,65,12,48,25,36,};
int i, num=sizeof(ns)/sizeof(int);
printf("\n排序前:\n");
for(i=0;i<num;i++)printf("%d\t",ns[i]);
bsort<int>(ns,num); // 模版的数据类型参数T取为(无符号整数)
printf("\n排序后:\n");
for(i=0;i<num;i++)printf("%d\t",ns[i]);
printf("\n");
}
4、将一个字符串中的所有小写字母转换为大写字母后放回原位置。
char*_strupr(char*string);
....... 比较忙,其他问题有空再讨论吧。。。
// bsort, 冒泡排序. bubble sorting ...... template, T=char, int,float,double ...
template <class T> void bsort(void*po, int num){
if(num<=1) return;
int iw=sizeof(T); T c;
char*p=(char*)po,*q=(char*)po; q+=iw;
for(int i=0; i<num;i++){
if( *(T*)p > *(T*)q ) { c=*(T*)p; *(T*)p =*(T*)q; *(T*)q=c; }
p+=iw; q+=iw;
} // for
bsort<T>(po,--num);}
//bsort, 测试冒泡排序
void t_bsort(){
int ns[]={58,-20,43,65,12,48,25,36,};
int i, num=sizeof(ns)/sizeof(int);
printf("\n排序前:\n");
for(i=0;i<num;i++)printf("%d\t",ns[i]);
bsort<int>(ns,num); // 模版的数据类型参数T取为(无符号整数)
printf("\n排序后:\n");
for(i=0;i<num;i++)printf("%d\t",ns[i]);
printf("\n");
}
4、将一个字符串中的所有小写字母转换为大写字母后放回原位置。
char*_strupr(char*string);
....... 比较忙,其他问题有空再讨论吧。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
老兄,蒋老师班的吧,是汇编语言不是C语言啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询