我已经完成了我的任务,一切都按照我的意愿进行,但问题是我不允许在这个项目中有全局变量,因此每件事都应该在函数中。由于我是C的新手,我真的不知道如何完成这项工作,我的意思是如何将全局变量更改为局部变量。
感谢你的帮助!
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int tal[99] = { -1 };
int bubbles, byte, c, d, val;
/* Function for number gen*/
int talserie() {
srand(time(NULL));
for (c = 0; c < 100; c++) {
tal[c] = rand() % 901;
printf(" %d ", tal[c]);
if ((c + 1) % 10 == 0)
printf("n");
}
}
/* Funktion för bubble sort*/
int bubbel() {
for (c = 0; c < (99); c++)
{
for (d = 0; d < 99 - c; d++)
{
if (tal[d] > tal[d + 1])
{
byte = tal[d];
tal[d] = tal[d + 1];
tal[d + 1] = byte;
}
}
}
for (c = 0; c < 100; c++) {
printf(" %d ", tal[c]);
if ((c + 1) % 10 == 0)
printf("n");
}
}
/* Funktion för median-, max/min- och medelvärde*/
int varde() {
printf("nMaxvärdet är: %d", tal[99]);
printf("nMinvärdet är: %d", tal[0]);
int total = 0;
for (c = 0; c < 100; c++) {
total = total + tal[c];
}
printf("nMedelvärdet är: %d", total / 100);
printf("nMedianvärdet är: %d", ((tal[49] + tal[50]) / 2));
}
/*Funktion leta siffra*/
int siffra() {
printf("nSkriv in en siffra: ");
scanf("%d", &val);
d = 0;
for (c = 0; c < 100; c++) {
if (tal[c] == val) {
d = 1;
printf("nFinns i talföljden på plats: ");
if (c <= 9)
printf(" Rad 1 och Kolumn %dn", c + 1);
else if (c > 9 && c <= 19)
printf(" Rad 2 och Kolumn %dn", (c + 1) - 10);
else if (c > 19 && c <= 29)
printf(" Rad 3 och Kolumn %dn", (c + 1) - 20);
else if (c > 29 && c <= 39)
printf(" Rad 4 och Kolumn %dn", (c + 1) - 30);
else if (c > 39 && c <= 49)
printf(" Rad 5 och Kolumn %dn", (c + 1) - 40);
else if (c > 49 && c <= 59)
printf(" Rad 6 och Kolumn %dn", (c + 1) - 50);
else if (c > 59 && c <= 69)
printf(" Rad 7 och Kolumn %dn", (c + 1) - 60);
else if (c > 69 && c <= 79)
printf(" Rad 8 och Kolumn %dn", (c + 1) - 70);
else if (c > 79 && c <= 89)
printf(" Rad 9 och Kolumn %dn", (c + 1) - 80);
else if (c > 89 && c <= 99)
printf(" Rad 10 och Kolumn %dn", (c + 1) - 90);
break;
}
}
if (d == 0);
{
printf("n%d Finns inte i talföljden", val);
}
}
/* Main funktion med switch meny*/
int main()
{
while (val != 5) {
printf("n1. Generera en talföljd med 100 tal mellan 0-900.");
printf("n2. Sortera talföljden i storleksordning.");
printf("n3. Räkna ut medelvärde, median och maxvärde.");
printf("n4. Sök efter valfritt tal.");
printf("n5. För att avslutan");
printf("Skriv in ett val (1-5): ");
scanf("%d", &val);
switch (val) {
case 1:
talserie();
break;
case 2:
if (tal[0] == -1)
printf("nFel! Generera en talföljd först!n");
else
bubbel();
break;
case 3:
if (tal[0] == -1) /* Arrayen innehåller -1 i [0] innan talföljden genereras"*/
printf("nFel! Generera en talföljd först!n");
else if (tal[0] <= tal[1] && tal[1] <= tal[2] && tal[2] <= tal[3])
varde();
else
printf("nFel! Sortera talföljden i storleksordning först!n");
break;
case 4:
if (tal[0] == -1)
printf("nFel! Generera en talföljd först!n");
else if (tal[0] <= tal[1] && tal[1] <= tal[2] && tal[2] <= tal[3])
siffra();
else
printf("nFel! Sortera talföljden i storleksordning först!n");
break;
}
}
return 0;
}
我说的是一般情况,然后您将在程序中进行特定的更改。
假设您在函数foo()
中使用一个全局变量。如果希望变量不再是全局变量,则需要将其作为参数之一传递给foo()
。
因此,您可以在调用foo()
的函数中将变量声明为局部变量
void caller( void )
{
int local;
foo( local );
}
void foo( int var )
{
...Some code...
}
这是一个传递值,如果您需要foo()
来修改变量,那么您需要传递引用
void caller( void )
{
int local;
foo( &local );
}
void foo( int *pointerToVar )
{
...Some code...
}
编辑:这里有一个例子来回答你的意见。总的来说,你会有
int main()
{
int tal[99], c;
talserie(tal, c);
...
}
你的功能将是
talserie(int tal[99], int c)
{
...
}
但如果您不需要在main中使用c
,您可以直接将其声明到talserie
中,并且只传递tal