❶ 请按照如下下降沿/上升沿触发时序图写一段c语言程序
电子的课程我几乎全忘了,我翻了翻书,我当初学51单片机串口通信,用的是汇编。
我当初用C语言写51单片机代码的时候,编译变成机器代码,但是keil编辑器可以把机器代码转成助记符,就是汇编。我看了之后发现一条C语言代码会翻译成多条汇编,如果是循环,翻译成汇编就会更复杂,所以用C语言写51单片机代码,代码运行时间会更长,时间不能自己掌握,因为我不知道翻译成多少条汇编了。所以51单片机还是要用汇编写比较好。
我也不知道为什么你会直接用C语言写时序图,我只是觉得用汇编会简单点。
❷ 最速下降法的c语言编程,急求大神
// this program made by lusiyuan
#include<stdio.h>
#include<math.h>
#define N 10
#define eps pow(10,-6)
double f(double x[],double g[],double t)
{
double s;
s=pow(x[0]-t*g[0],2)+4*pow(x[1]-t*g[1],2);
return s;
}
void sb(double *a,double *b,double x[],double g[])
{
double t0,t1,t,h,alpha,f0,f1;
int k=0;
t0=10; /*初始值*/
h=1; /*初始步长*/
alpha=2; /*加步系数*/
f0=f(x,g,t0);
t1=t0+h;
f1=f(x,g,t1);
while(1)
{
if(f1<f0)
{
h=alpha*h; t=t0;
t0=t1; f0=f1;
k++;
}
else
{
if(k==0)
{h=-h;t=t1;}
else
{
*a=t<t1?t:t1;
*b=t>t1?t:t1;
break;
}
}
t1=t0+h;
f1=f(x,g,t1);
}
}
double hjfg(double x[],double g[])
{
double beta,t1,t2,t;
double f1,f2;
double a=0,b=0;
double *c,*d;
c=&a,d=&b;
sb(c,d,x,g);
printf("\n[a,b]=[%lf,%lf]",a,b);
beta=(sqrt(5)-1.0)/2;
t2=a+beta*(b-a); f2=f(x,g,t2);
t1=a+b-t2; f1=f(x,g,t1);
while(1)
{
if(fabs(t1-t2)< eps)
break;
else
{
if(f1<f2)
{
t=(t1+t2)/2; b=t2;
t2=t1; f2=f1;
t1=a+b-t2; f1=f(x,g,t1);
}
else
{
a=t1; t1=t2;
f1=f2; t2=a+beta*(b-a);
f2=f(x,g,t2);
}
}
}
t=(t1+t2)/2;
return t;
}
void zsxjf()
{
double x[N],g[N],t=0,f0,mod;
int i,n;
printf("请输入n(为几元函数)=");
scanf("%d",&n);
printf("\n请输入初始值:\n");
for(i=0;i<n;i++)
scanf("%lf",&x[i]);
f0=f(x,g,t);
g[0]=2*x[0]; g[1]=8*x[1];
t=hjfg(x,g);
printf("\nt=%lf",t);
while(1)
{
mod=sqrt(pow(g[0],2)+pow(g[1],2));
printf("\nmod=%lf",mod);
if(mod<eps)
break;
else
{
x[0]=x[0]-t*g[0];
x[1]=x[1]-t*g[1];
f0=f(x,g,t);
g[0]=2*x[0];
g[1]=8*x[1];
t=hjfg(x,g);
}
printf("\n-----------------------------------------------");
printf("\nt=%lf",t);
}
printf("\n最优解为:x%d=%lf,x%d=%lf",1,x[0],2,x[1]);
printf("\n函数最有值为:f=%lf",f(x,g,t));
}
int main()
{
zsxjf();
}
编译通过,这种代码很好写的。
❸ 如何写一个单片机输入上升沿和下降沿的脉冲输出信号的c语言程序
这个简单,从低到高就是上升输出,重高到低就是下降输出
#include<reg51.h>
sbit pluse=P1^0;
main()
{
int i;
while(1)
{
pluse=0; //此时为下降输出
i=100;
while(i--);
pluse=1; //此时为上升输出
i=100;
while(i--);
}
}
❹ c语言编程
C语言编程如何快速实现
在我们初次学习C语言的时候,总想着快速的实现编译过程。那么C语言编程究竟是如何实现的呢,当然是要通过自己喜欢的编译器来编译完成,那么今天就为大家介绍C语言编程是如何快速的实现。
1. 首先我们下载一款适合C语言的编译器,今天为大家讲解的C语言编译器为CodeBlocks,该编译器没有太过复杂,很符合初学者,简单上手快。
❺ 如何学习C语言编程
目录部分1:准备工作1、下载和安装编译器。2、理解基本概念。3、查看一些基本的代码。4、尝试编译这段程序。5、要养成写注释的习惯。部分2:变量的使用1、理解变量的功能。2、学习声明变量。3、理解在何处声明变量。4、用变量来存储用户的输入。5、处理变量。部分3:使用条件语句1、理解条件语句的基本概念。2、学习基本的比较符号。3、写一个IF语句。4、使用ELSE/ELSE IF语句来扩展你的条件判断。部分4:学习循环语句1、理解循环的原理。2、使用FOR循环。3、使用WHILE循环。4、使用DO?WHILE 循环。部分5:使用函数1、理解函数的基本原理。2、从函数原型开始。3、把函数添加到程序中。部分6:不断学习1、找一些C语言编程相关的书来看。2、加入一些社区。3、参加一些课程。4、考虑学习C++。诞生于上世纪70年代的C语言是一门古老的语言了, 但作为一门底层语言,时至今日它仍然非常强大。学习C语言能够为学习其他更复杂的语言打下良好的基础,因为你在C语言中学习到的知识对几乎所有的编程语言都适用。下面就来看看如何开始用C语言编程吧。
部分1:准备工作
1、下载和安装编译器。 C语言需要通过编译器解释为计算机可以理解的机器码。 编译器通常是免费的, 不同的操作系统上一般使用不同的编译器。 对于Windows系统, 可以尝试 Microsoft Visual Studio Express,其是Windows平台上最流行的多语言IDE(集成开发环境),其集成了Microsoft开发的C语言编译器。
对于OS X系统, Xcode是一款优秀的多语言IDE,其集成了C语言的编译器。
对于Linux, gcc是一个不错的也是最流行的选择。
2、理解基本概念。 C语言是一门古老的语言, 但却十分强大。它最初是为Unix操作系统设计的, 但后来被移植到了几乎所有的操作系统上,并得到了很多扩展。C语言的现代版本是C++。 C语言本质上是由函数构成的,在函数体中你可以使用变量,条件语句,循环等语句来存储和处理数据。
3、查看一些基本的代码。 下面是用C语言写的一段非常基本的代码, 阅读这些代码,尝试理解这种语言的不同部分是如何工作的, 并对程序的运作原理有初步的认识。
#include <stdio.h>int main() { printf("Hello, World!
"); getchar(); return 0;}这里的#include 指令在程序开始之前就出现了, 它的功能是把包含有你需要的函数的库加载进来。 在这个例子中,引入stdio。h 使得我们能够使用 printf() 和 getchar() 这两个函数。
这里的 main() 指令会告诉编译器,程序需要运行一个叫做“main”的函数,该函数运行完毕后返回一个整数值。所有的C语言都要运行一个“main”函数。
{} 符号表示括号内的所有内容都是函数的一部分。在本例中,他们标记了所有的内容都是“main”函数的一部分。
printf() 函数能够将小括号中的内容显示在用户的屏幕上。双引号保证了这个字符完全按照字面的样子输出,
组合告诉编译器这串字符输出完之后将光标移动到下一行 。
; 符号表示一行的结束。绝大部分C代码都以分号结束。
getchar()函数告诉编译器这段程序要等待一个按键的输入才能够继续。考虑到大部分编译器在运行完程序之后会立刻关掉程序窗口,这个功能还是很有用的,因为这样可以让程序保持运行直到有键被按下才会结束。
return 0 指令表示程序的结束。请注意”main”函数是一个int类型的函数,也就是说当函数结束时需要返回一个整数。如果返回0则表示程序正确的执行了,其他数字表示程序运行时发生了错误。
4、尝试编译这段程序。 把上面的代码输入到你的代码编辑器中,然后保存为”*。c”文件。 用你的编译器编译它, 一般来说点击Build或Run按钮即可。
5、要养成写注释的习惯。 注释是代码中的一部分,它不会被编译, 但是却可以告诉你代码做了些什么。这对于提醒你自己你的代码是干什么的以及让其他开发者理解你的代码都很有帮助。 在C语言中添加注释只需要把要注释的部分的前面添加/*, 后面添加 */。
不要吝啬你的注释,除了特别简单明了的地方都尽量加上注释吧。
注释功能也可以快速的屏蔽一部分代码但不删除它们。只需要给你想要排除的代码用注释标签包起来它们就不会被编译。如果你想要改回来,去掉注释标签即可。
部分2:变量的使用
1、理解变量的功能。 变量是用来存储数据的,不管是计算得出的还是用户输入的数据。变量在使用前要先定义,并且有不同的类型可以选择。有以下几种常见的变量类型 int, char, 和 float。 每种变量类型都代表一种数据存储的格式。
2、学习声明变量。 变量在使用前要先被创建出来,或者叫”声明”。 声明一个变量只需要在变量类型的后面写出变量的名字即可。比如,下面就是一些变量声明的例子:
float x;char name;int a, b, c, d; 注意,你可以在一行中声明多个变量,只要它们的类型是一样的就行,你只需用逗号把变量名隔开即可。
和大多数的C代码一样,变量的声明也要以分号结尾。
3、理解在何处声明变量。 变量的声明必须要放在每个代码块之前(代码块是指用大括号{}包起来的一段代码)。如果你在代码块后边声明变量,程序就不能正确执行了。
4、用变量来存储用户的输入。 现在你了解到了变量的一些基本原理, 你可以写一段简单的程序来存储用户的输入。这次你需要用到另外一个叫scanf的函数, 它的功能是把用户的输入赋值给指定的变量。
#include <stdio。h>int main(){ int x; printf( "请输入一个数: " ); scanf( "%d", &x ); printf( "你输入了: %d", x ); getchar(); return 0;} 这里的"%d"符号告诉scanf函数在用户的输入中找出整数。
x前面的&符号告诉scanf在哪里找到要修改的变量,并把输入的整数值存进去。
最后的printf命令读出输入的整数并返回给用户。
5、处理变量。 你可以用数学表达式来处理之前存储的变量。需要注意一个重要的差别:在数学表达式中单个=是赋值号,作用是把等号右边的值赋给等号左边的变量, 而==则是比较两个变量是否相等。
x = 3 * 4; /* 把x设为3*4,也就是12 */x = x + 3; /* 把x的值增加3,然后把新的值赋值给x */x == 15; /* 检查x是否等于15 */x < 10; /* 检查x是否小于10 */
部分3:使用条件语句
1、理解条件语句的基本概念。大多数程序都是由条件语句驱动的, 这样的语句可以判断一个条件是TRUE(真)还是FALSE(假), 然后据此执行不同的动作。最基本的条件语句是if语句。C语言中的TRUE和FALSE和你平常理解的有点不太一样。TRUE和任何非0的数总是相等的。当你执行一个比较时,如果结果是TRUE,会返回一个”1”。如果结果是FALSE,会返回0。弄清楚这一点能帮助你更好的理解IF语句的执行过程。
2、学习基本的比较符号。条件语句是以比较大小的数学表达式为核心的。下面列出了最常用的一些比较符号:
> /* 大于 */< /* 小于 */>= /* 大于或等于 */<= /* 小于或等于 */== /* 等于 */!= /* 不等于 */
10 > 5 TRUE6 < 15 TRUE8 >= 8 TRUE4 <= 8 TRUE3 == 3 TRUE4 != 5 TRUE
3、写一个IF语句。 利用IF语句,你可以根据一个表达式计算的结果决定之后的程序如何运行。之后学习了其他条件语句后你可以把它们组合起来实现更强大的功能,不过现在写一段简单的代码熟悉一下就行了。
#include <stdio.h>int main(){ if ( 3 < 5 ) printf( "3比5小"); getchar();}
4、使用ELSE/ELSE IF语句来扩展你的条件判断。 在IF语句中你可以添加ELSE 和ELSE IF语句来处理更多不同的结果。 ELSE后面的语句在IF中的判断结果为FALSE时执行。 ELSE IF则可以让你在一个代码块中使用多个IF语句来处理更多的情况。阅读下面的代码看一下他们是怎么工作的。
#include <stdio.h>int main(){ int age; printf( "请输入您的年龄: " ); scanf( "%d", $age ); if ( age <= 12 ) { printf( "你是个孩子!
" ); } else if ( age < 20 ) { printf( "年轻的感觉真好!
" ); } else if ( age < 40 ) { printf( "你充满了青春的活力!
" ); } else { printf( "充满智慧的年纪!
" ); } return 0;}这段代码接收用户输入的一个数据然后传递给IF语句。如果这个数据满足第一个条件,则第一个printf被执行。如果没有满足第一个条件,则后面的各个ELSE IF会逐个进行判断直到有一个满足条件的分支为止。如果没有任何分支满足条件,则ELSE语句被执行。。
部分4:学习循环语句
1、理解循环的原理。 循环是编程中很重要的一部分, 它们让你可以重复执行一段代码直到满足特定条件为止。这个机制使你可以很容易的实现重复的动作,同时省去了每次做条件判断的麻烦。 有3种类型的循环:FOR, WHILE, 和 DO?WHILE。
2、使用FOR循环。这是最常见和好用的循环类型。它会不断的运行循环内的函数直到循环条件不再成立。FOR循环需要包含3条语句:初始化变量,循环条件,和变量更新的方式。如果你不需要其中的某个语句,把该处空着打一个分号即可,否则的话循环会无限运行。
#include <stdio.h>int main(){ int y; for ( y = 0; y < 15; y++;){ printf( "%d
", y ); } getchar();}在上面的程序中,y被设为0,循环继续运行的条件是y小于15。每次循环中y的值被打印出来,并且被增加1。一旦y=15,循环就结束了。
3、使用WHILE循环。WHILE循环比FOR循环要简单的多。它们只有一个语句,只要该语句为TRUE循环就不断执行。你不需要初始化或更新变量,不过你可以在循环体中做这些事。
#include <stdio.h>int main(){ int y; while ( y <= 15 ){ printf( "%d
", y ); y++; } getchar();}这个循环每执行一次,y++命令就把y的值增加1。一旦y达到16,循环就结束了。(记住只有在y小于等于15的条件下循环才会执行。)
4、使用DO?WHILE 循环。这种循环在你想要确保一个循环至少要被执行一次时非常管用。在FOR和WHILE循环中,循环条件的检测是在循环开始之前进行的,这也就意味着有可能第一次检测就无法通过,那样的话循环体一次都不会被执行。然而DO。。。WHILE循环会先执行一次循环体然后再做检测,这就保证了循环体至少会被执行一次。
#include <stdio.h>int main(){ int y; y = 5; do { printf("循环被执行!
"); } while ( y != 5 ); getchar();}在上面的循环中,即使循环条件检测的结果为FALSE还是会展示一条信息。变量y的值被设为5而WHILE循环被设置为只有当y 不等于5时才运行,所以循环执行到条件检测时就会终止。但信息还是被展示出来了,因为条件检测是在输出信息之后的。
DO?WHILE循环中的WHILE语句必须以;结尾。这是唯一一种循环体以分号结尾的情形。
部分5:使用函数
1、理解函数的基本原理。 函数是可以被程序的其他部分调用的自成一体的代码块。使用函数可使你更容易重复一段代码,同时也让程序变得简单易读、便于修改。函数中可以包含前面提到的所有技术,甚至可以包含其他函数。 前面的例子中的main()就是一个函数,同样getchar()也是。
要想写出高效且易读的代码,函数是至关重要的。用好函数可以使你的程序条理更清晰。
2、从函数原型开始。在真正开始编写一个函数之前,你最好先搞清楚你要完成什么功能,并从函数原型开始编写。函数的基本语法格式为: “返回值类型 函数名 (参数1, 参数2, ?);”。 比如下面是一个把两个数相加的函数:
int add ( int x, int y );上面的代码创建了一个把输入的x和y相加然后返回他们的和的函数。
3、把函数添加到程序中。你可以用上面的函数原型实现一个把用户输入的两个数相加的函数。下面的程序展示了"add"函数是如何处理输入的数字的。
#include <stdio。h>int add ( int x, int y );int main(){ int x; int y; printf( "请输入要求和的两个数: " ); scanf( "%d", &x ); scanf( "%d", &y ); printf( "您输入的数字之和为 %d
" add( x, y ) ); getchar();}int add ( int x , int y ){ return x + y;} 请注意,函数的原型也需要放在程序的顶部,这样能保证当这个函数被调用时编译器已经知道存在这个函数,同时也知道它的返回类型。不过只有你想在函数调用处之后再实现这个函数时才有必要这么做。如果你直接把add()函数的实现放在main()函数之前,那么即使不声明函数原型也是一样的。
这个函数的实现代码其实是放在程序的底部的。main() 函数获取了用户输入的两个整数并把他们传给add()函数以便后者进行处理,然后add()函数把计算的结果返回给main() 。
当add()函数被定义之后,你就可以在程序中的任何地方调用它了。
部分6:不断学习
1、找一些C语言编程相关的书来看。 这篇指南涵盖了C语言中最基础的部分,但对于完整的C语言只是体系来说这只是皮毛。如果能有一本好的参考书你在学习C语言的道路上能省去许多麻烦
2、加入一些社区。不论是在线上还是线下,都有一些很棒的致力于学习和发展优秀编程语言的社区。如果能找到一些志同道合的C语言程序员,并和他们相互交流, 你一定能进步的很快。 如果可能的话还可以尝试黑客马拉松活动。在这项活动参赛的团体或个人需要在有限的时间里对给出的问题提出自己的程序和解决方案,因此很能培养人的创造力。你还可以籍此认识许多优秀的程序员。并且世界各地都有规律性举办的黑客马拉松活动。
3、参加一些课程。虽然你没必要重新回到学校修得计算机科学的学位,但是适当的参加一些相关课程还是会让你的学习过程有质的飞跃。没有什么能比一位C语言专家的言传身教更能帮助你了。通常你总能在网络上找到一些培训课程,也有一些专业的计算机培训机构可供选择。还有一些大学的优秀课程是免费对外开放的,你可以去旁听。
4、考虑学习C++。 如果你已经掌握了C语言,了解一下C++将对你大有裨益。因为C++是C语言更现代的版本, 它更加的灵活和方便。C++是以面向对象的思想设计的,掌握C++之后你就可以在几乎所有操作系统中编写强大的程序了。
小提示多给程序写注释。注释不仅可以帮助其他可能看到你的代码的人更好的理解代码, 还能帮你会一起你写的代码是什么意思以及你为什么要这么写。当你写代码的时候你可能很清楚你要干什么,但两三个月之后呢?你很可能已经忘的差不多了。
如果你在编译时遇到语法错误而被困扰,记得用谷歌或其他搜索引擎搜索一下你遇到的问题。有可能已经有人遇到了同样的问题并贴出了解决办法。
你的源代码需要以。c扩展名做后缀,这样编译器才能够知道这是一个C语言源码文件。
❻ 这道C语言编程题学生为0时代码如何修改
代码修改如下图:
在一处,scanf后增加
if(N == 0)
{
printf("错误:学生乱扮人数为0。 ");
return 1;
}
第二后面第二个框仅保留最核腊后改陪滑一个printf语句,其它删除。
❼ C语言编程题如果一个十进制数的数码从左到右是先严格单调下降,然后严格单调上升,我们称这个数为凹数。
#include <stdio.h>
#include <裤猜stdlib.h>
#include <string.h>
char num[1000001]={0};
int ber[1000001]={0};
int main()
{int n,i;
for(n=100;n<1000001;n++)
{int i=0;
itoa(n,num,10);
int len=strlen(num);
while(num[i]>num[i+1]&&i<len-1) i++;
if(i==len-1||i==0) continue;
while(num[i]<num[i+1]) i++;
if(i==len-1) ber[n]=1;
}
int N,a,b;
scanf("%d",&N);
while(N--)
{int count=0;
scanf("%d %d",&a,&b);
for(i=a;i<=b;i++)
if(ber[i]) count++;
printf("%d\n",count);
}
}
//这个好像还是会超神简时,但是下面这个可以通过
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char num[1000001]={0};
int ber[1000001]={0};
int main()
{int n,c;
for(n=100;n<1000001;n++)
{int i=0;
itoa(n,num,10);
int len=strlen(num);
while(num[i]>num[i+1]&&i<len-1) i++;
if(i==len-1||i==0) continue;
while(num[i]<胡瞎型num[i+1]) i++;
if(i==len-1) ber[n]=1;
}
for(c=100;c<1000001;c++)
ber[c]+=ber[c-1];
int N,a,b;
scanf("%d",&N);
while(N--)
{
scanf("%d %d",&a,&b);
printf("%d\n",ber[b]-ber[a-1]);
}
}
❽ C语言程序设计 学生成绩管理信息系统
我还有代码呢,要的话,马上帖出来..给个红棋吧,呵呵
一、 课题设计名称
学生成绩管理信息系统分析设计
二、 课题设计目的
通过本次课程的设计,加深对信息系统基础理论和基本知识的理解,掌握使用信息系统分析、设计的基本方法,提高解决实际管理问题、开发信息系统的实践能力。
三、 任务要求:
用信息系统开发工具(例如Visual Foxpro、Visual Basic、Delphi等)开发一个实用的中小型管理信息系统。
1、根据课程设计时间选择适当规模大小的设计课题。
2、根据合理的进度安排,按照系统开发的流程及方法,踏实地开展课程设计活动。
3、课程设计过程中,根据选题的具体需求,在开发各环节中撰写相关的技术文档(小组各成员可分别完成某阶段的技术文档),最后要求提交详细的课程设计报告。
4、开发出可以运行的管理信息系统,通过上机检查。
四、 课题设计报告书要求:
1、 课题设计报告书第一页为封面,封面上写清楚标题、班级、姓名、指导老师、完成日期,格式自己设计。
2、 课题设计报告书第二页为本任务书。
3、 课题设计报告书第三页为教师评语。
4、 课题设计报告书第四页为目录。
5、 课题设计报告书第五页开始为具体内容:
(1)可行性分析
(2)系统分析部分
1)业务流程图
2)数据流程图
3)功能分析图
4)数据字典
5)数据加工处理的描述
6)管理信息系统流程设想图(新系统模型)
(3)系统设计部分
1)功能结构图设计
2)新系统信息处理流程设计
3)输出设计(主要指打印输出设计)
4)存储文件格式设计(数据库结构设计)
5)输入设计(主要指数据录入卡设计)
6)代码设计(职工证号和部门代号等)
7)程序设计说明书
(4)附录或参考资料
6、课题设计报告书最后一页是本次课程设计的小节和参考文献。
7、字数要求不少于4000字。
8、打印纸张使用B5纸,页边距设为上、下、左2厘米,右1.5厘米,
五、 如有雷同,将作不及格处理。
六、 完成时间:2007.1.5
计算机二系
尚晋
2007.10.28
教师评语
评分模块 评分标准及分值 得分
平时成绩(20分) 1. 态度(10分)
2. 考勤(10分)
分析与设计部分
(65分) 3. 需求分析(5分)
4. 系统复杂度(5分)
系统分析部分(20分) 5. 业务流程图(5分)
6. 数据流程图(5分)
7. 功能分析图(3分)
8. 数据字典(7分)
系统设计部分
(35分) 9. 系统配置方案设计(5分)
10. 用户界面导航图(5分)
11. 界面设计(5分)
12. 有效性验证(5分)
13. 错误处理(5分)
14. 编码设计(5分)
15. 数据库设计(5分)
报告部分(10分) 16. 条理清晰、语言精练准确(5分)
17. 描述图形工具使用恰当(5分)
组长加分(5分) 18. 组织得力,合作完成情况好(5分)
总分(100分)
成绩:
学生成绩管理信息系统
1. 系统规划
1.1项目开发的背景
伴随着信息社会的到来,信息的极大丰富必然要求人们适应信息社会,信息和材料、能源一样成为一种社会的基本生产资料,在人类的社会生产活动中发挥着重要的作用,其中最重要的前提就是充分利用人们的才智和学习能力。传统的教学只教会了学生相关的知识,没有教会学生如何利用这些知识,以及再学习的能力。特别对于“管理信息系统”这类实用性比较强的课程,更需要培养学生的实际动手能力。.教与学互动与结合,强调应用,不仅让学生了解课程上讲授的管理信息系统方法和原理,而且让学生们利用这些知识解决实际问题。这对学生的实际工作能力是一个很好的锻炼。密切结合学生独立完成的系统开发作业,通过指导教师的点评,使学生能够在较短的时间内,通过实践,真正掌所学的知识。同时人们对信息和数据的利用与处理也已经进入了自动化、网络化和社会化的阶段,因此,开发相关的管理信息系统已经成为各行各业的必要和必需了,管理信息系统作为一门边缘学科,集管理科学、信息科学、系统科学、现代通信技术和电子计算机技术于一体,可以解决企业或组织所面临的问题,对于成绩管理员的劳动强度、提高工作质量和效率;方便管理人员对信息的查询、提高信息资源的利用效率和管理水平都具有重要意义。
1.2 可行性分析
基于以上对问题的调查和分析,利用计算机给我们提供的信息,及时地了解学生的信息,并且形成一整套动态的管理就十分必要了。本系统开发的主要目的是对学生信息和成绩的实现计算机管理。学生管理系统的建立,是在进行对大量用户需求与调查分析得到的。
(1)技术可行性
成绩管理系统主要是用于计算机教育部关于教学计划、课程、教师信息、成绩的查询和管理。通过使用Microsoft公司提供的Visual FoxPro 6.0工具以及SQL Server数据库可以实现对有关课的教学计划、课程等的网上查询和管理,主要目的是对学生成绩实现计算机管理。
(2)经济可行性
开发学生成绩管理系统费用较底,可利用现有的微机设备,经济上是可行的,非常适合于成绩管理,因为该系统实现了将管理和查询网络
化,极大地方便了管理员、教师、学生。
(3)操作可行性
本系统的界面设计简单直观,易于理解。它使用的控件都是用户常用的或常见的,操作起来很容易上手。不需要特别的培训和讲解,用户便能使用该系统。
(4)组织与管理可行性
成绩管理员是对学生的成绩进行管理的,但过去由于采用人工方法进行管理,工作效率低,劳动强度大,所以他们希望采用计算机管理,将已有的管理经验转化到管理软件中。这就使得系统调查、需求分析能够得到有关人员的大力支持和积极配合。
1.3 制定系统开发计划
开发学生成绩管理系统的计划见表1-1
表1-1 实验小学学生成绩管理系统开发简略计划表
序号 项目内容 时间进度 项目负责人
1 系统规划和可行性分析 2007年12月 向万秀
2 系统分析 2007年12月 张春先、向万秀、刁胜
3 系统设计 2007年12月 向万秀、张春先
4 系统实施与测试 2007年12月 向万秀
5 系统评价与维护 2007年12月 张春先
6 安全保障措施 2007年12月 向万秀、张春先
2系统分析
1现行系统业务流程的调查
对某学校进行实地调查,其现行的成绩管理工作都是采用传统的手工管理,经过对成绩管理员、学生和教师的全面的调查研究,手工工作效率低,工作质量差,不适合现在学校成绩管理系统的需求,所以需要改进传统的成绩管理模式。实现科学化管理。
对现行系统的调查业务流程图如下图1-1所示:
学生
1-1 业务流程图
2 需求分析
(1) 功能描述
本系统包括用户管理、学生注册、班级信息录入、学生信息录入、班级课程录入、学校专业信息录入、课程信息录入、学生成绩录入、教师信息录入、各方面的查询等等。
1.教学管理功能
① 新本学期所开设课程的录入与查询:例如在2006年上学期开设课程:C语言与经济数学。
说明:所有的课程成绩均由三部分组成:平时成绩,上机成绩, 笔试成绩。所占的比重分别为:30%,10%,60%,在该系统中这三部分及其比重是固定不变的。
② 对各系科的课程安排的录入与查询,课程安排即是该学期每个学科
的选课课程、任课教师以及上课时间和上课地点。
说明:每一个院系中所有的不同专业所选的课程都是一样的。但是同一院系的学生不一定有同一个教师授课。
(2).成绩管理的功能(教师使用)如下:
① 录入成绩:既可以单个录入也可以批量录入,其中批量录入以成绩单单位,每次从系统中调出一张成绩单,编辑完成后一次性提交。
成绩单:成绩单包括学期、院系、专业、课程、任课教师、学生成绩。
② 查询成绩:单个查询(学生可使用),根据学生的学号或姓名查询出该学生的所有课程的成绩信息。批量查询以成绩单为单位,每次查询出一张成绩单。
③ 打印成绩:可以一次打印一张成绩单,也可以按要求批量打印。
④ 统计调整:对成绩单中的成绩进行统计,指出各个分数段的人数分布情况。因为有时学生的成绩整体上偏低,需要进行调整,一次系统可以按照用户设置的规则对成绩单中的成绩进行调整。
成绩调整规则:将成绩单中总分在某一分数段的学生成绩调整到另外一个分数段。例如将50到60分的学生成绩全部调整到60到65分之间。为了使调整过程尽可能合理,还可以对待调整分数段的学生成绩进行限制,例如设置其笔试成绩必须在50分以上,而平时成绩则可以适当放宽。
⑤ 每学期考试不及各的学生自动纳入新学期的跟考或辅修教学计划中。
(3).权限说明:
① 管理员可使用功能:教师信息管理、系科显示、课程管理、教学计划管理、学生成绩查询;
② 教师可使用成绩管理各项功能:对学生成绩的添、删除、修改、查询、分析、调整;
③ 学生可使用的功能:查询单个学生所有成绩,班级成绩,学生平均成绩,最高分,最低分等。
为学校教师和学生提供快捷的查询手段,让老师和学生能够及时查询学生成绩信息,更快而又方便的进行查询。
(4).性能要求
本系统采用计算机对学生成绩进行管理,进一步提高办学效益和现代化水平。帮助广大教师提高工作效率,实现学生成绩信息管理工作流程的系统化、规范化和自动化。如果本系统能被学校所采用,将会改变以前靠手工管理学生成绩的状况,可以树立良好的办学形象,提高工作效率。由于现在实行九年义务教育,学校学生不断增加,该系统可高效的进行大规模的查询。系统的安全保密性高,能防止非法访问。
3新系统的逻辑模型的建立
(1) 新开发的学生成绩管理系统的功能分析
在学生成绩管理信息系统中,主要有三类外部实体:学生、教师、教务处工作人员。学生成绩管理信息系统的大部分功能是为教务处工作人员设置的。经调查分析,新开发飞的学生成绩管理信息系统应具有以下的功能。
(1.1) 查询学生的基本信息和成绩信息,包括学生信息的添加、修改、删除等。
(1.2) 管理学生成绩,包括考试管理,成绩管理等。
(1.3) 成绩的处理,即统计成绩、分析成绩等。
(2) 绘制数据流图
绘制数据流图时,只考虑学生和教务处两个外部实体,顶层数据流图如图1-2所示。
学生成绩录入 教师课程信息
学生成绩单
学生登录信息
学生选课信息 辅修/跟考通知单
用户名、密码 部门信息
课程类型 学生成绩信息
课程信息 学生考试信息
图1-2 顶层数据流图
0层数据流如图1-3所示。由于1层图没有完整绘制,0层图中只属于一个加工的文件(例如权限表)也在0层图上出现。
0层数据流图通过反应整个系统中不同数据流向,来揭示系统的组成结构以及各组成部门之间的关系,这种关系主要体现在对数据的操作和处理上。
用户名、密码
学生信息
部门信息
学生成绩
学生信息
学生成绩单
成绩类型 辅修/跟考通知
学生成绩 不及格成绩
缺考
图1-3 0层数据流图
学生信息数据流程图如图1-4、1-5所示。
学生信息 审查1.1 合格单 是否新生1.2 新生信息
学生纪录
学生成绩
总学生纪录表及成绩
图1-4 1层数据流图
(3) 数据字典
数据字典是进行数据收集和数据分析所获得的主要成果,是系统中各类数据描述的集合。数据字典通常包括数据项、数据流、数据存储、处理逻辑。
数据项
名称:学生信息
别名:学生信息
说明:学生信息=学生基本信息+学生记录+学生成绩记录
类型:字符型
长度:12
取值范围:0000000000001~99999999999
数据流条目:
合格单=姓名+系别+班级+专业
新生信息=入学时间+姓名+性别+年龄+专业+系别+班级
加工条目:
加工名:审查
编号:1.1
输入:学生信息
输出:合格单
加工逻辑:根据学生信息判断是否是新生
加工逻辑
加工逻辑
加工名:是否是新生
编号:1.2
输入:合格单
输出:新生信息
加工逻辑:根据合格单建立新生信息
加工名:录入、存储学生信息、各科成绩
编号:1。3
输入:新生信息、考试成绩
输出:本次考试成绩
2层数据流图
学号、课程号 有效查询 成绩
考试成绩 成绩单
学生纪录 班级 统计成绩
各科
本次成绩 升留级名单 学生纪录
成绩标准
图1-5 2 层数据流图
数据字典:
数据项
名称:学号、课程号
别名:编号
说明:惟一标识一个学生编号
类型:字符型
长度:12
取值范围:0000000000001~9999999999999
数据存储文件
数据存储条目:
数据存储名称:考试成绩
组成:姓名+班级+专业+系别+成绩+学号
组织方式:索引文件,以学号为关键字
加工处理
加工逻辑
加工名:有效性检查
编号:2。1
输入信息:学号、课程号
输出信息:有效查询
加工逻辑:根据所输入的信息来检查有效性
加工名:查询成绩
编号:2。2
输入信息:考试成绩
输出信息:成绩
加工逻辑:根据考试成绩查询成绩
加工条目:
加工名:统计选择
编号:3。1
输入信息:学生记录
输出信息:按规定统计成绩
加工逻辑:根据所输入学生记录,按班级、单科统计成绩
数据存储条目:
文件名:成绩标准 组成:成绩
加工条目:
加工名:是否升级
编号:4。1
输入信息:本次成绩、成绩标准
输出信息:升留级名单
加工逻辑:根据本次成绩
IF 大于等于标准成绩 ELSE 降级
ENDLF THEN 升级
加工名:更新记录
编号:4。2
输入信息:升留级名单
输出信息:学生记录
加工逻辑:根据升留级名单修学生记录
3.系统设计
1. 系统总体结构设计与功能模块划分及系统功能描述
本系统的主要任务是实现对学校教导处的学生信息管理、成绩管理、课程管理及相关查询。其主要功能包括:
学生成绩管理模块,学生信息管理模块、系统模块等等。
学生信息管理功能
(1)班级管理。提供给班主任进行本班学生的信息更新、删除。
(2)添加学生。以班级为单位,进行学生入库。其中分为单个添加和成批添加。单个添加学生供数量较少的学生信息入库;成批添加可以从现存的学生信息EXCEL文件中成批录入到数据库中。
(3)删除学生。当学生毕业后,学生信息转移备份数据库中,系统的基本数据库中需要删除学生信息。该功能主要进行成批地删除学生信息,如连续学号区段的多位学生信息删除,整个班级的删除,所有学生信息的删除。
(4)新生管理。本部分的功能主要有新生导入、分班、及设置学号。新生导入实现从现存的EXCEL新生名单中录入学生信息。分班功能实现按新生的报考专业、成绩及性别进行分班。设置学号实现自动为各班学生编发学号。
学生信息备份。在学生信息删除前,将其按班级为单位保存到备份数据库。
(5)学生信息模块主要包括对学生信息的存储,审查记录以及学生对学生整个信息的调查进行分类和查找。可以实现添加、修改、删除、查询学生信息管理的调查。
(6)学生基本信息管理功能包括:学生信息、学生记录、学生成绩、总学生记录表和成绩。
(7)学生基本信息包括:学生学号、学生班级号、课程号、学生联系方式等等
(8)课程管理。提供本学期各年级各专业所开课程名称的录入、修改、删除。它是学生成绩管理的基础。用以保证数据库中一致性原则。
2.系统功能分析
系统开发的总体任务是实现学生信息关系的系统化,规范化和自动化。
学生基本信息所需要完成的功能主要有:
●学生信息的输入,包括输入学生基本信息、所在班级、所学课和 成 绩等。
● 学生信息的查询,包括输入学生基本信息、所在班级、已学课程和成绩 等。
● 学生信息的修改。
● 班级管理信息的输入、查询、修改,包括输入班级设置,年级信息等。
● 基本课程信息的输入、查询、修改。
● 学生成绩信息的输入、查询、修改。
对上述各功能进行集中、分块、按照结构化程序设计的要求。
2.绘制学生信息管理模块功能结构图如图
图1-6 学生信息系统管理的功能结构图
3.系统配置方案设计
鉴于本系统的业务性质,必须选择具有较高的可靠性、稳定性和必要的容错能力的计算机硬件和软件系统,以保证任何情况下都不至于丢失、损坏数据。
必须具有较高的响应速度,以保证各项具体业务的顺利进行。
应考虑具有良好的可维护性,可操作性和可扩充性,以保证将来系统规模的扩展和升级的需要。
4.开发与运行环境的使用
开发前台工具:Visual FoxPro 6.0
操作系统对整个网络起着重要的作用,Windows 2000作为一种强健的、多用途的操作系统,不仅能够运行强有力的客户/服务器应用软件,还可以提供可靠的文件与打印服务,再加其内置的通信与Internet/Internet服务功能,以及安装、使用、管理和维护的方便性,因此,本系统采用Microsoft Windows 2000Server作为操作系统。
本系统准备采用客户机/服务器(C/S)结构模式。C/S结构的最大优势在于广泛采用了网络技术,将系统中的各部分任务分配给分布在网络上的担任不同角色的计算机。把较复杂的计算机管理任务交给服务器完成。再把一些频繁与用户打交道的任务交给客户机完成。通过这种结构完全实现了网络上信息资源的共享。
开发基于C/S结构的管理系统所用到的开发工具包括前台开发工具和后台数据库管理系统,主要根据开发者对开发工具的熟悉程度而定。本系统的前端开发工具采用Visual FoxPro 6.0。
5.编码(Code)设计
6.数据库设计
(1) 概念结构设计
经过本次实验,概念结构设计的主要工作是根据用户需求设计概论性数据模型。概念模型是一个面向问题的模型,它独立于具体的数据库管理系统,从用户的角度看待数据库,反映用户的现实环境,与将来数据库如何实现无关。概念模型设计的典型方法是E-R方法,即用实体—联系模型表示。
E-R方法使用E-R图来描述现实世界,E-R图包含三个基本成分:实体、联系、属性。E-R图直观易懂,能够比较准备地反映现实世界的信息联系,从概念上表示一个数据库的信息组织情况。
实体:是指客观世界存在的事物,可以是人或物,也可以是抽象概念。E-R图中各实体的关系说明如下。
学号记载学生成绩管理系统中所登记的一类编号,而所有的学生姓名是所代表的是学生的代码。中两个实体之间为一对多关系。
学生可以选择多门课程,一门课程可以有多个学生选择。其中本系统中E-R图包括学生性别、出生日期等等。课程中包括课程号、课程名、教师姓名等等。
M N
学生与课程之间的关系
课程名是惟一的,而选课的学生是多个的,这两个实体之间为一对一关系。
一个学校有多位老师,这两个实体之间为一对多关系。
学生与课程表中的同一课程对应多个不同的老师与学生,这两个实体间为一对多关系。
❾ 请问下面这个实例用C语言程序怎样编程
#include <stdio.h>
int main() {
int score;
char grade;
printf("请输入成绩:");
scanf("%d", &score);
switch (score / 10) {
case 10:
case 9:
grade = 'A';
break;
case 8:
grade = 'B';
break;
case 7:
grade = 'C';
break;
case 6:
grade = 'D';
break;
default:
grade = 'E'坦孙;
break;
}
printf("成绩等级为:%c\n", grade);
return 0;
}
在程序中,先定义了一个整型变量 score 和一个字符型变量 grade,用来让祥链分别存储输入的成绩和计算出的等级。然后,使用 scanf 函数从键盘上读入成绩,使用除法运算将成绩转化为 1~10 的整数,并将其作为 switch 语句的选择器。根据成绩范围,使用不同的 case 标号计算出等级,并将其赋值给 grade 变量。最后,使用 printf 函数输出等级。
注意,在 switch 语句中,可以宴银使用多个 case 标号来表示同一种情况,这样可以简化代码。例如,case 10 和 case 9 都表示成绩在 90 分以上的情况,因此可以将它们写在一起。另外,在 switch 语句中,必须使用 break 语句来结束每个 case 分支,否则程序将继续执行后面的 case 分支。
❿ c语言编程题目求解
#include<stdio.h>
int fun(int a)
{
int i;
for(i=2;i<=a;i++)
{
if(a%i==0)
{
break;
}
}
if(i>=a)
{
return 1;
}
else{
return 0;}
}
int main()
{
int a;
scanf("%d",&a);
if(fun(a))
{
printf("yes\n");
}
else{
printf("no\n");}
return 0;
}
第二题