Fork me on GitHub

C语言学习之小野这些天犯过的二

常犯的错误

避免不必要的错误是编程的基本,错的每一次都要花费大量时间来弥补。这里犯的错误一般不是因为编译器报错,而是代码未达到想要的要求,未报错的情况下,纠正错误时很麻烦,以此谨记!!!

错误一

#include <stdio.h>
int main(void)
{
int n = 5;
 
while (n < 7);//while()后若跟了;程序将无法按要求运行,且系统不会报错
{
	printf("n = %d\n", n);
	n++;
	printf("Now n = %d\n", n);
}
printf("Game over!\n");

return 0;
}

订正:

#include <stdio.h>
int main(void)
{
int n = 5;

while (n < 7)                    // 第7行
{
    printf("n = %d\n", n);
    n++;                        // 第10行
    printf("Now n = %d\n", n);  // 第11行
}
printf("The loop has finished.\n");

return 0;
}

错误二

#include<stdio.h>
int is_prime(int n)
{
int j=0;
for(j=2;j<n;j++)//可以用j<=sqrt(n)优化代码 
    {
	if(n%j==0)
	return 0;//输入9等数时,由于不能被2等数除尽,容易得到错误判断
    else
    return 1;
    }
}
int main(void)
{
int i=0;
for(i=100;i<=200;i++)
    {
	if(is_prime(i)==1)
	printf("%d ",i);
    }
return 0;
}

订正:

#include<stdio.h>
int is_prime(int n)
{
int j=0;
for(j=2;j<n;j++)//可以用j<=n优化代码 
    {
	    if(n%j==0)
	    return 0;//输入9等数时,由于不能被2除尽,容易得到错误判断
    }
    return 1;
}
int main(void)
{
int i=0;
for(i=100;i<=200;i++)
    {
	if(is_prime(i)==1)
	printf("%d ",i);
    }
return 0;
}

错误三

#include<stdio.h>
int main(void)
{
double x, xpow;
int exp;
printf("Enter a number and the positive integer power");
printf(" to which\nthe number will be raised. Enter q");
printf(" to quit.\n");
while (scanf_s("%lf%d", &x, &exp) == 2)
{
    xpow = power(x, exp);//调用函数 
    printf("%.3g to the power %d is %.5g\n", x, exp, xpow);
    printf("Enter next pair of numbers or q to quit.\n");
}
printf("Hope you enjoyed this power trip -- bye!\n");
return 0;
}
double power(double n, int p)//函数定义
{
double pow = 1;
int i;
return pow;//上一段未删除干净导致一直输出1,臭小子,这都能错!!!
if (n == 0 && p == 0)
{
    printf("0的0次幂无定义\n");
}
return 0;//由于没有将return 0;写入花括号内导致无论是什么,都会进入这一步,又双叒是粗心大意!!!!
if (n == 0 && p != 0)
    return 0;//0的任何次幂(除了0)都等于0 
if (p == 0 && n != 0)
    return 1;//除0外,任何数的0次幂都等于1 
if (p > 0)
{
    for (i = 1; i <= p; i++)
        pow *= n;
return pow;
}
else
{
    for (i = 1; i <= -p; i++)
        pow *= n;
}
return 1/pow;
}

订正:

#include <stdio.h>
double power(double n, int p);
int main(void)
{
double x, xpow;
int exp;
printf("Enter a number and the positive integer power");
printf(" to which\nthe number will be raised. Enter q");
printf(" to quit.\n");
while (scanf_s("%lf%d", &x, &exp) == 2)
{
    xpow = power(x, exp);//调用函数 
    printf("%.3g to the power %d is %.5g\n", x, exp, xpow);
    printf("Enter next pair of numbers or q to quit.\n");
}
printf("Hope you enjoyed this power trip -- bye!\n");
return 0;
}
double power(double n, int p)//函数定义
{
double pow = 1;
int i;
if (n == 0 && p == 0)
{
    printf("0的0次幂无定义\n");
    return 0;//0的0次幂无定义
} 
if (n == 0 && p != 0)
    return 0;//0的任何次幂(除了0)都等于0 
if (p == 0 && n != 0)
    return 1;//除0外,任何数的0次幂都等于1 
if (p > 0)
{
    for (i = 1; i <= p; i++)
        pow *= n;
    return pow;
}
else
{
    for (i = 1; i <= -p; i++)
        pow *= n;
}
return 1 / pow;
}

