目录
【1】字符输入输出
按字符的输入输出
int getchar(void);
功能:从终端输入一个字符
参数:无
返回值:输入字符的ASCII值
int putchar(int c);
功能:向终端输出一个字符
参数:c:要输出的字符
返回值:输出字符的ASCII值
练习:实现大写字母转换成小写字母
#include <stdio.h>
int main() {
char ch;
printf("请输入一个大写字母:");
ch = getchar();
if (ch >= 'A' && ch <= 'Z') {
ch = ch + ('a' - 'A');
printf("转换后的小写字母为:%c\n", ch);
}
else {
printf("输入不是大写字母!\n");
}
return 0;
}
【2】C语言下的垃圾字符回收
1.通过空格回收
scanf(" %c", &ch);
scanf("%*s%c", &ch); //回收一个或多个空格、tab、\n
2.%*c
scanf("%*c%c", &ch); //只能回收任意一个字符
3.getchar
ch = getchar();
【3】分支语句
》1.if-else
基本结构:
if(表达式)
{
语句块1;
}
else
{
语句块2;
}
分层结构:
if(表达式1)
{
语句块1;
}
else if(表达式2)
{
语句块2;
}
else
{
语句块3;
}
嵌套结构:
if(表达式1)
{
if(表达式2)
{
语句块1;//表达式1成立,表达式2成立
}
else
{
语句块2;//表达式1成立,表达式2不成立
}
}
else
{
语句块3;//表达式1不成立
}
总结:
1) if后面可以没有else,else前面必须有if
2) if和else后面的{}可以省略,但是省略后只会匹配后面的第一条语句
练习:实现大小写转换(用getchar、putchar实现)
输入大写字母输出小写字母,
输入小写字母输出大写字母,
输入的不是字母,提示输入错误。
#include <stdio.h>
int main() {
char ch;
printf("请输入一个字母:");
ch = getchar();
if (ch >= 'A' && ch <= 'Z') {
ch = ch + 32; // 转换为小写字母
putchar(ch);
} else if (ch >= 'a' && ch <= 'z') {
ch = ch - 32; // 转换为大写字母
putchar(ch);
} else {
printf("输入错误,请输入一个字母。\n");
}
return 0;
}
练习:从终端输入一个学生的成绩,判断学生成绩,打印成绩级别
【90 - 100】 A
【80 - 89】 B
【70 - 79】 C
【60 - 69】 D
< 60 sorry you lost
#include <stdio.h>
int main() {
int score;
printf("请输入学生的成绩:");
scanf("%d", &score);
if (score >= 90 && score <= 100) {
printf("成绩级别:A\n");
} else if (score >= 80 && score < 90) {
printf("成绩级别:B\n");
} else if (score >= 70 && score < 80) {
printf("成绩级别:C\n");
} else if (score >= 60 && score < 70) {
printf("成绩级别:D\n");
} else {
printf("成绩级别:Sorry you lost\n");
}
return 0;
}
》2.switch_case
基本结构:
switch(变量或表达式)
{
case 常量1:语句块1;break;
case 常量2:语句块2;break;
case 常量3:语句块3;break;
....
default:语句块n+1;
}
执行顺序:
判断表达式或变量的值,和case后面的常量进行匹配,如果能匹配上就执行后面的语句块,遇到break就结束switch,当case都不匹配,直接执行default后面的语句块
注意:
1. 表达式不能是浮点型或字符串
2. case 后面的break可以省略,省略时代码会顺序执行,直到遇到break退出
练习:从终端输入一个学生的成绩,判断学生成绩,打印成绩级别
【90 - 100】 A
【80 - 89】 B
【70 - 79】 C
【60 - 69】 D
< 60 sorry you lost
#include <stdio.h>
int main() {
int score;
printf("请输入学生的成绩:");
scanf("%d", &score);
switch (score / 10) {
case 10:
case 9:
printf("成绩级别:A\n");
break;
case 8:
printf("成绩级别:B\n");
break;
case 7:
printf("成绩级别:C\n");
break;
case 6:
printf("成绩级别:D\n");
break;
default:
printf("成绩级别:Sorry you lost\n");
break;
}
return 0;
}
练习:从终端输入一个日期
scanf ("%d %d %d "; &year,&mon,&day),判断这是这一年的第几天
提示:判断闰年还是平年,闰年且闰年二月份以上比平年多一天。
#include <stdio.h>
int main(int argc, char const *argv[])
{
int year, mon, day, sum=0;
scanf("%d %d %d", &year, &mon, &day);
switch (mon)
{
case 12:sum+=30;
case 11:sum+=31;
case 10:sum+=30;
case 9:sum+=31;
case 8:sum+=31;
case 7:sum+=30;
case 6:sum+=31;
case 5:sum+=30;
case 4:sum+=31;
case 3:sum+=28;
case 2:sum+=31;
case 1:sum+=day;break;
default:
printf("err\n");
return -1;
}
//闰年并且大于2月sum++
if ((year % 100 != 0 && year % 4 == 0 || year % 400 == 0) && mon > 2)
sum++;
printf("sum=%d\n", sum);
return 0;
}
练习:
1.从终端输入3个整数;从大到小排序
#include <stdio.h>
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
void sortDescending(int *a, int *b, int *c) {
if (*a < *b) {
swap(a, b);
}
if (*a < *c) {
swap(a, c);
}
if (*b < *c) {
swap(b, c);
}
}
int main() {
int a, b, c;
printf("请输入三个整数:");
scanf("%d %d %d", &a, &b, &c);
sortDescending(&a, &b, &c);
printf("从大到小排序的结果为:%d %d %d\n", a, b, c);
return 0;
}
2.写程序实现功能:读入两个整数(data1和data2)和一个运算符(op),计算表达式data1 op data2 的值.其中op可以为+、-、*、/四个符号中的任一种(用switch语句实现)
#include <stdio.h>
int main() {
int data1, data2;
char op;
float result;
printf("请输入两个整数以及运算符(格式:data1 op data2):");
scanf("%d %c %d", &data1, &op, &data2);
switch (op) {
case '+':
result = data1 + data2;
printf("结果:%d %c %d = %.2f\n", data1, op, data2, result);
break;
case '-':
result = data1 - data2;
printf("结果:%d %c %d = %.2f\n", data1, op, data2, result);
break;
case '*':
result = data1 * data2;
printf("结果:%d %c %d = %.2f\n", data1, op, data2, result);
break;
case '/':
if (data2 != 0) {
result = (float) data1 / data2;
printf("结果:%d %c %d = %.2f\n", data1, op, data2, result);
} else {
printf("除数不能为0!\n");
}
break;
default:
printf("无效的运算符!\n");
break;
}
return 0;
}
【4】循环
》1.for循环
1.基本结构
for(表达式1;表达式2;表达式3)
{
语句块;
}
表达式1:赋初值
表达式2:循环终止条件
表达式3:增值或减值语句
执行顺序:
首先执行表达式1给循环变量赋初值,判断表达式2是否成立,
如果成立就进入循环执行循环语句,
执行完语句块再执行表达式3进行增值或减值,
再次判断表达式2是否成立如果成立继续进入循环,
直到表达式2不成立,循环结束
2.嵌套结构
for(表达式1;表达式2;表达式3)
{
for(表达式4;表达式5;表达式6)
{
语句块;
}
}
练习:打印所有的水仙花数
水仙花数:一个三位数,百位立方+十位立方+个位立方 = 原数
#include<stdio.h>
int main(int argc, char const *argv[])
{
int s,g,b,i;
for ( i = 100; i <= 999; i++)
{
b = i/100;
s = i/10%10;
g = i%10;
if (b*b*b + s*s*s + g*g*g == i )//水仙花数
printf("%d\n",i);
}
return 0;
}
》2.while循环
1.基本结构
while(终止条件)
{
语句块;
增值减值语句;
}
执行顺序:先定义循环变量并赋初值,判断条件是否成立,
如果成立就进入循环执行语句块,然后执行增值减值语句,
继续判断终止条件是否成立,直到不成立循环结束。
2.do_while
do
{
语句块;
增值减值;
}while(终止条件);
执行顺序:先执行后判断
练习:
1.从终端上输入一个字符并在终端上输出这个字符,当输入字符为‘q’时,程序结束。
#include <stdio.h>
int main() {
char ch;
do {
printf("请输入一个字符(输入 'q' 结束): ");
scanf(" %c", &ch);
printf("输入的字符是: %c\n", ch);
} while (ch != 'q');
printf("程序结束。\n");
return 0;
}
2.打印以下图案:要求行数从终端输入
#include <stdio.h>
int main() {
int rows, i, j;
printf("请输入行数:");
scanf("%d", &rows);
// 打印上半部分图案
for (i = 1; i <= rows; i++) {
for (j = 1; j <= i; j++) {
printf("*");
}
printf("\n");
}
// 打印下半部分图案
for (i = 1; i <=rows; i++) {
for (j = 1; j < i; j++) {
printf(" ");
}
for (j = i; j <= rows; j++) {
printf("*");
}
printf("\n");
}
return 0;
}
3.打印9*9乘法表
#include <stdio.h>
int main() {
int i, j;
// 外层循环控制行数
for (i = 1; i <= 9; i++) {
// 内层循环控制列数
for (j = 1; j <= i; j++) {
printf("%d x %d = %2d\t", j, i, i * j);
}
printf("\n");
}
return 0;
}
4. 循环输入一个5位数,判断它是不是回文数。当输入0时循环结束。即12321是回文数,个位与万位相同,十位与千位相同。
#include <stdio.h>
int main() {
int num;
while (1) {
printf("请输入一个5位数(输入0结束):");
scanf("%d", &num);
if (num == 0) {
break;
}
int originalNum = num;
int reversedNum = 0;
int *ptr = #
// 反转数字
while (*ptr != 0) {
reversedNum = reversedNum * 10 + *ptr % 10;
*ptr /= 10;
}
// 判断是否是回文数
if (originalNum == reversedNum) {
printf("%d 是一个回文数\n", originalNum);
} else {
printf("%d 不是一个回文数\n", originalNum);
}
}
return 0;
}