易码技术论坛

 找回密码
 加入易码
搜索
楼主: lmktaooo

[求助]关于C语言的……(不是C++)老师布置的作业不会,求助!!

[复制链接]
 楼主| 发表于 2006-12-5 21:42:53 | 显示全部楼层
哦,就是说,如果直接是字符串的话,也当作地址看待?
f("hello")等价于
char a;a="hello";f(&a)
是吧?
发表于 2006-12-5 21:55:13 | 显示全部楼层
char a;a="hello";f(&a)

这是错误的~
 楼主| 发表于 2006-12-5 22:04:58 | 显示全部楼层
……怎么错了……
发表于 2006-12-5 22:08:05 | 显示全部楼层
自己想先,这样的错误都要犯,完全是基础问题。
 楼主| 发表于 2006-12-6 09:55:44 | 显示全部楼层
m(_ _)m
我的确错了……
实在汗颜……
算了……不在这里问问题了……太丢脸了……飘走ING……
发表于 2006-12-6 10:28:07 | 显示全部楼层
……有人指出你错了还不好?莫非你喜欢大家都说你是对的?讨论技术问题有啥丢脸不丢脸的,讲错的东西有则改正,无则嘉勉,大家都是这么过来的
 楼主| 发表于 2006-12-6 16:33:16 | 显示全部楼层
……不是啊……
只是……只是……只是……我怎么说什么都是错的啊?!!!!!(难道初学者的特点就是无意识小白么……)


(墙角中,请稍候……)
发表于 2006-12-6 16:45:31 | 显示全部楼层
因为你练习少,而且有各样的想法是对的,但是需要实践,尤其需要熟悉语法.
char a;
a="hello";
对于无类型语言来说确实是正确的,而且只要稍微修改一下编译器就可以实现.
但是你学的是C.
至于f(&a),连语法错误都不是,完全的逻辑错误.
 楼主| 发表于 2006-12-6 16:54:34 | 显示全部楼层
……算了……有什么具体的问题再问吧……这样一弄……我越来越没信心了……
发表于 2006-12-6 20:12:43 | 显示全部楼层
看来我得继续更新那个从Lava到MFC的教程了。
没有类型的概念,学程设会痛苦的~:)
发表于 2006-12-6 20:29:18 | 显示全部楼层
引用第29楼lmktaooo2006-12-06 16:54发表的“”:
……算了……有什么具体的问题再问吧……这样一弄……我越来越没信心了……
莫要着急,慢慢来,大家帮你嘛
发表于 2006-12-7 16:09:13 | 显示全部楼层
  1. //经典的错误代码。。
  2. char a="Hello";
  3. //你因该这么写。。
  4. char a[]="Hello";
复制代码
发现这个是初学者最容易放的错。。
发表于 2006-12-7 16:46:34 | 显示全部楼层
无聊中。。
帮楼主解答一下12题。。
首先我们来理解一下题目。。题目是判断一个字符串是不是回文。。
所谓回文。。当然不是回族的文字啦。。
回文的意思就是。。把一个字符串的顺序倒一下。。得到的还是原来的字符串。。那么这么字符串就是回文啦。。
比如“sos”就是一回文。。
所以题目就变成如何把字符串顺序倒一下。。
这个应该很简单吧。。
就是把原字符串反向存到目标字符串去。。
  1. //大致的算法。。
  2. //str0为原字符串。。str1为目标字符串,即翻转后的字符串。
  3. len=strlen(str1)
  4. for(i=0;i<len;i++)str1[i]=str0[len-i]
  5. //之后用strcmp比较一下两个字符串。。即可判断出是否是回文。。
复制代码
以上是一种算法。。
解决问题可以有好几种算法。。
换一种思路。。
回文也可理解成这个字符串是否对称。。
  1. //算法二;字符串为str
  2. len=strlen(str);
  3. for(i=0;i<len/2;i++)if(str[i]!=str[len-i])printf("不是回文");
复制代码
发表于 2006-12-7 16:58:57 | 显示全部楼层
引用第8楼lmktaooo2006-12-03 17:31发表的“”:
我也承认,有几个是太简单……但是……至少,12和14帮一下啊……
.......
14题其实也很简单。。就是做循环。。一个从字符串头开始检索*号。。
一个从字符串尾开始检索。。
 楼主| 发表于 2006-12-7 17:06:53 | 显示全部楼层
……多谢……
回文那个本来还想的是分奇数长度和偶数长度,然后分别判断……(主要是正中间那个字符的处理……)
没想到……居然……直接全部倒转……被囧到了……
发表于 2006-12-7 20:47:30 | 显示全部楼层
引用第35楼lmktaooo2006-12-07 17:06发表的“”:
……多谢……
回文那个本来还想的是分奇数长度和偶数长度,然后分别判断……(主要是正中间那个字符的处理……)
没想到……居然……直接全部倒转……被囧到了……
你的思路应该是我上面写的算法二吧。。

这个其实不必分奇数偶数的。。都用同一种算法。。中间那个不要理它。。忽略掉。。
发表于 2006-12-7 23:14:14 | 显示全部楼层
与奇数偶数无关
如果是奇数的话,中间那个显然关于自身对称
 楼主| 发表于 2006-12-9 19:07:00 | 显示全部楼层