错误四

#include<stdio.h>
int main(void)
{
double arr[4] = {1.2,1.3,2.4,2.5};
printf("这四个数据中最大值下标是%g\n", max(arr, 4));
printf("这四个数据的极差是%g\n", jicha(arr,4));
return 0;
}

double jicha(double arr[], int n)
{
double max = arr[0];
double min = arr[0];

for (int i = 0; i < n; i++)
{
	if (max < arr[i]) max = arr[i];
	if (min > arr[i]) min = arr[i];
}
return max - min;
}

double max(double arr[], int n)
{
double max = arr[0];
int a = 0;
int j = 0;

for (int i = 0; i < n; i++)
{
	if (max < arr[i]) max = arr[i];//由于没有将“mar = arr[i];”放入花括号,所以每次进入循环都会赋值一次
	{
		max = arr[i];
		j = i;
	}
}
return j;
}

image

错误五

/*冒号排序*/
#include<stdio.h>
void bubble_sort(int arr[])//进行传参
{
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);//由于传参时传的是地址,所以成了指针,两相同指针大小相除就得到结果1
for (i = 0; i < sz - 1; i++);//又双叒多了一个分号,进不去下一个循环
{
	int j = 0;
	for (j = 0; j < sz - 1 - i; j++)//每一趟冒泡排序的操作
	{
		if (arr[j] > arr[j + 1])
		{
			int tmp = arr[j];
			arr[j] = arr[j + 1];
			arr[j + 1] = tmp;
		}
	}
}
}
int main(void)
{
int arr[] = { 9,8,7,6,5,4,3,2,1,0 };
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);//确定数组元素个数
bubble_sort(arr);
for (i = 0; i < sz; i++)
{
	printf("%d ", arr[i]);
}
return 0;
}

订正:

#include<stdio.h>
void bubble_sort(int arr[], int sz)
{
int a = 0;
int j = 0;
for (a = 0; a < sz; a++)
{
	for (j = 0; j < sz - 1 - a; j++)
	{
		if (arr[j] > arr[j + 1])
		{
			int tmp = arr[j];
			arr[j] = arr[j + 1];
			arr[j + 1] = tmp;
		}
	}
}
}
int main(void)
{
int arr[] = { 9,8,7,6,5,4,3,2,1,0 };
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
bubble_sort(arr, sz);
for (i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
return 0;
}

错误示范2
image
错误示范3
image

错误六

#include<stdio.h>
#include<assert.h>
char* my_strcat(char* dest, const char* src)
{
char* ret = dest;
assert(dest);
assert(src);
while (*dest)
{
	dest++;
}
while (*dest++ = *src++)//优化代码时忘记了打上";"号,导致追进一个元素
	return ret;
}

int main(void)
{
char dest[80] = "Our wold ";
char src[] = "is beautiful.";
my_strcat(dest, src);
printf("%s\n", dest);
return 0;
}

订正:

#include<stdio.h>
#include<assert.h>
char* my_strcat(char* dest, const char* src)
{
char* ret = dest;
assert(dest);
assert(src);
while (*dest)
{
	dest++;
}
while (*dest++ = *src++);
	return ret;
}

int main(void)
{
char dest[80] = "Our wold ";
char src[] = "is beautiful.";
my_strcat(dest, src);
printf("%s\n", dest);
return 0;
}

image

posted @   硫酸钠  阅读(46)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示