C语言,好吧,这几题我真心不会做了,求大神指教
个字符),滤去所有的非十六进制字符后,组成一个新字符串(十六进制形式),然后将其转换为十进制数后输出。
【输入】
Input a string:zx1?ma0kbq
【输出】
New string:1a0b
Hex=6667
【错误源程序】
#include <stdio.h>
int main(void)
{ int i,k,n=0;
int
str1[80],str2[80];
printf("Input a
string:");
i=0;
while(str1[i]=getchar())!='\0')
i++;
str[i]="\0";
k=0;
for(i=0;str1[i];i++);
if(str1[i]>='0'&&str1[i]<='9'||str1[i]>='a'&&str1[i]<='f'||str1[i]>='A'&&str1[i]<='F')
{ str2[k]=str1[i];
k++;
}
str2[k]='0'
for(i=0;str2[i]!='\0';i++)
if(str2[i]>='0'&&str2[i]<='9')
n=n*16+str2[i]-0;
else
if(str2[i]>='A'&&str2[i]<='F')
n=n*16+10+str2[i]-'A';
else
if(str2[i]>='a'&&str2[i]<='f')
n=n*16+10+str1[i]-'a';
printf("New
string:");
puts(str2[i]);
printf("Hex=%d",n);
return
0;
}
改了半天还是错的,这个是原题,我改的直接就运行错误了
2.(1) 输出考生的基本信息,包括学号、姓名拼音与联系电话等。
(2) 输入n和n个学生的成绩(整数类型,存贮在一维数组a中);
(3) 输出学生的最大成绩与最小成绩之差。
(4) 输出学生的平均成绩和中间学生的成绩。
(5) 按成绩从大到小排序并输出;按每行输出4个学号的格式(字符宽度为5,左对齐)输出排序后的结果。
如输入:
10
55 80 70 85 100 90 61 78 80 66
则输出:
Student:[12123456,ZhangDaHai,13012341234]注:本行请考生按试题原样输出,真实考试时请按实际情况输出
45
76.5 78
100 90 85 80
80 78 70 66
61 55
3.
(1) 输入若干个整数(存贮在一维数组a中)直至输入0结束,按示例格式计算并输出以下结果。
(2) 输出其中最大的对称数(即其各位数字是左右对称的整数)及其所在下标(输入的第一个整数对应下标0),如果没有对称数,则输出“None”;
(3) 将这组整数中的奇数按升序排列。
如输入:
21 101 34 474 8 99 5656 33 -70 1992
0
则输出:
Max symmetric number: a[3]=474
After Sort: 21 33 99 101
如输入:
21 10 34 47 81 299 5656 36 -70 1992
0
则输出:
Max symmetric number: None
After sorted: 21 47 81 299
会的大神教我一下啊,一道也行啊 展开
错误太多,改了第一个,你先试用——
把int str1[80],str2[80];改成char str1[80],str2[80];。
把while(str1[i]=getchar())!='\0')改成while((str1[i]=getchar())!='\n')。
把str[i]="\0";改成str1[i]='\0';。
把for(i=0;str1[i];i++);改成for(i=0;str1[i];i++)。
把str2[k]='0';改成str2[k]='\0';。
把n=n*16+str2[i]-0;改成n=n*16+str2[i]-'0';。
把n=n*16+10+str1[i]-'a';改成n=n*16+10+str2[i]-'a';。
把puts(str2[i]);改成puts(str2);。
写得也略复杂了些,提供一个较简单的供参考——
#include "stdio.h"
int main(int argv,char *argc[]){
int i,k,n=0;
char str[80];
printf("Input a string:");
scanf("%80s",str);
for(k=i=0;str[i];i++)
if(str[i]>='0' && str[i]<='9' || str[i]>='a' && str[i]<='f' || str[i]>='A' && str[i]<='F')
str[k++]=str[i];
str[k]='\0';
for(i=0;str[i]!='\0';i++)
n=n*16+str[i]-(str[i]>'F' ? 87 : str[i]>='A' ? 55 : 48);
printf("New string:");
puts(str);
printf("Hex=%d\n",n);
return 0;
}
输入一个以回车结束的字符串 (少于80
个字符),滤去所有的非十六进制字符后,组成一个新字符串(十六进制形式),然后将其转换为十进制数后输出。
OK:输入一个以回车结束的字符串 (少于80个字符),滤去所有的非十六进制字符后,组成一个新字符串
U need do it yourself:然后将其转换为十进制数后输出。
fdump@fdump-HEX ~ $ cat arrayin.c
#include <stdio.h>
#define MAX_LIMIT 80
int main(int argc,char *argv[])
{
//-----------------------
int i=0,k=0,n=0;
char str_org[MAX_LIMIT],str_new[MAX_LIMIT];
char *p_org=str_org,*p_new=str_new;
//-----------------------complex input
printf("Input a orginal string:");
while((str_org[i]=getchar()) != '\n')
{
i++;
}
str_org[i]="\0";
//-----------------------check the input info
printf("#### %s\n",str_org);
//-----------------------simple input
for(i=0;*(p_org+i)!='\0';i++)
{
if((*(p_org+i)>='0' && *(p_org+i)<='9') ||
(*(p_org+i)>='a' && *(p_org+i)<='f') ||
(*(p_org+i)>='A' && *(p_org+i)<='F') )
{
*(p_new+k)=*(p_org+i) ;
k++;
}
}
*(p_new+k)='\0' ;
//-----------------------check the new string
printf("#### %s\n",str_new);
return 0;
}
fdump@fdump-HEX ~ $
fdump@fdump-HEX ~ $ ./out
Input a orginal string:zx1?ma0kbq
#### zx1?ma0kbq
#### 1a0b
我觉得没必要改了吧。
你百度HI我吧。
他就是要我们改啊,我也没办法
这代码丑到我都看不下去了。。。。
哎 QQ305205556 第二题也写了 百度只能发1000个字,不够放。
1.
#include
int main(void)
{
int i,k,n=0;
int str1[80],str2[80];
printf("Input a string:");
i=0;
while(str1[i]=getchar())!='\0')
i++;
tr[i]="\0";
k=0;
for(i=0;str1[i];i++);
if(str1[i]>='0'&&str1[i]='a'&&str1[i]='A'&&str1[i]='0'&&str2[i]='A'&&str2[i]='a'&&str2[i]<='f')
n=n*16+10+str1[i]-'a';
printf("New string:");
puts(str2[i]);
printf("Hex=%d",n);
}
return 0;
}
#include <stdio.h>
int main(void)
{ int i,k,n=0;
char str1[80],str2[80];
printf("Input a string:");
i=0;
while((str1[i]=getchar())!='\n')
i++;
str1[i]='\0';
k=0;
for(i=0;str1[i];i++)
if(str1[i]>='0'&&str1[i]<='9'||str1[i]>='a'&&str1[i]<='f'||str1[i]>='A'&&str1[i]<='F')
{ str2[k]=str1[i];
k++;
}
str2[k]='\0';
for(i=0;str2[i]!='\0';i++)
{
if(str2[i]>='0'&&str2[i]<='9')
n=n*16+str2[i]-'0';
else
if(str2[i]>='A'&&str2[i]<='F')
n=n*16+10+str2[i]-'A';
else
if(str2[i]>='a'&&str2[i]<='f')
n=n*16+10+str2[i]-'a';
}
printf("New string:");
puts(str2);
printf("Hex=%d\n",n);
return 0;
}