自……自身对称?!

(墙角蹲着去了……)
发表于 2006-12-9 22:13:14 | 显示全部楼层
不会吧~
你关于镜子里的你对称,镜子关于镜子对称~~
 楼主| 发表于 2006-12-16 14:38:15 | 显示全部楼层
那个,那个,我把程序都自己写出来了,各位来看看,指出错误,总该可以吧……
不好意思……因为是写在纸上然后誊写上来的,所以米有注释……看得烦了的话就不用看了……

1.编写程序,统计学生每门功课的平均成绩和所有课程的平均成绩。学生数量由键盘输入,每个学生4门功课,并把所有不及格学生的成绩显示出来。
main()
{
float a[4][100],b[4];int i,j,k;
scanf("%d",&j);
for (i=0;i<j;i++)
for (k=0;k<4;k++)
{printf("\nThe No.%d Students No.%d Lession is",i+1,j+1);
scanf("%f",&a[k]);}
for(k=0;k<4;k++)
{for (i=0;i<j;i++)
b[k]+=a[k];
b[k]/=j;
printf("\nThe No.%d Lession&#39;s reverage is %f",k+1,b[k]);}
printf("\nThe whole reverage is %f",(b[0]+b[1]+b[2]+b[3])/4);
for (k=0;k<4;k++)
{printf ("\nThe No.%d Lession&#39;s Failer:",k+1);
for (i=0;i<j;i++)
if (a[k]<60)printf("\nNo.%d,%f",i+1,a[k]);}
}

2.编写一个程序,将1~10顺序赋给一个整型数组,然后从第一个元素开始间隔地输出该数组。
main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10},b=0;
while(b<10){printf("%d",a);b+=2;}
b=1;while(b<10){printf("%d",a);b+=2}
}

3.有N个人围成一圈,顺序排号。从第一个人开始报数(从1到3),凡报到3退出圈子。求退出顺序。
main()
{
int n,i[100],j,k,r;
scanf("%d",&n);while (n-r>2)
{j=0;while(j<n)
{if (i[j]==0)
{k++;if (k=3){printf("%d",j+1);i[j]=1;}r++;k=0;}}
j++}
}

4.编写程序,将数组A中的相同数据只保留一个,然后输出。
#include "stdio.h"
#include "string.h"
{char a[100];int n,i,j;
gets(a);
n=strlen(a);
for (i=0;i<n;i++)
if(a!=0)
for(j=i+1;j<n;j++)
if(a[j]=a)a[j]=0;
for(i=0;i<n;i++)
if(a!=0)printf("%s",a);
}

