c语言(3)

合集下载

用c语言写cgi程序(3)---实现文件上传

用c语言写cgi程序(3)---实现文件上传

敬告:其实当前的cgic版本已经有上传的功能了,可以看看自带的test文件用C语言编写cgi程序的话,多半会用到CGIC。

这是个非常流行的库,遇到文件上传之类的应用更是离不开它。

官方页面及下载地址为:/cgic/#obtain不少网站都有文件上传的功能,本文展示如何用CGIC库编写文件上传的服务端程序,最后给出一段简单的HTML代码,供大家测试使用。

下载: upload.c[cpp:nogutter]view plaincopyprint?#include<stdio.h>#include<string.h>#include<unistd.h>#include<fcntl.h>#include<sys/stat.h>#include"cgic.h"#define BufferLen 1024int cgiMain(void){cgiFilePtr file;int targetFile;mode_t mode;char name[128];char fileNameOnServer[64];char contentType[1024];char buffer[BufferLen];char *tmpStr=NULL;int size;int got,t;cgiHeaderContentType("text/html");//取得html页面中file元素的值,应该是文件在客户机上的路径名if (cgiFormFileName("file", name, sizeof(name)) !=cgiFormSuccess) {fprintf(stderr,"could not retrieve filename/n");goto FAIL;}cgiFormFileSize("file", &size);//取得文件类型,不过本例中并未使用cgiFormFileContentType("file", contentType, sizeof(contentType));//目前文件存在于系统临时文件夹中,通常为/tmp,通过该命令打开临时文件。

C语言第3章(谭浩强)

C语言第3章(谭浩强)
17





void main( ) { int a,b,c,d; unsigned u; a=12;b=-24;u=10; c=a+u;d=b+u; printf(“a+u=%d,b+u=%d\n”,c,d); } 运行结果:a+u=22,b+u=-14 结论:不同类型的整型数据可以进行算 术运算。
位数 16
取值范围 -215-(215-1) -32768—+32767 -32768—+32767
Short [int] Long [int]
短整型 长整型
16 32
16 16 32
Unsinged int 无符号整型 Unsinged short [int] Unsinged long [int] 无符号短整 型 无符号长整 型
8


④大写字母与小写字母意义不同, 被认为是两个不同的字符。一般变 量名用小写字母表示。 注意:常量名常用大写、变量名常 用小写!
year Day a_12 _abcdef #123 .com $100 1999Y a=b 1_2_3 +abcedfghi ∏ -5 等
9

3、变量要先定义后使用


可以改为double型) void main( ) {float x;double y; x=123456.789;y=123456.789; printf(“%f, %f”,x,y);} 结果为: 123456.789062, 123456.789000
29
§3.5
字符型数据
一、字符常量 1、在C语言中字符型常量是用单引号括 起来的一个字符。 如:’a‟、’A‟、’3‟、’?‟、’ ’、 ’$‟等。 2、以‚\”开头的转义字符,如\n不代表 字母n,而是代表换行。

《数据结构(C语言)》第3章 栈和队列

《数据结构(C语言)》第3章 栈和队列
Data structures

❖ 栈的顺序存储与操作 ❖ 1.顺序栈的定义
(1) 栈的静态分配顺序存储结构描述 ② top为整数且指向栈顶元素 当top为整数且指向栈顶元素时,栈空、入栈、栈满 及出栈的情况如图3.2所示。初始化条件为 S.top=-1。
(a) 栈空S.top==-1 (b) 元素入栈S.stack[++S.top]=e (c) 栈满S.top>=StackSize-1 (d) 元素出栈e=S.stack[S.top--]
/*栈顶指针,可以指向栈顶
元素的下一个位置或者指向栈顶元素*/
int StackSize; /*当前分配的栈可使用的以 元素为单位的最大存储容量*/
}SqStack;
/*顺序栈*/
Data structures

❖ 栈的顺序存储与操作 ❖ 1.顺序栈的定义
(2) 栈的动态分配顺序存储结构描述 ① top为指针且指向栈顶元素的下一个位置 当top为指针且指向栈顶元素的下一个位置时,栈空 、入栈、栈满及出栈的情况如图3.3所示。初始化条 件为S.top=S.base。
…,n-1,n≥0} 数据关系:R={< ai-1,ai>| ai-1,ai∈D,i=1,2
,…,n-1 } 约定an-1端为栈顶,a0端为栈底 基本操作:
(1) 初始化操作:InitStack(&S) 需要条件:栈S没有被创建过 操作结果:构建一个空的栈S (2) 销毁栈:DestroyStack(&S) 需要条件:栈S已经被创建 操作结果:清空栈S的所有值,释放栈S占用的内存空间
return 1;
}
Data structures

