C语言,好吧,这几题我真心不会做了,求大神指教

1.输入一个以回车结束的字符串(少于80个字符),滤去所有的非十六进制字符后,组成一个新字符串(十六进制形式),然后将其转换为十进制数后输出。【输入】Inp... 1.输入一个以回车结束的字符串 (少于80
个字符),滤去所有的非十六进制字符后,组成一个新字符串(十六进制形式),然后将其转换为十进制数后输出。

【输入】

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
会的大神教我一下啊,一道也行啊
展开
 我来答
White_MouseYBZ
推荐于2017-09-25 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6656万
展开全部

错误太多,改了第一个,你先试用——

  1. 把int str1[80],str2[80];改成char str1[80],str2[80];。

  2. 把while(str1[i]=getchar())!='\0')改成while((str1[i]=getchar())!='\n')。

  3. 把str[i]="\0";改成str1[i]='\0';。

  4. 把for(i=0;str1[i];i++);改成for(i=0;str1[i];i++)。

  5. 把str2[k]='0';改成str2[k]='\0';。

  6. 把n=n*16+str2[i]-0;改成n=n*16+str2[i]-'0';。

  7. 把n=n*16+10+str1[i]-'a';改成n=n*16+10+str2[i]-'a';。

  8. 把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;
}
fdmove
推荐于2016-06-20 · 超过29用户采纳过TA的回答
知道答主
回答量:69
采纳率:0%
帮助的人:74.5万
展开全部
  1. 输入一个以回车结束的字符串 (少于80
    个字符),滤去所有的非十六进制字符后,组成一个新字符串(十六进制形式),然后将其转换为十进制数后输出&#65377;

OK:输入一个以回车结束的字符串 (少于80个字符),滤去所有的非十六进制字符后,组成一个新字符串

U need do it yourself:然后将其转换为十进制数后输出&#65377;



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

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
来安的GM
2013-05-31 · TA获得超过181个赞
知道小有建树答主
回答量:616
采纳率:0%
帮助的人:272万
展开全部
我去 惨不忍睹。
我觉得没必要改了吧。
你百度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;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
听不清啊
高粉答主

2017-09-25 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.9亿
展开全部
#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;
}

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式