1. 一个C函数的问题
这个涉及到一个局部变量和全局变量重名覆盖的问题,就是说你开始有一个全局变量int x,后来在main函数中又定义了一个int x,这就出现了一个变量重名问题,c语言中规定,如果全局变量和某个函数中的变量重名,例如程序中的那两个x,那么在该函数中局部变量会屏蔽掉全局变量,比如说在main函数中,你定义的 int x=10这个x会屏蔽掉你的全局变量x(就是第一行的那个int x;)
所以说在main函数中对x的所有操作,只是对局部变量x的操作。相反的在changevalue函数和modifyvalue()函数中,因为不存在和全局变量重名的局部变量,所以changevalue函数和modifyvalue函数中对x的操作,都是对全局变量x的操作。
希望你能看懂~~
2. c语言小问题
#include<stdio.h>
void func(int x)
{
x=20;
}
int main()
{
int x=10;
func(x);
printf("%d",x);
return 0;
}
-------
x没有改变,所以是10;
如果要返回20;可以这样写;你对比一下;
#include<stdio.h>
int func(int x) //这里x的作用域只在这个函数内,这个x和主函数的x并不是同一个x;你可以试着改一下,将这里的x改成其他变量,结果还是一样。
{
x=20;
return x; //这样函数调用后,这个函数返回值为20;
}
int main()
{
int x=10;
int y;
y=func(x);
printf("%d\n",y); //x作为实参传入func()后,不用指针的话是不能改变x的值;所以,如果这里用x的话,还是是10;
return 0;
}
3. 在应用结构体的程序中,用del()、add()、modify实现对学生成绩记录的删除、添加和修改。程序的开头如下:
#include <time.h>
#include<stdio.h>
#include<conio.h>
#include <stdlib.h>
#include<string.h>
#define MAX 80
void input();
void sort();
void display();
void insert();
void del();
void average();
void find();
void save();
void read();
void del_file();
void average();
void modify();
int now_no=0;
struct student
{
int no;
char name[20];
char sex[4];
float score1;
float score2;
float score3;
float sort;
float ave;
float sum;
};
struct student stu[MAX],*p;
main()/*主函数*/
{
int as;
start: printf(" 欢迎使用学生成绩管理系统 ");
/*一下为功能选择模块*/
do
{
printf(" 1.录入学员信息 2.显示学员信息 3.成绩排序信息 4.添加学员信息 5.删除学员信息 6.修改学员信息 7.查询学员信息 8.从文件读入学员信息 9.删除文件中学员信息 10.保存学员信息 11.退出 ");
printf(" 选择功能选项:");
fflush(stdin);
scanf("%d",&as);
switch(as)
{
case 1:system("cls");input();break;
case 2:system("cls");display();break;
case 3:system("cls");sort();break;
case 4:system("cls");insert();break;
case 5:system("cls");del();break;
case 6:system("cls");modify();break;
case 7:system("cls");find();break;
case 8:system("cls");read();break;
case 9:system("cls");del_file();break;
case 10:system("cls");save();break;
case 11:system("exit");exit(0);
default:system("cls");goto start;
}
}while(1);
/*至此功能选择结束*/
void del(void)
{
FILE *fp;
char a[10];
char ch;
int i,j,k;
system("cls");
printf("请输入要删除的学生姓名:");
scanf("%s",a);
system("cls");
fp=fopen("F:\x.txt","r");
for(i=0;i<count;i++)//找到删除人所在的位置
{
fscanf(fp,"%s %d %d %d %d ",s[i].name,&s[i].no,&s[i].score1,&s[i].score2,&s[i].score3);
if(!strcmp(s[i].name ,a))
{
printf(" 姓名 %s 学号 %d 成绩1 %d 成绩2 %d 成绩3 %d ",s[i].name ,s[i].no ,s[i].score1 ,s[i].score2 ,s[i].score3 );
printf(" 该同学的信息已成功删除! ");
printf(" ");
break;
}
}
fclose(fp);
if(i==count)
{
printf(" 很抱歉,没有您所要查找的同学记录! ");
printf(" ");
}
else
{
for(j=i;j<count-1;j++)
{
for(k=0;k<10;k++)
{
s[j].name[k]=s[j+1].name[k];
}
s[j].no=s[j+1].no;
s[j].score1=s[j+1].score1;s[j].score2=s[j+1].score2;s[j].score3=s[j+1].score3;
}
fp=fopen("F:\x.txt","w");
fclose(fp);
fp=fopen("F:\x.txt","a");
for(j=0;j<2;j++)
{
fprintf(fp,"%s %d %d %d %d ",s[j].name,s[j].no,s[j].score1,s[j].score2,s[j].score3);
}
fclose(fp);
}
count=count-1;
}
(3)c语言modify函数功能扩展阅读:
在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。
C++提供了许多种基本的数据类型(如int、float、double、char等)供用户使用。但是由于程序需要处理的问题往往比较复杂,而且呈多样化,已有的数据类型显得不能满足使用要求。因此C++允许用户根据需要自己声明一些类型,用户可以自己声明的类型还有结构体类型(structure)、共用体类型(union)、枚举类型(enumeration)、类类型(class )等,这些统称为用户自定义类型(user-defined type,UDT)。
4. 跪求一道C语言题目~~~通过定义并赋初值的方式,利用结构体变量存储2名学生的学号,姓名和三门课的成
#include<stdio.h>
constintN=2;
typedefstructStu{
charname[20];
doublechinese;
doublemath;
doubleenglish;
}Stu;
Stustu[N];
voidshow(Stus){
printf("%s %.1lf %.1lf %.1lf ",s.name,s.chinese,s.math,s.english);
}
voidmodify(Stu*s,floata){
for(inti=0;i<N;i++){
s[i].english*=a;
s[i].chinese*=a;
s[i].math*=a;
}
}
intmain(intargc,char**argv){
for(inti=0;i<N;i++){
scanf("%s%lf%lf%lf",stu[i].name,&stu[i].chinese,&stu[i].english,&stu[i].math);
}
modify(stu,0.6);
for(inti=0;i<N;i++){
show(stu[i]);
}
return0;
}
5. 求助一个C语言程序
这个程序太复杂了,不是一会就能写完的,一会就能调试好的。复杂的程序可以外发让熟悉的人来编写调试,也可以找熟人编一个程序。可以的
6. c语言中,定义modify(修改)函数,出现的问题,这是其中一段:
请注意变量 m
也就是记录总数为 m
在查不到时,循环结束时,i==m,后面的信息都存在 stu[m]中,这样就有了 m+1条了
在存到文件中时,还是只保存了 m 条,所以,增加的一条并没有保存到文件中
7. C语言如何在子函数中对主函数中的二维数组值进行修改 二维数组已经在主函数中用动态数组分配了空间。
用指针做函数参数可以实现!
8. c语言中dele( ),destroy( ),setEd( ),modify( )函数的功能是什么
删除
销毁
创建
修改
9. C语言常用词汇及函数有那些
常用词汇:
1、short:修饰int,短整型数据,可省略被修饰的int。
2、long:修饰int,长整型数据,可省略被修饰的int。
3、long long:修饰int,超长整型数据,可省略被修饰的int。
4、signed:修饰整型数据,有符号数据类型。
5、unsigned:修饰整型数据,无符号数据类型。
6、restrict:用于限定和约束指针,并表明指针是访问一个数据对象的唯一且初始的方式。
7、return:用在函数体中,返回特定值(如果是void类型,则不返回函数值)。
8、continue:结束当前循环,开始下一轮循环。
9、break:跳出当前循环或switch结构。
10、goto:无条件跳转语句。
11、if:条件语句,后面不需要放分号。
12、else:条件语句否定分支(与if连用)。
13、switch:开关语句(多重分支语句)。
14、case:开关语句中的分支标记,与switch连用。
15、default:开关语句中的“其他”分支,可选。
常用函数:
1、int isalpha(int ch) 若ch是字母('A'-'Z','a'-'z'),返回非0值,否则返回0。
2、int isalnum(int ch) 若ch是字母('A'-'Z','a'-'z')或数字('0'-'9'),返回非0值,否则返回0。
3、int abs(int i) 返回整型参数i的绝对值。
4、double cabs(struct complex znum) 返回复数znum的绝对值。
5、double fabs(double x) 返回双精度参数x的绝对值。
6、long labs(long n) 返回长整型参数n的绝对值。
10. C语言 指针做函数参数 的优点
首先你要认识函数传参是怎么进行的
函数传参是复制形的,举个例子说:
void modify(int a)
{
a++;
}
void main()
{
int a=5;
modify(a);
printf("%d",a);
}
这个程序的答案还是5。为什么?
因为当调用modify(a)时,在执行modify函数时,是另外开辟了一个内存空间,将main中a的值复制过来,modify函数中所有的操作都是相对于这个新开辟的内存空间而言的,对原来的a没有任何改变。
现在就来说说指针,如果用指针传参的话那就完全不一样了,指针(pointer),说白了即是指向变量内存地址。同样上面的例子:
void modify(int * a)
{
(*a)++;
}
void main()
{
int a=5;
modify(&a);
printf("%d",a);
}
这个答案当然是6
因为你传进去的是a的地址,所以在modify函数中的操作都是对a地址上的内容进行操作,即是操作a所以modify函数不用返回这个数,main中a的值也会改变。因为大家都是操作同一个内存空间,而上面不用指针,modify操作的是另一个新开辟的内存空间,只是这个内存空间初始值和a一样。
现在来说说传参,其实你“为什么函数参数是字符串的多用指针?” 那句我不是很明白,C中的字符串传参好像就指针一种形式(除非用结构体)。
何时用指针,何时用拷贝。当传的参数是一个结构体,而这个结构体比较大,这时最好用指针,因为如果用拷贝的话,单单花在拷贝的时间就要浪费很多,而如果这个函数经常被调用,那么这效率问题就出现了。
你在子函数中要对你的主调用函数中变量进行操作时也可以用指针做参数,这样子函数就可以不用return 如果不是用指针的话,就要再子函数的未尾加上一条return x;把这个数返回当返回值。
多看点书,多写点程序,刚开始学都会对指针比较迷茫。写多了,自然而然就懂了。