C语言编程,笨小猴那道,帮我看看,实在不知道出什么问题

供稿:hz-xin.com     日期:2025-01-13
编程语言c语言

一是要看调用函数对参数的要求,比如scanf如果输入整数要求给一个指向整数变量的指针,而int a;是整数变量,它不是指针,而是int型的,所以要取出这个变量的地址写到参数位置&a;如果是int a[10][10];那么a也不是指向整数变量的指针,假设输入a[i][j]这个变量,它的类型是int型的,也需要取它的地址,也就是在前面加&得到,这样最容易记忆,也可以写成a[i]+j这个就是指针了,因为a[i]是指向a[i][0]的指针;int a[10];这种情况,如果输入a[2]当然也要写&a[2]最直观,也可以写a+2,int *p,a[10];时还可以写p=a;参数为p+2;或者p=&a[2];参数直接写p。
记那么多没有必要,你只要记住:scanf输入要求提供的是个地址或者说指针,那我就将变量写出来,然后为取地址前面加个取地址的运算符&。其他的情况你见过就可以了,万一别人的程序写出来你也能认。

使用a,b,c代表A,B,C的数量,初始都为0。n代表这系列产品的总数量看你的表上初始为6,可以建个三个数组分别代表A,B,C。比如A[3]代表三个A,其中存入的是条件。根据你的描述写的。
void main{int a,b,c;int A[3],B[2],C[1];//里面存储的是A,B,C的条件//初始化for(i=0;i<3;i++){ scanf("%d",&temp);//temp表示对应的条件 A[i]=temp; if(A[i]==1) a++;}for(i=0;i<2;i++){ scanf("%d",&temp);//temp表示对应的条件 B[i]=temp; if(B[i]==1) b++;}for(i=0;i<1;i++){ scanf("%d",&temp); C[i]=temp; if(C[i]==1) c++;}printf("A=%d,B=%d,C=%d",a,b,c);}

num=maxn-minn; 应该加上类型声明

即 int num=maxn-minn; 才对

补充1: 前面的没说对, 是缺了个括号,然后

if(num%i==0) {y=0;break} break后面需要一个分号

你的程序格式有点乱

补充2:
if(a[i]='\n') break; 比较操作应该是“==”

补充3:

for(i=0;i<100;i++)
{scanf("%d",&a[i]);
b[i]=1;
if(a[i]='\n') break;
j++;
}
要改为:

for(i=0;i<100;i++)
{
a[i] = getchar();
b[i]=1;
if(a[i]=='\n')
{
break;
}
j++;
}

才会有你要的效果。

补充 4:

if(num==1||num==0) y=1;
else{
for(i=2;i<=sqrt(num);i++)
{if(num%i==0) {y=0;break}
else y=1;
}

应该改为
if(num==1||num==0) y=1;
else{y = 0;
for(i=2;i<=sqrt(num);i++)
{
if(num%i==0) {y=1;break}
else y=0;
}

现在程序有你要的效果了,虽然凌乱,但是是一个你自己思路的可以正确执行的程序了

补充5:
下面就是完整的,包含了补充1到补充4的 编译错误到逻辑错误改动的版本。

#include <stdio.h>
#include <math.h>

int main()
{
int y,a[100],b[100],num,x,j,maxn,minn,i;
j=0;
for(i=0;i<100;i++)
{
a[i] = getchar();
b[i]=1;
if(a[i]=='\n')
{
break;
}
j++;
}

for(i=0;i<=j;i++)
{
for(x=i+1;x<=j;x++)
{
if(a[i]==a[x])
{
b[i]++;
}
}
}

maxn=b[0];minn=b[0];

for(i=0;i<=j;i++)
{
if(b[i]>maxn) maxn=b[i];
if(b[i]<minn) minn=b[i];
}

num=maxn-minn;
if(num==1||num==0)
{
y=1;
}
else
{
y =0;
for(i=2;i<=sqrt(num);i++)
{
if(num%i==0)
{
y=1;break;
}
else y=0;
}
}
if(y==0) printf("Lucky Word\n%d",num);
if(y==1) printf("No Answer\n0");
}

补充6:(最后的补充)
下面是我提供的完整的程序,思路稍有不同,但是我相信程序结构很清晰,你可参考

#include <stdio.h> //printf 声明
#include <math.h> //sqrt 声明
#include <memory.h> // memset 声明
#include <ctype.h> // tolower声明

//下面的函数判断一个大于0的整数是不是质数
int isPrimeNumber(int inNum) //参数需要外部保证大于等于1
{
int isPrime;
int i;
if (1 == inNum)
{
isPrime = 0;
}
else
{
isPrime = 1;
for (i = 2; i <= (int)sqrt(inNum); ++i)
{
if ((inNum % i) == 0)
{
isPrime = 0;
break;
}
}
}

return isPrime;
}

int main()
{
char characters[100];
char tempChar;
int count[26]; //只需要为26个字符分别保存一个计数就够了
int maxn;
int minn;
int num;
int i; //主循环变量
int wordLength; //单词长度

memset(count, 0, 26 * sizeof(int)); //清零 count数组

//存储不超过100个字符的单词的每个字符
for(i = 0; i < 100;i++)
{
tempChar = (char)getchar();
if(tempChar =='\n')
{
wordLength = i;
break;
}
else
{
characters[i] = (char)tolower(tempChar);// 若是大写,变为小写
count[characters[i] - 'a']++; //给相应字母的计数加1
}
}

//求出最大,最小
maxn = 0;
minn = 0;
for (i = 0; i < 26; ++i)
{
if (0 == maxn)
{
maxn = count[i]; //初始化为第一个不为0的数
}
else
{
if (count[i] > maxn)
{
maxn = count[i];
}
}

if (0 == minn)
{
minn = count[i]; //初始化为第一个不为0的数
}
else
{
if (count[i] < minn && count[i] != 0)
{
minn = count[i];
}
}
}

num = maxn - minn;
if (num != 0 && isPrimeNumber(num))
{
printf("Lucky Word\n%d",num);
}
else
{
printf("No Answer\n0");
}
}

编译错误是因为num=maxn-minn上面多了一个 }

Lz看起来是个新手, 初级Noip?

有问题的话可以找我 , 很乐意

tazerkinq@163.com

#include <stdio.h>
#include <math.h>
#include <string.h>

char s[101];
int y, a[100], b[100], num, x, j, maxn, minn, i;
int main() {

scanf("%s", s);
j = strlen(s);

for (i = 0; i < j; i++) {
for (x = i + 1; x < j; x++)
if (s[i] == s[x])
b[i]++;
}

maxn = b[0];
minn = b[0];
for (i = 0; i < j; i++) {
if (b[i] > maxn)
maxn = b[i];
if (b[i] < minn)
minn = b[i];
}
num = maxn - minn;
if(num==1||num==0) y=1;
else {
for(i=2;i<=sqrt(num);i++)
{ if(num%i==0) {y=0;break;}
else y=1;
}
}
if(y==0) printf("Lucky Word\n%d",num);
if(y==1) printf("No Answer\n0");
return 0;
}

你错的不少, num=maxn-minn;
的前面多了个 } {if(num%i==0) {y=0;break}
的baeak 的后面少了个;,算法也有问题,写程序要有良好的习惯,同一级的{}对齐。好找错。

这么麻烦???

C语言编程,笨小猴那道,帮我看看,实在不知道出什么问题
num=maxn-minn; 应该加上类型声明 即 int num=maxn-minn; 才对 补充1: 前面的没说对, 是缺了个括号,然后 if(num%i==0) {y=0;break} break后面需要一个分号 你的程序格式有点乱 补充2:if(a[i]='\\n') break; 比较操作应该是“==”补充3:for(i=0;i<100;i++){scanf("%d...