C语言 顺序结构(3)

C语言 顺序结构(3)

商学院
作业
P93 6, 7, 8, 9 补充: 1、求下列表达式的值: (1)x+a%3*(int)(x+y)%2/4 设x=2.5,a=7,y=4.7 (2)(float)(a+b)/2+(int)x%(int)y 设a=2,b=3,x=3.5,y=2.5 2 、 用 下 面 的 Scanf 函 数 输 入 数 据 , 使 a=10,b=20,c1=„A‟,c2=„a‟,x=1.5,y=-3.75,z=67.8, 请 问 在 键 盘 上 如何输入数据? scanf(“%5d%5d%c%c%f%f%*f,%f”, &a,&b,&c1,&c2,&x,&y,&z);
商学院
数据输出
c格式字符,用来输出一个字符 例: main() { char c=‟a‟; int i=97; printf(“%c,%d\n”,c,c); printf(“%c,%d\n”,i,i); } 结果: a,97 a,97
商学院
数据输出
用来输出一个字符串
(1)%s :输出字符串 (2)%ms : 输出的字符串占m列,若串长小于m则左补空格,若大于m则按实际 长度显示. (3)%-ms : 若串长小于m则在m列范围内字符串向左靠,右补空格. (4)%m.ns : 输出占m列,但只取字符串中左端n个字符,这n个字符输出在m列的右 侧,左补空格.若m小于n,则m自动取n值. (5)%-m.ns : 输出占m列,但只取字符串中左端n个字符,这n个字符输出在m列的左 侧,右补空格.若m小于n,则m自动取n值.
; 不能有
商学院
C语言概述
表达式语句
运算符、常量、变量等可以组成表达式,而表达式后加分号就构成表 达式语句。 例如: x=y+3;

C语言第3章(数据类型和表达式)2

C语言第3章(数据类型和表达式)2

二. 学习运算符应注意的问题

优先级
1. C语言规定了各种运算的优先级。 2. 优先级的规定符合思维习惯。 如:先乘除后加减。 3. 利用()提高程序的可读性。

结合规则
1. 运算符和运算对象的结合方向。 2. 左结合和右结合 10+2-9 ; ++-i

与运算量关系
要求运算量个数(单目/双目)和类型
(2) 强制类型转换运算:
形式: (数据类型)表达式 当需要做一些特殊的运算,必须使用强制类型转换 运算。
例1:int k=3; float x; 执行: x=1/k; 问x的值?
如何让x得到0.3333333的值? 例2:int a=3,b=4; float x=10.4,y=3.5; 表达式:(float)(a+b)/2+(int)x%(int)y的结果? [注意] (1)转换是暂时的,定义是永久的; (2)它是一个运算符, 单目运算, 优先级为2;
(2) 任何字符都可以用下面的形式表示:
\字符的ASCII值
三位八进制的表示:\ddd ; (d: 0~7); 两位十六进的表示: \xdd ; (d:0~ 9;A~ F ) 例1:字符常量 ‘A‟,还可以用: ‘\101‟ 和 ‘\x41‟ 来表示; 例2:字符常量‘0‟,可以用: ‘\x30‟,‘\060‟或‘\60‟表示 例3:字符常量‘\n‟, 还可以用: ’\012‟或‘\12‟ 和 ‘\x0A‟来表示;
单目运算符 双目运算符 三目运算符
三. 表达式
用运算符将运算对象按C的语法规则连接起 来的式子叫表达式。
例: 5 * b/c-1.5+„a‟ ;
(x+y)*(a+b)/(a-b); 12%5+sqrt(31);

C语言第3章(A-6(函数调用语句))

