變爲零這是我使用的任務的一部分的碼片(這個問題的其餘部分下方)INT在陣列不斷用C
每當輸入INT到一個數組並直接從printf的它數組,它會給出正確的值。當我嘗試在函數中使用該數字時,它會給出一個零。 我使用了幾個printf語句來追蹤問題。
Enter number of Instruction classes:
3
Enter the frequency of the machine (MHz)
200
Enter CPI:
2
Enter Count:
3
a : 0
a1 : 2
b : 0
b1 : 3
z: 0
Cycletotal: 0
Instrtotal: 0
有關如何解決此問題的任何想法?
void enter_params() {
/*declare local vars*/
int n;
int i;
int f;
int z, a, b;
/*prompt for number of inst classes*/
printf("Enter number of Instruction classes: \n");
scanf("%d", &n);
/*prompt for frequency of the machine*/
printf("Enter the frequency of the machine (MHz) \n");
scanf("%d", &f);
global_n = n;
global_f = f;
/*allocate space for cpi and count arrays*/
cpi = (int *)malloc(n*sizeof(int));
count_i = (int *)malloc(n*sizeof(int));
/*for each instruction class: */
cycle_total = 0;
instr_total = 0;
for (i=0; i<n; i++)
{
/*prompt for CPI, Class, and INstruction count with prompts*/
printf("Enter CPI: \n");
scanf("%d", &cpi[i]);
printf("Enter Count: \n");
scanf("%d", &count_i[i]);
a = cpi[i];
b = count_i[i];
printf("\na : " "%i", a);
printf("\na1 : " "%i", cpi[i]);
printf("\nb : " "%i", b);
printf("\nb1 : " "%i", count_i[i]);
z = cpi[i] * 3;
cycle_total += z;
printf("z: " "%i", z);
printf("Cycletotal: " "%i", cycle_total);
instr_total += b;
printf("Instrtotal: " "%i", instr_total);
}
return;
}
整個代碼:
#include <stdio.h>
#include <stdlib.h>
#define NULL 0
/*declare global vars*/
/*create dynamic array*/
/* Main MUST BE last, C compiles top to bottom, called programs must be at top, calling at bottom */
double *cpi=NULL, *count_i=NULL;
int cycle_total;
int instr_total;
int global_n, global_f;
void print_params()
{
/* for each row, print class# (i+1), CPI[i], count_i[i]*/
int i;
int n = global_n;
int j = 1;
printf("------------------------- \n");
printf("|Class" "\t" "|CPI" "\t" "|Count" "\t" "| \n");
printf("------------------------- \n");
for (i=0; i<n; i++)
{
printf("|" "%i", j);
printf("\t" "|" "%i", cpi[i]);
printf("\t" "|" "%i", count_i[i]);
printf("\t" "| \n");
printf("------------------------- \n");
j++;
}
return;
}
float calculate_average_cpi()
{
float avg_cpi,calc; /*typecast calculation piece as float, not the final number */
printf("Cycletotal" "%i", cycle_total);
printf("InstrTotal" "%i", instr_total);
avg_cpi = (float)cycle_total/(float)instr_total;
return avg_cpi;
}
float calculate_cpu_time()
{
float cpu_time;
cpu_time = (float)cycle_total/(float)global_f;
return cpu_time;
}
float calculate_mips(float cpu_time)
{
float mips;
mips = (float)instr_total/cpu_time;
return mips;
}
/*
CPI average is:
Σ(N, i=1) CPI[i]*Ii/Σ(N, i=1) Ii
CPU TIme is:
Σ(N, i=1) CPI[i]*Ii/freq
MIPS is:
Σ(N, i=1) Ii/CPU Time
*/
/* /t is an indent */
void print_perf()
{
/*declare local vars*/
float avg_cpi = calculate_average_cpi();
float cpu_time = calculate_cpu_time();
float mips;
mips = calculate_mips(cpu_time);
printf("------------------------- \n");
printf("|Performance" "\t" "|Value" "\t" "|" "\n");
printf("------------------------- \n|Average CPI" "\t" "|" "%.2f", avg_cpi);
printf("\t" "|" "\n------------------------- \n" "|CPU Time (ms)" "\t" "|" "%.2f", cpu_time);
printf("\t" "|" "\n------------------------- \n" "|MIPS" "\t" "\t" "|" "%.2f", mips);
printf("\t" "|" "\n------------------------- \n");
/*print table with those values*/
}
void enter_params() {
/*declare local vars*/
int n;
int i;
int f;
int z, a, b;
/*prompt for number of inst classes*/
printf("Enter number of Instruction classes: \n");
scanf("%d", &n);
/*prompt for frequency of the machine*/
printf("Enter the frequency of the machine (MHz) \n");
scanf("%d", &f);
global_n = n;
global_f = f;
/*allocate space for cpi and count arrays*/
cpi = (int *)malloc(n*sizeof(int));
count_i = (int *)malloc(n*sizeof(int));
/*for each instruction class: */
cycle_total = 0;
instr_total = 0;
for (i=0; i<n; i++)
{
/*prompt for CPI, Class, and INstruction count with prompts*/
printf("Enter CPI: \n");
scanf("%d", &cpi[i]);
printf("Enter Count: \n");
scanf("%d", &count_i[i]);
a = cpi[i];
b = count_i[i];
printf("\na : " "%i", a);
printf("\na1 : " "%i", cpi[i]);
printf("\nb : " "%i", b);
printf("\nb1 : " "%i", count_i[i]);
z = cpi[i] * 3;
cycle_total += z;
printf("z: " "%i", z);
printf("Cycletotal: " "%i", cycle_total);
instr_total += b;
printf("Instrtotal: " "%i", instr_total);
}
return;
}
void quit_program()
{
if (cpi!=NULL) free(cpi);
if (count_i!=NULL) free(count_i);
return;
}
int main()
{
int choice = 0;
printf("Performance Assessment: \n");
printf("1) Enter Parameters \n");
printf("2) Print Table of Parameters \n");
printf("3) Print Table of Performance \n");
printf("4) Quit \n");
scanf("%d", &choice);
while (choice != 4)
{
if (choice == 1)
{
enter_params();
}
if (choice == 2)
{
print_params();
}
if (choice == 3)
{
print_perf();
}
printf("Performance Assessment: \n");
printf("1) Enter Parameters \n");
printf("2) Print Table of Parameters \n");
printf("3) Print Table of Performance \n");
printf("4) Quit \n");
scanf("%d", &choice);
}
quit_program();
}
你在哪裏嘗試並在函數中使用它? – 2014-09-19 02:55:39
用完整的代碼更新了我的文章。它應該是計算計算機性能的簡單任務。 – someonewhodied 2014-09-19 02:58:11
爲什麼你將cpi和count_i聲明爲double的指針,但是爲它們指定了一個指向整數的指針? – Fred 2014-09-19 03:13:58