西北农林科技大学C语言上机实习答案
大学大一c语言程序设计实验室上机题全部代码答案(实验报告)
大学大一c语言程序设计实验室上机题全部代码答案(实验报告)大学大一C语言程序设计实验室上机题全部代码答案(实验报告)实验目的:本实验旨在让大一学生通过实际操作掌握C语言的基本语法和常见程序设计题型,提高编程能力。
实验要求:1. 学生需要在实验室中完成上机题,并编写相应的代码。
2. 要求代码具有良好的结构和规范,能够正确运行,并符合题目要求。
3. 学生需要记录代码的思路和过程,并在实验报告中进行详细说明。
实验过程:本次实验共包括以下几个上机题,分别是:1. 题目:输入两个整数,计算它们的和。
实现思路:- 首先,定义两个整型变量a和b,用来保存输入的两个整数。
- 然后,使用scanf函数分别读取两个整数的值。
- 接下来,定义一个整型变量sum,用来保存两个整数的和。
- 使用sum = a + b计算两个整数的和。
- 最后,使用printf函数将结果输出到屏幕上。
2. 题目:输入一个整数n,计算1到n之间所有整数的和。
实现思路:- 首先,定义一个整型变量n,用来保存输入的整数。
- 然后,使用scanf函数读取整数n的值。
- 接下来,定义一个整型变量sum,用来保存1到n之间所有整数的和。
- 使用for循环语句,从1循环到n,累加每个整数的值。
- 最后,使用printf函数将结果输出到屏幕上。
3. 题目:输入一个整数n,判断它是否是质数。
实现思路:- 首先,定义一个整型变量n,用来保存输入的整数。
- 然后,使用scanf函数读取整数n的值。
- 接下来,定义一个布尔型变量isPrime,用来保存n是否是质数的判断结果。
- 使用for循环语句,从2循环到n-1,判断n是否能被其中任意一个整数整除。
- 如果n能被任意一个整数整除,则将isPrime设为假;否则,将isPrime设为真。
- 最后,根据isPrime的值,使用printf函数输出相应的判断结果。
4. 题目:输入一个正整数n,输出n的所有因子。
实现思路:- 首先,定义一个整型变量n,用来保存输入的正整数。
大学c语言实践考试题及答案
大学c语言实践考试题及答案一、选择题(每题2分,共20分)1. C语言中,用于定义一个整型变量的关键字是:A. intB. floatC. doubleD. char答案:A2. 下列哪个选项是C语言中的合法标识符?A. 2variableB. variable2C. -variableD. variable$答案:B3. 在C语言中,以下哪个是正确的字符串字面量?A. "Hello World"B. 'Hello World'C. "Hello World'D. 'Hello World'答案:A4. C语言中,以下哪个运算符用于逻辑与操作?A. &&B. ||C. !D. ~答案:A5. 下列哪个函数用于计算两个数的和?A. max()B. pow()C. sqrt()D. sum()答案:D6. 在C语言中,以下哪个关键字用于定义函数?A. intB. voidC. structD. function答案:B7. C语言中,以下哪个选项是正确的二维数组声明?A. int array[3][4];B. int array[3,4];C. int array(3)(4);D. int array[3 4];答案:A8. 下列哪个选项是C语言中正确的条件语句?A. if x > 0 then y = x;B. if x > 0 { y = x; }C. if x > 0 y = x;D. if (x > 0) y = x;答案:D9. 在C语言中,以下哪个选项是正确的无限循环?A. for(;;)B. while(1)C. do {} while(1)D. All of the above答案:D10. 下列哪个选项是C语言中正确的函数声明?A. int function();B. function int();C. int function int();D. int function(int x);答案:D二、填空题(每空2分,共20分)1. 在C语言中,使用________关键字可以定义一个指针变量。
西北农林科技大学c语言上机实习4答案 (1)
实习四答案1、字符串连接/* exer 4-1 两串字符连接*/由键盘任意输入两串字符,不用库函数strcat,连接将两串字符。
输入:两串字符输出:连接将两串字符输入样例:abc def 输出样例:abcdef#include<stdio.h>#include<string.h>void main(void){unsigned int i,j;char soustr[80],desstr[80];//printf("please enter soustr:");gets(soustr); /* 输入原串*///printf("please enter desstr:");gets(desstr); /* 输入目的串*/i = strlen(soustr); /* 取目的串尾部位置*/for(j=0; j<=strlen(soustr); j++,i++){soustr[i] = desstr[j]; /* 将原串依次接入目的串尾部*/}puts(soustr);}2、简单加密程序/* exer 4-2 字符加密*/由键盘任意输入一串字符,对其进行加密,加密原则为:如果为字母,将其循环右移2个字母,其他字符保持不变。
输入:一串字符输出:加密后的字符串输入样例:abl2CDxyz输出样例:cdl2EFzab提示: 1. 可用gets()和puts()输入输出字符串。
2. 利用ASCII码运算进行加密。
3. 循环右移的含义是:将a-z,A-Z各看成一个环进行移动,即y右移2个字母后为a,z右移2个字母后为b;Y右移2个字母后为A,Z右移2个字母后为B。
#include<stdio.h>#include<string.h>void main(void){unsigned int j;char soustr[80],secstr[80];//printf("please enter soustr:");gets(soustr); /* 输入原串*/for(j=0; j<=strlen(soustr); j++){if(soustr[j]>='A' && soustr[j]<='Z' )secstr[j] = (soustr[j]-'A'+2)%26+'A'; /*计算大写字母密文*/else if(soustr[j]>='a' && soustr[j]<='z' )secstr[j] = (soustr[j]-'a'+2)%26+'a'; /*计算小写字母密文*/elsesecstr[j] = soustr[j]; /* 其它字符不变*/}puts(secstr);}3、矩阵对角线元素求和/* exer 4-3 主和辅对角线上元素之和*/输入一个5×5的数组,分别求其主对角线和辅对角线上元素之和。
大一c语言上机考试题及答案
大一c语言上机考试题及答案一、选择题(每题2分,共20分)1. 下列哪个选项是C语言中的合法变量名?A. 2variableB. variable2C. variable_2D. variable-2答案:C2. C语言中,哪个关键字用于声明一个函数?A. defineB. functionC. defD. void答案:D3. C语言中,哪个运算符用于取模运算?A. %B. /C. *D. -答案:A4. 下列哪个选项是C语言中正确的字符串定义?A. char str[] = "Moonshot";B. char str[] = {"Moonshot"};C. char str[] = 'Moonshot';D. char str[] = "Moonshot'';答案:A5. 在C语言中,以下哪个选项表示逻辑与运算?A. &&B. ||C. ==D. =答案:A二、填空题(每题2分,共20分)1. 在C语言中,定义一个整型变量的正确语法是:int _______;。
答案:变量名2. 在C语言中,使用________运算符可以将字符串连接起来。
答案:+3. C语言中,________关键字用于定义一个结构体。
答案:struct4. 使用________函数可以输出格式化的字符串。
答案:printf5. C语言中,________函数用于计算字符串的长度。
答案:strlen三、编程题(每题10分,共60分)1. 编写一个C语言程序,计算并输出100以内所有奇数的和。
答案:```c#include <stdio.h>int main() {int sum = 0;for (int i = 1; i < 100; i += 2) {sum += i;}printf("Sum of odd numbers from 1 to 99 is: %d\n", sum); return 0;}```2. 编写一个C语言程序,实现字符串反转。
西北农林科技大学C语言上机题答案
}
else
printf("这3个数无法组成三角形!");
}
#include <stdio.h>
#include <math.h>
void main()
{
float a,b,c,p,s;
scanf("%f%f%f",&a,&b,&c);
{
float a,b,h,c,j,s;
scanf("%f%f",&a,&b);
h=a+b;
c=a-b;
j=a*b;
s=a/b;
printf("和=%f,差=%f,积=%f,商=%f\n",h,c,j,s);
}
printf("%d\n",x);
}
3.一天一只猴子摘下一堆桃子,吃了一半觉得不过瘾,有多吃了一个,第二天接着吃了前一天剩
下的一半,再多吃了一个,以后每天如此,知道滴n天,只剩下一个桃子,问猴子一共摘了多少桃子?
#include<stdio.h>
void main()
{
int n,x=1,i;
与输入输出有关的语句。
#include <stdio.h>
void main()
{
float mark;
scanf("%f",&mark);
if(mark<60)
printf("Fail\n");
大一C语言上机实验试题及答案
/*如果长、宽、高相等,则为立方体*/
printf(“该箱子是立方体。”);
else
printf(“该箱子是长方体。”);
}
2、#include <stdio.h>
void main( )
{ int year,month,days;
printf(“Please enter year and month:\n”);
五、实验调试记录:
六、参考答案: 1、#include <stdio.h> #define PI 3.14 void main( ) { float r1,r2; double s1,s2,s; printf(“Please enter r1,r2:\n”); scanf(“%f%f”,&r1,&r2); s2=r2*r2*PI; s1=r1*r1*PI; s=s2-s1; printf(“s=%lf\n”,s); } 2、#include <stdio.h> void main( ) { float h,c; printf(“请输入华氏温度:”);
scanf(“%d%d%d%d”,&a,&b,&c,&d); if(a>b) { t=a; a=b; b=t; } if(a>c) { t=a; a=c; c=t; } if(a>d) { t=a; a=d; d=t; } if(b>c) { t=b; b=c; c=t; } if(b>d) { t=b; b=d; d=t; } if(c>d) { t=c; c=d; d=t; } printf(“排序结果如下:\n”); printf(“%d,%d,%d,%d\n”,a,b,c,d); }
C语言上机练习汇总及答案
1)10002 显示Hello World! ........................................................................... 错误!未定义书签。
2)10003 显示What is a computer? .............................................................. 错误!未定义书签。
3)10004 显示图形(字符图案输出)......................................................... 错误!未定义书签。
4)10005 显示Welcome to You!(调试示例error01_1) ........................... 错误!未定义书签。
5)10006 显示"Programming in C is fun!" .................................................. 错误!未定义书签。
6)10007 显示图案(字符图案输出)....................................................... 错误!未定义书签。
7)20011 求华氏温度100°F对应的摄氏温度。
........................................... 错误!未定义书签。
8)20012 求华氏温度150°F 对应的摄氏温度。
......................................... 错误!未定义书签。
9)20013 求摄氏温度26°C对应的华氏温度。
............................................ 错误!未定义书签。
c语言第1次实验答案.docx
11〜12 (—)C程序设计实验1.1实验目的1.通过运行简单的c程序,初步了解c程序的特点。
2.掌握和理解木实验屮岀现的一些最基木的C语句。
3.学习编制简单的C程序。
导航:顺序程序设计体验选择结构程序设计循环结构程序设计1.2在Visual C++6.0编程环境下的工作流程第1步:进入Visual C++环境后,打开“文件”菜单,执行“新建”命令。
第2步:在“新建”对话框中选择“文件”选项卡,然后选择C++ Source File选项。
第3步:在右边的目录文本框中输入准备编辑的源程序文件的存储路径,在文件文本框屮输入准备编辑的C源程序文件名(如:syl」.c)。
注意后缀是.c。
然后按【确定】按钮。
第4步:在光标闪烁的程序编辑窗口输入上面C程序(注意:/* */之间的内容为程序注释部分,不执行),程序输入完毕单击“文件” 一“保存”,或单击工具栏上的保存按钮,也可以用<Ctrl+S>快捷键來保存文件。
第5步:选择菜单“编译” 一“编译”命令,或单击工具栏上的“编译”图标,也可以按<Ctrl+F7>键,开始编译。
观察调试信息窗口输出编译的信息,如杲有错,则修改后再编译,直至编译信息为:Ocrror(s)表示编译成功。
第6步:单击<F7>键或工具栏图标幽,生成应用程序的.EXE文件(如syl_l.exe)。
第7步:运行程序观察结果。
选择菜单“编译” 一“执行”,或单击工具栏上的执行图标!,也可以使用<Ctrl+F5>快捷键。
第8步:关闭程序工作区1.3实验内容1)[问题]编辑、运行一个简单的C程序。
保存文件为syl-l.Co[代码]# include <stdio.h> main()int a,b,sum,m,f; /*定义整型变量a, b,sum, m, f*/float d; /*定义实型变量d*/printf("Please Input a,b \n ”); /*输出语句*/ scanf(”%d%d”,&a,&b);/*输入语句由键盘输入两个数分别赋予a和b*/sum=a+b; /*赋值语句*/m=a-b;f=a*b;d=a/2.0;printf(”%d + %d=%d\n',,a,b,sum); /* 输出语句 */printf(n%d - %d=%d\n n,a,b,m); printf(M%d * %d=%d\n M,a,b,f); printf(n%d/ %d=%f\n H,a,2,d);2)若有定义int x,a,b,c;,写出顺序执行下列表达式后x的值,然后通过程序验证。
大一C语言上机实验试题及答案
大一C语言上机实验试题及答案一、选择题(每题2分,共10分)1. C语言中,用来定义变量的关键字是()。
A. varB. defineC. intD. let答案:C2. 下列哪个选项不是C语言中的运算符?A. %B. &&C. =D. :答案:D3. 在C语言中,用于定义一个函数的关键字是()。
A. functionB. defC. intD. void答案:A4. 下列哪个选项是正确的C语言数组定义?A. int arr[] = {1, 2, 3};B. int arr[3] = {1, 2, 3};C. int arr[3] = {1, 2};D. int arr = {1, 2, 3};答案:B5. C语言中,用于输出字符串的函数是()。
A. printfB. printC. coutD. printf_s答案:A二、填空题(每题3分,共15分)1. 在C语言中,用于声明一个整型变量的关键字是____。
答案:int2. 以下代码段的输出结果是____。
```c#include <stdio.h>int main() {int a = 10;printf("%d", a++);return 0;}```答案:103. 在C语言中,用于声明一个浮点型变量的关键字是____。
答案:float4. 若有以下代码段:```cint x = 5, y = 3;int result = x / y;```则变量result的值是____。
答案:15. 在C语言中,用于声明一个字符型变量的关键字是____。
答案:char三、编程题(每题10分,共20分)1. 编写一个C语言程序,实现输入两个整数,输出它们的和。
```c#include <stdio.h>int main() {int num1, num2, sum;printf("请输入两个整数:");scanf("%d %d", &num1, &num2);sum = num1 + num2;printf("它们的和是:%d\n", sum);return 0;}```2. 编写一个C语言程序,实现输入一个字符串,然后输出其反转后的字符串。
大一c语言上机考试题及答案6
大一c语言上机考试题及答案6大一C语言上机考试题及答案6一、选择题(每题2分,共10分)1. 下列哪个选项是C语言中的关键字?A. intB. floatC. stringD. char答案:A2. 在C语言中,用于声明一个整型变量的关键字是:A. intB. floatC. doubleD. char答案:A3. 下列哪个选项不是C语言中的运算符?A. %B. &&C. ==D. ||答案:C4. 在C语言中,用于定义一个函数的关键字是:A. functionB. defC. voidD. int答案:C5. 下列关于C语言数组的描述,错误的是:A. 数组的下标从0开始B. 数组可以存储不同类型的数据C. 数组的大小在定义时确定D. 数组可以作为函数的参数答案:B二、填空题(每题2分,共10分)1. 在C语言中,表示逻辑与的运算符是______。
答案:&&2. C语言中,用于表示字符常量的是______。
答案:'3. 在C语言中,用于定义一个指针变量的关键字是______。
答案:*4. C语言中,用于声明一个浮点型变量的关键字是______。
答案:float5. C语言中,用于输入输出的库函数是______。
答案:stdio.h三、编程题(共30分)1. 编写一个C语言程序,计算并输出100以内所有偶数的和。
(10分)```c#include <stdio.h>int main() {int sum = 0;for (int i = 1; i <= 100; i++) {if (i % 2 == 0) {sum += i;}}printf("100以内所有偶数的和为:%d\n", sum);return 0;}```2. 编写一个C语言程序,实现字符串的反转。
(10分)```c#include <stdio.h>#include <string.h>void reverse(char *str) {int len = strlen(str);for (int i = 0; i < len / 2; i++) {char temp = str[i];str[i] = str[len - i - 1];str[len - i - 1] = temp;}}int main() {char str[] = "Hello World!";reverse(str);printf("反转后的字符串为:%s\n", str);return 0;}```3. 编写一个C语言程序,实现计算一个整数的阶乘。
西北农林科技大学c语言上机实习7答案
西北农林科技大学c语言上机实习7答案实习七答案1、电话薄管理程序设计/* exer 7-1 手机电话簿管理*/#include#include#includeint N=0; /* 定义全局变量,代表电话簿长度*/ struct stud /* 定义结构类型*/ {char name[15];char phone_num[15];char mobile_num[15];} book[100]; /* 定义结构数组*/void creat( ); /* 函数的原型声明*/ void insert( );void search( );void delete( );void output( );int main(void) /* 主函数*/{int k;do{printf(" 0: exit\n"); /* 打印菜单项*/printf(" 1: creat\n");printf(" 2: search\n");printf(" 3: insert\n");printf(" 4: delete\n");printf(" 5: output\n");printf("please select:");scanf("%d",&k); /* 输入选择项*/ switch(k){case 0:exit(0); /* 退出函数*/case 1:creat( );break;case 2:search( );break;case 3:insert( );break;case 4:delete( );break;case 5:output( );break; /* 调用子函数*/ default:exit(0);}}while(1);return 0;}void creat(void) /* 生成子函数*/ {char appella[15];getchar();while(1) /* 输入结构数组*/{gets(appella);if(*appella=='*') break; /* 输入*,则结束*/strcpy(book[N].name, appella);gets(book[N].phone_num);gets(book[N].mobile_num);N++; /* 统计长度*/ }}void search(void) /*查找子函数*/{char appella[15];int i=0;getchar();gets(appella);while(i{i++;}if(i<n)< p="">printf("%s %s %s\n",book[i].name,book[i].phone_num,book[i].mobile_num); elseprintf("not found");}void insert(void) /* 插入子函数*/{getchar();gets(book[N].name);gets(book[N].phone_num);gets(book[N].mobile_num);N++; /* 长度加1 */}void delete(void) /*删除子函数*/{char appella[15];int i=0,j;getchar();gets(appella);while(i{i++;}if(i<n)< p="">{for(j=i+1; j<="" p="">{book[j-1] = book[j];}N--; /* 长度减1 */ }elseprintf("not found");}void output(void) /* 输出子函数*/{int i;for(i=0; i<="" p="">printf("%s %s %s\n",book[i].name,book[i].phone_num,book[i].mobile_num); }2、正负数判断/* exer 8-1 判断数是正数、负数*/#includeint main(void){short num,mask,bit;mask = 0x8000; /* 构造掩码*/scanf("%hx",&num); /* 输入数据*/bit = (mask & num)?1:0; /* 取出第一位*/if(bit == 0)printf("is positive number\n"); /* 输出正数*/ else printf("is negative number\n"); /* 输出负数*/ return 0; }3、偶数位清零/* exer 8-3 将偶数位清零,其它位保留*/#includeint main(void){unsigned short a,b,mask;mask = 0x5555; /* 构造掩码*/scanf("%hx",&a); /* 输入数据a */b = a & mask; /* 与掩码按位与*/printf("%x\n",b); /* 输出*/return 0;}4、结构体的定义与引用#include/*定义结构体*/struct employee{char name[100];char ID[20];int age;float salary;};int main(){/*定义结构体变量*/struct employee staff;/*输入数据*/gets(/doc/d2*******.html,); gets(staff.ID);scanf("%d", &staff.age);scanf("%f", &staff.salary);/*输出数据*/puts(/doc/d2*******.html,); puts(staff.ID);printf("%d\n", staff.age);printf("%.2f\n", staff.salary);return 0;}5、结构体数组的定义与引用#include/*定义结构体*/struct employee{char name[100];char ID[20];int age;float salary;};int main(){int i = 0;float MaxSalary = 0.0f;/*定义结构体变量*/struct employee staff[5];/*输入数据*/for(i = 0; i < 5; i++){scanf("%s", staff[i].name); scanf("%s", staff[i].ID); scanf("%d", &staff[i].age); scanf("%f", &staff[i].salary); }MaxSalary = staff[0].salary; for(i = 1; i < 5; i++){if(staff[i].salary > MaxSalary) MaxSalary = staff[i].salary; }printf("%.2f\n", MaxSalary); return 0;}</n)<></n)<>。
西北农林科技大学历年C语言上机考试题
西北农林科技大学本科课程考试试题(卷)2014—2015学年《C语言程序设计》期末考试编程题专业班级:命题教师:集体命题审题教师:学生姓名:学号:考试成绩:一、计算n个数倒数之和描述:编写程序计算(1+1/2+1/3+1/4+…+1/n)的结果,其中变量n从键盘输入,要求n是大于0的整数。
输入:n输出:公式(1+1/2+1/3+1/4+…+1/n)的计算结果。
输入样例:10输出样例:sum=2.928968提示:结果输出,请使用代码:printf("sum=%lf",sum);示例代码:#include <stdio.h>int main( ){int i=1, n;do{scanf("%d",&n);}while(n<0);double sum=0;while (i<=n){sum+=1.0/i;i++;}printf("sum=%lf",sum);return 0;}测试用例:二、数组排序描述:从键盘上输入6个整型数,利用函数指针实现这6个整型数的升序和降序排列,并输出排序后的结果,要求使用函数调用、函数指针以及数组编程实现。
提示:1、实现“大于”函数,该函数比较两个整型数的大小,并返回x > y的值,要求函数原型为:int greater(int x, int y)。
2、实现“小于”函数,该函数比较两个整型数的大小,并返回x < y的值,要求函数原其函数原型为:int lessthan(int x, int y)。
3、实现排序函数,排序函数依据传入的函数不同,实现整型数组的降序或者升序排序,要求函数原型为:void sort(int a[], int n, int (*comp)(int, int))。
注意:指定的.................................3.个函数原型不能有任何改动,包括其函数名称及形参列表等。
北理c语言上机答案(全)
1 Hello world让我们用C语言向世界问好。
最早的程序基本是这个样子的:程序一:#include <>void main(){printf("Hello world.\n"); }程序二:#include <>int main(){printf("Hello world.\n");return 0;}上面的程序你任意模仿一个,看看是否可以通过如果你能通过这个简单的程序,那就让我们继续完成后面的习题吧。
输入:无输出:Hello world.程序实例1:#include<>void main(){printf("Hello world.\n");}结果:Hello world.程序实例2:#include <>int main(){printf("Hello world.\n");return 0;}结果:Hello world.1. Welcome to Beijing.让我们来练习如何显示多行文字。
输入:无输出:就是下面的那段文字。
程序实例1:#include""int main(){printf("Welcome\n");printf("to\n");printf("Beijing.\n");return 0;}结果:WelcometoBeijing.程序实例2:#include<>void main(){printf("Welcome\nto\nBeijing.\n");}结果:WelcometoBeijing.1练习最简单的printf和scanfprintf函数和scanf函数是C语言中最常用的函数之一,下面让我们练习一下吧。
输入:整型变量x的值。
大学大一c语言程序设计实验室上机题全部代码答案(实验报告)
大学大一c语言程序设计实验室上机题全部代码答案(实验报告)C语言实验报告实验1-1:hello world程序:源代码:#includemain(){printf("hello world!\n");system("pause");}实验1-2:完成3个数据的输入、求和并输出计算结果的程序:源代码:#includemain(){int i,j,k,sum;scanf("%d%d%d",&i,&j,&k);sum=i+j+k;printf("sum=%d",sum);system("pause");实验1-3:在屏幕上输出如下图形:ABBBCCCCC源代码:#includemain(){printf(" A\n");printf(" BBB\n");printf(" CCCCC\n");system("pause");}实验2-1:计算由键盘输入的任何两个双精度数据的平均值源代码:#includemain(){double a,b;scanf("%lf%lf",&a,&b);printf("%.1lf\n",(a+b)/2);system("pause");}实验2-2:写一个输入7个数据的程序,把输入的数据代入a + b * (c – d ) / e * f – g 表达式进行运算源代码:#includemain(){float a,b,c,d,e,f,g,x;scanf("%f%f%f%f%f%f%f",&a,&b,&c,&d,&e,&f,&g);x=a + b * (c - d ) / e * f - g;printf("x=%f",x);system("pause");}实验2-3:编写一个C语言程序,测试下列各表达式:i, ji + 1 , j + 1i++ , j++++i , ++ji+++++j源代码:#includemain(){int i=1,j=1;printf("%d %d\n",i+1,j+1);printf("%d %d\n",i++,j++);printf("%d %d\n",++i,++j);printf("%d\n",(i++)+(++j));system("pause");}实验2-4:输入存款金额money,存期year和年利率rate,根据下列公式计算存款到期时的利息interest(税前),输出时保留2位小数。
西北农林科技大学C++实习代码
cout<<"内存分配失败!"<<endl; exit(0); } cin>>q->id>>q->name>>q->xingbie>>q->age; q->next=NULL; p->next=q; p=p->next; } p=L->next; cin>>age;//输入年龄 p=L; while (p->next!=NULL) { if(p->next->next!=NULL&&p->next->age==age)//删除节点 { q=p->next; p->next=p->next->next; delete q; count++; } else if(p->next->next==NULL&&p->next->age==age) { q=p->next; p->next=NULL; delete q; count++; } p=p->next; } if(count==0)//如果没有相同的年龄,追加 { q=new student; if(q==NULL) { cout<<"内存分配失败!"<<endl; exit(0); } q->id=180; q->name="aaa"; q->xingbie="male"; q->age=age; q->next=NULL; p->next=q; }
cout<<i<<" "<<j_temp<<" "<<min<<endl; time++; } } if(time==0) { cout<<"Not found!"<<endl; } //释放空间 for (int i=0;i<n1;i++) { delete [] p1[i]; } delete [] p1; return 0; } 标题: 时 限: 内存限制: 总时限: 4、链表操作 3000 ms 10000 K 3000 ms 建立一个链表,每个节点包括学生的学号、姓名、性别、年龄。先输入 5 个学生的数据,再输入一个年龄,如果链表中有年龄等于此年龄的记录,则删 除所有年龄等于此年龄的记录,否则在链表的最后增加一个新节点,学号 为 180 姓名为"aaa",性别为"male"。 。 创建链表时输入 5 个职工的职工号和工资, 学号为大于 100 且小于 200 的 整数,姓名为长度小于 20 的字符串,性别为长度小于 10 的字符串,年龄为大 于等于 0 且小于 200 的整数。 按顺序输出链表中的所有数据,每个数据占一行。 101 zhangsan male 30 103 lisi female 18 105 wangwu male 25 107 maliu male 28 109 niuqi female 22 28 101 zhangsan male 30 103 lisi female 18
西北农林科技大学编译原理实验一
实验一:词法分析一,实验目的根据活动状态转换图,设计并实现一个具体的C语言的词法分析程序,加深对词法分析原理的理解。
并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。
编写一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。
并依次输出各个单词的内部编码及单词符号自身值。
(遇到错误时可显示“Error”,然后跳过错误部分继续显示)。
二,活动状态转化图三,设计思路自文件开头进行扫描,遇到空格时暂时停止扫描,把此时形成的单词与符号表中的单词进行比较,若有相同的,则以要求的格式输出,若没有与之相符的则可定义为2类标识符。
四,函数解释核心函数有main() 主函数,负责调用analyze()函数,以及文件的读写关闭等操作;analyze(char **k,char **CODE,identifier *id,constnumber *con,FILE *fp,FILE *fw) 确定单词种类函数,通过状态转换图,可确定出该单词的种类,第一个参数引入了保留字数组,第二个参数引入了字符数组,以及两个结构体指针,和两个文件指针;returntofile(int num,int val,identifier *id,constnumber *con) 写入文件函数,num表示单词的种别;辅助型函数有error() 显示错误函数,在用户程序段不符合c语言词法规则时,调用显示错误函数;strtonumber() 把token中的字符串转换成数字;constant(constnumber *con) 把单词的信息存放在con结构体中;getNextchar (FILE *ifp) 从文件中读取一个字符;getnbc(FILE *ifp) 当当前读取的字符为空格或者回车的话,直接读取下一字符;concat() 把已经读入的字符串拷贝到token数组中;letter() 判断是否为字母;digit() 判断是否为数字;retract(FILE *ifp) 回退一个字符,并且令character为空;reserve(char **k) 比较token字符数组中的单词是否与k数组中的某个单词一致;symbol(identifier * id)五,实验运行截图测试用例1:File1测试用例2:File1六,实验体会做完这次试验我觉得编译原理这门课真的只学好书本上的知识根本不够,即使对书上的内容理解的很到位,当真的要下手编代码的时候才发现根本不知道从哪里下手,好在自己后来独立的写出的一部分代码,在同学和百度的帮助下,写完了整个代码,但是在symbol函数处不是很理解,还有strtonumber()函数和numbertostr()函数,本来想debug看看程序执行的流程。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实习四答案1、字符串连接/* exer 4-1 两串字符连接*/由键盘任意输入两串字符,不用库函数strcat,连接将两串字符。
输入:两串字符输出:连接将两串字符输入样例:abc def 输出样例:abcdef#include<stdio.h>#include<string.h>void main(void){unsigned int i,j;char soustr[80],desstr[80];//printf("please enter soustr:");gets(soustr); /* 输入原串*///printf("please enter desstr:");gets(desstr); /* 输入目的串*/i = strlen(soustr); /* 取目的串尾部位置*/for(j=0; j<=strlen(soustr); j++,i++){soustr[i] = desstr[j]; /* 将原串依次接入目的串尾部*/}puts(soustr);}2、简单加密程序/* exer 4-2 字符加密*/由键盘任意输入一串字符,对其进行加密,加密原则为:如果为字母,将其循环右移2个字母,其他字符保持不变。
输入:一串字符输出:加密后的字符串输入样例:abl2CDxyz输出样例:cdl2EFzab提示: 1. 可用gets()和puts()输入输出字符串。
2. 利用ASCII码运算进行加密。
3. 循环右移的含义是:将a-z,A-Z各看成一个环进行移动,即y右移2个字母后为a,z右移2个字母后为b;Y右移2个字母后为A,Z右移2个字母后为B。
#include<stdio.h>#include<string.h>void main(void){unsigned int j;char soustr[80],secstr[80];//printf("please enter soustr:");gets(soustr); /* 输入原串*/for(j=0; j<=strlen(soustr); j++){if(soustr[j]>='A' && soustr[j]<='Z' )secstr[j] = (soustr[j]-'A'+2)%26+'A'; /*计算大写字母密文*/else if(soustr[j]>='a' && soustr[j]<='z' )secstr[j] = (soustr[j]-'a'+2)%26+'a'; /*计算小写字母密文*/elsesecstr[j] = soustr[j]; /* 其它字符不变*/}puts(secstr);}3、矩阵对角线元素求和/* exer 4-3 主和辅对角线上元素之和*/输入一个5×5的数组,分别求其主对角线和辅对角线上元素之和。
输入:5×5的数组输出:主对角线和辅对角线上元素之和输入样例:1 2 3 4 56 7 8 9 1011 12 13 14 1516 17 18 19 2021 22 23 24 25输出样例:65 65主对角线为从矩阵的左上角至右下角的连线,在数组中即指行列下标相同的元素,辅对角线为从矩阵的右上角至左下角的连线,这些元素的下标之间也可用相应的表达式表达。
#include<stdio.h>#include<string.h>void main(void){int i,j;int a[5][5];int sum1=0,sum2=0;//printf("please enter soustr:");for(i=0; i<5; i++)for(j=0; j<5; j++)scanf("%d",&a[i][j]); /* 输入数组*/for(i=0; i<5; i++){sum1 = sum1+a[i][i]; /* 主对角线*/sum2 = sum2+a[i][4-i]; /* 辅对角线*/}printf("%d %d\n",sum1,sum2);}4、数据顺序调整/* exer 4-4 将最大数调到最前面,最小数调到最后面*/由键盘任意输入10个数,将最大数调到最前面,最小数调到最后面。
输入:任意10个数输出:数据调整后的10个数。
输入样例:0 1 2 3 4 5 6 7 8 9 输出样例:9 1 2 3 4 5 6 7 8 0提示:①定义四个变量d1、d2、x1、x2,分别存放最大数、最小数及它们的位置;②在循环开始前,将第一个元素作为参考,将其值分别存入d1、x1,将其下标分别存入d2、x2;③在循环中将其它元素逐一与d1比较,若比d1大,将其存入d1,并将其下标存入d2;否则将其与x1比较,若比x1小,将其存入x1,并将其下标存入x2;④结束循环后,将d2所示位置的数与第一个数交换,将x2所示位置的数与最后一个数交换,然后输出数组所有元素即可。
#include<stdio.h>#include<string.h>void main(void){int i,a[10],temp;int kmax=0,kmin=0;//printf("please enter :");for(i=0; i<10; i++) /* 输入数组*/scanf("%d",&a[i]);for(i=0; i<10; i++){if(a[i]>a[kmax])kmax = i; /* 找最大数位置*/else if(a[i]<a[kmin])kmin = i; /* 找最小数位置*/}if(kmax == 9 && kmin == 0){temp = a[0];a[0] = a[kmax];a[kmax] = temp; /* 与最前面的数交换*/}else{temp = a[0];a[0] = a[kmax];a[kmax] = temp; /* 与最前面的数交换*/temp = a[9];a[9] = a[kmin];a[kmin] = temp; /* 与最后面的数交换*/}for(i=0; i<9; i++)printf("%d ",a[i]); /* 输出数组*/printf("%d\n",a[i]);}5、字符个数统计/* exer 4-5 统计大写字母、小写字母、数字及其它字符的个数*/由键盘输入任意一串字符串,将其存入一个字符数组,统计其中的大写字母、小写字母、数字以及其他字符的个数。
输入:任意一串字符串输出:大写字母、小写字母、数字以及其他字符的个数。
输入样例:abcdefg123456ABCDEFG 输出样例:7 7 6#include<stdio.h>#include<string.h>void main(void){unsigned int i;int cap=0,low=0,dig=0,oth=0; /* 定义并初始化*/char str[80];//printf("please enter str:");gets(str); /* 输入原串*/for(i=0; i<strlen(str); i++){if(str[i]>='A' && str[i]<='Z')cap++; /* 统计大写字母*/else if(str[i]>='a' && str[i]<='z')low++; /* 统计小写字母*/else if(str[i]>='0' && str[i]<='9')dig++; /* 统计数字*/elseoth++; /* 统计其它字符*/ }printf("%d %d %d %d\n",cap,low,dig,oth);}6、学生成绩计算/* exer 4-6 求每一个学生的总成绩和平均成绩*/已知10个学生的5门课程的成绩,将其存入一个二维数组,求每一个学生的总成绩和每一个学生的平均成绩。
输入:10个学生的5门课程的成绩输出:每一个学生的总成绩和每一个学生的平均成绩输入样例:90.5 80 70 89 84.691.5 81 71 88 84.792.5 82 72 87 84.893.5 83 73 86 84.994.5 84 74 85 84.095.5 85 75 84 84.196.5 86 76 83 84.297.5 87 77 82 84.398.5 88 78 81 84.499.5 89 79 80 84.5输出样例:414.100006 82.820000416.200012 83.240005418.299988 83.659996420.399994 84.080002421.500000 84.300003423.600006 84.720001425.700012 85.139999427.799988 85.559998429.899994 85.979996432.000000 86.400002#include<stdio.h>void main(void){int i,j;float score[10][5]={0.0f};float allsco[10],avesco[10];for(i=0; i<10; i++)for(j=0; j<5; j++)scanf("%f",&score[i][j]); /* 输入学生的成绩*/for(i=0; i<10; i++){allsco[i] = 0; /* 总成绩清零*/for(j=0; j<5; j++){allsco[i] = allsco[i]+score[i][j]; /* 累加总成绩*/}avesco[i] = allsco[i]/5; /* 计算平均成绩*/}for(i=0; i<10; i++)printf("%f %f\n",allsco[i],avesco[i]);/* 输出成绩*/}7、姓名排序/* exer 4-7 姓名排序*/由键盘任意输入10个学生的姓名(以拼音形式),将它们按照ASCⅡ码的顺序从小到大排序。