C语言第3章(A-6(函数调用语句))
C语言程序设计
标准输入输出函数
printf scanf 例题: 注意: main() 必须为地址,“&”是地运算符, &a指a在内的地址。 { int a ,b ,c; scanf(“%d%d%d”, &a,&b,&c ); printf(“%d,%d,%d”,a,b,c); }
C语言程序设计
标准输入输出函数
C语言程序设计
标准输入输出函数
printf
用法:
1) %f :不指定输出的宽 度,由系统自动指定, 使整数部分全部输出, 并输出6位小数。
scanf
main() { float x,y; x=1111.2222; y=2222.4444; printf(“%f”,x+y); } 结果:3333.666608
实例:
printf(“ i= %d , c= %c ” , i , c);
格式控制:是用双引号括起来的字符串,也称为 “转换控制字符串”,它包括两部分信息: 1) 格式说明:由“%”和格式字符组成,如%d,%f等。 它的作用是将输出的数据转换为指定的格式输出。 2) 普通字符:需要原样输出的字符。如双引号中的 逗号、空格和换行符。
标准输入输出函数
printf scanf
2) %ms,输出的字符串占m列,如字符串本身长度大 于m,则按实际长度输出;如串长度小于m,则左补 空格。
printf(“%3s”,”china”);
输出结果:
printf(“%6s”,”china”);
china
china
C语言程序设计
标准输入输出函数
printf(“%ld”,e);
如果用%d输出,就会发生错误,因为整型数 据的范围为-32768-32767。

江苏省计算机二级C语言试题笔试 (3)

江苏省C等级考试(四)一、选择题(本题共20道小题,共40分。

)1. (14) 指针s所指字符串的长度为char *s="\\"Name\\Address\n";A) 19 B) 15 C) 18 D)说明不合法2. 若有下面的程序片段:int a[12]={0}, *p[3], **pp, i;for(i=0; i<3; i++)p[i]=&a[i*4];pp=p;则对数组元素的错误引用是A) pp[0][1] B) a[10] C) p[3][1] D) *(*(p+2)+2)3. 若要求在if后一对圆括号中表示a不等于0的关系,则能正确表示这一关系的表达式为A) a<>0 B) !aC) a=0 D) a4. 若已定义:int a[ ]={0,1,2,3,4,5,6,7,8,9], *p=a,i;其中0≤i≤9, 则对a数组元素不正确的引用上A) a[p-a] B) *(&a[i]) C) p[i] D) a[10]5. 以下程序的输出结果是main( ){ int x=10,y=10,I;for(i=0;x>8;y=++i)printf("%d,%d ",x--,y);}A) 10 1 9 2 B) 9 8 7 6 C) 10 9 9 0 D) 10 10 9 16. 下面程序的输出是void prtv(int *x)printf("%d\n", ++*x);}main(){ int a=25;prtv(&a);}A) 23 B) 24C) 25 D) 267. 下面能正确进行字符串赋值操作的语句是A)char s[5]={"ABCDE"}; B)char s[5]={'A'、'B'、'C'、'D'、'E'};C) char *s;s="ABCDEF"; D)char *s; scanf("%s",s);8. 设x,y,z,t均为int型变量,则执行以下语句后,t的值为x=y=z=1;t=++x||++y&&++z;A)不定值B)2 C)1 D)09. 设p1和p2是指向同一个int型一维数组的指针变量,k为int型变量,则不能正确执行的语句是A)k=*p1+*p2;B)p2=k;C)p1=p2;D)k=*p1 *(*p2);10. 请读程序:#include<stdio.h>#define SUB(X,Y) (X)*Ymain(){ int a=3, b=4;printf("%d", SUB(a++, b++));}上面程序的输出结果是A) 12 B) 15C) 16 D) 2011. sizeof(float)是:A)intB)floatC)doubleD)不确定12. 若执行下面的程序时从键盘上输入3和4,则输出是main(){ int a,b,s;scanf("%d %d",&a,&b);s=a;if(a<b)s=b;s=s*s;printf("%d\n",s);}A) 14 B) 16 C) 18 D) 2013. 以下程序的输出结果是# include <stdio.h>main(){ printf("%d\n",NULL); }A) 不确定的(因变量无定义)B)0 C)-1 D)114. 请读程序:#include<stdio.h>f(char *s){ char *p=s;while( *p!='\0') p++;return(p-s);}main(){ printf("%d\n",f("ABCDEF"));}上面程序的输出结果是A) 3 B) 6 C) 8 D) 015. 下面各语句行中,能正确进行赋字符串操作的语句行是A) char st[4][5]={"ABCDE"}; B) char s[5]={'A','B','C','D','E'};C) char *s; s="ABCDE"; D) char *s; scanf("%s",s);16. 若有说明:long *p,a;则不能通过scanf语句正确给输入项读入数据的程序段是A) *p=&a;scanf("%ld",p);B) p=(long *)malloc(8);scanf("%ld",p);C) scanf("%ld",p=&a);D) scanf("%ld",&a);17. 若已定义:int a[9],*p=a;并在以后的语句中未改变p的值,不能表示a[1] 地址的表达式是A) p+1 B) a+1 C) a++ D) ++p18. 下面程序的输出是main(){ enum team {my,your=4,his,her=his+10};printf("%d %d %d %d\n",my,your,his,her);}A) 0 1 2 3 B) 0 4 0 10 C) 0 4 5 15 D) 1 4 5 1519. 以下程序输出结果是main( ){int m=5;if(m++>5)printf("%d\n",m);else printf("%d\n",m--);}A)7 B)6C)5 D)420. 以下程序运行后,输出结果是int d=1;fun(int p){int d=5;printf("%d",d);}main(){int a=3;fun(a);d+=a++;printf("%d\n",d);}A)84 B)99 C)95 D)44二、填空题(每空1分,共10分。

