C语言程序设计优化提速演示教学.docx
《C语言程序设计优化提速演示教学.docx》由会员分享,可在线阅读,更多相关《C语言程序设计优化提速演示教学.docx(14页珍藏版)》请在冰点文库上搜索。
C语言程序设计优化提速演示教学
1对以下程序代码进行调整,提升程序的运行速度:
scanf("%c",&ch);
printf("%c",ch);
改:
用getchar(),putchar();
2对以下程序代码进行调整,提升程序的运行速度:
if (m / n > 9)
{
printf("ok\n");
}
改:
乘法运算比除法速度快
3对以下程序代码进行调整,提升程序的运行速度:
int n=5, m=6;
n = n + 1;
m = m - 1;
改:
n++;m—更快
4对以下程序代码进行调整,提升程序的运行速度:
scanf("%d", &num1);
scanf("%d", &num2);
scanf("%d", &num3);
scanf("%d", &num4);
scanf("%d", &num5);
scanf("%d", &num6);
改:
可写成一个:
scanf(“%d%d%d…”,&…)
5对以下程序代码进行调整,提升程序的运行速度:
double x=2;
printf( "%.0f的4次方等于 %.0f\n", x, pow(x, 4));
改:
将pow(x,4)改作:
x*x*x*x;
6对以下程序代码进行调整,提升程序的运行速度:
for (i=0; i{
scanf("%d %d", &num1, &num2);
sum[i] = add(num1, num2);
}
int add(int n1, int n2)
{
return n1 + n2;
}
改:
去掉函数调用,直接表达。
7对以下程序代码进行调整,提升程序的运行速度:
int i, n, sum, num;
n = 0;
sum = 0;
num = 0;
scanf("%d", &n);
for (i=1; i<=n; i++)
{
scanf("%d", &num);
sum += num;
}
改:
去掉多余的赋值:
n=0和num=0;sum=0写成初始化形式
8对以下程序代码进行调整,提升程序的运行速度:
if (num >= 0)
{
printf("num是大于或等于0的数\n");
}
if (num < 0)
{
printf("num是负数\n");
}
改:
换成if()…else形式,效率更高
9对以下程序代码进行调整,提升程序的运行速度:
if (num > 0)
{
printf("num是正数\n");
}
if (0 == num)
{
printf("num的值为零\n");
}
if (num < 0)
{
printf("num是负数\n");
}
改:
用if…elseif…else形式
10对以下程序代码进行调整,减少程序中的比较次数,增加程序的可维护性:
if (n1>=n2 && n1>=n3 && n1>=n4)
{
printf("最大值为%d\n", n1);
}
if (n2>=n1 && n2>=n3 && n2>=n4)
{
printf("最大值为%d\n", n2);
}
if (n3>=n1 && n3>=n2 && n3>=n4)
{
printf("最大值为%d\n", n3);
}
if (n4>=n1 && n4>=n2 && n4>=n3)
{
printf("最大值为%d\n", n4);
}
改:
max=n1;if();if();if();
11对以下程序代码进行调整,提升程序的运行速度:
for (i=0; i<5; i++)
{
scanf("%d"sz[i]);%
}
改:
由于个数较少,可用一个scanf()完成
12对以下程序代码进行调整,提升程序的运行速度:
for (i=0; i<5; i++)
{
printf("%4d", n+i);
}
改:
不用循环,写成一个printf();
13对以下程序代码进行调整,提升程序的运行速度:
for (i=0; i<4; i++)
{
for (j=0; j<5; j++)
{
printf("%4d", n + i + j);
}
putchar('\n');
}
改:
内循环用一个scanf(“%4d%4d%4d…”,k,kk+1,kk+2,…),在内循环前添kk=nn+i
%4d
14对以下程序代码进行调整,提升程序的运行速度:
for (i=1; i<=3; i++)
{
for (j=1; j<=5; j++)
{
printf("*");
}
printf("\n");
}
改:
三个printft(“*****\n”);或写成一个printf(“*****\n*****\n…”)
15对以下程序代码进行调整,提升程序的运行速度:
for (i=0; i{
sum += num[i];
}
改:
中间条件转为乘法,效率更高
16对以下程序代码进行调整,提升程序的运行速度:
for (i=2; i<=sqrt(m); i++)
{
if (m % i == 0)
{
printf("%d ", i);
}
}
改:
在循环前添加kk=sqrt(m),再i<=sqrt(m)改成i17对以下程序代码进行调整,提升程序的运行速度:
for (i=0; i{
sum += (num[i] * 300.0 / (100 * 25)) * 2;
}
改:
循环前加语句:
kk=300.0 / (100 * 25)) * 2;
简化sum += (num[i] * 300.0 / (100 * 25)) * 2为sum += (num[i] *kk
18对以下程序代码进行调整,提升程序的运行速度:
for (i=0; i{
for (j=0; j {
printf("%4d", m*n + 2*i + j);
}
printf("\n");
}
改:
将kk=m*n放到循环前,在内循环前添语句:
ss=kk+2*i,
printf("%4d", m*n + 2*i + j)改为printf("%4d", ss + j);
19对以下程序代码进行调整,提升程序的运行速度:
for (i=0; i{
if (0 == dataType)
{
sum += num1[i];
}
else
{
sum += num2[i];
}
}
改:
将判断条件外置,可减少运算次数
20对以下程序代码进行调整,提升程序的运行速度:
for (i=0, count=0; i{
if (9 == num[i])
{
count++;
}
}
if (count > 0)
{
printf("数组num中,存在值为9的数\n");
}
改:
循环中的判断改为:
count=1;break;减少不必要的运算
21对以下程序代码进行调整,提升程序的运行速度:
maxVal = Sz[0];
for (i=0; i{
if (Sz[i] >= maxVal)
{
maxVal = Sz[i];
}
}
改:
循环控制变量初值可为1,减少处理次数
22对以下程序代码进行调整,提升程序的运行速度:
for (i=1, sum=0; i<=n; i++)
{
scanf("%d", &num);
sum += num;
avg = sum / n;
}
改:
把语句avg = sum / n;放到循环之后,减少运算
23对以下程序代码进行调整,提升程序的运行速度:
for (i=0, count=0; i{
scanf("%d", &num[i]);
if (-1 == num[i])
{
break;
}
count++;
}
printf("一共读入了 %d 个数\n", count);
改:
去掉count++;改在循环外写成:
count=i;
24对以下程序代码进行调整,提升程序的运行速度:
for (i=1, sum=0; i<=n; i++)
{
scanf("%d", &num);
sum += num;
*pSum = sum;
}
改:
将*pSum = sum;移至循环之后。
25对以下程序代码进行调整,提升程序的运行速度:
for (i=0; i{
if (num[i] >= 0)
{
zhengShu += num[i];
}
else
{
fuShu += num[i];
}
sum += num[i];
}
改:
将sum += num[i];移至循环之后。
26对以下程序代码进行调整,提升程序的运行速度(约定n是>=1的数):
for (i=0; i{
if (i < n-1)
{
printf("%d, ", num[i]);
}
else
{
printf("%d\n", num[i]);
}
}
改:
将iprintf("%d\n", num[n-1]);
27对以下程序代码进行调整,提升程序的运行速度(约定n是>=1的数):
for (i=0; i{
if (0 == i)
{
printf("*\n");
}
else
{
printf("**\n");
}
}
改:
将0==i时的语句移至循环之前,…
28对以下程序代码进行调整,提升程序的运行速度(约定n是>=6的数):
for (i=0; i{
if (i < 5)
{
printf("%d ", num[i]);
}
else
{
printf("%d\n", num[i]);
}
}
改:
先处理前5个(用一个printf),再进行循环
29对以下程序代码进行调整,提升程序的运行速度:
i = 0;
do
{
scanf("%d", &arr[i]);
if (0==i || arr[i] > arr[i-1])
{
i++;
}
} while (i < 10);
改:
i = 0;
scanf("%d", &arr[i]);
i++;
while (i < 10)
{
scanf("%d", &arr[i]);
if (arr[i] > arr[i-1])
{
i++;
}
}
30对以下程序代码进行调整,提升程序的运行速度:
for (row=0; row<10000; row++)
{
for (col=0; col<50; col++)
{
sum += a[row][col];
}
}
改:
改变内外位置,可使运算减少
31以下函数isPrime的功能是判断m是否为素数,是则返回1、否则返回0,请对程序代码进行调整,提升程序的运行速度:
int isPrime(int m)
{
int i;
for (i=2; i {
if (m % i == 0)
{
return 0;
}
}
return 1;
}
改:
循环前添加语句:
kk=sqrt(m);将i32对以下程序代码进行调整,提升程序的运行速度:
for (i=0; str[i]!
='\0'; i++)
{
if ('A'==str[i] || 'a'==str[i])
{
count[0]++;
}
if ('B'==str[i] || 'b'==str[i])
{
count[1]++;
}
if ('C'==str[i] || 'c'==str[i])
{
count[2]++;
}
if ('D'==str[i] || 'd'==str[i])
{
count[3]++;
}
if ('E'==str[i] || 'e'==str[i])
{
count[4]++;
}
if ('F'==str[i] || 'f'==str[i])
{
count[5]++;
}
if ('G'==str[i] || 'g'==str[i])
{
count[6]++;
}
if ('H'==str[i] || 'h'==str[i])
{
count[7]++;
}
}
改:
利用密码原则:
str[i]—>count[str[i]–‘A’]或str[i]—>count[str[i]–‘a’]
33对以下程序代码进行调整,提升程序的运行速度:
for (i=0; str[i]!
='\0'; i++)
{
if ('1'==str[i])
{
sum += 1;
}
if ('2'==str[i])
{
sum += 2;
}
if ('3'==str[i])
{
sum += 3;
}
if ('4'==str[i])
{
sum += 4;
}
if ('5'==str[i])
{
sum += 5;
}
if ('6'==str[i])
{
sum += 6;
}
if ('7'==str[i])
{
sum += 7;
}
if ('8'==str[i])
{
sum += 8;
}
if ('9'==str[i])
{
sum += 9;
}
}
改:
密码原则:
str[i]→str[i]–‘0’;
for (i=0; str[i]!
='\0'; i++)
{
if (str[i]>=‘1’&&str[i]<=‘9’)
{
sum += str[i]–‘0’;
}
}
34对以下程序代码进行调整,提升程序的运行速度:
for (i=0; str[i]!
='\0'; i++)
{
if ('A'==str[i])
{
putchar('1');
}
if ('B'==str[i])
{
putchar('x');
}
if ('C'==str[i])
{
putchar('m');
}
if ('D'==str[i])
{
putchar('y');
}
if ('E'==str[i])
{
putchar('c');
}
if ('F'==str[i])
{
putchar('K');
}
if ('G'==str[i])
{
putchar('9');
}
}
改:
循环前先给语句如:
kk[]=“1xmycK9”,再用密码原则,即改为:
charss[]=“lxmyck9”;
for (i=0; str[i]!
='\0'; i++)
{
if (str[i])=‘A’&&str[i]<=‘G’)
{
putchar(ss[str[i]–‘A’]);
}
}