C语言初级
数据类型、数据的输出输入
4月9日
整型int,%d。浮点型float,%f。字符串char,%s。
课时2作业1
#include <stdio.h>
int main(){
printf("hello wangdao");
return 0;
}
输出hello wangdao
课时2作业2
#include <stdio.h>
int main(){
int a,b;
scanf("%d %d",&a,&b);
printf("%d",a+b);
}
输入包含a和b,通过空格隔开。
需要输出a、b的和。
课时2作业3
读取一个65到122之间的整型数,然后以字符形式输出它,比如读取了97,输出字符a
#include <stdio.h>
int main(){
int i;
scanf("%d",&i);
printf("%c",(char)i);
return 0;
}
读取一个整型数,整型数 大于等于65,小于等于122。
输出整型数 在ASCII表中对应的字符.。
运算符与表达式
4月10日
逻辑运算符非、算术运算符、关系运算符、逻辑运算符与或、字节运算符
#include <stdio.h>
//#include <stdlib.h>
int main() {
int result = 4 + 5 * 2 - 6 / 3 + 11 % 4;//练习算术运算符
printf("result=%d\n", result);
//关系运算符,优先级小于算术运算符
int a;
while (scanf("%d", &a)) {//如果输入的不是整型的时候,循环结束
if (3 < a && a < 10) {//3<a<10的运算等级是一样的
printf("a is between 3 and 10\n");
} else {
printf("a is not between 3 and 10\n");
}
int year, j = 2;//联系逻辑运算符
while (scanf("%d", &year)) {
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {//判断是不是闰年
printf("%d is leap year\n", year);
} else {
printf("%d is not leap year\n", year);
}
}
year = !!j;
printf("i value=%d\n", year);
int i = 0;
printf("%d\n", sizeof(i));//联系字节运算符
i && printf("you can see me\n");//短路运算,当i为假的时候,不会执行后面的语句
int p = 1;
p && printf("you can see me\n");
int m = 0;
m || printf("you can not see me\n");//当j为真的时候,发生短路,不会执行后面的语句
int a = 1, b = 2;
a = 25 + b;//左边不可以进行赋值
printf("%d\n", a);
i += 5;//i=i+5
printf("%d\n", i);
m = +5;//
printf("%d\n", m);
return 0;
}
}
课时3作业1
Description
判断某个年份是不是闰年,如果是闰年,请输出“yes”,否则请输出“no”
Input
输入一行,只有一个整数x (0<=x <=10000)
Output
输出只有一行字符
#include <stdio.h>
int main(){
int i;
scanf("%d",&i);
if(i%4==0&&i%100!=0||i%400==0){
printf("yes");
}else{
printf("no");
}
return 0;
}
课时3作业2
Description
读取一个整型数,字符,浮点数,分别到变量i,j,k中,然后将i,j,k直接相加并输出,小数点后保留两位小数,不用考虑输入的浮点数的小数部分超过了两位
Input
一个整型数,字符,浮点数
Output
i,j,k三个变量的求和值
#include <stdio.h>
int main(){
int i;
char j;
float k;
scanf("%d %c %f",&i,&j,&k);
printf("%0.2f",i+j+k);
return 0;
}
条件语句与循环
if-else选择语句
编写多个选择语句的时候
#include <stdio.h>
int main() {
//练习if-else语句
int i;
while(scanf("%d",&i)){
if(i>0){
printf("i is bigger than 0\n");
}else{
printf("i is less than 0\n");
}
}
return 0;
}
while循环
例1:计算从1到100的所有整数之和。
#include <stdio.h>
int main() {
//练习while循环
int i=0,j=0;
//j代表总数
while(i<100){//如果是等于100的话,最后就会再加101
i=i+1;//i++,从B语言发展过来的
j+=i;//j=j+i;
}
printf("%d",j);
return 0;
}
for循环
例1:计算从1到100的所有整数之和。
#include <stdio.h>
int main() {
//练习for循环
int j=0;
//j代表总数
for(int i=0;i<=100;i++){
j+=i;//j=j+i;
}
printf("%d",j);
return 0;
}
continue语句
例:对1到100之间的奇数进行求和
在while循环里使用continue
#include <stdio.h>
int main() {
//练习continue语句
int j=0;
//j代表总数
for(int i=0;i<=100;i++){
if(i%2==0){
continue;
}
j+=i;//j=j+i;
}
printf("%d",j);
return 0;
}
在for循环里使用continue
#include <stdio.h>
int main() {
//练习for循环
int i=0,j=0;
//j代表总数
while(i<=100) {//如果是等于100的话,最后就会再加101
if (i % 2 == 0) {
i++;
continue;
}
j += i;//j=j+i;
i=i+1;//i++,从B语言发展过来的
}
printf("%d",j);
return 0;
}
break语句
例:对1到100之间的进行求和时,当和大于2000的时候,结束循环。并打印整数值。
#include <stdio.h>
int main() {
//练习continue语句
int i,j=0;
//j代表总数
for(i=0;i<=100;i++){
if(j>2000){
break;
}
j+=i;//j=j+i;
}
printf("%d %d",j,i);
return 0;
}
课时4作业1
Description
输入一个整型数,判断是否是对称数,如果是,输出yes,否则输出no,不用考虑这个整型数过大,int类型存不下,不用考虑负值;
例如 12321是对称数,输出yes,124421是对称数,输出yes,1231不是对称数,输出no
Input
一个整型数
Output
输出是yes,或者no
#include <stdio.h>
int main() {
int i,j=0,b,c;//b是暂存的作用
scanf("%d",&i);
c=i;
while(i){
b=i%10;
j=j*10+b;
i=i/10;
}
if(c==j){
printf("yes\n");
}else{
printf("no\n");
}
return 0;
}
课时4作业2
Description
利用while或者for循环计算n!的值。
提示:n!=123…*n
Input
一个正整数n,1≤n≤10。
Output
n!的值。
#include <stdio.h>
int main() {
int n,i,j=1;
scanf("%d",&n);
for(i=1;i<=n;i++){
j=j*i;
}
printf("%d",j);
return 0;
}
课时4作业3
Description
某人想将手中的一张面值100元的人民币换成10元、5元、2元和1元面值的票子。要求换正好40张,且每种票子至少一张。问:有几种换法?
Input
无输入
Output
一个数,表示共有多少种换法
#include <stdio.h>
int main() {
int a,b,c,d,tol=0;
for(a=1;a<=10;a++){//10
for(b=1;b<=20;b++){//5
for(c=1;c<=50;c++){//2
for(d=1;d<=100;d++){//1
if(a+b+c+d==40&&a*10+b*5+c*2+d==100){
tol+=1;
}
}
}
}
}
printf("%d",tol);
return 0;
}
数组
4月18日
一维数组:其中定义数组的时候,访问内存位置是从0 开始的
int a[5]={1,2,3,4,5}; //其中a[0]=1.
#include <stdio.h>
int main() {
int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};//10为数组中的个数
//实际访问的数组是从a[0]到a[9],赋值要和定义写在一起
int b[10] = {5, 6, 7, 8};//可以给部分元素赋值,赋值的是前4个,后6个的值为0
printf("%d",a[0]+b[1]);
return 0;
}
数组访问越界
操作系统对内存中的每一个位置给予一个编号
如果下标值是通过那些一致的正确的值计算得来的,就无须检查。
如果下标值是由用户输入的数据产生的,就需要检查,防止访问越界。
数组的传递
调试时进入子函数使用F7
数组的长度是不能传递到子函数的,子函数用的是指针
#include <stdio.h>
void print(int a[],int length){//这里的a[]是指针,所以是8个字节
int i;
for(i=0;i<length;i++)//sizeof(a)/sizeof(int)可以不定义数据的个数sizeof(a)只有8字节
{//可以用整型来记录数组的长度length
printf("%d\n",a[i]);
}
a[4]=10;
}
int main() {
int a[5] = {0, 1, 2, 3, 4};//10为数组中的个数
print(a,5);//此时sizeof(a)是20个字节。是因为数组不能传递到子函数
print("%d",a[4]);//可以改变数组的值
return 0;
}
字符串数组
#include <stdio.h>
//使用子函数模拟字符串数组的输出
void print(char b[]){
int i=0;
while(d[i]){
printf("%c",d[i]);//输出的是一个个字符
}
printf("\n");
}
int main() {
char a[6] = "hello";//10为数组中的个数,定义的时候要多分配一个位置,因为字符串有一个结束字符\0
printf("%s\n",a);
char b[5]="how";
print(d);
return 0;
}
SCANF读取字符串
#include <stdio.h>
int main() {
char a[6];
scanf("%s",a);//字符数组中存储了数组的起始地址,所以不需要取地址
printf("%s\n",a);
return 0;
}