复习题

1.C语言的基本模块是什么?

答:他们都叫作函数

2.什么是语法错误?写出一个英语例子和C语言例子。

答:语法错误违法了组成语句或程序的规则。语法错误的C语言例子:printf "Where are the parenthness";

3.什么是语义错误?写出一个英语例子和C语言例子。

答:语义错误指的是含义错误。语义错误的C语言例子:thrice_n = 3 + n; (thirce_n表示n的3倍)。个人理解:语义错误相当于是逻辑错误,语法没有错误,程序也能正常运行,但是得不到想要的结果,这一类的错误就是语义错误。

4.Indiana Sloth编写了下面的程序,并征求你的意见。请帮助他评定。

  1. include studio.h //掉了尖括号<>
  2. int main{void} /* 该程序打印一年有多少周 /* //把{}改成(),/*改成 */
  3. (//改成{
  4. int s//掉了分号;
  5. s := 56;//:= 改成 = ,赋值用 =
  6. print(There are s weeks in a year.);//printf("There are s weeks in a year.");
  7. return 0;
  8. //加上}

修改后的程序:

int main(void)/*this prints the number of weeks of a year*/
{
    int s;

    s = 52;
    printf("There are %d weeks in a year.\n", s);    
    return 0;
}

5.假设下面的4个例子都是完整程序中的一部分,它们都输出什么结果?

/*a运行结果:Baa Baa Black Sheep.Have you any wool?\n*/
printf("Baa Baa Black Sheep.");
printf("Have you any wool?\n");
/*b运行结果:
Begone!
O creature of lard!
*/
printf("Begone!\nO creature of lard!\n");
/*c运行结果:
What?
No/nfish?
*/
printf("What?\nNo/nfish?\n");
/*d运行结果:
2 + 2 = 4
*/
int num;
num = 2;
printf("%d + %d = %d", num, num, num + num);

6.在main、int、function、char、=中,哪些是C语言的关键字?

答:关键字是int和char(main是一个函数名,function是函数的意思,=是一个运算符)

ISO C关键字
auto extern short while
break float signed _Alignas
case for sizeof _Alignof
char goto static _Atomic
const if struct _Bool
continue inline switch _Complex
default int typedef _Generic
do long union _Imaginary
double register unsigned _Noretrun
else restrict void _Static_asset
enum return volatile _Thread_local

注:粗体表示的是C90标准新增的关键字,斜体表示的C99标准新增的关键字,粗斜体表示的是C11标准新增的关键字。

7.如何以下面的格式输出变量words和lines的值(这里,3020和350代表两个变量的值)?

There were 3020 words and 350 lines.
答:printf("There were %d words and %d lines.\n", words, lines);

8.考虑下面的程序:

#include <stdio.h>
int main(void)
{
    int a, b;
    a = 5;
    b = 2; /* 第7行 */
    b = a; /* 第8行 */
    a = b; /* 第9行 */
    printf("%d %d\n", b, a);
    return 0;
}

请问,在执行完第7、第8、第9行后,程序的状态分别是什么?
答:执行完第7行后,a是5,b是2。执行完第8行后,a和b都是5。执行完第9行后,a和b仍然是5(注意,a不会是2,因为在执行a=b;时,b的值已经被改为5)

9.考虑下面的程序:

#include <stdio.h>
int main(void)
{
    int x, y;
    x = 10;
    y = 5;  /* 第7行 */
    y = x + y; /*第8行*/
    x = x*y; /*第9行*/
    printf("%d %d\n", x, y);
    return 0;
}

请问,在执行完第7、第8、第9行后,程序的状态分别是什么?
答:执行完第7行后,ⅹ是10,b是5。执行完第8行后,x是10,y是15。执行完第9行后,x是150,y是15。

编程练习

1.printf()函数的使用。

编写一个程序,调用一次 printf()函数,把你的姓名打印在一行。再调用一次 printf()函数,把你的姓名分别打印在两行。然后,再调用两次printf()函数,把你的姓名打印在一行。

#include <stdio.h>
int main(void)
{
    printf("胡 歌\n");
    printf("胡\n歌\n");
    printf("胡");
    printf("歌\n");

    return 0;
}

2.编写一个程序,打印你的姓名和地址。

#include <stdio.h>
int main(void)
{
    printf("我的姓名:%s\n", "胡歌");
    printf("我的地址:%s\n", "琅琊榜-江左盟-苏宅");
    return 0;
}

3.编写一个程序把你的年龄转换成天数,并显示这两个值。这里不用考虑闰年的问题。

#include <stdio.h>

int main(void)
{
    int ageyears;
    int agedays;

    ageyears = 28;
    agedays = ageyears * 365;
    printf("An age of %d years is %d days.\n", ageyears, agedays);
    return 0;
}

4.编写一个程序,生成以下输出:

For he’s a jolly good fellow!
For he’s a jolly good fellow!
For he’s a jolly good fellow!
Which nobody can deny!
除了 main()函数以外,该程序还要调用两个自定义函数:一个名为jolly(),用于打印前 3 条消息,调用一次打印一条;另一个函数名为deny(),打印最后一条消息。

#include <stdio.h>

void jolly(void);
void deny(void);

int main(void)
{

    jolly();
    jolly();
    jolly();
    deny();
    return 0;
}

void jolly(void)
{
    printf("For he's a jolly good fellow!\n");
}

void deny(void)
{
    printf("Which nobody can deny!\n");
}

5.编写一个程序,生成以下输出:

Brazil, Russia, India, China
India, China,
Brazil, Russia
除了main()以外,该程序还要调用两个自定义函数:一个名为br(),调用一次打印一次“Brazil, Russia”;另一个名为ic(),调用一次打印一次“India,China”。其他内容在main()函数中完成。

#include <stdio.h>

void br(void)
{
    printf("Brazil, Russia");    
}

void ic(void)
{
    printf("India, China");
}


int main(void)
{
    br();
    printf(",");
    ic();
    printf("\n");
    ic();
    printf(",\n");
    br();
    printf("\n");
    return 0;
}

6.简单计算以及打印。

编写一个程序,创建一个整型变量toes,并将toes设置为10。程序中还要计算toes的两倍和toes的平方。该程序应打印3个值,并分别描述以示区分。

#include <stdio.h>
int main(void)
{
    int toes;
    toes = 10;
    printf("toes = %d\n", toes);
    printf("Twice toes = %d\n", 2 * toes);
    printf("toes squared = %d\n", toes * toes);
    return 0;
}

7.许多研究表明,微笑益处多多。

编写一个程序,生成以下格式的输出:
Smile!Smile!Smile!
Smile!Smile!
Smile!
该程序要定义一个函数,该函数被调用一次打印一次“Smile!”,根据程序的需要使用该函数。

#include <stdio.h>

void smile(void);
void br(void);
int main(void)
{
    smile();
    smile();
    smile();
    br();
    smile();
    smile();
    br();
    smile();
    br();
    return 0;
}

void smile(void)
{
    printf("Smile!");
}

void br(void)
{
    printf("\n");
}

8.在C语言中,函数可以调用另一个函数。

编写一个程序,调用一个名为one_three()的函数。该函数在一行打印单词“one”,再调用第2个函数two(),然后在另一行打印单词“three”。two()函数在一行显示单词“two”。main()函数在调用 one_three()函数前要打印短语“starting now:”,并在调用完毕后显示短语“done!”。因此,该程序的输出应如下所示:
starting now:
one
two
three
done!

#include <stdio.h>
void one_three(void);
void two(void);
int main(void)
{
    printf("starting now:\n");
    one_three();
    printf("done!\n");
    return 0;
}
void one_three(void)
{
    printf("one\n");
    two();
    printf("three\n");
}
void two(void)
{
    printf("two\n");
}

编者总结

1.主要考查了C语言的基本模块函数
2.函数是实现某个功能的代码的集合,把函数映射到具体生活中的“工具”,一个工具可以做一件事,多个小工具合在一起就能完成一个项目。