图灵机的停机问题
链接: link
假设这个程序存在,是一个黑盒子,对他输入程序和数据,若程序能终止,则输出yes,若停机(无法终止),则输出no。我们把这个程序叫做H(halting)。
现在我们在此基础上再定义一个程序H+,若H输出yes,则它进入死循环,若H输出no,则程序终止。
接下来我们把H+作为要判断的程序输入H中,假设H+可以终止,那么H将输出yes,这时候H+又会陷入死循环,那么H+就变成不可终止的了,出现矛盾。
写一个结构体相关函数
例题一:按等级统计学生成绩
注意:传进来的是一个指针,相当于一个结构体数组,指向下一个结构体时,要p++,应用结构体中的成员时,格式如下(*p).grade=‘A’;
#include <stdio.h>
#define MAXN 10
struct student{
int num;
char name[20];
int score;
char grade;
};
int set_grade( struct student *p, int n );
int main()
{ struct student stu[MAXN], *ptr;//*****
int n, i, count;
ptr = stu;
scanf("%d\n", &n);
for(i = 0; i < n; i++){
scanf("%d%s%d", &stu[i].num, stu[i].name, &stu[i].score);
}
count = set_grade(ptr, n);
printf("The count for failed (<60): %d\n", count);
printf("The grades:\n");
for(i = 0; i < n; i++)
printf("%d %s %c\n", stu[i].num, stu[i].name, stu[i].grade);
return 0;
}
/* 你的代码将被嵌在这里 */
int set_grade( struct student *p, int n ){
int i,count=0;
for(i=0;i<n;i++){
if((*p).score<60){
(*p).grade='D';
count++;
}else if((*p).score<70){
(*p).grade='C';
}else if((*p).score<85){
(*p).grade='B';
}else if((*p).score<=100){
(*p).grade='A';
}
p++;
}
return count;
}
例题二:计算两个复数的乘积
struct complex multiply(struct complex x, struct complex y)
{
struct complex result;
result.real=x.real*y.real-x.imag*y.imag;
result.imag=x.real*y.imag+x.imag*y.real;
return result;
}
注意:在最后返回时直接返回结构体名字即可
输入的数据分行
可以使用getchar();或gets(a);
int&char的相互转化
int a=‘F’;
可以这样写,但是这样做的本质是把F的ASCII码赋给了a,可以通过%d %c控制输出。
char ch=‘9’;
int b=ch-‘0’;//则b=9
int a=9;
char b=a+‘0’;
printf(“%c”,b);//输出为9