一个C语言问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个C语言问题相关的知识,希望对你有一定的参考价值。

是有若干名学生共修5门课程他们学号和成绩都存放在二维数组S中,每一行对应一名学生,每行第一个元素是学号,现要输出制定学生成绩,即每行后面5位数。我写的这个编译没错,就是输入学号后都是显示there is not the No %d student,哪位知道为什么啊?
#include <stdio.h>
#define maxn 3
int s[maxn][6]= 5,70,80,96,70,90,7,40,80,50,60,80,8,50,70,40,50,75;
void search(int (*p)[6],int m,int no)

int *p1,i;
for(i=1;i<=m;i++)
if((**p)==no)

printf("the scores of No %d student are:\n",no);
for(p1=*p+1;p1<=*p+5;p1++)
printf("%4d\t",*p1);
printf("\n");
return;

printf("there is not the No %d student.\n",no);

void main()

int num;
printf("enter the number of student:\n");
scanf("%d",&num);
search(s,maxn,num);

一个小错误。。。。

你每次判断之后。。。 if((**p)==no)
没有使p++,所以你输入学号为 7,8就无法显示。。。输入5就可以显示。。因为一直判断的都是数组第一个学生的学号

把for(i=1;i<=m;i++)
改成 for(i=1;i<=m;i++,p++)就OK了

希望能帮到你。。。
参考技术A #include <stdio.h>
#define maxn 3
int s[maxn][6]= 5,70,80,96,70,90,
7,40,80,50,60,80,
8,50,70,40,50,75;
void search(int (*p)[6],int m,int no)

int *p1,i;
for(i=1;i<=m;i++,*p++) // 这个地方要加个 *p++ 即 s[i++]; 都表示地址

if((**p)==no)

printf("the scores of No %d student are:\n",no);
for(p1=*p+1;p1<=*p+5;p1++)
printf("%4d\t",*p1);
printf("\n");
return;



printf("there is not the No %d student.\n",no);


void main()

int num;
printf("enter the number of student:\n");
scanf("%d",&num);
search(s,maxn,num);
参考技术B #include <stdio.h>
#define maxn 3
int s[maxn][6]=5,70,80,96,70,90,7,40,80,50,60,80,8,50,70,40,50,75;
void search(int (*p)[6],int m,int no)

int *p1,i,j;//尽量不用指针 数组名就是指针
for(i=0;i<m;i++)//下标从零开始
if(p[i][0]==no)//

printf("the scores of No %d student are:\n",no);
for(j=1;j<=5;j++)//修改的地方
printf("%4d\t",p[i][j]);//
printf("\n");
return;

printf("there is not the No %d student.\n",no);

void main()

int num;
printf("enter the number of student:\n");
scanf("%d",&num);
search(s,maxn,num);

学好C语言 要将基础打好 将语法理解透彻

一个觉得很难的C语言问题。对两个数字字符串相加。

有定义:char s1[200],s2[200],s3[200];
s3存放s1与s2相加后的结果。

样例一:
输入:
999999999999999999999
999999999999999999999
输出
1999999999999999999998

样例二:
输入:
1234567890123456789
876543211
输出:
1234567891000000000

很难才10分啊

#include<stdio.h>
#include<string.h>
int main()

int i,t,j=1,n,len,k;
char sum[1009],sa[1009],sb[1009];
scanf("%d",&t);
getchar();
while(t--)

for(i=0;i<1009;i++)
sum[i]=\'0\';
scanf("%s%s",sa,sb);
len=strlen(sa);
for(i=len-1,k=0;i>=0;i--,k++)

sum[k]=sum[k]-\'0\'+sa[i];
n=k;
while(sum[n]>\'9\')

sum[n+1]=sum[n+1]+(sum[n]-\'0\')/10;
sum[n]=(sum[n]-\'0\')%10+\'0\';
n++;


len=strlen(sb);
for(i=len-1,k=0;i>=0;k++,i--)

sum[k]=sum[k]-\'0\'+sb[i];
n=k;
while(sum[n]>\'9\')

sum[n+1]=sum[n+1]+(sum[n]-\'0\')/10;
sum[n]=(sum[n]-\'0\')%10+\'0\';
n++;


printf("Case %d:\\n%s + %s = ",j,sa,sb);
j++;
for(i=1008;sum[i]==\'0\';i--);
for(;i>=0;i--)
printf("%c",sum[i]);
printf("\\n");
if(t>0)
printf("\\n");

return 0;

参考技术A

把两个数字字符串都转换成数字类型直接相加就可以了


在C语言中的stdlib.h头文件中提供了现成的字符串转数字的函数atoi。但是要注意,两个数字字符串必须都是合法的数字格式。如果是小数,可以用atof函数,使用方法跟atoi类似。具体请参考:

http://baike.baidu.com/link?url=0EMXyMfOxMyaQnC5E1YQRQzMeFmM1w7n-9t9k5QhVDhW9bbNPxEdsR174hxXFCjWfIvOXoFR9J5wratcssTLlK

#include <stdlib.h>
#include <stdio.h>
int main()

    char a[] = "-100"; 
    char b[] = "123"; 
    int c; 
    c = atoi(a) + atoi(b);
    printf("c=%d\\n", c);
    return 0;

执行结果:

c = 23

以上转自百度百科(上面提供的链接)

参考技术B 参见之前的回答
http://zhidao.baidu.com/question/518661709

思路是用3个栈A,B,C,把s1和s2各个字符分别压到A、B栈,第三个栈C存结果。

分别把A、B的栈顶元素pop出来做运算,然后压入C中。

最后C元素依次出栈就是结果。
参考技术C 其实就是把字符串变成int 然后相加追问

int不行,int的最大值为2147483647,位数是10位,当我对长度超过10进行相加操作,就不行了。比如我要对一个长度为60位的数字进行相加。还能转换成int吗。double都不行

参考技术D 和无助,然而为了生佣工 活,我们雪又多少夺主

以上是关于一个C语言问题的主要内容,如果未能解决你的问题,请参考以下文章

一个C语言问题

C语言的一个问题

c语言问题

c语言问题?????????

一个c语言的问题

“C语言是中间语言”,中间语言是啥意思?