5.求一个字符串的长度。
#include "stdio.h"
main()
{char a[100];int i;
gets(a);while(a[i++]!=&#39;\0&#39;);i--;
printf("%d",i);
}

6.输入一行文字,找出其中大写字母、小写字母、空格、数字以及其他字符各有多少。
#include "stdio.h"
main()
{char a[100];int b,c,d,e,f,i;
gets(a);
while(a!=&#39;\0&#39;)
{if(a>=&#39;A&#39;&&a<=&#39;Z&#39;){b++,i++;continue;}
if(a>=&#39;a&#39;&&a<=&#39;z&#39;){c++,i++;continue;}
if(a=&#39; &#39;){d++,i++;continue;}
if(a>=&#39;0&#39;&&a<=&#39;9&#39;){e++,i++;continue;}
f++,i++;}
printf("%d,%d,%d,%d,%d",b,c,d,e,f);
}

7.输入一个字符串,内有数字和非数字字符。输出子字符串,将其中连续的数字作为一个整数,依次存放到一维数组A中,统计共有多少个整数,并输出这些数。
#include "stdio.h"
{char a[100];int b[100],i,j;
gets(a);
while(a!=&#39;\0&#39;)
{while(a>=&#39;0&#39;&&a<=&#39;9&#39;)
b[j]*=10+a[i++]-&#39;0&#39;;
i++,j++;}
for(i=0;i<j+1;i++)
printf("%d\n",b);}

8.有一字符串,编写程序,将此字符串从第M个字符开始的全部字符复制为另一个字符串。
#include "stdio.h"
#include "string.h"
main()
{char a[100],b[100];int i,j,m,n;
n=strlen(a);
do scanf("%d",&m) while(m>n);
for(i=m-1;i<n;i++)
a=b[j++];
b[j]=&#39;\0&#39;;
puts(b);}

9.编写程序,完成字符串的替换功能。
#include "stdio.h"
main()
{char a[100],b,c;int i;
gets(a);
scanf("%s,%s",&b,&c);
while(a!=&#39;\0&#39;)
if(a==b)a[i++]=c;
puts(a);}

10.在三个数组里,存放有30个整数,对这30个整数进行排序,排序结果存放在另外一个数组中。
main()
{int a[10]={1,2,3,4,5,6,7,8,9,10},b[10]={11,12,13,14,15,16,17,18,19,20},c[10]={21,22,23,24,25,26,27,28,29,30},d[30],i,j,temp;
for(i=0;i<10;i++)
d=a;
for(i=10;i<20;i++)
d=b[i-10];
for(i=20;i<30;i++)
d=c[i-20];
for(i=30;i>0;i--)
for(j=0;j<i-1;j++)
if(a[j]>a[j+1]){temp=a[j+1];a[j+1]=a[j];a[j]=temp;}
for(i=0;i<30;i++)printf("%d\n",a);
}

11.求100~300中所有的素数,并存放到一个数组中。
#include "math.h"
main()
{int a,b,c[100],d,e;
for(a=100;a<301;a++)
{for(b=2;b<=sqrt(a);b++)if(sqrt(a)%10==0)break;
if(b>=sqrt(a)+1)c[d++]=a;}
for(e=0;e<=d;e++)
printf("%d\n",c[e]);}

12.判断一个字符串是否是回文。(例如:"abcdedcba"是回文,而"abcdedfa"不是。)
#include "stdio.h"
#include "string.h"
main()
{char a[100],b[100];int c,d;
gets(a);
c=strlen(a);
for(d=0;d<c;d++)
b[d]=a[c-d];
b[d]=&#39;\0&#39;;
for(d=0;d<c;d++)
if(a[d]!=b[d])
{printf("No\n");exit(0);}
printf("Yes\n");
}

13.定义两个整型数组,分别输入10个整数,对它们进行升序排序,结果存入新数组中。
main()
{int a[10],b[10],c[10],temp,i,j;
for(i=0;i<10;i++)scanf("%d",&a);
for(i=0;i<10;i++)scanf("%d",&b);
for(i=0;i<10;i++)c=a;
for(i=0;i<10;i++)c[i+10]=b;
for(i=0;i>0;i--)
for(j=0;j<i-1;j++)
if(c[j]>c[j+1]){temp=c[j+1];c[j+1]=c[j];c[j]=temp;}
for(i=0;i<20;i++)printf("%d",c);
}

14.从键盘输入一字符串(假定只有"*"和字母),删除所有字母前的*和字母后的*,字母中间的*号保留。
#include "stdio.h"
#include "string.h"
main()
{char a[100];int n,i=0;
gets(a);
n=strlen(a);
while(a[n]==&#39;*&#39;)n--;a[n+1]=&#39;\0&#39;;n=0;
while(a==&#39;*&#39;)i++;
while(a[i+n]!=&#39;\0&#39;){a[n]=a[n+i];n++}
a[n]=&#39;\0&#39;;
puts(a);}

15.从键盘输入两个5*5的矩阵,求两矩阵的和。(c[j]=a[j]+b[j])
main()
{int a[5][5],b[5][5],i,j,c[5][5];
for(i=0;i<5;i++)
for(j=0;j<5;j++)
scanf("%d",&a[j]);
for(i=0;i<5;i++)
for(j=0;j<5;j++)
scanf("%d",&b[j]);
for(i=0;i<5;i++)
for(j=0;j<5;j++)
c[j]=a[j]+b[j];
for(i=0;i<5;i++)
for(j=0;j<5;j++)
printf("%d",c[j]);}

16.从键盘输入一个十六进制数字字符串,将其转换为十进制数输出。
#include "stdio.h"
#include "string.h"
main()
{char a[100];int i,n;long r;
gets(a);n=strlen(a);
for(i=0;i<n;i++)
{if(a>=&#39;0&#39;&&a<=&#39;9&#39;}r*=10+a-&#39;0&#39;;
else r*=10+a-&#39;a&#39;+10;}
printf("%ld",r);}

17.分别将字符串A和字符串B中的字符倒置。然后按交叉的顺序将两个字符数组合并到字符数组C中,过长的部分直接连接在C的尾部。("abcdefgh"和"1990",结果为"h0g9f9e1dcba")
#include "stdio.h"
#include "string.h"
main()
{char a[50],b[50],c[100],temp;int m,n,i;
gets(a);gets(b);
m=strlen(a)-1;n=strlen(b)-1;
for(i=0;i<m+n+2;){if(m>=0)c[i++]=a[m--];if(n>=0)(c[i++]=b[n--];}
c=&#39;\0&#39;;
puts(c);}

18.键入一串字符(换行符结束),用循环语句将其的大小写字母互换后输出。
#include "stdio.h"
main()
{char a[100];int i;
gets(a);while(a!=&#39;\0&#39;){if(a>=&#39;A&#39;&&a<=&#39;Z&#39;)a-=&#39;A&#39;+&#39;a&#39;;else a-=&#39;a&#39;+&#39;A&#39;;}
puts(a);}

19.设有语句"int a[3][4];",先为数组输满数据,再将该数组周边的元素输出。(输出次序不限)
{int a[3][4],i,j;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf("%d",&a[j]);
for(j=0;j<4;j++)
printf("%d",a[0][j]);
for(j=0;j<4;j++)
printf("%d",a[2][j]);
printf("%d,%d",a[1][0],a[1][3]);}
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-3-29 19:10 , Processed in 0.011046 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表