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);}
即 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...