C语言程序设计练习三(参考答案)

《C语言程序设计》练习三(参考答案)三、阅读分析题1.请阅读分析下面程序,然后写出运行结果。

x=8,y=-5x=-5,y=82.请阅读分析下面程序,然后写出运行结果。

1 5 6 303.请阅读分析下面程序,然后写出运行结果。

#**$@@4.阅读下面程序,写出运行结果(已知A的ASCII码为65,a的ASCII码为97)。

运行结果:d,100,D,1445.阅读下面程序,并回答问题:(1)若程序运行时,输入3、2和5,则输出结果是什么?(2)写出程序所实现的功能。

答:(1)5,3,2(2)输入三个整数,按从大到小的顺序输出。

6.阅读下面程序,并回答问题:(1)程序输出结果是多少?(2)外循环执行完一次时,m和n的值分别是多少?(3)将while(n>m)n-=m;语句删除后,程序运行情况如何?答:(1)m=1(2)m=9,n=5(3)程序进入无限循环17.阅读下面程序,写出运行结果。

运行结果:7,10,9,9878.阅读下面程序,并回答问题:(1)若程序运行时,输入6和9,输出结果是什么?输出结果是:1(2)说明程序的功能。

程序功能:输入2个数存入a和b变量中,计算a2+b2存入x变量中,如果x大于100则将x整除100的值存入y中并输出y的值,否则输出a+b的值。

9.阅读下面程序,并回答问题:(1)程序输出结果是什么?输出结果:a=8(2)该程序完成什么功能?程序功能:求两个数的最大公约数(3)若将while循环替换为do-while循环,请写出相应的程序段。

#include <stdio.h>void main( ){ int u,v,a,b,t,r;u=24;v=16;if(u>v){t=u;u=v;v=t;}a=u;b=v;do{ r=b%a;b=a;a=r;}while(r!=0);printf(″b=%d\n″,b);}10.从键盘输入字符A时,写出下面程序的运行结果。

C语言上机题解答 (3)

