C语言中遇到的问题及解决方法
2012-05-06 10:36
330 查看
2012年5月5号;
问题:for语句和while语句后面有; 的情况。相当于
这是执行空循环,i会累加,但啥都不执行。直到不满足条件为止。
2012年5月10号;
今天开始看《计算机程序设计艺术》,里面讲到算法的几重特性,其中的efficiency在谭浩强著《C程序设计》中被举例a/b的条件是b!=0,而原文中说的是诸如哥德巴赫猜想,翻译过来大致是“你不能写一条语句说当n=4时,若x^n+y^n+z^n=w^n,则继续”,因为这条语句计算机是无法一步实现的,所以是无效的。不知道中文版教材是不是曲解了原著的意思。
2012年5月18号;
C语言的一致性
遵循标准的C实现有两种:宿主式和独立式。
如果一个C实现接受所有严格遵循标准的程序,它就是一种遵循标准的宿主式实现。如果一个C实现接受所有严格遵循标准并且不适用除了float.h,iso646.h(C95),limits.h,stdarg.h(C99),stdbool.h和stdint.h(C99)之外的任何库函数的程序,她就是一种遵循标准的独立式实现。
一致性程序就是可以被一致性编译器所接受的程序。因此,一致性程序可以依赖于一致性C实现中一些非移植性的、由编译器所定义的特性。严格一致性程序则无法依赖这些特性(因此具有最大限度的可移植性)。这里我的观点就是比如graphic.h是Turbo C++的特征库函数,在其他编译器中没有,这样调用这个库函数的程序的可移植性就差,所谓的严格一致性指的是与C标准的严格一致,不含有C标准以外的任何库函数及特性。(不知道我的理解是不是有错误,希望看到的人能给予指正。)参考自《C语言参考手册(第五版)》。
因为在C/C++中,在表达式中函数名得到的就是函数的地址, 这也是为什么可以把一个函数名赋值给一个函数指针的原因. 也就是说,函数名就跟数组名一样, 本身在表达式中是地址, 而不是值.double (*pfun) (double) = func; 而不需要 = &func; 因为&func 如果按照普通变量地址来解释, 语义上是行不通的, 所以标准规定 func == &func; 对函数指针进行调用的时候也就 *pfun() == pfun() 了.
2012年6月4日
//编写一个函数print,打印一个学生的成绩数组,该数组中有5个学生的数据记录,每个记录包括num,name,score[3],用主函数输入这些记录,用print函数输出这些记录。
#include<stdio.h>
struct Student
{
char num[5];
char name[8];
int score[3];
}student[5];
void main()
{
void print(struct Student student[5] );
int i,j;
for(i=0;i<5;i++)
{
printf("\n请输入学生的学号:%d\n",i);
printf("学号:");
scanf("%s",student[i].num);
printf("姓名:");
scanf("%s",student[i].name);
for(j=0;j<3;j++)
{
printf("科目 %d:",j);
scanf("%f",&student[i].score[j]);
}
printf("\n");
}
print(student);
}
void print(struct Student student[5])
{
int i,j;
printf("学号 姓名 科目 1 科目 2 科目 3\n");
for(i=0;i<5;i++)
{
printf("%5s%10s",student[i].num,student[i].name);
for(j=0;j<3;j++)
{
printf("%d",student[i].score[j]);
}
printf("\n");
}
}
这个代码用gcc struct.c 后./a.out执行没有问题。但是用gcc -o struct.c 后执行./struct就有问题。目前未明白问题原因。
问题:for语句和while语句后面有; 的情况。相当于
这是执行空循环,i会累加,但啥都不执行。直到不满足条件为止。
for(;;) ;
while() ;
2012年5月10号;
今天开始看《计算机程序设计艺术》,里面讲到算法的几重特性,其中的efficiency在谭浩强著《C程序设计》中被举例a/b的条件是b!=0,而原文中说的是诸如哥德巴赫猜想,翻译过来大致是“你不能写一条语句说当n=4时,若x^n+y^n+z^n=w^n,则继续”,因为这条语句计算机是无法一步实现的,所以是无效的。不知道中文版教材是不是曲解了原著的意思。
2012年5月18号;
C语言的一致性
遵循标准的C实现有两种:宿主式和独立式。
如果一个C实现接受所有严格遵循标准的程序,它就是一种遵循标准的宿主式实现。如果一个C实现接受所有严格遵循标准并且不适用除了float.h,iso646.h(C95),limits.h,stdarg.h(C99),stdbool.h和stdint.h(C99)之外的任何库函数的程序,她就是一种遵循标准的独立式实现。
一致性程序就是可以被一致性编译器所接受的程序。因此,一致性程序可以依赖于一致性C实现中一些非移植性的、由编译器所定义的特性。严格一致性程序则无法依赖这些特性(因此具有最大限度的可移植性)。这里我的观点就是比如graphic.h是Turbo C++的特征库函数,在其他编译器中没有,这样调用这个库函数的程序的可移植性就差,所谓的严格一致性指的是与C标准的严格一致,不含有C标准以外的任何库函数及特性。(不知道我的理解是不是有错误,希望看到的人能给予指正。)参考自《C语言参考手册(第五版)》。
void (*Fun)(); void myfunction() { printf("这是为什么呢?\n"); } int main() { Fun ptr = myfunction; ptr();//能输出结果 (*ptr)();//也能输出结果 return 0; }
因为在C/C++中,在表达式中函数名得到的就是函数的地址, 这也是为什么可以把一个函数名赋值给一个函数指针的原因. 也就是说,函数名就跟数组名一样, 本身在表达式中是地址, 而不是值.double (*pfun) (double) = func; 而不需要 = &func; 因为&func 如果按照普通变量地址来解释, 语义上是行不通的, 所以标准规定 func == &func; 对函数指针进行调用的时候也就 *pfun() == pfun() 了.
2012年6月4日
//编写一个函数print,打印一个学生的成绩数组,该数组中有5个学生的数据记录,每个记录包括num,name,score[3],用主函数输入这些记录,用print函数输出这些记录。
#include<stdio.h>
struct Student
{
char num[5];
char name[8];
int score[3];
}student[5];
void main()
{
void print(struct Student student[5] );
int i,j;
for(i=0;i<5;i++)
{
printf("\n请输入学生的学号:%d\n",i);
printf("学号:");
scanf("%s",student[i].num);
printf("姓名:");
scanf("%s",student[i].name);
for(j=0;j<3;j++)
{
printf("科目 %d:",j);
scanf("%f",&student[i].score[j]);
}
printf("\n");
}
print(student);
}
void print(struct Student student[5])
{
int i,j;
printf("学号 姓名 科目 1 科目 2 科目 3\n");
for(i=0;i<5;i++)
{
printf("%5s%10s",student[i].num,student[i].name);
for(j=0;j<3;j++)
{
printf("%d",student[i].score[j]);
}
printf("\n");
}
}
这个代码用gcc struct.c 后./a.out执行没有问题。但是用gcc -o struct.c 后执行./struct就有问题。目前未明白问题原因。
相关文章推荐
- C语言学习中遇到的问题与解决方法
- 安装和使用MySQL的过程遇到问题和解决的方法
- WIN10 操作系统下安装 SQL 2008 遇到的问题及解决方法
- 发布链接外部数据库的MXD为服务时遇到的问题及解决方法
- 提交应用遇到"Missing Screenshot"问题的解决方法
- centos安装mysqldb遇到的问题和解决方法
- ShareSDK分享遇到的问题及解决方法
- 多字节字符集改为Unicode字符集遇到的问题及解决方法
- vba 自动导入excel报表遇到的问题及解决方法
- 多方通话的时候遇到图片回收问题---目前没有方法解决 Canvas: trying to use a recycled bitmap android.graphics.Bitmap
- 工作遇到问题之解决方法
- socket iOS 与java 后台进行socket通讯遇到的问题以及解决方法
- 编写MapReduce程序访问HBase 遇到的问题与解决方法
- 初次体验百度eCharts遇到的问题和解决方法
- java开发中遇到的问题及解决方法(持续更新)
- 生产环境使用elasticsearch遇到的一些问题以及解决方法(不断更新)
- 编译安装PHP 时遇到问题解决方法
- 最近学习J2EE遇到的问题及解决方法(一)
- Python遇到的小问题与解决方法,时时更新!
- Android环境下接收系统灭屏广播遇到延时问题的一个解决方法