{scanf(“%d”,&x[j]); if(x[j])>0)positive++; else if(x[j]))negative++;}
printf (”positive=%d\n”, positive); printf (”negative=%d\n”, negative); return 0;}
若三元素中的第二个下标超过数组长#43;2; if(i3>=18) i3=i3%18; a3=a[i]+a[i2]+a[i3];
若三元素中的第二个下标超过数组长 度,则以数组首元素下标替代
if(a3<min)
min=a3; } for(i=0;i<18;i++)
a3存放每一相邻三元素之和
只要有一个整除, 后面无需判断,强 迫循环结束
for(j=2;j<=k;j++)
if(x[i]%j==0)break;
if(j>k) m++; }
符合素数条件
printf(“prime number=%d\n”,m);
return 0;}
4
有18个数围成一圈,求相邻三个数之和的最小数。
int main( )
int main( )
{float a[20], sum=0,avea;
循环输入20个数
int i,n=0;
for(i=0;i<20;i++) scanf("%f", &a[i]);
20个数求和
for(i=0;i<20;i++)
sum+=a[i];
求平均值

C语言经典面试题目及答案详解(三)

C语言经典面试题目及答案详解(三)接着更新C语言面试题,希望能帮助到大家!1、变量的声明和定义有什么区别为变量分配地址和存储空间的称为定义,不分配地址的称为声明。

一个变量可以在多个地方声明,但是只在一个地方定义。

加入 extern 修饰的是变量的声明,说明此变量将在文件以外或在文件后面部分定义。

说明:很多时候一个变量,只是声明不分配内存空间,直到具体使用时才初始化,分配内存空间,如外部变量。

2、写出 bool 、int、 float、指针变量与“零值”比较的if 语句bool 型数据: if( flag ) {A; } else {B; } int 型数据: if( 0 != flag ) {A; } else {B; }指针型数: if( NULL == flag ) {A; } else {B; } float 型数据: if ( ( flag >= NORM ) && ( flag <= NORM ) ) {A; }注意:应特别注意在 int、指针型变量和“零值”比较的时候,把“零值”放在左边,这样当把“==”误写成“=”时,编译器可以报错,否则这种逻辑错误不容易发现,并且可能导致很严重的后果。

3、sizeof 和 strlen 的区别sizeof 和 strlen 有以下区别:1. sizeof 是一个操作符,strlen 是库函数。

2. sizeof 的参数可以是数据的类型,也可以是变量,而strlen 只能以结尾为‘\0‘的字符串作参数。

3. 编译器在编译时就计算出了 sizeof 的结果。

而 strlen 函数必须在运行时才能计算出来。

并且 sizeof 计算的是数据类型占内存的大小,而 strlen 计算的是字符串实际的长度。

4. 数组做 sizeof 的参数不退化,传递给 strlen 就退化为指针了。

注意:有些是操作符看起来像是函数,而有些函数名看起来又像操作符,这类容易混淆的名称一定要加以区分,否则遇到数组名这类特殊数据类型作参数时就很容易出错。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1、c语言程序是由()组成的。

2、c语言中的标志符只能有(、、)组成,且第一个字符只能是()。

3、若有定义int a=10,b=9,c=8;执行下列语句后,变量中b的值是()。

C=(a-=(b-5));
C=(a%11)+(b=3);
4、若有int i=-19,j=i%4;printf(“%d”,j);结果为()。

………….19……………………………….()。

…………..-19,j=i/4;………………………( )。

……………19,………………………………( )。

5、若有int x=12,n=5;则x%=(n%=2);后x的值是()。

合法的c语言字符常量是
选择题
1、设x为int型变量,则执行下面语句后,x的值为()。

x=10;x+=x-=x-x;
A10 B20 C40 D30
2、设有定义int k=0;则以下四个表达式中与其它三个的值不同的是()。

Ak++ Bk+=1 C++k Dk+1
1、int x,y;scanf(“%d,%d”,&x,&y);
要使x 得11,y得12,则以下输入形式错误的是
A11□12 ↙B11,12 ↙
C11, □12 ↙D11, ↙ 12 ↙
2、char c1,c2,c3,c4,c5,c6;
Scanf(“%c%c%c%c”,&c1,&c2,&c3,&c4);
C5=getchar();c6=getchar();putchar(c1);putchar(c2);
Printf(“%c □%c □\n”,c5,c6);
输入为123 ↙
45678 ↙则输出为
A1267
1、能正确表示a>=10或a<=0的关系表达式为
2、设a=1,b=2,c=3,d=4,m=2,n=2,则执行表达式(m=a>b)&&(n=c>d)后,n=( )
3、若有定义float x=1.5;int a=1,b=3,c=2;则正确的switch语句是()
A switch (x) {
case 1.0:printf(*“\n”) ;
case 2.0:printf(“**\n”);
}
B switch((int)x);
{case 1:printf(“*\n”);
case 2:printf(“**\n”);
}
C switch(a+b)
{case 1: printf(“*\n”);
c ase 2+1: printf(“**\n”);
}
D switch(a+b){
case 1: printf(“*\n”);
case c: printf(“**\n”);
}
2、一下程序段的输出结果是()
char str[12]={…s‟,‟t‟,‟d‟,‟i‟,‟o‟};
printf(“%d\n”,strlen(str));
1有如下函数调用语句Func(rec1,rec2+rex3,(rec4,rec5));则函数调用中包含几个参数?
1、若定义int a=511,*b=&a; 则printf(“%d”,*b);的结果是()
2、执行下列程序段后,pirntf(“%c”,*(p+3))的结果是()char str[]=”hello”;
char *p;p=str;
3、有如下程序main(){
char s[]=”abcd”,*p;
for(p=s+1;*p!=‟\0‟;p++)
printf(“%s\n”,p);}输出结果是()
4、有以下程序main(){
int a[]={1,2,3,4,5,6},*p;
p=a;*(p+3)=2;
printf(“%d,%d\n”,*p,*(p+3))}结果是()。

相关文档
最新文档